MapProxy 4.0.1__tar.gz → 4.1.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 (528) hide show
  1. {mapproxy-4.0.1 → mapproxy-4.1.0}/CHANGES.txt +37 -0
  2. {mapproxy-4.0.1 → mapproxy-4.1.0}/COPYING.txt +0 -5
  3. {mapproxy-4.0.1 → mapproxy-4.1.0}/MapProxy.egg-info/PKG-INFO +39 -27
  4. {mapproxy-4.0.1 → mapproxy-4.1.0}/MapProxy.egg-info/SOURCES.txt +7 -2
  5. {mapproxy-4.0.1 → mapproxy-4.1.0}/PKG-INFO +39 -27
  6. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/caches.rst +3 -0
  7. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/deployment.rst +2 -0
  8. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/couchdb.py +2 -2
  9. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/geopackage.py +5 -4
  10. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/mbtiles.py +1 -1
  11. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/tile.py +1 -1
  12. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/client/http.py +13 -10
  13. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/client/tile.py +1 -1
  14. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/client/wms.py +3 -1
  15. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config/loader.py +24 -14
  16. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config/spec.py +1 -0
  17. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/featureinfo.py +26 -33
  18. mapproxy-4.1.0/mapproxy/grid/__init__.py +92 -0
  19. mapproxy-4.1.0/mapproxy/grid/meta_grid.py +312 -0
  20. mapproxy-4.1.0/mapproxy/grid/resolutions.py +214 -0
  21. mapproxy-4.1.0/mapproxy/grid/tile_grid.py +514 -0
  22. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/merge.py +4 -1
  23. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/transform.py +2 -1
  24. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/layer.py +8 -3
  25. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/multiapp.py +2 -1
  26. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/conf/geopackage.py +2 -1
  27. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/seed/cachelock.py +2 -1
  28. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/seed/config.py +9 -13
  29. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/seed/seeder.py +1 -1
  30. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/demo.py +65 -58
  31. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/kml.py +2 -1
  32. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/capabilities_demo.html +1 -3
  33. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/tile.py +2 -2
  34. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/wms.py +16 -13
  35. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/wmts.py +6 -6
  36. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/source/mapnik.py +1 -1
  37. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/srs.py +3 -69
  38. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/http.py +1 -1
  39. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/mocker.py +2 -2
  40. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_s3.yaml +17 -0
  41. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util_grids.yaml +2 -1
  42. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_auth.py +1 -1
  43. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_geopackage.py +2 -2
  44. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_s3.py +26 -7
  45. mapproxy-4.1.0/mapproxy/test/system/test_demo.py +123 -0
  46. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_dimensions.py +4 -4
  47. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_kml.py +1 -1
  48. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_legendgraphic.py +2 -0
  49. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_seed.py +18 -12
  50. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_wms.py +43 -76
  51. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_auth.py +1 -1
  52. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache.py +54 -53
  53. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_couchdb.py +1 -1
  54. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_geopackage.py +2 -2
  55. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_mbtile.py +1 -1
  56. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_s3.py +4 -4
  57. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_tile.py +3 -2
  58. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_client.py +3 -3
  59. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_conf_loader.py +7 -7
  60. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_decorate_img.py +4 -3
  61. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_featureinfo.py +18 -17
  62. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_geom.py +2 -1
  63. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_grid.py +6 -15
  64. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_request_wmts.py +3 -3
  65. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_seed.py +1 -2
  66. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_tiled_source.py +1 -1
  67. mapproxy-4.1.0/mapproxy/util/bbox.py +141 -0
  68. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/coverage.py +1 -1
  69. mapproxy-4.1.0/mapproxy/util/escape.py +10 -0
  70. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/geom.py +1 -1
  71. mapproxy-4.1.0/mapproxy/util/sqlite3.py +28 -0
  72. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/wsgiapp.py +2 -1
  73. {mapproxy-4.0.1 → mapproxy-4.1.0}/requirements-tests.txt +13 -12
  74. {mapproxy-4.0.1 → mapproxy-4.1.0}/setup.py +2 -1
  75. mapproxy-4.0.1/mapproxy/grid.py +0 -1199
  76. mapproxy-4.0.1/mapproxy/test/system/test_demo.py +0 -56
  77. mapproxy-4.0.1/mapproxy/util/ext/odict.py +0 -321
  78. {mapproxy-4.0.1 → mapproxy-4.1.0}/AUTHORS.txt +0 -0
  79. {mapproxy-4.0.1 → mapproxy-4.1.0}/LICENSE.txt +0 -0
  80. {mapproxy-4.0.1 → mapproxy-4.1.0}/MANIFEST.in +0 -0
  81. {mapproxy-4.0.1 → mapproxy-4.1.0}/MapProxy.egg-info/dependency_links.txt +0 -0
  82. {mapproxy-4.0.1 → mapproxy-4.1.0}/MapProxy.egg-info/entry_points.txt +0 -0
  83. {mapproxy-4.0.1 → mapproxy-4.1.0}/MapProxy.egg-info/not-zip-safe +0 -0
  84. {mapproxy-4.0.1 → mapproxy-4.1.0}/MapProxy.egg-info/requires.txt +0 -0
  85. {mapproxy-4.0.1 → mapproxy-4.1.0}/MapProxy.egg-info/top_level.txt +0 -0
  86. {mapproxy-4.0.1 → mapproxy-4.1.0}/README.md +0 -0
  87. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/GM.txt +0 -0
  88. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/_static/logo.png +0 -0
  89. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/_static/logo_title.png +0 -0
  90. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/_static/mapproxy.css +0 -0
  91. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/_templates/versions.html +0 -0
  92. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/auth.rst +0 -0
  93. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/caching_layer_dimensions.rst +0 -0
  94. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/conf.py +0 -0
  95. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/configuration.rst +0 -0
  96. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/configuration_examples.rst +0 -0
  97. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/coverages.rst +0 -0
  98. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/decorate_img.rst +0 -0
  99. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/development.rst +0 -0
  100. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/bicubic.png +0 -0
  101. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/bilinear.png +0 -0
  102. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/labeling-dynamic.png +0 -0
  103. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/labeling-meta-buffer.png +0 -0
  104. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/labeling-metatiling-buffer.png +0 -0
  105. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/labeling-metatiling.png +0 -0
  106. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/labeling-no-clip.png +0 -0
  107. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/labeling-no-placement.png +0 -0
  108. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/labeling-partial-false.png +0 -0
  109. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/labeling-repeated.png +0 -0
  110. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/mapnik-webmerc-hq.png +0 -0
  111. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/mapnik-webmerc.png +0 -0
  112. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/mapproxy-demo.png +0 -0
  113. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/imgs/nearest.png +0 -0
  114. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/index.rst +0 -0
  115. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/inspire.rst +0 -0
  116. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/install.rst +0 -0
  117. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/install_docker.rst +0 -0
  118. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/install_osgeo4w.rst +0 -0
  119. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/install_windows.rst +0 -0
  120. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/labeling.rst +0 -0
  121. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/mapproxy_util.rst +0 -0
  122. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/mapproxy_util_autoconfig.rst +0 -0
  123. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/ogc_api.rst +0 -0
  124. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/plugins.rst +0 -0
  125. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/seed.rst +0 -0
  126. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/services.rst +0 -0
  127. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/sources.rst +0 -0
  128. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/tutorial.rst +0 -0
  129. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/tutorial.yaml +0 -0
  130. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/yaml/cache_conf.yaml +0 -0
  131. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/yaml/grid_conf.yaml +0 -0
  132. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/yaml/merged_conf.yaml +0 -0
  133. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/yaml/meta_conf.yaml +0 -0
  134. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/yaml/seed.yaml +0 -0
  135. {mapproxy-4.0.1 → mapproxy-4.1.0}/doc/yaml/simple_conf.yaml +0 -0
  136. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/__init__.py +0 -0
  137. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/__init__.py +0 -0
  138. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/azureblob.py +0 -0
  139. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/base.py +0 -0
  140. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/compact.py +0 -0
  141. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/dummy.py +0 -0
  142. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/file.py +0 -0
  143. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/legend.py +0 -0
  144. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/meta.py +0 -0
  145. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/path.py +0 -0
  146. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/redis.py +0 -0
  147. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/renderd.py +0 -0
  148. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/cache/s3.py +0 -0
  149. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/client/__init__.py +0 -0
  150. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/client/arcgis.py +0 -0
  151. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/client/cgi.py +0 -0
  152. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/client/log.py +0 -0
  153. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/compat/__init__.py +0 -0
  154. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/compat/image.py +0 -0
  155. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config/__init__.py +0 -0
  156. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config/config-schema.json +0 -0
  157. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config/config.py +0 -0
  158. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config/coverage.py +0 -0
  159. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config/defaults.py +0 -0
  160. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config/validator.py +0 -0
  161. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config_template/__init__.py +0 -0
  162. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config_template/base_config/config.wsgi +0 -0
  163. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config_template/base_config/full_example.yaml +0 -0
  164. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config_template/base_config/full_seed_example.yaml +0 -0
  165. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config_template/base_config/log.ini +0 -0
  166. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config_template/base_config/mapproxy.yaml +0 -0
  167. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/config_template/base_config/seed.yaml +0 -0
  168. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/exception.py +0 -0
  169. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/__init__.py +0 -0
  170. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/fonts/DejaVuSans.ttf +0 -0
  171. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
  172. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/fonts/LICENSE +0 -0
  173. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/fonts/__init__.py +0 -0
  174. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/mask.py +0 -0
  175. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/message.py +0 -0
  176. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/opts.py +0 -0
  177. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/image/tile.py +0 -0
  178. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/proj.py +0 -0
  179. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/request/__init__.py +0 -0
  180. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/request/arcgis.py +0 -0
  181. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/request/base.py +0 -0
  182. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/request/tile.py +0 -0
  183. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/request/wms/__init__.py +0 -0
  184. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/request/wms/exception.py +0 -0
  185. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/request/wmts.py +0 -0
  186. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/response.py +0 -0
  187. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/__init__.py +0 -0
  188. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/conf/__init__.py +0 -0
  189. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/conf/app.py +0 -0
  190. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/conf/caches.py +0 -0
  191. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/conf/layers.py +0 -0
  192. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/conf/seeds.py +0 -0
  193. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/conf/sources.py +0 -0
  194. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/conf/utils.py +0 -0
  195. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/defrag.py +0 -0
  196. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/export.py +0 -0
  197. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/grids.py +0 -0
  198. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/scales.py +0 -0
  199. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/util.py +0 -0
  200. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/script/wms_capabilities.py +0 -0
  201. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/seed/__init__.py +0 -0
  202. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/seed/cleanup.py +0 -0
  203. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/seed/script.py +0 -0
  204. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/seed/spec.py +0 -0
  205. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/seed/util.py +0 -0
  206. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/__init__.py +0 -0
  207. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/base.py +0 -0
  208. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/ows.py +0 -0
  209. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/template_helper.py +0 -0
  210. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/demo.html +0 -0
  211. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/openlayers-demo.cfg +0 -0
  212. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/blank.gif +0 -0
  213. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
  214. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
  215. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
  216. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
  217. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
  218. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
  219. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
  220. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/logo.png +0 -0
  221. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/ol.css +0 -0
  222. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/ol.js +0 -0
  223. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/proj4.min.js +0 -0
  224. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/proj4defs.js +0 -0
  225. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/site.css +0 -0
  226. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
  227. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/theme/default/google.css +0 -0
  228. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/theme/default/ie6-style.css +0 -0
  229. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/theme/default/style.css +0 -0
  230. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static.html +0 -0
  231. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/tms_demo.html +0 -0
  232. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/wms_demo.html +0 -0
  233. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/demo/wmts_demo.html +0 -0
  234. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/ows_exception.xml +0 -0
  235. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/tms_capabilities.xml +0 -0
  236. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/tms_exception.xml +0 -0
  237. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/tms_root_resource.xml +0 -0
  238. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/tms_tilemap_capabilities.xml +0 -0
  239. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wms100capabilities.xml +0 -0
  240. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wms100exception.xml +0 -0
  241. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wms110capabilities.xml +0 -0
  242. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wms110exception.xml +0 -0
  243. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wms111capabilities.xml +0 -0
  244. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wms111exception.xml +0 -0
  245. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wms130capabilities.xml +0 -0
  246. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wms130exception.xml +0 -0
  247. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wmts100capabilities.xml +0 -0
  248. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/service/templates/wmts100exception.xml +0 -0
  249. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/source/__init__.py +0 -0
  250. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/source/arcgis.py +0 -0
  251. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/source/error.py +0 -0
  252. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/source/tile.py +0 -0
  253. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/source/wms.py +0 -0
  254. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/template.py +0 -0
  255. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/__init__.py +0 -0
  256. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/conftest.py +0 -0
  257. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/helper.py +0 -0
  258. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/image.py +0 -0
  259. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/common.xsd +0 -0
  260. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +0 -0
  261. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +0 -0
  262. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +0 -0
  263. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +0 -0
  264. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +0 -0
  265. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +0 -0
  266. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +0 -0
  267. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +0 -0
  268. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +0 -0
  269. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +0 -0
  270. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +0 -0
  271. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +0 -0
  272. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +0 -0
  273. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +0 -0
  274. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +0 -0
  275. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +0 -0
  276. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +0 -0
  277. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +0 -0
  278. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +0 -0
  279. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +0 -0
  280. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +0 -0
  281. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +0 -0
  282. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +0 -0
  283. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/network.xsd +0 -0
  284. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +0 -0
  285. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +0 -0
  286. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +0 -0
  287. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +0 -0
  288. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/kml/2.2.0/xAL.xsd +0 -0
  289. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +0 -0
  290. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +0 -0
  291. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +0 -0
  292. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +0 -0
  293. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +0 -0
  294. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +0 -0
  295. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +0 -0
  296. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +0 -0
  297. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +0 -0
  298. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +0 -0
  299. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +0 -0
  300. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +0 -0
  301. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +0 -0
  302. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +0 -0
  303. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +0 -0
  304. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +0 -0
  305. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +0 -0
  306. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +0 -0
  307. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +0 -0
  308. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +0 -0
  309. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +0 -0
  310. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +0 -0
  311. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +0 -0
  312. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +0 -0
  313. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +0 -0
  314. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  315. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  316. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  317. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +0 -0
  318. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +0 -0
  319. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +0 -0
  320. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +0 -0
  321. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +0 -0
  322. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +0 -0
  323. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +0 -0
  324. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +0 -0
  325. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +0 -0
  326. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +0 -0
  327. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  328. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  329. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  330. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +0 -0
  331. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +0 -0
  332. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +0 -0
  333. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +0 -0
  334. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/ReadMe.txt +0 -0
  335. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmts.xsd +0 -0
  336. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +0 -0
  337. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +0 -0
  338. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +0 -0
  339. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +0 -0
  340. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +0 -0
  341. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +0 -0
  342. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +0 -0
  343. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +0 -0
  344. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +0 -0
  345. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +0 -0
  346. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/schemas/xml.xsd +0 -0
  347. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/__init__.py +0 -0
  348. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/arcgis.yaml +0 -0
  349. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/auth.yaml +0 -0
  350. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache.mbtiles +0 -0
  351. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_azureblob.yaml +0 -0
  352. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_band_merge.yaml +0 -0
  353. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +0 -0
  354. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_coverage.yaml +0 -0
  355. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
  356. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
  357. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
  358. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_geopackage.yaml +0 -0
  359. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_grid_names.yaml +0 -0
  360. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_mbtiles.yaml +0 -0
  361. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_source.yaml +0 -0
  362. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/combined_sources.yaml +0 -0
  363. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/coverage.yaml +0 -0
  364. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/demo.yaml +0 -0
  365. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/dimension.yaml +0 -0
  366. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/disable_storage.yaml +0 -0
  367. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/empty_ogrdata.geojson +0 -0
  368. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/formats.yaml +0 -0
  369. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/inspire.yaml +0 -0
  370. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/inspire_full.yaml +0 -0
  371. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/kml_layer.yaml +0 -0
  372. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/layer.yaml +0 -0
  373. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/layergroups.yaml +0 -0
  374. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/layergroups_root.yaml +0 -0
  375. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/legendgraphic.yaml +0 -0
  376. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/mapnik_source.yaml +0 -0
  377. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/mapproxy_export.yaml +0 -0
  378. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/mapserver.yaml +0 -0
  379. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/minimal_cgi.py +0 -0
  380. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/mixed_mode.yaml +0 -0
  381. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/multi_cache_layers.yaml +0 -0
  382. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/multiapp1.yaml +0 -0
  383. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/multiapp2.yaml +0 -0
  384. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/renderd_client.yaml +0 -0
  385. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/scalehints.yaml +0 -0
  386. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seed.yaml +0 -0
  387. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seed_mapproxy.yaml +0 -0
  388. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seed_timeouts.yaml +0 -0
  389. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +0 -0
  390. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seedonly.yaml +0 -0
  391. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/sld.yaml +0 -0
  392. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/source_errors.yaml +0 -0
  393. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/source_errors_raise.yaml +0 -0
  394. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/tileservice_origin.yaml +0 -0
  395. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/tileservice_refresh.yaml +0 -0
  396. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/tilesource_minmax_res.yaml +0 -0
  397. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util-conf-base-grids.yaml +0 -0
  398. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util-conf-overwrite.yaml +0 -0
  399. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +0 -0
  400. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util_wms_capabilities111.xml +0 -0
  401. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util_wms_capabilities130.xml +0 -0
  402. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +0 -0
  403. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/watermark.yaml +0 -0
  404. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/wms_srs_extent.yaml +0 -0
  405. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/wms_versions.yaml +0 -0
  406. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/wmts.yaml +0 -0
  407. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/wmts_dimensions.yaml +0 -0
  408. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/xslt_featureinfo.yaml +0 -0
  409. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +0 -0
  410. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_arcgis.py +0 -0
  411. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_behind_proxy.py +0 -0
  412. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_bulk_meta_tiles.py +0 -0
  413. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_azureblob.py +0 -0
  414. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_band_merge.py +0 -0
  415. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_coverage.py +0 -0
  416. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_grid_names.py +0 -0
  417. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_mbtiles.py +0 -0
  418. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_source.py +0 -0
  419. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_combined_sources.py +0 -0
  420. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_coverage.py +0 -0
  421. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_decorate_img.py +0 -0
  422. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_demo_with_extra_service.py +0 -0
  423. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_disable_storage.py +0 -0
  424. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_formats.py +0 -0
  425. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_inspire_vs.py +0 -0
  426. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_layergroups.py +0 -0
  427. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_mapnik.py +0 -0
  428. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_mapserver.py +0 -0
  429. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_mixed_mode_format.py +0 -0
  430. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_multi_cache_layers.py +0 -0
  431. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_multiapp.py +0 -0
  432. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_refresh.py +0 -0
  433. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_renderd_client.py +0 -0
  434. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_response_headers.py +0 -0
  435. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_scalehints.py +0 -0
  436. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_seed_only.py +0 -0
  437. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_sld.py +0 -0
  438. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_source_errors.py +0 -0
  439. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_tilesource_minmax_res.py +0 -0
  440. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_tms.py +0 -0
  441. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_tms_origin.py +0 -0
  442. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_util_conf.py +0 -0
  443. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_util_export.py +0 -0
  444. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_util_grids.py +0 -0
  445. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_util_wms_capabilities.py +0 -0
  446. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_watermark.py +0 -0
  447. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_wms_srs_extent.py +0 -0
  448. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_wms_version.py +0 -0
  449. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_wmsc.py +0 -0
  450. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_wmts.py +0 -0
  451. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_wmts_dimensions.py +0 -0
  452. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_wmts_restful.py +0 -0
  453. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/system/test_xslt_featureinfo.py +0 -0
  454. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/test_http_helper.py +0 -0
  455. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/__init__.py +0 -0
  456. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/epsg +0 -0
  457. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/polygons/polygons.dbf +0 -0
  458. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/polygons/polygons.shp +0 -0
  459. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/polygons/polygons.shx +0 -0
  460. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_async.py +0 -0
  461. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_azureblob.py +0 -0
  462. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_compact.py +0 -0
  463. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_redis.py +0 -0
  464. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_client_arcgis.py +0 -0
  465. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_client_cgi.py +0 -0
  466. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_collections.py +0 -0
  467. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_concat_legends.py +0 -0
  468. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_conf_validator.py +0 -0
  469. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_config.py +0 -0
  470. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_exceptions.py +0 -0
  471. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_file_lock_load.py +0 -0
  472. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_fs.py +0 -0
  473. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_image.py +0 -0
  474. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_image_mask.py +0 -0
  475. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_image_messages.py +0 -0
  476. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_image_options.py +0 -0
  477. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_isodate.py +0 -0
  478. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_multiapp.py +0 -0
  479. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_ogr_reader.py +0 -0
  480. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_request.py +0 -0
  481. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_response.py +0 -0
  482. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_seed_cachelock.py +0 -0
  483. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_srs.py +0 -0
  484. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_tilefilter.py +0 -0
  485. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_times.py +0 -0
  486. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_timeutils.py +0 -0
  487. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_util_conf_utils.py +0 -0
  488. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_utils.py +0 -0
  489. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_wms_capabilities.py +0 -0
  490. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_wms_layer.py +0 -0
  491. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/test/unit/test_yaml.py +0 -0
  492. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/tilefilter.py +0 -0
  493. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/__init__.py +0 -0
  494. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/async_.py +0 -0
  495. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/collections.py +0 -0
  496. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/__init__.py +0 -0
  497. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/__init__.py +0 -0
  498. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/spec.py +0 -0
  499. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/test/__init__.py +0 -0
  500. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/test/test_validator.py +0 -0
  501. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/validator.py +0 -0
  502. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/local.py +0 -0
  503. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/lockfile.py +0 -0
  504. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/serving.py +0 -0
  505. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/tempita/__init__.py +0 -0
  506. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/tempita/_looper.py +0 -0
  507. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/tempita/string_utils.py +0 -0
  508. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/__init__.py +0 -0
  509. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/duration.py +0 -0
  510. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/parse.py +0 -0
  511. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
  512. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/test_parse.py +0 -0
  513. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/test_util.py +0 -0
  514. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/wms-example-111.xml +0 -0
  515. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/wms-example-130.xml +0 -0
  516. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/wms-large-111.xml +0 -0
  517. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +0 -0
  518. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/util.py +0 -0
  519. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/fs.py +0 -0
  520. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/lib.py +0 -0
  521. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/lock.py +0 -0
  522. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/ogr.py +0 -0
  523. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/py.py +0 -0
  524. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/times.py +0 -0
  525. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/util/yaml.py +0 -0
  526. {mapproxy-4.0.1 → mapproxy-4.1.0}/mapproxy/version.py +0 -0
  527. {mapproxy-4.0.1 → mapproxy-4.1.0}/pyproject.toml +0 -0
  528. {mapproxy-4.0.1 → mapproxy-4.1.0}/setup.cfg +0 -0
