MapProxy 1.16.1__py3-none-any.whl

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 (458) hide show
  1. mapproxy/__init__.py +0 -0
  2. mapproxy/cache/__init__.py +36 -0
  3. mapproxy/cache/azureblob.py +145 -0
  4. mapproxy/cache/base.py +111 -0
  5. mapproxy/cache/compact.py +664 -0
  6. mapproxy/cache/couchdb.py +295 -0
  7. mapproxy/cache/dummy.py +34 -0
  8. mapproxy/cache/file.py +185 -0
  9. mapproxy/cache/geopackage.py +609 -0
  10. mapproxy/cache/legend.py +83 -0
  11. mapproxy/cache/mbtiles.py +392 -0
  12. mapproxy/cache/meta.py +78 -0
  13. mapproxy/cache/path.py +250 -0
  14. mapproxy/cache/redis.py +88 -0
  15. mapproxy/cache/renderd.py +95 -0
  16. mapproxy/cache/riak.py +202 -0
  17. mapproxy/cache/s3.py +177 -0
  18. mapproxy/cache/tile.py +699 -0
  19. mapproxy/client/__init__.py +0 -0
  20. mapproxy/client/arcgis.py +79 -0
  21. mapproxy/client/cgi.py +139 -0
  22. mapproxy/client/http.py +315 -0
  23. mapproxy/client/log.py +33 -0
  24. mapproxy/client/tile.py +150 -0
  25. mapproxy/client/wms.py +254 -0
  26. mapproxy/compat/__init__.py +46 -0
  27. mapproxy/compat/image.py +79 -0
  28. mapproxy/compat/itertools.py +29 -0
  29. mapproxy/compat/modules.py +13 -0
  30. mapproxy/config/__init__.py +22 -0
  31. mapproxy/config/config.py +201 -0
  32. mapproxy/config/coverage.py +107 -0
  33. mapproxy/config/defaults.py +98 -0
  34. mapproxy/config/loader.py +2286 -0
  35. mapproxy/config/spec.py +644 -0
  36. mapproxy/config/validator.py +239 -0
  37. mapproxy/config_template/__init__.py +0 -0
  38. mapproxy/config_template/base_config/config.wsgi +10 -0
  39. mapproxy/config_template/base_config/full_example.yaml +593 -0
  40. mapproxy/config_template/base_config/full_seed_example.yaml +79 -0
  41. mapproxy/config_template/base_config/log.ini +35 -0
  42. mapproxy/config_template/base_config/mapproxy.yaml +60 -0
  43. mapproxy/config_template/base_config/seed.yaml +27 -0
  44. mapproxy/exception.py +142 -0
  45. mapproxy/featureinfo.py +252 -0
  46. mapproxy/grid.py +1170 -0
  47. mapproxy/image/__init__.py +536 -0
  48. mapproxy/image/fonts/DejaVuSans.ttf +0 -0
  49. mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
  50. mapproxy/image/fonts/LICENSE +99 -0
  51. mapproxy/image/fonts/__init__.py +0 -0
  52. mapproxy/image/mask.py +75 -0
  53. mapproxy/image/merge.py +316 -0
  54. mapproxy/image/message.py +347 -0
  55. mapproxy/image/opts.py +182 -0
  56. mapproxy/image/tile.py +167 -0
  57. mapproxy/image/transform.py +350 -0
  58. mapproxy/layer.py +470 -0
  59. mapproxy/multiapp.py +231 -0
  60. mapproxy/proj.py +302 -0
  61. mapproxy/request/__init__.py +18 -0
  62. mapproxy/request/arcgis.py +259 -0
  63. mapproxy/request/base.py +476 -0
  64. mapproxy/request/tile.py +128 -0
  65. mapproxy/request/wms/__init__.py +793 -0
  66. mapproxy/request/wms/exception.py +99 -0
  67. mapproxy/request/wmts.py +436 -0
  68. mapproxy/response.py +237 -0
  69. mapproxy/script/__init__.py +0 -0
  70. mapproxy/script/conf/__init__.py +0 -0
  71. mapproxy/script/conf/app.py +195 -0
  72. mapproxy/script/conf/caches.py +45 -0
  73. mapproxy/script/conf/layers.py +54 -0
  74. mapproxy/script/conf/seeds.py +37 -0
  75. mapproxy/script/conf/sources.py +86 -0
  76. mapproxy/script/conf/utils.py +143 -0
  77. mapproxy/script/defrag.py +184 -0
  78. mapproxy/script/export.py +333 -0
  79. mapproxy/script/grids.py +188 -0
  80. mapproxy/script/scales.py +126 -0
  81. mapproxy/script/util.py +406 -0
  82. mapproxy/script/wms_capabilities.py +152 -0
  83. mapproxy/seed/__init__.py +0 -0
  84. mapproxy/seed/cachelock.py +121 -0
  85. mapproxy/seed/cleanup.py +187 -0
  86. mapproxy/seed/config.py +469 -0
  87. mapproxy/seed/script.py +388 -0
  88. mapproxy/seed/seeder.py +538 -0
  89. mapproxy/seed/spec.py +64 -0
  90. mapproxy/seed/util.py +254 -0
  91. mapproxy/service/__init__.py +14 -0
  92. mapproxy/service/base.py +46 -0
  93. mapproxy/service/demo.py +356 -0
  94. mapproxy/service/kml.py +331 -0
  95. mapproxy/service/ows.py +38 -0
  96. mapproxy/service/template_helper.py +53 -0
  97. mapproxy/service/templates/demo/capabilities_demo.html +16 -0
  98. mapproxy/service/templates/demo/demo.html +181 -0
  99. mapproxy/service/templates/demo/openlayers-demo.cfg +16 -0
  100. mapproxy/service/templates/demo/static/img/blank.gif +0 -0
  101. mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
  102. mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
  103. mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
  104. mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
  105. mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
  106. mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
  107. mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
  108. mapproxy/service/templates/demo/static/logo.png +0 -0
  109. mapproxy/service/templates/demo/static/ol.css +345 -0
  110. mapproxy/service/templates/demo/static/ol.js +4 -0
  111. mapproxy/service/templates/demo/static/proj4.min.js +1 -0
  112. mapproxy/service/templates/demo/static/proj4defs.js +1 -0
  113. mapproxy/service/templates/demo/static/site.css +137 -0
  114. mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
  115. mapproxy/service/templates/demo/static/theme/default/google.css +17 -0
  116. mapproxy/service/templates/demo/static/theme/default/ie6-style.css +10 -0
  117. mapproxy/service/templates/demo/static/theme/default/style.css +482 -0
  118. mapproxy/service/templates/demo/static.html +34 -0
  119. mapproxy/service/templates/demo/tms_demo.html +103 -0
  120. mapproxy/service/templates/demo/wms_demo.html +140 -0
  121. mapproxy/service/templates/demo/wmts_demo.html +110 -0
  122. mapproxy/service/templates/tms_capabilities.xml +13 -0
  123. mapproxy/service/templates/tms_exception.xml +4 -0
  124. mapproxy/service/templates/tms_root_resource.xml +7 -0
  125. mapproxy/service/templates/tms_tilemap_capabilities.xml +14 -0
  126. mapproxy/service/templates/wms100capabilities.xml +112 -0
  127. mapproxy/service/templates/wms100exception.xml +4 -0
  128. mapproxy/service/templates/wms110capabilities.xml +152 -0
  129. mapproxy/service/templates/wms110exception.xml +5 -0
  130. mapproxy/service/templates/wms111capabilities.xml +183 -0
  131. mapproxy/service/templates/wms111exception.xml +5 -0
  132. mapproxy/service/templates/wms130capabilities.xml +326 -0
  133. mapproxy/service/templates/wms130exception.xml +8 -0
  134. mapproxy/service/templates/wmts100capabilities.xml +155 -0
  135. mapproxy/service/templates/wmts100exception.xml +9 -0
  136. mapproxy/service/tile.py +536 -0
  137. mapproxy/service/wms.py +851 -0
  138. mapproxy/service/wmts.py +381 -0
  139. mapproxy/source/__init__.py +75 -0
  140. mapproxy/source/arcgis.py +39 -0
  141. mapproxy/source/error.py +39 -0
  142. mapproxy/source/mapnik.py +259 -0
  143. mapproxy/source/tile.py +96 -0
  144. mapproxy/source/wms.py +270 -0
  145. mapproxy/srs.py +726 -0
  146. mapproxy/template.py +54 -0
  147. mapproxy/test/__init__.py +0 -0
  148. mapproxy/test/conftest.py +7 -0
  149. mapproxy/test/helper.py +247 -0
  150. mapproxy/test/http.py +494 -0
  151. mapproxy/test/image.py +210 -0
  152. mapproxy/test/mocker.py +2268 -0
  153. mapproxy/test/schemas/inspire/common/1.0/common.xsd +1461 -0
  154. mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +108 -0
  155. mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +108 -0
  156. mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +108 -0
  157. mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +108 -0
  158. mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +155 -0
  159. mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +108 -0
  160. mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +108 -0
  161. mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +108 -0
  162. mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +108 -0
  163. mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +109 -0
  164. mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +108 -0
  165. mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +108 -0
  166. mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +108 -0
  167. mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +108 -0
  168. mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +108 -0
  169. mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +108 -0
  170. mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +108 -0
  171. mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +108 -0
  172. mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +108 -0
  173. mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +108 -0
  174. mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +108 -0
  175. mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +108 -0
  176. mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +108 -0
  177. mapproxy/test/schemas/inspire/common/1.0/network.xsd +521 -0
  178. mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +19 -0
  179. mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +14 -0
  180. mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +66 -0
  181. mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +1646 -0
  182. mapproxy/test/schemas/kml/2.2.0/xAL.xsd +1680 -0
  183. mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +87 -0
  184. mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +235 -0
  185. mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +23 -0
  186. mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +157 -0
  187. mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +86 -0
  188. mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +127 -0
  189. mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +279 -0
  190. mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +76 -0
  191. mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +112 -0
  192. mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +51 -0
  193. mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +59 -0
  194. mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +125 -0
  195. mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +140 -0
  196. mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +60 -0
  197. mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +47 -0
  198. mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +27 -0
  199. mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +353 -0
  200. mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +188 -0
  201. mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +524 -0
  202. mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +260 -0
  203. mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +273 -0
  204. mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +303 -0
  205. mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +6 -0
  206. mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +33 -0
  207. mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +68 -0
  208. mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +22 -0
  209. mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +274 -0
  210. mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +5 -0
  211. mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +276 -0
  212. mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +303 -0
  213. mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +6 -0
  214. mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +33 -0
  215. mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +8 -0
  216. mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +277 -0
  217. mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +611 -0
  218. mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +34 -0
  219. mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +28 -0
  220. mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +68 -0
  221. mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +22 -0
  222. mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +283 -0
  223. mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +5 -0
  224. mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +276 -0
  225. mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +303 -0
  226. mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +6 -0
  227. mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +33 -0
  228. mapproxy/test/schemas/wmts/1.0/ReadMe.txt +32 -0
  229. mapproxy/test/schemas/wmts/1.0/wmts.xsd +28 -0
  230. mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +151 -0
  231. mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +38 -0
  232. mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +564 -0
  233. mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +57 -0
  234. mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +72 -0
  235. mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +91 -0
  236. mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +76 -0
  237. mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +70 -0
  238. mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +6 -0
  239. mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +122 -0
  240. mapproxy/test/schemas/xml.xsd +287 -0
  241. mapproxy/test/system/__init__.py +98 -0
  242. mapproxy/test/system/fixture/arcgis.yaml +57 -0
  243. mapproxy/test/system/fixture/auth.yaml +70 -0
  244. mapproxy/test/system/fixture/cache.mbtiles +0 -0
  245. mapproxy/test/system/fixture/cache_azureblob.yaml +59 -0
  246. mapproxy/test/system/fixture/cache_band_merge.yaml +73 -0
  247. mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +24 -0
  248. mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
  249. mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
  250. mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
  251. mapproxy/test/system/fixture/cache_geopackage.yaml +56 -0
  252. mapproxy/test/system/fixture/cache_grid_names.yaml +50 -0
  253. mapproxy/test/system/fixture/cache_mbtiles.yaml +28 -0
  254. mapproxy/test/system/fixture/cache_s3.yaml +58 -0
  255. mapproxy/test/system/fixture/cache_source.yaml +81 -0
  256. mapproxy/test/system/fixture/combined_sources.yaml +130 -0
  257. mapproxy/test/system/fixture/coverage.yaml +77 -0
  258. mapproxy/test/system/fixture/demo.yaml +135 -0
  259. mapproxy/test/system/fixture/dimension.yaml +59 -0
  260. mapproxy/test/system/fixture/disable_storage.yaml +25 -0
  261. mapproxy/test/system/fixture/empty_ogrdata.geojson +1 -0
  262. mapproxy/test/system/fixture/formats.yaml +72 -0
  263. mapproxy/test/system/fixture/inspire.yaml +101 -0
  264. mapproxy/test/system/fixture/inspire_full.yaml +124 -0
  265. mapproxy/test/system/fixture/kml_layer.yaml +66 -0
  266. mapproxy/test/system/fixture/layer.yaml +260 -0
  267. mapproxy/test/system/fixture/layergroups.yaml +57 -0
  268. mapproxy/test/system/fixture/layergroups_root.yaml +106 -0
  269. mapproxy/test/system/fixture/legendgraphic.yaml +93 -0
  270. mapproxy/test/system/fixture/mapnik_source.yaml +66 -0
  271. mapproxy/test/system/fixture/mapproxy_export.yaml +12 -0
  272. mapproxy/test/system/fixture/mapserver.yaml +23 -0
  273. mapproxy/test/system/fixture/minimal_cgi.py +16 -0
  274. mapproxy/test/system/fixture/mixed_mode.yaml +49 -0
  275. mapproxy/test/system/fixture/multi_cache_layers.yaml +100 -0
  276. mapproxy/test/system/fixture/multiapp1.yaml +20 -0
  277. mapproxy/test/system/fixture/multiapp2.yaml +19 -0
  278. mapproxy/test/system/fixture/renderd_client.yaml +55 -0
  279. mapproxy/test/system/fixture/scalehints.yaml +70 -0
  280. mapproxy/test/system/fixture/seed.yaml +94 -0
  281. mapproxy/test/system/fixture/seed_mapproxy.yaml +39 -0
  282. mapproxy/test/system/fixture/seed_old.yaml +12 -0
  283. mapproxy/test/system/fixture/seed_timeouts.yaml +12 -0
  284. mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +27 -0
  285. mapproxy/test/system/fixture/seedonly.yaml +51 -0
  286. mapproxy/test/system/fixture/sld.yaml +35 -0
  287. mapproxy/test/system/fixture/source_errors.yaml +84 -0
  288. mapproxy/test/system/fixture/source_errors_raise.yaml +82 -0
  289. mapproxy/test/system/fixture/tileservice_origin.yaml +26 -0
  290. mapproxy/test/system/fixture/tileservice_refresh.yaml +59 -0
  291. mapproxy/test/system/fixture/tilesource_minmax_res.yaml +22 -0
  292. mapproxy/test/system/fixture/util-conf-base-grids.yaml +5 -0
  293. mapproxy/test/system/fixture/util-conf-overwrite.yaml +13 -0
  294. mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +90 -0
  295. mapproxy/test/system/fixture/util_grids.yaml +30 -0
  296. mapproxy/test/system/fixture/util_wms_capabilities111.xml +130 -0
  297. mapproxy/test/system/fixture/util_wms_capabilities130.xml +100 -0
  298. mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +5 -0
  299. mapproxy/test/system/fixture/watermark.yaml +50 -0
  300. mapproxy/test/system/fixture/wms_srs_extent.yaml +39 -0
  301. mapproxy/test/system/fixture/wms_versions.yaml +38 -0
  302. mapproxy/test/system/fixture/wmts.yaml +134 -0
  303. mapproxy/test/system/fixture/wmts_dimensions.yaml +57 -0
  304. mapproxy/test/system/fixture/xslt_featureinfo.yaml +54 -0
  305. mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +51 -0
  306. mapproxy/test/system/test_arcgis.py +156 -0
  307. mapproxy/test/system/test_auth.py +1134 -0
  308. mapproxy/test/system/test_behind_proxy.py +75 -0
  309. mapproxy/test/system/test_bulk_meta_tiles.py +106 -0
  310. mapproxy/test/system/test_cache_azureblob.py +127 -0
  311. mapproxy/test/system/test_cache_band_merge.py +103 -0
  312. mapproxy/test/system/test_cache_geopackage.py +144 -0
  313. mapproxy/test/system/test_cache_grid_names.py +89 -0
  314. mapproxy/test/system/test_cache_mbtiles.py +85 -0
  315. mapproxy/test/system/test_cache_s3.py +115 -0
  316. mapproxy/test/system/test_cache_source.py +146 -0
  317. mapproxy/test/system/test_combined_sources.py +335 -0
  318. mapproxy/test/system/test_coverage.py +140 -0
  319. mapproxy/test/system/test_decorate_img.py +214 -0
  320. mapproxy/test/system/test_demo.py +106 -0
  321. mapproxy/test/system/test_demo_with_extra_service.py +53 -0
  322. mapproxy/test/system/test_dimensions.py +278 -0
  323. mapproxy/test/system/test_disable_storage.py +42 -0
  324. mapproxy/test/system/test_formats.py +219 -0
  325. mapproxy/test/system/test_inspire_vs.py +173 -0
  326. mapproxy/test/system/test_kml.py +262 -0
  327. mapproxy/test/system/test_layergroups.py +160 -0
  328. mapproxy/test/system/test_legendgraphic.py +308 -0
  329. mapproxy/test/system/test_mapnik.py +161 -0
  330. mapproxy/test/system/test_mapserver.py +81 -0
  331. mapproxy/test/system/test_mixed_mode_format.py +195 -0
  332. mapproxy/test/system/test_multi_cache_layers.py +167 -0
  333. mapproxy/test/system/test_multiapp.py +92 -0
  334. mapproxy/test/system/test_refresh.py +207 -0
  335. mapproxy/test/system/test_renderd_client.py +304 -0
  336. mapproxy/test/system/test_response_headers.py +54 -0
  337. mapproxy/test/system/test_scalehints.py +140 -0
  338. mapproxy/test/system/test_seed.py +422 -0
  339. mapproxy/test/system/test_seed_only.py +93 -0
  340. mapproxy/test/system/test_sld.py +120 -0
  341. mapproxy/test/system/test_source_errors.py +377 -0
  342. mapproxy/test/system/test_tilesource_minmax_res.py +54 -0
  343. mapproxy/test/system/test_tms.py +276 -0
  344. mapproxy/test/system/test_tms_origin.py +46 -0
  345. mapproxy/test/system/test_util_conf.py +304 -0
  346. mapproxy/test/system/test_util_export.py +210 -0
  347. mapproxy/test/system/test_util_grids.py +88 -0
  348. mapproxy/test/system/test_util_wms_capabilities.py +182 -0
  349. mapproxy/test/system/test_watermark.py +91 -0
  350. mapproxy/test/system/test_wms.py +1611 -0
  351. mapproxy/test/system/test_wms_srs_extent.py +165 -0
  352. mapproxy/test/system/test_wms_version.py +85 -0
  353. mapproxy/test/system/test_wmsc.py +116 -0
  354. mapproxy/test/system/test_wmts.py +334 -0
  355. mapproxy/test/system/test_wmts_dimensions.py +206 -0
  356. mapproxy/test/system/test_wmts_restful.py +198 -0
  357. mapproxy/test/system/test_xslt_featureinfo.py +425 -0
  358. mapproxy/test/test_http_helper.py +219 -0
  359. mapproxy/test/unit/__init__.py +0 -0
  360. mapproxy/test/unit/epsg +2 -0
  361. mapproxy/test/unit/polygons/polygons.dbf +0 -0
  362. mapproxy/test/unit/polygons/polygons.shp +0 -0
  363. mapproxy/test/unit/polygons/polygons.shx +0 -0
  364. mapproxy/test/unit/test_async.py +245 -0
  365. mapproxy/test/unit/test_auth.py +419 -0
  366. mapproxy/test/unit/test_cache.py +1193 -0
  367. mapproxy/test/unit/test_cache_azureblob.py +94 -0
  368. mapproxy/test/unit/test_cache_compact.py +319 -0
  369. mapproxy/test/unit/test_cache_couchdb.py +114 -0
  370. mapproxy/test/unit/test_cache_geopackage.py +221 -0
  371. mapproxy/test/unit/test_cache_redis.py +67 -0
  372. mapproxy/test/unit/test_cache_riak.py +76 -0
  373. mapproxy/test/unit/test_cache_s3.py +84 -0
  374. mapproxy/test/unit/test_cache_tile.py +427 -0
  375. mapproxy/test/unit/test_client.py +479 -0
  376. mapproxy/test/unit/test_client_arcgis.py +73 -0
  377. mapproxy/test/unit/test_client_cgi.py +136 -0
  378. mapproxy/test/unit/test_collections.py +116 -0
  379. mapproxy/test/unit/test_concat_legends.py +37 -0
  380. mapproxy/test/unit/test_conf_loader.py +1061 -0
  381. mapproxy/test/unit/test_conf_validator.py +416 -0
  382. mapproxy/test/unit/test_config.py +117 -0
  383. mapproxy/test/unit/test_decorate_img.py +185 -0
  384. mapproxy/test/unit/test_exceptions.py +258 -0
  385. mapproxy/test/unit/test_featureinfo.py +291 -0
  386. mapproxy/test/unit/test_file_lock_load.py +49 -0
  387. mapproxy/test/unit/test_geom.py +503 -0
  388. mapproxy/test/unit/test_grid.py +1258 -0
  389. mapproxy/test/unit/test_image.py +1053 -0
  390. mapproxy/test/unit/test_image_mask.py +181 -0
  391. mapproxy/test/unit/test_image_messages.py +197 -0
  392. mapproxy/test/unit/test_image_options.py +160 -0
  393. mapproxy/test/unit/test_isodate.py +122 -0
  394. mapproxy/test/unit/test_multiapp.py +163 -0
  395. mapproxy/test/unit/test_ogr_reader.py +50 -0
  396. mapproxy/test/unit/test_request.py +745 -0
  397. mapproxy/test/unit/test_request_wmts.py +178 -0
  398. mapproxy/test/unit/test_response.py +79 -0
  399. mapproxy/test/unit/test_seed.py +365 -0
  400. mapproxy/test/unit/test_seed_cachelock.py +90 -0
  401. mapproxy/test/unit/test_srs.py +215 -0
  402. mapproxy/test/unit/test_tiled_source.py +122 -0
  403. mapproxy/test/unit/test_tilefilter.py +31 -0
  404. mapproxy/test/unit/test_times.py +25 -0
  405. mapproxy/test/unit/test_timeutils.py +50 -0
  406. mapproxy/test/unit/test_util_conf_utils.py +75 -0
  407. mapproxy/test/unit/test_utils.py +476 -0
  408. mapproxy/test/unit/test_wms_capabilities.py +44 -0
  409. mapproxy/test/unit/test_wms_layer.py +113 -0
  410. mapproxy/test/unit/test_yaml.py +69 -0
  411. mapproxy/tilefilter.py +59 -0
  412. mapproxy/util/__init__.py +0 -0
  413. mapproxy/util/async_.py +227 -0
  414. mapproxy/util/collections.py +132 -0
  415. mapproxy/util/coverage.py +329 -0
  416. mapproxy/util/escape.py +10 -0
  417. mapproxy/util/ext/__init__.py +14 -0
  418. mapproxy/util/ext/dictspec/__init__.py +1 -0
  419. mapproxy/util/ext/dictspec/spec.py +124 -0
  420. mapproxy/util/ext/dictspec/test/__init__.py +0 -0
  421. mapproxy/util/ext/dictspec/test/test_validator.py +274 -0
  422. mapproxy/util/ext/dictspec/validator.py +189 -0
  423. mapproxy/util/ext/local.py +196 -0
  424. mapproxy/util/ext/lockfile.py +138 -0
  425. mapproxy/util/ext/odict.py +330 -0
  426. mapproxy/util/ext/serving.py +508 -0
  427. mapproxy/util/ext/tempita/__init__.py +1174 -0
  428. mapproxy/util/ext/tempita/_looper.py +163 -0
  429. mapproxy/util/ext/tempita/compat3.py +46 -0
  430. mapproxy/util/ext/wmsparse/__init__.py +3 -0
  431. mapproxy/util/ext/wmsparse/duration.py +597 -0
  432. mapproxy/util/ext/wmsparse/parse.py +305 -0
  433. mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
  434. mapproxy/util/ext/wmsparse/test/test_parse.py +162 -0
  435. mapproxy/util/ext/wmsparse/test/test_util.py +23 -0
  436. mapproxy/util/ext/wmsparse/test/wms-large-111.xml +2114 -0
  437. mapproxy/util/ext/wmsparse/test/wms-omniscale-111.xml +90 -0
  438. mapproxy/util/ext/wmsparse/test/wms-omniscale-130.xml +120 -0
  439. mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +386 -0
  440. mapproxy/util/ext/wmsparse/util.py +187 -0
  441. mapproxy/util/fs.py +156 -0
  442. mapproxy/util/geom.py +295 -0
  443. mapproxy/util/lib.py +115 -0
  444. mapproxy/util/lock.py +163 -0
  445. mapproxy/util/ogr.py +231 -0
  446. mapproxy/util/py.py +81 -0
  447. mapproxy/util/times.py +75 -0
  448. mapproxy/util/yaml.py +56 -0
  449. mapproxy/version.py +31 -0
  450. mapproxy/wsgiapp.py +164 -0
  451. mapproxy-1.16.1.dist-info/METADATA +151 -0
  452. mapproxy-1.16.1.dist-info/RECORD +458 -0
  453. mapproxy-1.16.1.dist-info/WHEEL +5 -0
  454. mapproxy-1.16.1.dist-info/entry_points.txt +3 -0
  455. mapproxy-1.16.1.dist-info/licenses/AUTHORS.txt +33 -0
  456. mapproxy-1.16.1.dist-info/licenses/COPYING.txt +60 -0
  457. mapproxy-1.16.1.dist-info/licenses/LICENSE.txt +202 -0
  458. mapproxy-1.16.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,278 @@
