MapProxy 2.1.0__tar.gz → 2.2.0__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 (518) hide show
  1. {MapProxy-2.1.0 → MapProxy-2.2.0}/CHANGES.txt +31 -0
  2. {MapProxy-2.1.0 → MapProxy-2.2.0}/MapProxy.egg-info/PKG-INFO +32 -22
  3. {MapProxy-2.1.0 → MapProxy-2.2.0}/MapProxy.egg-info/requires.txt +5 -2
  4. {MapProxy-2.1.0 → MapProxy-2.2.0}/PKG-INFO +32 -22
  5. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/configuration.rst +24 -9
  6. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/development.rst +1 -1
  7. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/install.rst +8 -9
  8. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/install_windows.rst +4 -6
  9. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/plugins.rst +27 -3
  10. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/services.rst +1 -1
  11. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/sources.rst +1 -1
  12. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/geopackage.py +4 -4
  13. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config/config-schema.json +8 -0
  14. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config/loader.py +14 -1
  15. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config/spec.py +2 -0
  16. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/message.py +4 -1
  17. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/demo.py +4 -1
  18. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wmts100capabilities.xml +7 -1
  19. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/tile.py +2 -1
  20. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/wmts.py +32 -3
  21. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/source/mapnik.py +4 -9
  22. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/template.py +4 -1
  23. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/legendgraphic.yaml +16 -0
  24. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_legendgraphic.py +38 -2
  25. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_mapserver.py +0 -1
  26. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_client.py +0 -2
  27. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_client_cgi.py +0 -2
  28. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_featureinfo.py +0 -3
  29. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/odict.py +2 -2
  30. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/wsgiapp.py +10 -0
  31. {MapProxy-2.1.0 → MapProxy-2.2.0}/requirements-tests.txt +0 -4
  32. {MapProxy-2.1.0 → MapProxy-2.2.0}/setup.py +4 -3
  33. {MapProxy-2.1.0 → MapProxy-2.2.0}/AUTHORS.txt +0 -0
  34. {MapProxy-2.1.0 → MapProxy-2.2.0}/COPYING.txt +0 -0
  35. {MapProxy-2.1.0 → MapProxy-2.2.0}/LICENSE.txt +0 -0
  36. {MapProxy-2.1.0 → MapProxy-2.2.0}/MANIFEST.in +0 -0
  37. {MapProxy-2.1.0 → MapProxy-2.2.0}/MapProxy.egg-info/SOURCES.txt +0 -0
  38. {MapProxy-2.1.0 → MapProxy-2.2.0}/MapProxy.egg-info/dependency_links.txt +0 -0
  39. {MapProxy-2.1.0 → MapProxy-2.2.0}/MapProxy.egg-info/entry_points.txt +0 -0
  40. {MapProxy-2.1.0 → MapProxy-2.2.0}/MapProxy.egg-info/not-zip-safe +0 -0
  41. {MapProxy-2.1.0 → MapProxy-2.2.0}/MapProxy.egg-info/top_level.txt +0 -0
  42. {MapProxy-2.1.0 → MapProxy-2.2.0}/README.md +0 -0
  43. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/GM.txt +0 -0
  44. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/_static/logo.png +0 -0
  45. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/_static/logo_title.png +0 -0
  46. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/_static/mapproxy.css +0 -0
  47. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/_templates/versions.html +0 -0
  48. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/auth.rst +0 -0
  49. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/caches.rst +0 -0
  50. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/caching_layer_dimensions.rst +0 -0
  51. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/conf.py +0 -0
  52. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/configuration_examples.rst +0 -0
  53. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/coverages.rst +0 -0
  54. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/decorate_img.rst +0 -0
  55. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/deployment.rst +0 -0
  56. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/bicubic.png +0 -0
  57. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/bilinear.png +0 -0
  58. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/labeling-dynamic.png +0 -0
  59. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/labeling-meta-buffer.png +0 -0
  60. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/labeling-metatiling-buffer.png +0 -0
  61. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/labeling-metatiling.png +0 -0
  62. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/labeling-no-clip.png +0 -0
  63. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/labeling-no-placement.png +0 -0
  64. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/labeling-partial-false.png +0 -0
  65. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/labeling-repeated.png +0 -0
  66. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/mapnik-webmerc-hq.png +0 -0
  67. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/mapnik-webmerc.png +0 -0
  68. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/mapproxy-demo.png +0 -0
  69. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/imgs/nearest.png +0 -0
  70. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/index.rst +0 -0
  71. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/inspire.rst +0 -0
  72. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/install_docker.rst +0 -0
  73. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/install_osgeo4w.rst +0 -0
  74. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/labeling.rst +0 -0
  75. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/mapproxy_util.rst +0 -0
  76. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/mapproxy_util_autoconfig.rst +0 -0
  77. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/seed.rst +0 -0
  78. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/tutorial.rst +0 -0
  79. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/tutorial.yaml +0 -0
  80. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/yaml/cache_conf.yaml +0 -0
  81. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/yaml/grid_conf.yaml +0 -0
  82. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/yaml/merged_conf.yaml +0 -0
  83. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/yaml/meta_conf.yaml +0 -0
  84. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/yaml/seed.yaml +0 -0
  85. {MapProxy-2.1.0 → MapProxy-2.2.0}/doc/yaml/simple_conf.yaml +0 -0
  86. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/__init__.py +0 -0
  87. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/__init__.py +0 -0
  88. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/azureblob.py +0 -0
  89. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/base.py +0 -0
  90. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/compact.py +0 -0
  91. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/couchdb.py +0 -0
  92. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/dummy.py +0 -0
  93. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/file.py +0 -0
  94. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/legend.py +0 -0
  95. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/mbtiles.py +0 -0
  96. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/meta.py +0 -0
  97. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/path.py +0 -0
  98. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/redis.py +0 -0
  99. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/renderd.py +0 -0
  100. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/riak.py +0 -0
  101. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/s3.py +0 -0
  102. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/cache/tile.py +0 -0
  103. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/client/__init__.py +0 -0
  104. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/client/arcgis.py +0 -0
  105. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/client/cgi.py +0 -0
  106. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/client/http.py +0 -0
  107. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/client/log.py +0 -0
  108. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/client/tile.py +0 -0
  109. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/client/wms.py +0 -0
  110. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/compat/__init__.py +0 -0
  111. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/compat/image.py +0 -0
  112. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config/__init__.py +0 -0
  113. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config/config.py +0 -0
  114. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config/coverage.py +0 -0
  115. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config/defaults.py +0 -0
  116. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config/validator.py +0 -0
  117. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config_template/__init__.py +0 -0
  118. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config_template/base_config/config.wsgi +0 -0
  119. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config_template/base_config/full_example.yaml +0 -0
  120. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config_template/base_config/full_seed_example.yaml +0 -0
  121. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config_template/base_config/log.ini +0 -0
  122. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config_template/base_config/mapproxy.yaml +0 -0
  123. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/config_template/base_config/seed.yaml +0 -0
  124. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/exception.py +0 -0
  125. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/featureinfo.py +0 -0
  126. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/grid.py +0 -0
  127. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/__init__.py +0 -0
  128. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/fonts/DejaVuSans.ttf +0 -0
  129. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
  130. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/fonts/LICENSE +0 -0
  131. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/fonts/__init__.py +0 -0
  132. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/mask.py +0 -0
  133. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/merge.py +0 -0
  134. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/opts.py +0 -0
  135. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/tile.py +0 -0
  136. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/image/transform.py +0 -0
  137. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/layer.py +0 -0
  138. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/multiapp.py +0 -0
  139. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/proj.py +0 -0
  140. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/request/__init__.py +0 -0
  141. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/request/arcgis.py +0 -0
  142. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/request/base.py +0 -0
  143. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/request/tile.py +0 -0
  144. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/request/wms/__init__.py +0 -0
  145. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/request/wms/exception.py +0 -0
  146. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/request/wmts.py +0 -0
  147. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/response.py +0 -0
  148. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/__init__.py +0 -0
  149. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/conf/__init__.py +0 -0
  150. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/conf/app.py +0 -0
  151. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/conf/caches.py +0 -0
  152. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/conf/geopackage.py +0 -0
  153. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/conf/layers.py +0 -0
  154. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/conf/seeds.py +0 -0
  155. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/conf/sources.py +0 -0
  156. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/conf/utils.py +0 -0
  157. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/defrag.py +0 -0
  158. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/export.py +0 -0
  159. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/grids.py +0 -0
  160. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/scales.py +0 -0
  161. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/util.py +0 -0
  162. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/script/wms_capabilities.py +0 -0
  163. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/seed/__init__.py +0 -0
  164. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/seed/cachelock.py +0 -0
  165. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/seed/cleanup.py +0 -0
  166. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/seed/config.py +0 -0
  167. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/seed/script.py +0 -0
  168. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/seed/seeder.py +0 -0
  169. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/seed/spec.py +0 -0
  170. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/seed/util.py +0 -0
  171. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/__init__.py +0 -0
  172. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/base.py +0 -0
  173. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/kml.py +0 -0
  174. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/ows.py +0 -0
  175. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/template_helper.py +0 -0
  176. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/capabilities_demo.html +0 -0
  177. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/demo.html +0 -0
  178. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/openlayers-demo.cfg +0 -0
  179. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/img/blank.gif +0 -0
  180. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
  181. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
  182. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
  183. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
  184. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
  185. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
  186. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
  187. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/logo.png +0 -0
  188. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/ol.css +0 -0
  189. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/ol.js +0 -0
  190. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/proj4.min.js +0 -0
  191. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/proj4defs.js +0 -0
  192. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/site.css +0 -0
  193. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
  194. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/theme/default/google.css +0 -0
  195. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/theme/default/ie6-style.css +0 -0
  196. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static/theme/default/style.css +0 -0
  197. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/static.html +0 -0
  198. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/tms_demo.html +0 -0
  199. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/wms_demo.html +0 -0
  200. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/demo/wmts_demo.html +0 -0
  201. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/tms_capabilities.xml +0 -0
  202. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/tms_exception.xml +0 -0
  203. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/tms_root_resource.xml +0 -0
  204. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/tms_tilemap_capabilities.xml +0 -0
  205. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wms100capabilities.xml +0 -0
  206. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wms100exception.xml +0 -0
  207. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wms110capabilities.xml +0 -0
  208. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wms110exception.xml +0 -0
  209. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wms111capabilities.xml +0 -0
  210. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wms111exception.xml +0 -0
  211. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wms130capabilities.xml +0 -0
  212. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wms130exception.xml +0 -0
  213. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/templates/wmts100exception.xml +0 -0
  214. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/service/wms.py +0 -0
  215. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/source/__init__.py +0 -0
  216. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/source/arcgis.py +0 -0
  217. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/source/error.py +0 -0
  218. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/source/tile.py +0 -0
  219. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/source/wms.py +0 -0
  220. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/srs.py +0 -0
  221. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/__init__.py +0 -0
  222. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/conftest.py +0 -0
  223. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/helper.py +0 -0
  224. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/http.py +0 -0
  225. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/image.py +0 -0
  226. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/mocker.py +0 -0
  227. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/common.xsd +0 -0
  228. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +0 -0
  229. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +0 -0
  230. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +0 -0
  231. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +0 -0
  232. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +0 -0
  233. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +0 -0
  234. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +0 -0
  235. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +0 -0
  236. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +0 -0
  237. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +0 -0
  238. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +0 -0
  239. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +0 -0
  240. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +0 -0
  241. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +0 -0
  242. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +0 -0
  243. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +0 -0
  244. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +0 -0
  245. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +0 -0
  246. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +0 -0
  247. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +0 -0
  248. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +0 -0
  249. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +0 -0
  250. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +0 -0
  251. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/common/1.0/network.xsd +0 -0
  252. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +0 -0
  253. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +0 -0
  254. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +0 -0
  255. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +0 -0
  256. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/kml/2.2.0/xAL.xsd +0 -0
  257. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +0 -0
  258. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +0 -0
  259. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +0 -0
  260. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +0 -0
  261. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +0 -0
  262. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +0 -0
  263. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +0 -0
  264. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +0 -0
  265. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +0 -0
  266. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +0 -0
  267. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +0 -0
  268. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +0 -0
  269. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +0 -0
  270. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +0 -0
  271. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +0 -0
  272. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +0 -0
  273. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +0 -0
  274. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +0 -0
  275. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +0 -0
  276. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +0 -0
  277. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +0 -0
  278. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +0 -0
  279. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +0 -0
  280. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +0 -0
  281. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +0 -0
  282. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  283. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  284. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  285. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +0 -0
  286. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +0 -0
  287. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +0 -0
  288. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +0 -0
  289. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +0 -0
  290. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +0 -0
  291. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +0 -0
  292. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +0 -0
  293. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +0 -0
  294. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +0 -0
  295. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  296. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  297. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  298. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +0 -0
  299. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +0 -0
  300. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +0 -0
  301. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +0 -0
  302. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/ReadMe.txt +0 -0
  303. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmts.xsd +0 -0
  304. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +0 -0
  305. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +0 -0
  306. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +0 -0
  307. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +0 -0
  308. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +0 -0
  309. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +0 -0
  310. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +0 -0
  311. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +0 -0
  312. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +0 -0
  313. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +0 -0
  314. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/schemas/xml.xsd +0 -0
  315. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/__init__.py +0 -0
  316. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/arcgis.yaml +0 -0
  317. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/auth.yaml +0 -0
  318. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache.mbtiles +0 -0
  319. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_azureblob.yaml +0 -0
  320. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_band_merge.yaml +0 -0
  321. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +0 -0
  322. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_coverage.yaml +0 -0
  323. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
  324. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
  325. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
  326. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_geopackage.yaml +0 -0
  327. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_grid_names.yaml +0 -0
  328. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_mbtiles.yaml +0 -0
  329. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_s3.yaml +0 -0
  330. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/cache_source.yaml +0 -0
  331. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/combined_sources.yaml +0 -0
  332. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/coverage.yaml +0 -0
  333. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/demo.yaml +0 -0
  334. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/dimension.yaml +0 -0
  335. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/disable_storage.yaml +0 -0
  336. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/empty_ogrdata.geojson +0 -0
  337. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/formats.yaml +0 -0
  338. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/inspire.yaml +0 -0
  339. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/inspire_full.yaml +0 -0
  340. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/kml_layer.yaml +0 -0
  341. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/layer.yaml +0 -0
  342. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/layergroups.yaml +0 -0
  343. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/layergroups_root.yaml +0 -0
  344. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/mapnik_source.yaml +0 -0
  345. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/mapproxy_export.yaml +0 -0
  346. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/mapserver.yaml +0 -0
  347. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/minimal_cgi.py +0 -0
  348. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/mixed_mode.yaml +0 -0
  349. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/multi_cache_layers.yaml +0 -0
  350. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/multiapp1.yaml +0 -0
  351. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/multiapp2.yaml +0 -0
  352. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/renderd_client.yaml +0 -0
  353. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/scalehints.yaml +0 -0
  354. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/seed.yaml +0 -0
  355. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/seed_mapproxy.yaml +0 -0
  356. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/seed_old.yaml +0 -0
  357. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/seed_timeouts.yaml +0 -0
  358. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +0 -0
  359. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/seedonly.yaml +0 -0
  360. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/sld.yaml +0 -0
  361. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/source_errors.yaml +0 -0
  362. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/source_errors_raise.yaml +0 -0
  363. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/tileservice_origin.yaml +0 -0
  364. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/tileservice_refresh.yaml +0 -0
  365. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/tilesource_minmax_res.yaml +0 -0
  366. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/util-conf-base-grids.yaml +0 -0
  367. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/util-conf-overwrite.yaml +0 -0
  368. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +0 -0
  369. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/util_grids.yaml +0 -0
  370. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/util_wms_capabilities111.xml +0 -0
  371. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/util_wms_capabilities130.xml +0 -0
  372. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +0 -0
  373. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/watermark.yaml +0 -0
  374. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/wms_srs_extent.yaml +0 -0
  375. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/wms_versions.yaml +0 -0
  376. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/wmts.yaml +0 -0
  377. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/wmts_dimensions.yaml +0 -0
  378. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/xslt_featureinfo.yaml +0 -0
  379. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +0 -0
  380. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_arcgis.py +0 -0
  381. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_auth.py +0 -0
  382. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_behind_proxy.py +0 -0
  383. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_bulk_meta_tiles.py +0 -0
  384. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_cache_azureblob.py +0 -0
  385. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_cache_band_merge.py +0 -0
  386. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_cache_coverage.py +0 -0
  387. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_cache_geopackage.py +0 -0
  388. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_cache_grid_names.py +0 -0
  389. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_cache_mbtiles.py +0 -0
  390. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_cache_s3.py +0 -0
  391. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_cache_source.py +0 -0
  392. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_combined_sources.py +0 -0
  393. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_coverage.py +0 -0
  394. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_decorate_img.py +0 -0
  395. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_demo.py +0 -0
  396. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_demo_with_extra_service.py +0 -0
  397. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_dimensions.py +0 -0
  398. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_disable_storage.py +0 -0
  399. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_formats.py +0 -0
  400. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_inspire_vs.py +0 -0
  401. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_kml.py +0 -0
  402. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_layergroups.py +0 -0
  403. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_mapnik.py +0 -0
  404. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_mixed_mode_format.py +0 -0
  405. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_multi_cache_layers.py +0 -0
  406. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_multiapp.py +0 -0
  407. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_refresh.py +0 -0
  408. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_renderd_client.py +0 -0
  409. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_response_headers.py +0 -0
  410. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_scalehints.py +0 -0
  411. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_seed.py +0 -0
  412. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_seed_only.py +0 -0
  413. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_sld.py +0 -0
  414. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_source_errors.py +0 -0
  415. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_tilesource_minmax_res.py +0 -0
  416. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_tms.py +0 -0
  417. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_tms_origin.py +0 -0
  418. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_util_conf.py +0 -0
  419. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_util_export.py +0 -0
  420. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_util_grids.py +0 -0
  421. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_util_wms_capabilities.py +0 -0
  422. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_watermark.py +0 -0
  423. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_wms.py +0 -0
  424. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_wms_srs_extent.py +0 -0
  425. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_wms_version.py +0 -0
  426. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_wmsc.py +0 -0
  427. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_wmts.py +0 -0
  428. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_wmts_dimensions.py +0 -0
  429. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_wmts_restful.py +0 -0
  430. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/system/test_xslt_featureinfo.py +0 -0
  431. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/test_http_helper.py +0 -0
  432. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/__init__.py +0 -0
  433. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/epsg +0 -0
  434. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/polygons/polygons.dbf +0 -0
  435. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/polygons/polygons.shp +0 -0
  436. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/polygons/polygons.shx +0 -0
  437. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_async.py +0 -0
  438. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_auth.py +0 -0
  439. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache.py +0 -0
  440. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache_azureblob.py +0 -0
  441. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache_compact.py +0 -0
  442. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache_couchdb.py +0 -0
  443. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache_geopackage.py +0 -0
  444. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache_redis.py +0 -0
  445. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache_riak.py +0 -0
  446. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache_s3.py +0 -0
  447. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_cache_tile.py +0 -0
  448. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_client_arcgis.py +0 -0
  449. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_collections.py +0 -0
  450. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_concat_legends.py +0 -0
  451. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_conf_loader.py +0 -0
  452. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_conf_validator.py +0 -0
  453. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_config.py +0 -0
  454. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_decorate_img.py +0 -0
  455. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_exceptions.py +0 -0
  456. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_file_lock_load.py +0 -0
  457. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_geom.py +0 -0
  458. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_grid.py +0 -0
  459. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_image.py +0 -0
  460. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_image_mask.py +0 -0
  461. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_image_messages.py +0 -0
  462. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_image_options.py +0 -0
  463. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_isodate.py +0 -0
  464. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_multiapp.py +0 -0
  465. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_ogr_reader.py +0 -0
  466. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_request.py +0 -0
  467. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_request_wmts.py +0 -0
  468. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_response.py +0 -0
  469. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_seed.py +0 -0
  470. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_seed_cachelock.py +0 -0
  471. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_srs.py +0 -0
  472. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_tiled_source.py +0 -0
  473. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_tilefilter.py +0 -0
  474. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_times.py +0 -0
  475. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_timeutils.py +0 -0
  476. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_util_conf_utils.py +0 -0
  477. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_utils.py +0 -0
  478. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_wms_capabilities.py +0 -0
  479. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_wms_layer.py +0 -0
  480. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/test/unit/test_yaml.py +0 -0
  481. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/tilefilter.py +0 -0
  482. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/__init__.py +0 -0
  483. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/async_.py +0 -0
  484. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/collections.py +0 -0
  485. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/coverage.py +0 -0
  486. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/__init__.py +0 -0
  487. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/dictspec/__init__.py +0 -0
  488. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/dictspec/spec.py +0 -0
  489. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/dictspec/test/__init__.py +0 -0
  490. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/dictspec/test/test_validator.py +0 -0
  491. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/dictspec/validator.py +0 -0
  492. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/local.py +0 -0
  493. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/lockfile.py +0 -0
  494. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/serving.py +0 -0
  495. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/tempita/__init__.py +0 -0
  496. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/tempita/_looper.py +0 -0
  497. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/tempita/string_utils.py +0 -0
  498. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/__init__.py +0 -0
  499. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/duration.py +0 -0
  500. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/parse.py +0 -0
  501. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
  502. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/test/test_parse.py +0 -0
  503. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/test/test_util.py +0 -0
  504. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/test/wms-example-111.xml +0 -0
  505. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/test/wms-example-130.xml +0 -0
  506. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/test/wms-large-111.xml +0 -0
  507. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +0 -0
  508. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ext/wmsparse/util.py +0 -0
  509. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/fs.py +0 -0
  510. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/geom.py +0 -0
  511. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/lib.py +0 -0
  512. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/lock.py +0 -0
  513. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/ogr.py +0 -0
  514. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/py.py +0 -0
  515. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/times.py +0 -0
  516. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/util/yaml.py +0 -0
  517. {MapProxy-2.1.0 → MapProxy-2.2.0}/mapproxy/version.py +0 -0
  518. {MapProxy-2.1.0 → MapProxy-2.2.0}/setup.cfg +0 -0
