MapProxy 4.0.2__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 (527) hide show
  1. {mapproxy-4.0.2 → mapproxy-4.1.0}/CHANGES.txt +28 -0
  2. {mapproxy-4.0.2 → mapproxy-4.1.0}/COPYING.txt +0 -5
  3. {mapproxy-4.0.2 → mapproxy-4.1.0}/MapProxy.egg-info/PKG-INFO +30 -18
  4. {mapproxy-4.0.2 → mapproxy-4.1.0}/MapProxy.egg-info/SOURCES.txt +6 -2
  5. {mapproxy-4.0.2 → mapproxy-4.1.0}/PKG-INFO +30 -18
  6. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/caches.rst +3 -0
  7. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/couchdb.py +2 -2
  8. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/geopackage.py +5 -4
  9. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/mbtiles.py +1 -1
  10. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/tile.py +1 -1
  11. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/client/http.py +13 -10
  12. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/client/tile.py +1 -1
  13. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/client/wms.py +3 -1
  14. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config/loader.py +20 -13
  15. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config/spec.py +1 -0
  16. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/featureinfo.py +26 -33
  17. mapproxy-4.1.0/mapproxy/grid/__init__.py +92 -0
  18. mapproxy-4.1.0/mapproxy/grid/meta_grid.py +312 -0
  19. mapproxy-4.1.0/mapproxy/grid/resolutions.py +214 -0
  20. mapproxy-4.1.0/mapproxy/grid/tile_grid.py +514 -0
  21. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/merge.py +4 -1
  22. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/transform.py +2 -1
  23. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/layer.py +8 -3
  24. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/conf/geopackage.py +2 -1
  25. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/seed/cachelock.py +2 -1
  26. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/seed/config.py +9 -13
  27. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/seed/seeder.py +1 -1
  28. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/demo.py +3 -4
  29. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/tile.py +2 -2
  30. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/wms.py +16 -13
  31. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/wmts.py +6 -6
  32. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/source/mapnik.py +1 -1
  33. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/srs.py +3 -69
  34. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/http.py +1 -1
  35. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/mocker.py +2 -2
  36. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_s3.yaml +17 -0
  37. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_auth.py +1 -1
  38. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_geopackage.py +2 -2
  39. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_s3.py +26 -7
  40. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_dimensions.py +4 -4
  41. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_kml.py +1 -1
  42. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_legendgraphic.py +2 -0
  43. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_seed.py +18 -12
  44. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_wms.py +43 -76
  45. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_auth.py +1 -1
  46. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache.py +54 -53
  47. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_couchdb.py +1 -1
  48. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_geopackage.py +2 -2
  49. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_mbtile.py +1 -1
  50. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_s3.py +4 -4
  51. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_tile.py +3 -2
  52. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_client.py +3 -3
  53. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_conf_loader.py +7 -7
  54. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_decorate_img.py +4 -3
  55. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_featureinfo.py +18 -17
  56. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_geom.py +2 -1
  57. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_grid.py +6 -15
  58. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_request_wmts.py +3 -3
  59. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_seed.py +1 -2
  60. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_tiled_source.py +1 -1
  61. mapproxy-4.1.0/mapproxy/util/bbox.py +141 -0
  62. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/coverage.py +1 -1
  63. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/geom.py +1 -1
  64. mapproxy-4.1.0/mapproxy/util/sqlite3.py +28 -0
  65. {mapproxy-4.0.2 → mapproxy-4.1.0}/requirements-tests.txt +13 -12
  66. {mapproxy-4.0.2 → mapproxy-4.1.0}/setup.py +2 -1
  67. mapproxy-4.0.2/mapproxy/grid.py +0 -1199
  68. mapproxy-4.0.2/mapproxy/util/ext/odict.py +0 -321
  69. {mapproxy-4.0.2 → mapproxy-4.1.0}/AUTHORS.txt +0 -0
  70. {mapproxy-4.0.2 → mapproxy-4.1.0}/LICENSE.txt +0 -0
  71. {mapproxy-4.0.2 → mapproxy-4.1.0}/MANIFEST.in +0 -0
  72. {mapproxy-4.0.2 → mapproxy-4.1.0}/MapProxy.egg-info/dependency_links.txt +0 -0
  73. {mapproxy-4.0.2 → mapproxy-4.1.0}/MapProxy.egg-info/entry_points.txt +0 -0
  74. {mapproxy-4.0.2 → mapproxy-4.1.0}/MapProxy.egg-info/not-zip-safe +0 -0
  75. {mapproxy-4.0.2 → mapproxy-4.1.0}/MapProxy.egg-info/requires.txt +0 -0
  76. {mapproxy-4.0.2 → mapproxy-4.1.0}/MapProxy.egg-info/top_level.txt +0 -0
  77. {mapproxy-4.0.2 → mapproxy-4.1.0}/README.md +0 -0
  78. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/GM.txt +0 -0
  79. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/_static/logo.png +0 -0
  80. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/_static/logo_title.png +0 -0
  81. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/_static/mapproxy.css +0 -0
  82. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/_templates/versions.html +0 -0
  83. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/auth.rst +0 -0
  84. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/caching_layer_dimensions.rst +0 -0
  85. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/conf.py +0 -0
  86. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/configuration.rst +0 -0
  87. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/configuration_examples.rst +0 -0
  88. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/coverages.rst +0 -0
  89. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/decorate_img.rst +0 -0
  90. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/deployment.rst +0 -0
  91. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/development.rst +0 -0
  92. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/bicubic.png +0 -0
  93. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/bilinear.png +0 -0
  94. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/labeling-dynamic.png +0 -0
  95. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/labeling-meta-buffer.png +0 -0
  96. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/labeling-metatiling-buffer.png +0 -0
  97. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/labeling-metatiling.png +0 -0
  98. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/labeling-no-clip.png +0 -0
  99. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/labeling-no-placement.png +0 -0
  100. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/labeling-partial-false.png +0 -0
  101. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/labeling-repeated.png +0 -0
  102. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/mapnik-webmerc-hq.png +0 -0
  103. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/mapnik-webmerc.png +0 -0
  104. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/mapproxy-demo.png +0 -0
  105. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/imgs/nearest.png +0 -0
  106. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/index.rst +0 -0
  107. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/inspire.rst +0 -0
  108. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/install.rst +0 -0
  109. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/install_docker.rst +0 -0
  110. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/install_osgeo4w.rst +0 -0
  111. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/install_windows.rst +0 -0
  112. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/labeling.rst +0 -0
  113. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/mapproxy_util.rst +0 -0
  114. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/mapproxy_util_autoconfig.rst +0 -0
  115. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/ogc_api.rst +0 -0
  116. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/plugins.rst +0 -0
  117. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/seed.rst +0 -0
  118. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/services.rst +0 -0
  119. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/sources.rst +0 -0
  120. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/tutorial.rst +0 -0
  121. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/tutorial.yaml +0 -0
  122. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/yaml/cache_conf.yaml +0 -0
  123. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/yaml/grid_conf.yaml +0 -0
  124. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/yaml/merged_conf.yaml +0 -0
  125. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/yaml/meta_conf.yaml +0 -0
  126. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/yaml/seed.yaml +0 -0
  127. {mapproxy-4.0.2 → mapproxy-4.1.0}/doc/yaml/simple_conf.yaml +0 -0
  128. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/__init__.py +0 -0
  129. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/__init__.py +0 -0
  130. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/azureblob.py +0 -0
  131. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/base.py +0 -0
  132. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/compact.py +0 -0
  133. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/dummy.py +0 -0
  134. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/file.py +0 -0
  135. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/legend.py +0 -0
  136. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/meta.py +0 -0
  137. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/path.py +0 -0
  138. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/redis.py +0 -0
  139. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/renderd.py +0 -0
  140. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/cache/s3.py +0 -0
  141. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/client/__init__.py +0 -0
  142. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/client/arcgis.py +0 -0
  143. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/client/cgi.py +0 -0
  144. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/client/log.py +0 -0
  145. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/compat/__init__.py +0 -0
  146. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/compat/image.py +0 -0
  147. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config/__init__.py +0 -0
  148. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config/config-schema.json +0 -0
  149. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config/config.py +0 -0
  150. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config/coverage.py +0 -0
  151. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config/defaults.py +0 -0
  152. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config/validator.py +0 -0
  153. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config_template/__init__.py +0 -0
  154. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config_template/base_config/config.wsgi +0 -0
  155. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config_template/base_config/full_example.yaml +0 -0
  156. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config_template/base_config/full_seed_example.yaml +0 -0
  157. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config_template/base_config/log.ini +0 -0
  158. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config_template/base_config/mapproxy.yaml +0 -0
  159. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/config_template/base_config/seed.yaml +0 -0
  160. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/exception.py +0 -0
  161. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/__init__.py +0 -0
  162. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/fonts/DejaVuSans.ttf +0 -0
  163. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
  164. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/fonts/LICENSE +0 -0
  165. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/fonts/__init__.py +0 -0
  166. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/mask.py +0 -0
  167. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/message.py +0 -0
  168. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/opts.py +0 -0
  169. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/image/tile.py +0 -0
  170. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/multiapp.py +0 -0
  171. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/proj.py +0 -0
  172. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/request/__init__.py +0 -0
  173. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/request/arcgis.py +0 -0
  174. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/request/base.py +0 -0
  175. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/request/tile.py +0 -0
  176. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/request/wms/__init__.py +0 -0
  177. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/request/wms/exception.py +0 -0
  178. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/request/wmts.py +0 -0
  179. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/response.py +0 -0
  180. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/__init__.py +0 -0
  181. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/conf/__init__.py +0 -0
  182. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/conf/app.py +0 -0
  183. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/conf/caches.py +0 -0
  184. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/conf/layers.py +0 -0
  185. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/conf/seeds.py +0 -0
  186. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/conf/sources.py +0 -0
  187. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/conf/utils.py +0 -0
  188. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/defrag.py +0 -0
  189. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/export.py +0 -0
  190. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/grids.py +0 -0
  191. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/scales.py +0 -0
  192. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/util.py +0 -0
  193. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/script/wms_capabilities.py +0 -0
  194. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/seed/__init__.py +0 -0
  195. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/seed/cleanup.py +0 -0
  196. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/seed/script.py +0 -0
  197. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/seed/spec.py +0 -0
  198. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/seed/util.py +0 -0
  199. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/__init__.py +0 -0
  200. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/base.py +0 -0
  201. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/kml.py +0 -0
  202. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/ows.py +0 -0
  203. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/template_helper.py +0 -0
  204. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/capabilities_demo.html +0 -0
  205. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/demo.html +0 -0
  206. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/openlayers-demo.cfg +0 -0
  207. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/blank.gif +0 -0
  208. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
  209. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
  210. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
  211. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
  212. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
  213. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
  214. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
  215. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/logo.png +0 -0
  216. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/ol.css +0 -0
  217. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/ol.js +0 -0
  218. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/proj4.min.js +0 -0
  219. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/proj4defs.js +0 -0
  220. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/site.css +0 -0
  221. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
  222. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/theme/default/google.css +0 -0
  223. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/theme/default/ie6-style.css +0 -0
  224. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static/theme/default/style.css +0 -0
  225. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/static.html +0 -0
  226. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/tms_demo.html +0 -0
  227. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/wms_demo.html +0 -0
  228. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/demo/wmts_demo.html +0 -0
  229. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/ows_exception.xml +0 -0
  230. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/tms_capabilities.xml +0 -0
  231. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/tms_exception.xml +0 -0
  232. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/tms_root_resource.xml +0 -0
  233. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/tms_tilemap_capabilities.xml +0 -0
  234. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wms100capabilities.xml +0 -0
  235. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wms100exception.xml +0 -0
  236. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wms110capabilities.xml +0 -0
  237. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wms110exception.xml +0 -0
  238. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wms111capabilities.xml +0 -0
  239. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wms111exception.xml +0 -0
  240. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wms130capabilities.xml +0 -0
  241. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wms130exception.xml +0 -0
  242. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wmts100capabilities.xml +0 -0
  243. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/service/templates/wmts100exception.xml +0 -0
  244. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/source/__init__.py +0 -0
  245. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/source/arcgis.py +0 -0
  246. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/source/error.py +0 -0
  247. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/source/tile.py +0 -0
  248. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/source/wms.py +0 -0
  249. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/template.py +0 -0
  250. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/__init__.py +0 -0
  251. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/conftest.py +0 -0
  252. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/helper.py +0 -0
  253. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/image.py +0 -0
  254. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/common.xsd +0 -0
  255. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +0 -0
  256. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +0 -0
  257. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +0 -0
  258. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +0 -0
  259. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +0 -0
  260. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +0 -0
  261. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +0 -0
  262. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +0 -0
  263. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +0 -0
  264. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +0 -0
  265. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +0 -0
  266. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +0 -0
  267. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +0 -0
  268. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +0 -0
  269. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +0 -0
  270. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +0 -0
  271. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +0 -0
  272. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +0 -0
  273. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +0 -0
  274. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +0 -0
  275. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +0 -0
  276. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +0 -0
  277. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +0 -0
  278. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/common/1.0/network.xsd +0 -0
  279. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +0 -0
  280. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +0 -0
  281. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +0 -0
  282. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +0 -0
  283. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/kml/2.2.0/xAL.xsd +0 -0
  284. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +0 -0
  285. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +0 -0
  286. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +0 -0
  287. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +0 -0
  288. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +0 -0
  289. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +0 -0
  290. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +0 -0
  291. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +0 -0
  292. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +0 -0
  293. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +0 -0
  294. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +0 -0
  295. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +0 -0
  296. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +0 -0
  297. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +0 -0
  298. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +0 -0
  299. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +0 -0
  300. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +0 -0
  301. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +0 -0
  302. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +0 -0
  303. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +0 -0
  304. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +0 -0
  305. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +0 -0
  306. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +0 -0
  307. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +0 -0
  308. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +0 -0
  309. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  310. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  311. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  312. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +0 -0
  313. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +0 -0
  314. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +0 -0
  315. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +0 -0
  316. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +0 -0
  317. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +0 -0
  318. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +0 -0
  319. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +0 -0
  320. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +0 -0
  321. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +0 -0
  322. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  323. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  324. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  325. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +0 -0
  326. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +0 -0
  327. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +0 -0
  328. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +0 -0
  329. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/ReadMe.txt +0 -0
  330. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmts.xsd +0 -0
  331. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +0 -0
  332. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +0 -0
  333. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +0 -0
  334. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +0 -0
  335. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +0 -0
  336. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +0 -0
  337. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +0 -0
  338. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +0 -0
  339. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +0 -0
  340. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +0 -0
  341. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/schemas/xml.xsd +0 -0
  342. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/__init__.py +0 -0
  343. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/arcgis.yaml +0 -0
  344. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/auth.yaml +0 -0
  345. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache.mbtiles +0 -0
  346. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_azureblob.yaml +0 -0
  347. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_band_merge.yaml +0 -0
  348. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +0 -0
  349. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_coverage.yaml +0 -0
  350. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
  351. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
  352. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
  353. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_geopackage.yaml +0 -0
  354. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_grid_names.yaml +0 -0
  355. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_mbtiles.yaml +0 -0
  356. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/cache_source.yaml +0 -0
  357. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/combined_sources.yaml +0 -0
  358. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/coverage.yaml +0 -0
  359. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/demo.yaml +0 -0
  360. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/dimension.yaml +0 -0
  361. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/disable_storage.yaml +0 -0
  362. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/empty_ogrdata.geojson +0 -0
  363. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/formats.yaml +0 -0
  364. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/inspire.yaml +0 -0
  365. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/inspire_full.yaml +0 -0
  366. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/kml_layer.yaml +0 -0
  367. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/layer.yaml +0 -0
  368. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/layergroups.yaml +0 -0
  369. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/layergroups_root.yaml +0 -0
  370. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/legendgraphic.yaml +0 -0
  371. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/mapnik_source.yaml +0 -0
  372. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/mapproxy_export.yaml +0 -0
  373. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/mapserver.yaml +0 -0
  374. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/minimal_cgi.py +0 -0
  375. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/mixed_mode.yaml +0 -0
  376. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/multi_cache_layers.yaml +0 -0
  377. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/multiapp1.yaml +0 -0
  378. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/multiapp2.yaml +0 -0
  379. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/renderd_client.yaml +0 -0
  380. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/scalehints.yaml +0 -0
  381. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seed.yaml +0 -0
  382. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seed_mapproxy.yaml +0 -0
  383. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seed_timeouts.yaml +0 -0
  384. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +0 -0
  385. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/seedonly.yaml +0 -0
  386. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/sld.yaml +0 -0
  387. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/source_errors.yaml +0 -0
  388. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/source_errors_raise.yaml +0 -0
  389. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/tileservice_origin.yaml +0 -0
  390. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/tileservice_refresh.yaml +0 -0
  391. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/tilesource_minmax_res.yaml +0 -0
  392. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util-conf-base-grids.yaml +0 -0
  393. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util-conf-overwrite.yaml +0 -0
  394. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +0 -0
  395. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util_grids.yaml +0 -0
  396. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util_wms_capabilities111.xml +0 -0
  397. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util_wms_capabilities130.xml +0 -0
  398. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +0 -0
  399. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/watermark.yaml +0 -0
  400. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/wms_srs_extent.yaml +0 -0
  401. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/wms_versions.yaml +0 -0
  402. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/wmts.yaml +0 -0
  403. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/wmts_dimensions.yaml +0 -0
  404. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/xslt_featureinfo.yaml +0 -0
  405. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +0 -0
  406. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_arcgis.py +0 -0
  407. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_behind_proxy.py +0 -0
  408. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_bulk_meta_tiles.py +0 -0
  409. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_azureblob.py +0 -0
  410. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_band_merge.py +0 -0
  411. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_coverage.py +0 -0
  412. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_grid_names.py +0 -0
  413. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_mbtiles.py +0 -0
  414. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_cache_source.py +0 -0
  415. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_combined_sources.py +0 -0
  416. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_coverage.py +0 -0
  417. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_decorate_img.py +0 -0
  418. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_demo.py +0 -0
  419. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_demo_with_extra_service.py +0 -0
  420. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_disable_storage.py +0 -0
  421. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_formats.py +0 -0
  422. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_inspire_vs.py +0 -0
  423. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_layergroups.py +0 -0
  424. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_mapnik.py +0 -0
  425. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_mapserver.py +0 -0
  426. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_mixed_mode_format.py +0 -0
  427. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_multi_cache_layers.py +0 -0
  428. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_multiapp.py +0 -0
  429. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_refresh.py +0 -0
  430. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_renderd_client.py +0 -0
  431. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_response_headers.py +0 -0
  432. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_scalehints.py +0 -0
  433. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_seed_only.py +0 -0
  434. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_sld.py +0 -0
  435. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_source_errors.py +0 -0
  436. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_tilesource_minmax_res.py +0 -0
  437. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_tms.py +0 -0
  438. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_tms_origin.py +0 -0
  439. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_util_conf.py +0 -0
  440. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_util_export.py +0 -0
  441. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_util_grids.py +0 -0
  442. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_util_wms_capabilities.py +0 -0
  443. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_watermark.py +0 -0
  444. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_wms_srs_extent.py +0 -0
  445. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_wms_version.py +0 -0
  446. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_wmsc.py +0 -0
  447. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_wmts.py +0 -0
  448. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_wmts_dimensions.py +0 -0
  449. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_wmts_restful.py +0 -0
  450. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/system/test_xslt_featureinfo.py +0 -0
  451. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/test_http_helper.py +0 -0
  452. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/__init__.py +0 -0
  453. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/epsg +0 -0
  454. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/polygons/polygons.dbf +0 -0
  455. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/polygons/polygons.shp +0 -0
  456. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/polygons/polygons.shx +0 -0
  457. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_async.py +0 -0
  458. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_azureblob.py +0 -0
  459. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_compact.py +0 -0
  460. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_cache_redis.py +0 -0
  461. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_client_arcgis.py +0 -0
  462. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_client_cgi.py +0 -0
  463. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_collections.py +0 -0
  464. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_concat_legends.py +0 -0
  465. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_conf_validator.py +0 -0
  466. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_config.py +0 -0
  467. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_exceptions.py +0 -0
  468. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_file_lock_load.py +0 -0
  469. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_fs.py +0 -0
  470. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_image.py +0 -0
  471. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_image_mask.py +0 -0
  472. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_image_messages.py +0 -0
  473. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_image_options.py +0 -0
  474. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_isodate.py +0 -0
  475. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_multiapp.py +0 -0
  476. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_ogr_reader.py +0 -0
  477. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_request.py +0 -0
  478. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_response.py +0 -0
  479. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_seed_cachelock.py +0 -0
  480. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_srs.py +0 -0
  481. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_tilefilter.py +0 -0
  482. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_times.py +0 -0
  483. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_timeutils.py +0 -0
  484. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_util_conf_utils.py +0 -0
  485. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_utils.py +0 -0
  486. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_wms_capabilities.py +0 -0
  487. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_wms_layer.py +0 -0
  488. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/test/unit/test_yaml.py +0 -0
  489. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/tilefilter.py +0 -0
  490. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/__init__.py +0 -0
  491. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/async_.py +0 -0
  492. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/collections.py +0 -0
  493. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/escape.py +0 -0
  494. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/__init__.py +0 -0
  495. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/__init__.py +0 -0
  496. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/spec.py +0 -0
  497. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/test/__init__.py +0 -0
  498. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/test/test_validator.py +0 -0
  499. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/dictspec/validator.py +0 -0
  500. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/local.py +0 -0
  501. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/lockfile.py +0 -0
  502. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/serving.py +0 -0
  503. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/tempita/__init__.py +0 -0
  504. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/tempita/_looper.py +0 -0
  505. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/tempita/string_utils.py +0 -0
  506. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/__init__.py +0 -0
  507. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/duration.py +0 -0
  508. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/parse.py +0 -0
  509. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
  510. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/test_parse.py +0 -0
  511. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/test_util.py +0 -0
  512. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/wms-example-111.xml +0 -0
  513. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/wms-example-130.xml +0 -0
  514. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/wms-large-111.xml +0 -0
  515. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +0 -0
  516. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ext/wmsparse/util.py +0 -0
  517. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/fs.py +0 -0
  518. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/lib.py +0 -0
  519. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/lock.py +0 -0
  520. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/ogr.py +0 -0
  521. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/py.py +0 -0
  522. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/times.py +0 -0
  523. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/util/yaml.py +0 -0
  524. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/version.py +0 -0
  525. {mapproxy-4.0.2 → mapproxy-4.1.0}/mapproxy/wsgiapp.py +0 -0
  526. {mapproxy-4.0.2 → mapproxy-4.1.0}/pyproject.toml +0 -0
  527. {mapproxy-4.0.2 → mapproxy-4.1.0}/setup.cfg +0 -0