1
+ # This file is part of the MapProxy project.
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+
14
+ from __future__ import division
15
+ import functools
16
+ import os
17
+ import pytest
18
+ from mapproxy.test.image import tmp_image
19
+ from mapproxy.test.http import mock_httpd
20
+ from mapproxy.test.system import SysTest
21
+
22
+ from mapproxy.request.wms import (
23
+ WMS100MapRequest,
24
+ WMS111MapRequest,
25
+ WMS130MapRequest,
26
+ WMS111CapabilitiesRequest,
27
+ WMS130CapabilitiesRequest,
28
+ WMS100CapabilitiesRequest,
29
+ WMS110MapRequest,
30
+ WMS110FeatureInfoRequest,
31
+ WMS110CapabilitiesRequest,
32
+ )
33
+
34
+ expected_dim = {'time': {
35
+ 'values': '2020-09-22T11:20:00Z,2020-09-22T13:20:00Z,2020-09-22T15:20:00Z',
36
+ 'default': '2020-09-22T14:20:00Z'},
37
+ 'dim_reference_time': {
38
+ 'values': '2020-09-22T11:20:00Z,2020-09-22T13:20:00Z,2020-09-22T15:20:00Z',
39
+ 'default': '2020-09-22T14:20:00Z'}}
40
+
41
+ @pytest.fixture(scope="module")
42
+ def config_file():
43
+ return "dimension.yaml"
44
+
45
+ class TestDimensionsWMS130(SysTest):
46
+
47
+ def setup(self):
48
+ self.common_req = WMS130MapRequest(
49
+ url="/service?", param=dict(service="WMS", version="1.3.0")
50
+ )
51
+ self.common_map_req = WMS130MapRequest(
52
+ url="/service?",
53
+ param=dict(
54
+ service="WMS",
55
+ version="1.3.0",
56
+ bbox="-180,0,0,80",
57
+ width="200",
58
+ height="200",
59
+ layers="test_cache",
60
+ srs="EPSG:4326",
61
+ format="image/png",
62
+ styles="",
63
+ request="GetMap",
64
+ time="2020-09-22T14:20:00Z",
65
+ ),
66
+ )
67
+
68
+ def test_get_capabilities_dimension(self,app):
69
+ req = WMS130CapabilitiesRequest(url="/service?").copy_with_request_params(
70
+ self.common_req
71
+ )
72
+ resp = app.get(req)
73
+ xml = resp.lxml
74
+
75
+
76
+ dimensions = xml.xpath('//xmlns:Layer/xmlns:Dimension', namespaces=dict(xmlns="http://www.opengis.net/wms"))
77
+ results = dict()
78
+
79
+ for dimension in dimensions:
80
+ temp_dict = dict()
81
+ temp_dict['values'] = dimension.text
82
+ temp_dict['default'] = dimension.attrib['default']
83
+ results[dimension.attrib['name']] = temp_dict
84
+
85
+ assert set(list(expected_dim.keys())) == set(list(results.keys()))
86
+
87
+ assert expected_dim['time']['default'] == results['time']['default']
88
+ assert expected_dim['dim_reference_time']['default'] == results['dim_reference_time']['default']
89
+ assert expected_dim['time']['values'] == results['time']['values']
90
+ assert expected_dim['dim_reference_time']['values'] == results['dim_reference_time']['values']
91
+
92
+ def test_get_map_dimensions(self, app, cache_dir):
93
+ with tmp_image((256, 256), format="jpeg") as img:
94
+ expected_req = (
95
+ {
96
+ "path": r"/service?LAYERs=foo,bar&SERVICE=WMS&FORMAT=image%2Fjpeg"
97
+ "&REQUEST=GetMap&HEIGHT=256&SRS=EPSG%3A900913&styles="
98
+ "&VERSION=1.1.1&BBOX=0.0,0.0,20037508.3428,20037508.3428"
99
+ "&WIDTH=256&TIME=2020-09-22T14:20:00Z"
100
+ },
101
+ {"body": img.read(), "headers": {"content-type": "image/jpeg"}},
102
+ )
103
+ with mock_httpd(
104
+ ("localhost", 42422), [expected_req], bbox_aware_query_comparator=True
105
+ ):
106
+ self.common_map_req.params["bbox"] = "0,0,180,90"
107
+ resp = app.get(self.common_map_req)
108
+ assert 35000 < int(resp.headers["Content-length"]) < 75000
109
+ assert resp.content_type == "image/png"
110
+
111
+ assert cache_dir.join(
112
+ "test_cache_EPSG900913/time-2020-09-22T14:20:00Z/01/000/000/001/000/000/001.jpeg"
113
+ ).check()
114
+
115
+ class TestDimensionsWMS111(SysTest):
116
+
117
+ def setup(self):
118
+ self.common_req = WMS111MapRequest(
119
+ url="/service?", param=dict(service="WMS", version="1.1.1")
120
+ )
121
+ self.common_map_req = WMS111MapRequest(
122
+ url="/service?",
123
+ param=dict(
124
+ service="WMS",
125
+ version="1.1.1",
126
+ bbox="-180,0,0,80",
127
+ width="200",
128
+ height="200",
129
+ layers="test_cache",
130
+ srs="EPSG:4326",
131
+ format="image/png",
132
+ styles="",
133
+ request="GetMap",
134
+ time="2020-09-22T14:20:00Z",
135
+ ),
136
+ )
137
+
138
+ def test_get_capabilities_dimension(self,app):
139
+ req = WMS111CapabilitiesRequest(url="/service?").copy_with_request_params(
140
+ self.common_req
141
+ )
142
+ resp = app.get(req)
143
+ xml = resp.lxml
144
+ dimensions = xml.xpath('//Layer/Dimension')
145
+ results = dict()
146
+
147
+ for dimension in dimensions:
148
+ temp_dict = dict()
149
+ temp_dict['values'] = dimension.text
150
+ temp_dict['default'] = dimension.attrib['default']
151
+ results[dimension.attrib['name']] = temp_dict
152
+
153
+ assert set(list(expected_dim.keys())) == set(list(results.keys()))
154
+
155
+ assert expected_dim['time']['default'] == results['time']['default']
156
+ assert expected_dim['dim_reference_time']['default'] == results['dim_reference_time']['default']
157
+
158
+ def test_get_map_dimensions(self, app, cache_dir):
159
+ with tmp_image((256, 256), format="jpeg") as img:
160
+ expected_req = (
161
+ {
162
+ "path": r"/service?LAYERs=foo,bar&SERVICE=WMS&FORMAT=image%2Fjpeg"
163
+ "&REQUEST=GetMap&HEIGHT=256&SRS=EPSG%3A900913&styles="
164
+ "&VERSION=1.1.1&BBOX=0.0,0.0,20037508.3428,20037508.3428"
165
+ "&WIDTH=256&TIME=2020-09-22T14:20:00Z"
166
+ },
167
+ {"body": img.read(), "headers": {"content-type": "image/jpeg"}},
168
+ )
169
+ with mock_httpd(
170
+ ("localhost", 42422), [expected_req], bbox_aware_query_comparator=True
171
+ ):
172
+ self.common_map_req.params["bbox"] = "0,0,180,90"
173
+ resp = app.get(self.common_map_req)
174
+ assert 35000 < int(resp.headers["Content-length"]) < 75000
175
+ assert resp.content_type == "image/png"
176
+
177
+ assert cache_dir.join(
178
+ "test_cache_EPSG900913/time-2020-09-22T14:20:00Z/01/000/000/001/000/000/001.jpeg"
179
+ ).check()
180
+
181
+ class TestDimensionsWMS110(SysTest):
182
+
183
+ def setup(self):
184
+ self.common_req = WMS110MapRequest(
185
+ url="/service?", param=dict(service="WMS", version="1.1.0")
186
+ )
187
+ self.common_map_req = WMS110MapRequest(
188
+ url="/service?",
189
+ param=dict(
190
+ service="WMS",
191
+ version="1.1.0",
192
+ bbox="-180,0,0,80",
193
+ width="200",
194
+ height="200",
195
+ layers="test_cache",
196
+ srs="EPSG:4326",
197
+ format="image/png",
198
+ styles="",
199
+ request="GetMap",
200
+ time="2020-09-22T14:20:00Z",
201
+ ),
202
+ )
203
+
204
+ def test_get_capabilities_dimension(self,app):
205
+ req = WMS110CapabilitiesRequest(url="/service?").copy_with_request_params(
206
+ self.common_req
207
+ )
208
+ resp = app.get(req)
209
+ xml = resp.lxml
210
+ dimensions = xml.xpath('//Layer/Dimension')
211
+ results = dict()
212
+
213
+ for dimension in dimensions:
214
+ temp_dict = dict()
215
+ temp_dict['values'] = dimension.text
216
+ temp_dict['default'] = dimension.attrib['default']
217
+ results[dimension.attrib['name']] = temp_dict
218
+ assert set(list(expected_dim.keys())) == set(list(results.keys()))
219
+
220
+ assert expected_dim['time']['default'] == results['time']['default']
221
+ assert expected_dim['dim_reference_time']['default'] == results['dim_reference_time']['default']
222
+ assert expected_dim['time']['values'] == results['time']['values']
223
+ assert expected_dim['dim_reference_time']['values'] == results['dim_reference_time']['values']
224
+ assert expected_dim['time']['values'] == results['time']['values']
225
+ assert expected_dim['dim_reference_time']['values'] == results['dim_reference_time']['values']
226
+
227
+ def test_get_map_dimensions(self, app, cache_dir):
228
+ with tmp_image((256, 256), format="jpeg") as img:
229
+ expected_req = (
230
+ {
231
+ "path": r"/service?LAYERs=foo,bar&SERVICE=WMS&FORMAT=image%2Fjpeg"
232
+ "&REQUEST=GetMap&HEIGHT=256&SRS=EPSG%3A900913&styles="
233
+ "&VERSION=1.1.1&BBOX=0.0,0.0,20037508.3428,20037508.3428"
234
+ "&WIDTH=256&TIME=2020-09-22T14:20:00Z"
235
+ },
236
+ {"body": img.read(), "headers": {"content-type": "image/jpeg"}},
237
+ )
238
+ with mock_httpd(
239
+ ("localhost", 42422), [expected_req], bbox_aware_query_comparator=True
240
+ ):
241
+ self.common_map_req.params["bbox"] = "0,0,180,90"
242
+ resp = app.get(self.common_map_req)
243
+ assert 35000 < int(resp.headers["Content-length"]) < 75000
244
+ assert resp.content_type == "image/png"
245
+
246
+ assert cache_dir.join(
247
+ "test_cache_EPSG900913/time-2020-09-22T14:20:00Z/01/000/000/001/000/000/001.jpeg"
248
+ ).check()
249
+
250
+ class TestDimensionsWMS100(SysTest):
251
+
252
+ def setup(self):
253
+ self.common_req = WMS100MapRequest(
254
+ url="/service?", param=dict(service="WMS", wmtver="1.0.0")
255
+ )
256
+
257
+ def test_get_capabilities_dimension(self,app):
258
+ req = WMS100CapabilitiesRequest(url="/service?").copy_with_request_params(
259
+ self.common_req
260
+ )
261
+ resp = app.get(req)
262
+ xml = resp.lxml
263
+ dimensions = xml.xpath('//Layer/Dimension')
264
+ results = dict()
265
+
266
+ for dimension in dimensions:
267
+ temp_dict = dict()
268
+ temp_dict['values'] = dimension.text
269
+ temp_dict['default'] = dimension.attrib['default']
270
+ results[dimension.attrib['name']] = temp_dict
271
+
272
+ assert set(list(expected_dim.keys())) == set(list(results.keys()))
273
+ assert expected_dim['time']['default'] == results['time']['default']
274
+ assert expected_dim['dim_reference_time']['default'] == results['dim_reference_time']['default']
275
+ assert expected_dim['time']['values'] == results['time']['values']
276
+ assert expected_dim['dim_reference_time']['values'] == results['dim_reference_time']['values']
277
+ assert expected_dim['time']['values'] == results['time']['values']
278
+ assert expected_dim['dim_reference_time']['values'] == results['dim_reference_time']['values']
@@ -0,0 +1,42 @@
1
+ # This file is part of the MapProxy project.
2
+ # Copyright (C) 2011 Omniscale <http://omniscale.de>
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ import pytest
17
+
18
+ from mapproxy.test.image import is_png, tmp_image
19
+ from mapproxy.test.http import mock_httpd
20
+ from mapproxy.test.system import SysTest
21
+
22
+
23
+ @pytest.fixture(scope="module")
24
+ def config_file():
25
+ return "disable_storage.yaml"
26
+
27
+
28
+ class TestDisableStorage(SysTest):
29
+
30
+ def test_get_tile_without_caching(self, app, cache_dir):
31
+ for _ in range(2):
32
+ with tmp_image((256, 256), format="png") as img:
33
+ expected_req = (
34
+ {"path": r"/tile.png"},
35
+ {"body": img.read(), "headers": {"content-type": "image/png"}},
36
+ )
37
+ with mock_httpd(("localhost", 42423), [expected_req]):
38
+ resp = app.get("/tms/1.0.0/tiles/0/0/0.png")
39
+ assert resp.content_type == "image/png"
40
+ is_png(resp.body)
41
+
42
+ assert not cache_dir.check()
@@ -0,0 +1,219 @@
1
+ # This file is part of the MapProxy project.
2
+ # Copyright (C) 2010 Omniscale <http://omniscale.de>
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ from __future__ import division
17
+
18
+ from io import BytesIO
19
+
20
+ import pytest
21
+
22
+ from mapproxy.request.wms import WMS111MapRequest, WMS111FeatureInfoRequest
23
+ from mapproxy.test.image import tmp_image, check_format
24
+ from mapproxy.test.http import mock_httpd
25
+ from mapproxy.test.system import SysTest
26
+
27
+
28
+ @pytest.fixture(scope="module")
29
+ def config_file():
30
+ return "formats.yaml"
31
+
32
+
33
+ def assert_file_format(filename, format):
34
+ assert filename.check()
35
+ check_format(filename.read_binary(), format)
36
+
37
+
38
+ class TestWMS111(SysTest):
39
+
40
+ def setup(self):
41
+ self.common_req = WMS111MapRequest(
42
+ url="/service?", param=dict(service="WMS", version="1.1.1")
43
+ )
44
+ self.common_map_req = WMS111MapRequest(
45
+ url="/service?",
46
+ param=dict(
47
+ service="WMS",
48
+ version="1.1.1",
49
+ bbox="0,0,180,80",
50
+ width="200",
51
+ height="200",
52
+ layers="wms_cache",
53
+ srs="EPSG:4326",
54
+ format="image/png",
55
+ styles="",
56
+ request="GetMap",
57
+ ),
58
+ )
59
+ self.common_direct_map_req = WMS111MapRequest(
60
+ url="/service?",
61
+ param=dict(
62
+ service="WMS",
63
+ version="1.1.1",
64
+ bbox="0,0,10,10",
65
+ width="200",
66
+ height="200",
67
+ layers="wms_cache",
68
+ srs="EPSG:4326",
69
+ format="image/png",
70
+ styles="",
71
+ request="GetMap",
72
+ ),
73
+ )
74
+ self.common_fi_req = WMS111FeatureInfoRequest(
75
+ url="/service?",
76
+ param=dict(
77
+ x="10",
78
+ y="20",
79
+ width="200",
80
+ height="200",
81
+ layers="wms_cache",
82
+ format="image/png",
83
+ query_layers="wms_cache",
84
+ styles="",
85
+ bbox="1000,400,2000,1400",
86
+ srs="EPSG:900913",
87
+ ),
88
+ )
89
+ self.expected_base_path = "/service?SERVICE=WMS&REQUEST=GetMap&HEIGHT=256" "&SRS=EPSG%3A900913&styles=&VERSION=1.1.1&WIDTH=256" "&BBOX=0.0,0.0,20037508.3428,20037508.3428"
90
+ self.expected_direct_base_path = "/service?SERVICE=WMS&REQUEST=GetMap&HEIGHT=200" "&SRS=EPSG%3A4326&styles=&VERSION=1.1.1&WIDTH=200" "&BBOX=0.0,0.0,10.0,10.0"
91
+
92
+ @pytest.mark.parametrize(
93
+ "layer,source,wms_format,cache_format,req_format",
94
+ [
95
+ ["jpeg_cache_tiff_source", "tiffsource", "png", "jpeg", "tiff"],
96
+ ["jpeg_cache_tiff_source", "tiffsource", "jpeg", "jpeg", "tiff"],
97
+ ["jpeg_cache_tiff_source", "tiffsource", "tiff", "jpeg", "tiff"],
98
+ ["jpeg_cache_tiff_source", "tiffsource", "gif", "jpeg", "tiff"],
99
+ ["png_cache_all_source", "allsource", "png", "png", "png"],
100
+ ["png_cache_all_source", "allsource", "jpeg", "png", "png"],
101
+ ["jpeg_cache_png_jpeg_source", "pngjpegsource", "jpeg", "jpeg", "jpeg"],
102
+ ["jpeg_cache_png_jpeg_source", "pngjpegsource", "png", "jpeg", "jpeg"],
103
+ ],
104
+ )
105
+ def test_get_cached(
106
+ self, app, cache_dir, layer, source, wms_format, cache_format, req_format
107
+ ):
108
+ with tmp_image((256, 256), format=req_format) as img:
109
+ expected_req = (
110
+ {
111
+ "path": self.expected_base_path
112
+ + "&layers="
113
+ + source
114
+ + "&format=image%2F"
115
+ + req_format
116
+ },
117
+ {
118
+ "body": img.read(),
119
+ "headers": {"content-type": "image/" + req_format},
120
+ },
121
+ )
122
+ with mock_httpd(
123
+ ("localhost", 42423), [expected_req], bbox_aware_query_comparator=True
124
+ ):
125
+ self.common_map_req.params["layers"] = layer
126
+ self.common_map_req.params["format"] = "image/" + wms_format
127
+ resp = app.get(self.common_map_req)
128
+ assert resp.content_type == "image/" + wms_format
129
+ check_format(BytesIO(resp.body), wms_format)
130
+ assert_file_format(
131
+ cache_dir.join(
132
+ layer + "_EPSG900913/01/000/000/001/000/000/001." + cache_format
133
+ ),
134
+ cache_format,
135
+ )
136
+
137
+ @pytest.mark.parametrize(
138
+ "layer,source,wms_format,req_format",
139
+ [
140
+ ["jpeg_cache_tiff_source", "tiffsource", "gif", "tiff"],
141
+ ["jpeg_cache_tiff_source", "tiffsource", "jpeg", "tiff"],
142
+ ["jpeg_cache_tiff_source", "tiffsource", "png", "tiff"],
143
+ ["png_cache_all_source", "allsource", "gif", "gif"],
144
+ ["png_cache_all_source", "allsource", "png", "png"],
145
+ ["png_cache_all_source", "allsource", "tiff", "tiff"],
146
+ ["jpeg_cache_png_jpeg_source", "pngjpegsource", "jpeg", "jpeg"],
147
+ ["jpeg_cache_png_jpeg_source", "pngjpegsource", "png", "png"],
148
+ ["jpeg_cache_png_jpeg_source", "pngjpegsource", "tiff", "png"],
149
+ ["jpeg_cache_png_jpeg_source", "pngjpegsource", "gif", "png"],
150
+ ],
151
+ )
152
+ def test_get_direct(self, app, layer, source, wms_format, req_format):
153
+ with tmp_image((256, 256), format=req_format) as img:
154
+ expected_req = (
155
+ {
156
+ "path": self.expected_direct_base_path
157
+ + "&layers="
158
+ + source
159
+ + "&format=image%2F"
160
+ + req_format
161
+ },
162
+ {
163
+ "body": img.read(),
164
+ "headers": {"content-type": "image/" + req_format},
165
+ },
166
+ )
167
+ with mock_httpd(
168
+ ("localhost", 42423), [expected_req], bbox_aware_query_comparator=True
169
+ ):
170
+ self.common_direct_map_req.params["layers"] = layer
171
+ self.common_direct_map_req.params["format"] = "image/" + wms_format
172
+ resp = app.get(self.common_direct_map_req)
173
+ assert resp.content_type == "image/" + wms_format
174
+ check_format(BytesIO(resp.body), wms_format)
175
+
176
+
177
+ class TestTMS(SysTest):
178
+
179
+ def setup(self):
180
+ self.expected_base_path = "/service?SERVICE=WMS&REQUEST=GetMap&HEIGHT=256" "&SRS=EPSG%3A900913&styles=&VERSION=1.1.1&WIDTH=256" "&BBOX=0.0,0.0,20037508.3428,20037508.3428"
181
+ self.expected_direct_base_path = "/service?SERVICE=WMS&REQUEST=GetMap&HEIGHT=200" "&SRS=EPSG%3A4326&styles=&VERSION=1.1.1&WIDTH=200" "&BBOX=0.0,0.0,10.0,10.0"
182
+
183
+ @pytest.mark.parametrize(
184
+ "layer,source,tms_format,cache_format,req_format",
185
+ [
186
+ ["jpeg_cache_tiff_source", "tiffsource", "jpeg", "jpeg", "tiff"],
187
+ ["png_cache_all_source", "allsource", "png", "png", "png"],
188
+ ["jpeg_cache_png_jpeg_source", "pngjpegsource", "jpeg", "jpeg", "jpeg"],
189
+ ],
190
+ )
191
+ def test_get_cached(
192
+ self, app, cache_dir, layer, source, tms_format, cache_format, req_format
193
+ ):
194
+ with tmp_image((256, 256), format=req_format) as img:
195
+ expected_req = (
196
+ {
197
+ "path": self.expected_base_path
198
+ + "&layers="
199
+ + source
200
+ + "&format=image%2F"
201
+ + req_format
202
+ },
203
+ {
204
+ "body": img.read(),
205
+ "headers": {"content-type": "image/" + req_format},
206
+ },
207
+ )
208
+ with mock_httpd(
209
+ ("localhost", 42423), [expected_req], bbox_aware_query_comparator=True
210
+ ):
211
+ resp = app.get("/tms/1.0.0/%s/0/1/1.%s" % (layer, tms_format))
212
+ assert resp.content_type == "image/" + tms_format
213
+ # check_format(BytesIO(resp.body), tms_format)
214
+ assert_file_format(
215
+ cache_dir.join(
216
+ layer + "_EPSG900913/01/000/000/001/000/000/001." + cache_format
217
+ ),
218
+ cache_format,
219
+ )