@@ -1,3 +1,34 @@
1
+ 2.2.0 2024-07-24
2
+ ~~~~~~~~~~~~~~~~
3
+
4
+ Improvements:
5
+
6
+ - Add timeout to SQLite connect for geopackages. This helps against locking exceptions
7
+ - Improvement of documentation, typos, wrong cli commands, old python2 stuff
8
+ - The WMTS capabilites will now advertise the WMS GetLegendGraphic as a LegendURL if both services are active
9
+ - It is possible now to configure LegendURLs that should be shown in the WMTS capabilities
10
+ - A new method for plugins to intercept and modify requests made to MapProxy was added.
11
+
12
+ Maintenance:
13
+
14
+ - Removal of debian package information
15
+ - Fix docs workflow
16
+
17
+ Fixes:
18
+
19
+ - Remove import of the packaging library that does not appear in the `install_requires`
20
+ - Only install and use `importlib_resources` in python 3.8
21
+
22
+
23
+ 2.1.1 2024-07-16
24
+ ~~~~~~~~~~~~~~~~
25
+ Fixes:
26
+
27
+ - Fix version of jsonschema in setup.py
28
+ - Fix alpine docker build
29
+ - Fix doc generation workflow
30
+
31
+
1
32
  2.1.0 2024-07-16