@@ -1,3 +1,31 @@
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
+
1
29
  4.0.2 2025-04-10
2
30
  ~~~~~~~~~~~~~~~~
3
31
 
@@ -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.2
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,34 @@ 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
+
56
85
  4.0.2 2025-04-10
57
86
  ~~~~~~~~~~~~~~~~
58
87
 
@@ -147,23 +176,6 @@ Fixes:
147
176
  - The permission handling for file locks now also sets permissions on the files not just on the directories.
148
177
 
149
178
 
150
- 3.1.0 2024-10-22
151
- ~~~~~~~~~~~~~~~~
152
-
153
- Improvements:
154
-
155
- - Add new config parameters `file_permissions` and `directory_permissions` to set file and directory
156
- permissions on newly created cache files and directories.
157
-
158
- Maintenance:
159
-
160
- - Dependency updates
161
-
162
- Fixes:
163
-
164
- - Fix transparency in TMS demo page.
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,6 +485,7 @@ 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
487
491
  mapproxy/util/escape.py
@@ -491,12 +495,12 @@ mapproxy/util/lib.py
491
495
  mapproxy/util/lock.py
492
496
  mapproxy/util/ogr.py
493
497
  mapproxy/util/py.py
498
+ mapproxy/util/sqlite3.py
494
499
  mapproxy/util/times.py