@@ -1,3 +1,40 @@
1
+ 4.1.0 2025-04-29
2
+ ~~~~~~~~~~~~~~~~
3
+
4
+ Improvements:
5
+
6
+ - It is now possible to integrate the grid name into paths for AWS buckets. This allows storage of tiles for multiple
7
+ grids in the same bucket.
8
+ - We are returning a 404 http status code instead of a 500 if no legend graphic is found for a service.
9
+ - We are using utf-8 in GetFeatureInfo requests now.
10
+
11
+ Maintenance:
12
+
13
+ - Updated some dependencies.
14
+ - Updated the GitHub runner versions.
15
+ - Refactored the grid.py file into multiple files.
16
+ - Removed the implementation of odict in favour of the builtin OrderedDict class.
17
+ - Added support for python 3.13.
18
+ - Skipping permissions tests if tests are run with root user. This is necessary to build and test MapProxy in a chroot
19
+ environment which is used to package MapProxy for Debian. Normal testing is not affected.
20
+
21
+ Fixes:
22
+
23
+ - Fixed deprecation warnings for utctime, sqlite, ImageMath.eval, mock_s3.
24
+ - Fix entrypoint.sh to create default MapProxy configurations if none are found.
25
+ - Allowed the trivy security scan workflow to write the results to the GitHub security tab.
26
+ - We are not allowing the deprecated TLS Versions 1.1 or lower for connections to servers anymore.
27
+
28
+
29
+ 4.0.2 2025-04-10
30
+ ~~~~~~~~~~~~~~~~
31
+
32
+ Fixes:
33
+
34
+ - Security fix to prevent XSS injections in demo pages
35
+ - Security fix to prevent reading file urls
36
+
37
+
1
38
  4.0.1 2025-03-25