2
33
  ~~~~~~~~~~~~~~~~
3
34
  Improvements:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: MapProxy
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: An accelerating proxy for tile and web map services
5
5
  Home-page: https://mapproxy.org
6
6
  Author: Oliver Tonnhofer
@@ -34,6 +34,37 @@ The documentation is available at: http://mapproxy.github.io/mapproxy/latest/
34
34
 
35
35
  Changes
36
36
  -------
37
+ 2.2.0 2024-07-24
38
+ ~~~~~~~~~~~~~~~~
39
+
40
+ Improvements:
41
+
42
+ - Add timeout to SQLite connect for geopackages. This helps against locking exceptions
43
+ - Improvement of documentation, typos, wrong cli commands, old python2 stuff
44
+ - The WMTS capabilites will now advertise the WMS GetLegendGraphic as a LegendURL if both services are active
45
+ - It is possible now to configure LegendURLs that should be shown in the WMTS capabilities
46
+ - A new method for plugins to intercept and modify requests made to MapProxy was added.
47
+
48
+ Maintenance:
49
+
50
+ - Removal of debian package information
51
+ - Fix docs workflow
52
+
53
+ Fixes:
54
+
55
+ - Remove import of the packaging library that does not appear in the `install_requires`
56
+ - Only install and use `importlib_resources` in python 3.8
57
+
58
+
59
+ 2.1.1 2024-07-16
60
+ ~~~~~~~~~~~~~~~~
61
+ Fixes:
62
+
63
+ - Fix version of jsonschema in setup.py
64
+ - Fix alpine docker build
65
+ - Fix doc generation workflow
66
+
67
+
37
68
  2.1.0 2024-07-16