495
500
  mapproxy/util/yaml.py
496
501
  mapproxy/util/ext/__init__.py
497
502
  mapproxy/util/ext/local.py
498
503
  mapproxy/util/ext/lockfile.py
499
- mapproxy/util/ext/odict.py
500
504
  mapproxy/util/ext/serving.py
501
505
  mapproxy/util/ext/dictspec/__init__.py
502
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.2
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,34 @@ 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
+
56
85
  4.0.2 2025-04-10
57
86
  ~~~~~~~~~~~~~~~~
58
87
 
@@ -147,23 +176,6 @@ Fixes:
147
176
  - The permission handling for file locks now also sets permissions on the files not just on the directories.
148
177
 
149
178
 
150
- 3.1.0 2024-10-22
151
- ~~~~~~~~~~~~~~~~
152
-
153
- Improvements:
154
-
155
- - Add new config parameters `file_permissions` and `directory_permissions` to set file and directory
156
- permissions on newly created cache files and directories.
157
-
158
- Maintenance:
159
-
160
- - Dependency updates
161
-
162
- Fixes:
163
-
164
- - Fix transparency in TMS demo page.
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
 
@@ -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
 
@@ -2180,7 +2187,7 @@ class ServiceConfiguration(ConfigurationBase):
2180
2187
  return services