2
39
  ~~~~~~~~~~~~~~~~
3
40
 
@@ -23,11 +23,6 @@ Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
23
23
 
24
24
  See mapproxy/image/fonts/LICENSE
25
25
 
26
- mapproxy/util/ext/odict.py
27
- --------------------------
28
- (c) 2008 by Armin Ronacher and PEP 273 authors.
29
- Modified "3-clause" BSD license.
30
-
31
26
  mapproxy/util/ext/tempita/*.py
32
27
  ------------------------------
33
28
  (c) 2009 by Ian Bicking.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MapProxy
3
- Version: 4.0.1
3
+ Version: 4.1.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
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.9
15
15
  Classifier: Programming Language :: Python :: 3.10
16
16
  Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
18
19
  Classifier: Topic :: Internet :: Proxy Servers
19
20
  Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
20
21
  Classifier: Topic :: Scientific/Engineering :: GIS
@@ -53,6 +54,43 @@ The documentation is available at: http://mapproxy.github.io/mapproxy/latest/
53
54
 
54
55
  Changes
55
56
  -------
57
+ 4.1.0 2025-04-29
58
+ ~~~~~~~~~~~~~~~~
59
+
60
+ Improvements:
61
+
62
+ - It is now possible to integrate the grid name into paths for AWS buckets. This allows storage of tiles for multiple
63
+ grids in the same bucket.
64
+ - We are returning a 404 http status code instead of a 500 if no legend graphic is found for a service.
65
+ - We are using utf-8 in GetFeatureInfo requests now.
66
+
67
+ Maintenance:
68
+
69
+ - Updated some dependencies.
70
+ - Updated the GitHub runner versions.
71
+ - Refactored the grid.py file into multiple files.
72
+ - Removed the implementation of odict in favour of the builtin OrderedDict class.
73
+ - Added support for python 3.13.
74
+ - Skipping permissions tests if tests are run with root user. This is necessary to build and test MapProxy in a chroot
75
+ environment which is used to package MapProxy for Debian. Normal testing is not affected.
76
+
77
+ Fixes:
78
+
79
+ - Fixed deprecation warnings for utctime, sqlite, ImageMath.eval, mock_s3.
80
+ - Fix entrypoint.sh to create default MapProxy configurations if none are found.
81
+ - Allowed the trivy security scan workflow to write the results to the GitHub security tab.
82
+ - We are not allowing the deprecated TLS Versions 1.1 or lower for connections to servers anymore.
83
+
84
+
85
+ 4.0.2 2025-04-10
86
+ ~~~~~~~~~~~~~~~~
87
+
88
+ Fixes:
89
+
90
+ - Security fix to prevent XSS injections in demo pages
91
+ - Security fix to prevent reading file urls
92
+
93
+
56
94
  4.0.1 2025-03-25
57
95
  ~~~~~~~~~~~~~~~~
58
96
 
@@ -138,32 +176,6 @@ Fixes:
138
176
  - The permission handling for file locks now also sets permissions on the files not just on the directories.
139
177
 
140
178
 
141
- 3.1.0 2024-10-22
142
- ~~~~~~~~~~~~~~~~
143
-
144
- Improvements:
145
-
146
- - Add new config parameters `file_permissions` and `directory_permissions` to set file and directory
147
- permissions on newly created cache files and directories.
148
-
149
- Maintenance:
150
-
151
- - Dependency updates
152
-
153
- Fixes:
154
-
155
- - Fix transparency in TMS demo page.
156
-
157
-
158
- 3.0.1 2024-08-27
159
- ~~~~~~~~~~~~~~~~
160
-
161
- Fixes:
162
-
163
- - Fix capabilities links in demo page and config template
164
- - Trivy report format
165
-
166
-
167
179
 
168
180
  Older changes
169
181
  -------------
@@ -68,7 +68,6 @@ doc/yaml/simple_conf.yaml
68
68
  mapproxy/__init__.py
69
69
  mapproxy/exception.py
70
70
  mapproxy/featureinfo.py
71
- mapproxy/grid.py
72
71
  mapproxy/layer.py
73
72
  mapproxy/multiapp.py
74
73
  mapproxy/proj.py
@@ -118,6 +117,10 @@ mapproxy/config_template/base_config/full_seed_example.yaml
118
117
  mapproxy/config_template/base_config/log.ini
119
118
  mapproxy/config_template/base_config/mapproxy.yaml
120
119
  mapproxy/config_template/base_config/seed.yaml
120
+ mapproxy/grid/__init__.py
121
+ mapproxy/grid/meta_grid.py
122
+ mapproxy/grid/resolutions.py
123
+ mapproxy/grid/tile_grid.py
121
124
  mapproxy/image/__init__.py
122
125
  mapproxy/image/mask.py
123
126
  mapproxy/image/merge.py
@@ -482,20 +485,22 @@ mapproxy/test/unit/polygons/polygons.shp
482
485
  mapproxy/test/unit/polygons/polygons.shx
483
486
  mapproxy/util/__init__.py
484
487
  mapproxy/util/async_.py
488
+ mapproxy/util/bbox.py
485
489
  mapproxy/util/collections.py
486
490
  mapproxy/util/coverage.py
491
+ mapproxy/util/escape.py
487
492
  mapproxy/util/fs.py
488
493
  mapproxy/util/geom.py
489
494
  mapproxy/util/lib.py
490
495
  mapproxy/util/lock.py
491
496
  mapproxy/util/ogr.py
492
497
  mapproxy/util/py.py
498
+ mapproxy/util/sqlite3.py
493
499
  mapproxy/util/times.py
494
500
  mapproxy/util/yaml.py
495
501
  mapproxy/util/ext/__init__.py
496
502
  mapproxy/util/ext/local.py
497
503
  mapproxy/util/ext/lockfile.py
498
- mapproxy/util/ext/odict.py
499
504
  mapproxy/util/ext/serving.py
500
505
  mapproxy/util/ext/dictspec/__init__.py
501
506
  mapproxy/util/ext/dictspec/spec.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MapProxy
3
- Version: 4.0.1
3
+ Version: 4.1.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
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.9
15
15
  Classifier: Programming Language :: Python :: 3.10
16
16
  Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
18
19
  Classifier: Topic :: Internet :: Proxy Servers
19
20
  Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
20
21
  Classifier: Topic :: Scientific/Engineering :: GIS
@@ -53,6 +54,43 @@ The documentation is available at: http://mapproxy.github.io/mapproxy/latest/
53
54
 
54
55
  Changes
55
56
  -------
57
+ 4.1.0 2025-04-29
58
+ ~~~~~~~~~~~~~~~~
59
+
60
+ Improvements:
61
+
62
+ - It is now possible to integrate the grid name into paths for AWS buckets. This allows storage of tiles for multiple
63
+ grids in the same bucket.
64
+ - We are returning a 404 http status code instead of a 500 if no legend graphic is found for a service.
65
+ - We are using utf-8 in GetFeatureInfo requests now.
66
+
67
+ Maintenance:
68
+
69
+ - Updated some dependencies.
70
+ - Updated the GitHub runner versions.
71
+ - Refactored the grid.py file into multiple files.
72
+ - Removed the implementation of odict in favour of the builtin OrderedDict class.
73
+ - Added support for python 3.13.
74
+ - Skipping permissions tests if tests are run with root user. This is necessary to build and test MapProxy in a chroot
75
+ environment which is used to package MapProxy for Debian. Normal testing is not affected.
76
+
77
+ Fixes:
78
+
79
+ - Fixed deprecation warnings for utctime, sqlite, ImageMath.eval, mock_s3.
80
+ - Fix entrypoint.sh to create default MapProxy configurations if none are found.
81
+ - Allowed the trivy security scan workflow to write the results to the GitHub security tab.
82
+ - We are not allowing the deprecated TLS Versions 1.1 or lower for connections to servers anymore.
83
+
84
+
85
+ 4.0.2 2025-04-10
86
+ ~~~~~~~~~~~~~~~~
87
+
88
+ Fixes:
89
+
90
+ - Security fix to prevent XSS injections in demo pages
91
+ - Security fix to prevent reading file urls
92
+
93
+
56
94
  4.0.1 2025-03-25
57
95
  ~~~~~~~~~~~~~~~~
58
96
 
@@ -138,32 +176,6 @@ Fixes:
138
176
  - The permission handling for file locks now also sets permissions on the files not just on the directories.
139
177
 
140
178
 
141
- 3.1.0 2024-10-22
142
- ~~~~~~~~~~~~~~~~
143
-
144
- Improvements:
145
-
146
- - Add new config parameters `file_permissions` and `directory_permissions` to set file and directory
147
- permissions on newly created cache files and directories.
148
-
149
- Maintenance:
150
-
151
- - Dependency updates
152
-
153
- Fixes:
154
-
155
- - Fix transparency in TMS demo page.
156
-
157
-
158
- 3.0.1 2024-08-27
159
- ~~~~~~~~~~~~~~~~
160
-
161
- Fixes:
162
-
163
- - Fix capabilities links in demo page and config template
164
- - Trivy report format
165
-
166
-
167
179
 
168
180
  Older changes
169
181
  -------------
@@ -480,6 +480,9 @@ Available options:
480
480
  ``use_http_get``:
481
481
  When set to ``true``, requests to S3 ``GetObject`` will be fetched via urllib2 instead of boto, which decreases response times. Defaults to ``false``.
482
482
 
483
+ ``include_grid_name``:
484
+ When set to ``true``, the grid name will be included in the path in the bucket (``[directory]/[grid.name]/[z]/...``). Defaults to ``false``.
485
+
483
486
  .. note::
484
487
  The hierarchical ``directory_layouts`` can hit limitations of AWS S3 if you are routinely processing 3500 or more requests per second. ``directory_layout: reverse_tms`` can work around this limitation. Please read `S3 Request Rate and Performance Considerations <http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html>`_ for more information on this issue.
485
488
 
@@ -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
@@ -15,7 +15,7 @@
15
15
 
16
16
 
17
17
  import codecs
18
- import datetime
18
+ from datetime import timezone, datetime
19
19
  import json
20
20
  import socket
21
21
  import time
@@ -245,7 +245,7 @@ class CouchDBCache(TileCacheBase):
245
245
 
246
246
 
247
247
  def utc_now_isoformat():
248
- now = datetime.datetime.utcnow()
248
+ now = datetime.now(timezone.utc)
249
249
  now = now.isoformat()
250
250
  # remove milliseconds, add Zulu timezone
251
251
  now = now.rsplit('.', 1)[0] + 'Z'
@@ -14,12 +14,11 @@
14
14
  # limitations under the License.
15
15
 
16
16
 
17
- import datetime
17
+ from datetime import timezone, datetime
18
18
  import hashlib
19
19
  import logging
20
20
  import os
21
21
  import re
22
- import sqlite3
23
22
  import threading
24
23
  import time
25
24
  from io import BytesIO
@@ -30,6 +29,7 @@ from mapproxy.image import ImageSource
30
29
  from mapproxy.srs import get_epsg_num
31
30
  from mapproxy.util.fs import ensure_directory
32
31
  from mapproxy.util.lock import FileLock
32
+ from mapproxy.util.sqlite3 import sqlite3
33
33
 
34
34
 
35
35
  log = logging.getLogger(__name__)
@@ -246,8 +246,9 @@ class GeopackageCache(TileCacheBase):
246
246
  log.info("srs_id already exists.")
247
247
  db.commit()
248
248
 
249
- last_change = datetime.datetime.utcfromtimestamp(
250
- int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
249
+ last_change = datetime.fromtimestamp(
250
+ int(os.environ.get('SOURCE_DATE_EPOCH', time.time())),
251
+ timezone.utc
251
252
  )
252
253
 
253
254
  # Ensure that tile table exists here, don't overwrite a valid entry.
@@ -16,7 +16,6 @@
16
16
  import glob
17
17
  import hashlib
18
18
  import os
19
- import sqlite3
20
19
  import threading
21
20
  import time
22
21
  from io import BytesIO
@@ -26,6 +25,7 @@ from mapproxy.image import ImageSource
26
25
  from mapproxy.cache.base import TileCacheBase, tile_buffer, REMOVE_ON_UNLOCK
27
26
  from mapproxy.util.fs import ensure_directory
28
27
  from mapproxy.util.lock import FileLock
28
+ from mapproxy.util.sqlite3 import sqlite3
29
29
 
30
30
  import logging
31
31
  log = logging.getLogger(__name__)
@@ -36,7 +36,7 @@ Tile caching (creation, caching and retrieval of tiles).
36
36
  """
37
37
  from functools import partial
38
38
  from contextlib import contextmanager
39
- from mapproxy.grid import MetaGrid
39
+ from mapproxy.grid.meta_grid import MetaGrid
40
40
  from mapproxy.image import BlankImageSource
41
41
  from mapproxy.image.mask import mask_image_source_from_coverage
42
42
  from mapproxy.image.opts import ImageOptions
@@ -18,6 +18,7 @@ Tile retrieval (WMS, TMS, etc.).
18
18
  """
19
19
  import sys
20
20
  import time
21
+ from typing import Any
21
22
 
22
23
  from mapproxy.version import version
23
24
  from mapproxy.image import ImageSource
@@ -76,11 +77,13 @@ class VerifiedHTTPSConnection(httplib.HTTPSConnection):
76
77
 
77
78
  # wrap the socket using verification with the root
78
79
  # certs in self.ca_certs_path
79
- self.sock = ssl.wrap_socket(sock,
80
- self.key_file,
81
- self.cert_file,
82
- cert_reqs=ssl.CERT_REQUIRED,
83
- ca_certs=self._ca_certs)
80
+ context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
81
+ context.verify_mode = ssl.CERT_REQUIRED
82
+ context.load_cert_chain(certfile=self.cert_file, keyfile=self.key_file)
83
+ context.load_verify_locations(cafile=self._ca_certs)
84
+ context.minimum_version = ssl.TLSVersion.TLSv1_2
85
+
86
+ self.sock = context.wrap_socket(sock, server_hostname=self.host)
84
87
 
85
88
 
86
89
  def verified_https_connection_with_ca_certs(ca_certs):
@@ -151,18 +154,19 @@ class HTTPClient(object):
151
154
  ssl_ca_certs=None, timeout=None, headers=None, hide_error_details=False,
152
155
  manage_cookies=False):
153
156
  self._timeout = timeout
154
- if url and url.startswith('https'):
155
- if insecure:
156
- ssl_ca_certs = None
157
+ if url and url.startswith('https') and insecure:
158
+ ssl_ca_certs = None
157
159
 
158
160
  self.opener = create_url_opener(ssl_ca_certs, url, username, password,
159
161
  insecure=insecure, manage_cookies=manage_cookies)
160
162
  self.header_list = headers.items() if headers else []
161
163
  self.hide_error_details = hide_error_details
162
164
 
163
- def open(self, url, data=None, method=None):
165
+ def open(self, url, data=None, method=None) -> Any:
164
166
  code = None
165
167
  result = None
168
+ start_time = time.time()
169
+ req = None
166
170
  try:
167
171
  req = urllib2.Request(url, data=data)
168
172
  except ValueError as e:
@@ -173,7 +177,6 @@ class HTTPClient(object):
173
177
  if method:
174
178
  req.method = method
175
179
  try:
176
- start_time = time.time()
177
180
  if self._timeout is not None:
178
181
  result = self.opener.open(req, timeout=self._timeout)
179
182
  else:
@@ -144,7 +144,7 @@ def arcgiscache_path(tile_coord):
144
144
 
145
145
  def bbox(tile_coord, grid):
146
146
  """
147
- >>> from mapproxy.grid import tile_grid
147
+ >>> from mapproxy.grid.tile_grid import tile_grid
148
148
  >>> grid = tile_grid(4326, bbox=(0, -15, 10, -5))
149
149
  >>> bbox((0, 0, 0), grid)
150
150
  '0.00000000,-15.00000000,10.00000000,-5.00000000'
@@ -16,6 +16,8 @@
16
16
  """
17
17
  WMS clients for maps and information.
18
18
  """
19
+ from codecs import decode
20
+
19
21
  from mapproxy.request.base import split_mime_type
20
22
  from mapproxy.layer import InfoQuery
21
23
  from mapproxy.source import SourceError
@@ -137,7 +139,7 @@ class WMSInfoClient(object):
137
139
  if not info_format:
138
140
  # otherwise from query
139
141
  info_format = query.info_format
140
- return create_featureinfo_doc(resp.read(), info_format)
142
+ return create_featureinfo_doc(decode(resp.read()), info_format)
141
143
 
142
144
  def _get_transformed_query(self, query):
143
145
  """
@@ -19,7 +19,6 @@ Configuration loading and system initializing.
19
19
  from __future__ import division
20
20
  from mapproxy.util.fs import find_exec
21
21
  from mapproxy.util.yaml import load_yaml_file, YAMLError
22
- from mapproxy.util.ext.odict import odict
23
22
  from mapproxy.util.py import memoize
24
23
  from mapproxy.config.spec import validate_options, add_source_to_mapproxy_yaml_spec, add_service_to_mapproxy_yaml_spec
25
24
  from mapproxy.config.validator import validate
@@ -32,6 +31,7 @@ import hashlib
32
31
  import warnings
33
32
  from copy import deepcopy, copy
34
33
  from functools import partial
34
+ from collections import OrderedDict
35
35
 
36
36
  import logging
37
37
  from urllib.parse import urlparse
@@ -74,7 +74,7 @@ class ProxyConfiguration(object):
74
74
  self.grids[grid_name] = GridConfiguration(grid_conf, context=self)
75
75
 
76
76
  def load_caches(self):
77
- self.caches = odict()
77
+ self.caches = OrderedDict()
78
78
  caches_conf = self.configuration.get('caches')
79
79
  if not caches_conf:
80
80
  return
@@ -91,7 +91,7 @@ class ProxyConfiguration(object):
91
91
  self.sources[source_name] = SourceConfiguration.load(conf=source_conf, context=self)
92
92
 
93
93
  def load_tile_layers(self):
94
- self.layers = odict()
94
+ self.layers = OrderedDict()
95
95
  layers_conf = deepcopy(self._layers_conf_dict())
96
96
  if layers_conf is None:
97
97
  return
@@ -178,7 +178,7 @@ class ProxyConfiguration(object):
178
178
  # layer list without root -> wrap in root layer
179
179
  layers_conf = dict(title=None, layers=layers_conf)
180
180
 
181
- if len(set(layers_conf.keys()) &
181
+ if len(layers_conf.keys() &
182
182
  set('layers name title sources'.split())) < 2:
183
183
  # looks like unordered legacy config
184
184
  layers_conf = self._legacy_layers_conf_dict()
@@ -190,7 +190,7 @@ class ProxyConfiguration(object):
190
190
  Returns a dictionary with all layers that have a name and sources.
191
191
  Flattens the layer tree.
192
192
  """
193
- layers = _layers if _layers is not None else odict()
193
+ layers = _layers if _layers is not None else OrderedDict()
194
194
 
195
195
  if 'layers' in layers_conf:
196
196
  for layer in layers_conf.pop('layers'):
@@ -245,7 +245,7 @@ def list_of_dicts_to_ordered_dict(dictlist):
245
245
  [('a', 1), ('b', 2), ('c', 3)]
246
246
  """
247
247
 
248
- result = odict()
248
+ result = OrderedDict()
249
249
  for d in dictlist:
250
250
  for k, v in d.items():
251
251
  result[k] = v
@@ -274,7 +274,7 @@ class ConfigurationBase(object):
274
274
  class GridConfiguration(ConfigurationBase):
275
275
  @memoize
276
276
  def tile_grid(self):
277
- from mapproxy.grid import tile_grid
277
+ from mapproxy.grid.tile_grid import tile_grid
278
278
 
279
279
  if 'base' in self.conf:
280
280
  base_grid_name = self.conf['base']
@@ -637,7 +637,7 @@ class SourceConfiguration(ConfigurationBase):
637
637
 
638
638
 
639
639
  def resolution_range(conf):
640
- from mapproxy.grid import resolution_range as _resolution_range
640
+ from mapproxy.grid.resolutions import resolution_range as _resolution_range
641
641
  if 'min_res' in conf or 'max_res' in conf:
642
642
  return _resolution_range(min_res=conf.get('min_res'),
643
643
  max_res=conf.get('max_res'))
@@ -1355,9 +1355,16 @@ class CacheConfiguration(ConfigurationBase):
1355
1355
  global_key='cache.s3.use_http_get'
1356
1356
  )
1357
1357
 
1358
+ include_grid_name = self.context.globals.get_value('cache.include_grid_name', self.conf,
1359
+ global_key='cache.s3.include_grid_name')
1360
+
1358
1361
  directory_layout = self.conf['cache'].get('directory_layout', 'tms')
1359
1362
 
1360
1363
  base_path = self.conf['cache'].get('directory', None)
1364
+
1365
+ if include_grid_name and base_path:
1366
+ base_path = os.path.join(base_path, grid_conf.tile_grid().name)
1367
+
1361
1368
  if base_path is None:
1362
1369
  base_path = os.path.join(self.conf['name'], grid_conf.tile_grid().name)
1363
1370
 
@@ -2159,7 +2166,6 @@ class ServiceConfiguration(ConfigurationBase):
2159
2166
  creator = getattr(self, service_name + '_service', None)
2160
2167
  if not creator:
2161
2168
  # If not a known service, try to use the plugin mechanism
2162
- global plugin_services
2163
2169
  creator = plugin_services.get(service_name, None)
2164
2170
  if not creator:
2165
2171
  raise ValueError('unknown service: %s' % service_name)
@@ -2181,7 +2187,7 @@ class ServiceConfiguration(ConfigurationBase):
2181
2187
  return services
2182
2188
 
2183
2189
  def tile_layers(self, conf, use_grid_names=False):
2184
- layers = odict()
2190
+ layers = OrderedDict()
2185
2191
  for layer_name, layer_conf in self.context.layers.items():
2186
2192
  for tile_layer in layer_conf.tile_layers(grid_name_as_path=use_grid_names):
2187
2193
  if not tile_layer:
@@ -2231,7 +2237,7 @@ class ServiceConfiguration(ConfigurationBase):
2231
2237
  max_tile_age *= 60 * 60 # seconds
2232
2238
 
2233
2239
  info_formats = conf.get('featureinfo_formats', [])
2234
- info_formats = odict((f['suffix'], f['mimetype']) for f in info_formats)
2240
+ info_formats = OrderedDict((f['suffix'], f['mimetype']) for f in info_formats)
2235
2241
 
2236
2242
  if kvp is None and restful is None:
2237
2243
  kvp = restful = True
@@ -2284,7 +2290,7 @@ class ServiceConfiguration(ConfigurationBase):
2284
2290
  global_key='wms.concurrent_layer_renderer')
2285
2291
  image_formats_names = self.context.globals.get_value('image_formats', conf,
2286
2292
  global_key='wms.image_formats')
2287
- image_formats = odict()
2293
+ image_formats = OrderedDict()
2288
2294
  for format in image_formats_names:
2289
2295
  opts = self.context.globals.image_options.image_opts({}, format)
2290
2296
  if opts.format in image_formats:
@@ -2326,7 +2332,7 @@ class ServiceConfiguration(ConfigurationBase):
2326
2332
  services = list(self.context.services.conf.keys())
2327
2333
  md = self.context.services.conf.get('wms', {}).get('md', {}).copy()
2328
2334
  md.update(conf.get('md', {}))
2329
- layers = odict()
2335
+ layers = OrderedDict()
2330
2336
  for layer_name, layer_conf in self.context.layers.items():
2331
2337
  lyr = layer_conf.wms_layer()
2332
2338
  if lyr:
@@ -2360,7 +2366,7 @@ class ServiceConfiguration(ConfigurationBase):
2360
2366
  # demo service only supports 1.1.1, use wms_111 as an indicator
2361
2367
  services.append('wms_111')
2362
2368
 
2363
- layers = odict(sorted(layers.items(), key=lambda x: x[1].name))
2369
+ layers = OrderedDict(sorted(layers.items(), key=lambda x: x[1].name))
2364
2370
  background = self.context.globals.get_value('background', conf)
2365
2371
 
2366
2372
  return DemoServer(
@@ -2409,6 +2415,10 @@ def load_configuration(mapproxy_conf, seed=False, ignore_warnings=True, renderd=
2409
2415
  for error in errors:
2410
2416
  log.warning(error)
2411
2417
 
2418
+ services = conf_dict.get('services')
2419
+ if services is not None and 'demo' in services:
2420
+ log.warning('Application has demo page enabled. It is recommended to disable this in production.')
2421
+
2412
2422
  return ProxyConfiguration(conf_dict, conf_base_dir=conf_base_dir, seed=seed,
2413
2423
  renderd=renderd)
2414
2424
 
@@ -170,6 +170,7 @@ cache_types = {
170
170
  'access_control_list': str(),
171
171
  'tile_lock_dir': str(),
172
172
  'use_http_get': bool(),
173
+ 'include_grid_name': bool(),
173
174
  }),
174
175
  'redis': combined(cache_commons, {
175
176
  'host': str(),