38
69
  ~~~~~~~~~~~~~~~~
39
70
  Improvements:
@@ -130,27 +161,6 @@ Fixes:
130
161
  - Several minor bugfixes
131
162
  - mapproxy-util export - derive image format from cache config
132
163
 
133
- 1.15.1 2022-06-14
134
- ~~~~~~~~~~~~~~~~~
135
-
136
- Fixes:
137
-
138
- - Fixup release on PyPI
139
-
140
- 1.15.0 2022-06-14
141
- ~~~~~~~~~~~~~~~~~
142
-
143
- Improvements:
144
-
145
- - WMS Dimension caching (#449)
146
- - Add a mechanism to define plugins (#578)
147
- - Support of non-EPSG SRS authorities (#572)
148
- - Support for python 3.10 (#582)
149
-
150
- Fixes:
151
-
152
- - Several minor bugfixes
153
-
154
164
 
155
165
  Older changes
156
166
  -------------
@@ -1,6 +1,9 @@
1
1
  Pillow!=2.4.0,!=8.3.0,!=8.3.1
2
2
  PyYAML>=3.0
3
3
  future
4
- importlib_resources
5
- jsonschema
4
+ jsonschema>=4
6
5
  pyproj>=2
6
+ werkzeug==1.0.1
7
+
8
+ [:python_version <= "3.8"]
9
+ importlib_resources
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: MapProxy
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: An accelerating proxy for tile and web map services
5
5
  Home-page: https://mapproxy.org
6
6
  Author: Oliver Tonnhofer
@@ -34,6 +34,37 @@ The documentation is available at: http://mapproxy.github.io/mapproxy/latest/
34
34
 
35
35
  Changes
36
36
  -------
37
+ 2.2.0 2024-07-24
38
+ ~~~~~~~~~~~~~~~~
39
+
40
+ Improvements:
41
+
42
+ - Add timeout to SQLite connect for geopackages. This helps against locking exceptions
43
+ - Improvement of documentation, typos, wrong cli commands, old python2 stuff
44
+ - The WMTS capabilites will now advertise the WMS GetLegendGraphic as a LegendURL if both services are active
45
+ - It is possible now to configure LegendURLs that should be shown in the WMTS capabilities
46
+ - A new method for plugins to intercept and modify requests made to MapProxy was added.
47
+
48
+ Maintenance:
49
+
50
+ - Removal of debian package information
51
+ - Fix docs workflow
52
+
53
+ Fixes:
54
+
55
+ - Remove import of the packaging library that does not appear in the `install_requires`
56
+ - Only install and use `importlib_resources` in python 3.8
57
+
58
+
59
+ 2.1.1 2024-07-16
60
+ ~~~~~~~~~~~~~~~~
61
+ Fixes:
62
+
63
+ - Fix version of jsonschema in setup.py
64
+ - Fix alpine docker build
65
+ - Fix doc generation workflow
66
+
67
+
37
68
  2.1.0 2024-07-16
38
69
  ~~~~~~~~~~~~~~~~
39
70
  Improvements:
@@ -130,27 +161,6 @@ Fixes:
130
161
  - Several minor bugfixes
131
162
  - mapproxy-util export - derive image format from cache config
132
163
 
133
- 1.15.1 2022-06-14
134
- ~~~~~~~~~~~~~~~~~
135
-
136
- Fixes:
137
-
138
- - Fixup release on PyPI
139
-
140
- 1.15.0 2022-06-14
141
- ~~~~~~~~~~~~~~~~~
142
-
143
- Improvements:
144
-
145
- - WMS Dimension caching (#449)
146
- - Add a mechanism to define plugins (#578)
147
- - Support of non-EPSG SRS authorities (#572)
148
- - Support for python 3.10 (#582)
149
-
150
- Fixes:
151
-
152
- - Several minor bugfixes
153
-
154
164
 
155
165
  Older changes
156
166
  -------------
@@ -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::
@@ -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
 
@@ -21,17 +21,17 @@ Create a new virtual environment
21
21
 
22
22
  ``virtualenv`` is available as ``python-virtualenv`` on most Linux systems. You can also `install Virtualenv from source <https://virtualenv.pypa.io/en/latest/installation.html>`_.
23
23
 
24
- To create a new environment with the name ``mapproxy`` call::
24
+ To create a new environment with the name ``venv`` call::
25
25
 
26
- virtualenv --system-site-packages mapproxy
26
+ virtualenv --system-site-packages venv
27
27
 
28
- You should now have a Python installation under ``mapproxy/bin/python``.
28
+ You should now have a Python installation under ``venv/bin/python``.
29
29
 
30
30
  .. note:: Virtualenv will use your Python system packages (like ``python-imaging`` or ``python-yaml``) only when the virtualenv was created with the ``--system-site-packages`` option.
31
31
 
32
- You need to either prefix all commands with ``mapproxy/bin``, set your ``PATH`` variable to include the bin directory or `activate` the virtualenv with::
32
+ You need to either prefix all commands with ``venv/bin``, set your ``PATH`` variable to include the bin directory or `activate` the virtualenv with::
33
33
 
34
- source mapproxy/bin/activate
34
+ source venv/bin/activate
35
35
 
36
36
  This will change the ``PATH`` for your `current` session.
37
37
 
@@ -147,8 +147,7 @@ Start the test server
147
147
 
148
148
  To start a test server::
149
149
 
150
- cd mymapproxy
151
- mapproxy-util serve-develop mapproxy.yaml
150
+ mapproxy-util serve-develop mymapproxy/mapproxy.yaml
152
151
 
153
152
  There is already a test layer configured that obtains data from the `Omniscale OpenStreetMap WMS`_. Feel free to use this service for testing.
154
153
 
@@ -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
 
@@ -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
@@ -18,7 +18,10 @@ Demo service handler
18
18
  """
19
19
  from __future__ import division
20
20
 
21
- import importlib_resources
21
+ try:
22
+ import importlib_resources
23
+ except ImportError:
24
+ from importlib import resources as importlib_resources
22
25
  import os
23
26
  import mimetypes
24
27
  from collections import defaultdict
@@ -11,7 +11,7 @@
11
11
  <ows:Keyword{{if kw.vocabulary}} vocabulary="{{kw.vocabulary}}"{{endif}}>{{keyword}}</ows:Keyword>
12
12
  {{endfor}}
13
13
  {{endfor}}
14
- </ows:Keywords>
14
+ </ows:Keywords>
15
15
  {{endif}}
16
16
  <ows:ServiceType>OGC WMTS</ows:ServiceType>
17
17
  <ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
@@ -97,6 +97,12 @@
97
97
  <ows:Identifier>{{layer.name}}</ows:Identifier>
98
98
  <Style>
99
99
  <ows:Identifier>default</ows:Identifier>
100
+ {{if legendurls[layer.name]}}
101
+ <LegendURL
102
+ format="image/png"
103
+ xlink:href="{{legendurls[layer.name]}}"
104
+ />
105
+ {{endif}}
100
106
  </Style>
101
107
  <Format>image/{{layer.format}}</Format>
102
108
  {{if layer.queryable}}
@@ -204,7 +204,7 @@ class TileServer(Server):
204
204
 
205
205
 
206
206
  class TileLayer(object):
207
- def __init__(self, name, title, md, tile_manager, info_sources=[], dimensions=None):
207
+ def __init__(self, name, title, md, tile_manager, info_sources=[], dimensions=None, legend_version=None):
208
208
  """
209
209
  :param md: the layer metadata
210
210
  :param tile_manager: the layer tile manager
@@ -220,6 +220,7 @@ class TileLayer(object):
220
220
  self._empty_tile = None
221
221
  self._mixed_format = True if self.md.get('format', False) == 'mixed' else False
222
222
  self.empty_response_as_png = True
223
+ self.legend_version = legend_version
223
224
 
224
225
  @property
225
226
  def bbox(self):
@@ -18,6 +18,7 @@ WMS service handler
18
18
  """
19
19
  from __future__ import print_function
20
20
 
21
+ import re
21
22
  from functools import partial
22
23
 
23
24
  from mapproxy.request.wmts import (
@@ -273,11 +274,25 @@ class Capabilities(object):
273
274
  return self._render_template(_map_request.capabilities_template)
274
275
 
275
276
  def template_context(self):
276
- return dict(service=bunch(default='', **self.service),
277
+ service = bunch(default='', **self.service)
278
+ base_url = re.sub(r'/service$', '', service.url)
279
+ legendurls = {}
280
+ for layer in self.layers:
281
+ if layer.md['wmts_kvp_legendurl'] is not None:
282
+ legendurls[layer.name] = (
283
+ layer.md['wmts_kvp_legendurl']
284
+ .replace('{base_url}', base_url)
285
+ .replace('{layer_name}', layer.name)
286
+ )
287
+ else:
288
+ legendurls[layer.name] = None
289
+
290
+ return dict(service=service,
277
291
  restful=False,
278
292
  layers=self.layers,
279
293
  info_formats=self.info_formats,
280
- tile_matrix_sets=self.matrix_sets)
294
+ tile_matrix_sets=self.matrix_sets,
295
+ legendurls=legendurls)
281
296
 
282
297
  def _render_template(self, template):
283
298
  template = get_template(template)
@@ -294,7 +309,20 @@ class RestfulCapabilities(Capabilities):
294
309
  self.fi_url_converter = fi_url_converter
295
310
 
296
311
  def template_context(self):
297
- return dict(service=bunch(default='', **self.service),
312
+ service = bunch(default='', **self.service)
313
+ base_url = re.sub(r'/wmts$', '', service.url)
314
+ legendurls = {}
315
+ for layer in self.layers:
316
+ if layer.md['wmts_rest_legendurl'] is not None:
317
+ legendurls[layer.name] = (
318
+ layer.md['wmts_rest_legendurl']
319
+ .replace('{base_url}', base_url)
320
+ .replace('{layer_name}', layer.name)
321
+ )
322
+ else:
323
+ legendurls[layer.name] = None
324
+
325
+ return dict(service=service,
298
326
  restful=True,
299
327
  layers=self.layers,
300
328
  info_formats=self.info_formats,
@@ -306,6 +334,7 @@ class RestfulCapabilities(Capabilities):
306
334
  dimension_keys=dict((k.lower(), k) for k in self.url_converter.dimensions),
307
335
  format_resource_template=format_resource_template,
308
336
  format_info_resource_template=format_info_resource_template,
337
+ legendurls=legendurls
309
338
  )
310
339
 
311
340