2181
2188
 
2182
2189
  def tile_layers(self, conf, use_grid_names=False):
2183
- layers = odict()
2190
+ layers = OrderedDict()
2184
2191
  for layer_name, layer_conf in self.context.layers.items():
2185
2192
  for tile_layer in layer_conf.tile_layers(grid_name_as_path=use_grid_names):
2186
2193
  if not tile_layer:
@@ -2230,7 +2237,7 @@ class ServiceConfiguration(ConfigurationBase):
2230
2237
  max_tile_age *= 60 * 60 # seconds
2231
2238
 
2232
2239
  info_formats = conf.get('featureinfo_formats', [])
2233
- 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)
2234
2241
 
2235
2242
  if kvp is None and restful is None:
2236
2243
  kvp = restful = True
@@ -2283,7 +2290,7 @@ class ServiceConfiguration(ConfigurationBase):
2283
2290
  global_key='wms.concurrent_layer_renderer')
2284
2291
  image_formats_names = self.context.globals.get_value('image_formats', conf,
2285
2292
  global_key='wms.image_formats')
2286
- image_formats = odict()
2293
+ image_formats = OrderedDict()
2287
2294
  for format in image_formats_names:
2288
2295
  opts = self.context.globals.image_options.image_opts({}, format)
2289
2296
  if opts.format in image_formats:
@@ -2325,7 +2332,7 @@ class ServiceConfiguration(ConfigurationBase):
2325
2332
  services = list(self.context.services.conf.keys())
2326
2333
  md = self.context.services.conf.get('wms', {}).get('md', {}).copy()
2327
2334
  md.update(conf.get('md', {}))
2328
- layers = odict()
2335
+ layers = OrderedDict()
2329
2336
  for layer_name, layer_conf in self.context.layers.items():
2330
2337
  lyr = layer_conf.wms_layer()
2331
2338
  if lyr:
@@ -2359,7 +2366,7 @@ class ServiceConfiguration(ConfigurationBase):
2359
2366
  # demo service only supports 1.1.1, use wms_111 as an indicator
2360
2367
  services.append('wms_111')
2361
2368
 
2362
- layers = odict(sorted(layers.items(), key=lambda x: x[1].name))
2369
+ layers = OrderedDict(sorted(layers.items(), key=lambda x: x[1].name))
2363
2370
  background = self.context.globals.get_value('background', conf)
2364
2371
 
2365
2372
  return DemoServer(
@@ -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(),