MapProxy 2.1.0__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 (459) hide show
  1. MapProxy-2.1.0.dist-info/AUTHORS.txt +33 -0
  2. MapProxy-2.1.0.dist-info/COPYING.txt +60 -0
  3. MapProxy-2.1.0.dist-info/LICENSE.txt +202 -0
  4. MapProxy-2.1.0.dist-info/METADATA +165 -0
  5. MapProxy-2.1.0.dist-info/RECORD +459 -0
  6. MapProxy-2.1.0.dist-info/WHEEL +5 -0
  7. MapProxy-2.1.0.dist-info/entry_points.txt +4 -0
  8. MapProxy-2.1.0.dist-info/top_level.txt +1 -0
  9. mapproxy/__init__.py +0 -0
  10. mapproxy/cache/__init__.py +36 -0
  11. mapproxy/cache/azureblob.py +145 -0
  12. mapproxy/cache/base.py +120 -0
  13. mapproxy/cache/compact.py +665 -0
  14. mapproxy/cache/couchdb.py +301 -0
  15. mapproxy/cache/dummy.py +36 -0
  16. mapproxy/cache/file.py +200 -0
  17. mapproxy/cache/geopackage.py +647 -0
  18. mapproxy/cache/legend.py +87 -0
  19. mapproxy/cache/mbtiles.py +411 -0
  20. mapproxy/cache/meta.py +80 -0
  21. mapproxy/cache/path.py +261 -0
  22. mapproxy/cache/redis.py +152 -0
  23. mapproxy/cache/renderd.py +100 -0
  24. mapproxy/cache/riak.py +206 -0
  25. mapproxy/cache/s3.py +209 -0
  26. mapproxy/cache/tile.py +736 -0
  27. mapproxy/client/__init__.py +0 -0
  28. mapproxy/client/arcgis.py +82 -0
  29. mapproxy/client/cgi.py +141 -0
  30. mapproxy/client/http.py +295 -0
  31. mapproxy/client/log.py +33 -0
  32. mapproxy/client/tile.py +158 -0
  33. mapproxy/client/wms.py +255 -0
  34. mapproxy/compat/__init__.py +0 -0
  35. mapproxy/compat/image.py +86 -0
  36. mapproxy/config/__init__.py +22 -0
  37. mapproxy/config/config-schema.json +813 -0
  38. mapproxy/config/config.py +213 -0
  39. mapproxy/config/coverage.py +108 -0
  40. mapproxy/config/defaults.py +102 -0
  41. mapproxy/config/loader.py +2399 -0
  42. mapproxy/config/spec.py +657 -0
  43. mapproxy/config/validator.py +242 -0
  44. mapproxy/config_template/__init__.py +0 -0
  45. mapproxy/config_template/base_config/config.wsgi +10 -0
  46. mapproxy/config_template/base_config/full_example.yaml +598 -0
  47. mapproxy/config_template/base_config/full_seed_example.yaml +79 -0
  48. mapproxy/config_template/base_config/log.ini +35 -0
  49. mapproxy/config_template/base_config/mapproxy.yaml +60 -0
  50. mapproxy/config_template/base_config/seed.yaml +27 -0
  51. mapproxy/exception.py +149 -0
  52. mapproxy/featureinfo.py +251 -0
  53. mapproxy/grid.py +1199 -0
  54. mapproxy/image/__init__.py +549 -0
  55. mapproxy/image/fonts/DejaVuSans.ttf +0 -0
  56. mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
  57. mapproxy/image/fonts/LICENSE +99 -0
  58. mapproxy/image/fonts/__init__.py +0 -0
  59. mapproxy/image/mask.py +79 -0
  60. mapproxy/image/merge.py +323 -0
  61. mapproxy/image/message.py +357 -0
  62. mapproxy/image/opts.py +185 -0
  63. mapproxy/image/tile.py +171 -0
  64. mapproxy/image/transform.py +350 -0
  65. mapproxy/layer.py +489 -0
  66. mapproxy/multiapp.py +230 -0
  67. mapproxy/proj.py +309 -0
  68. mapproxy/request/__init__.py +18 -0
  69. mapproxy/request/arcgis.py +268 -0
  70. mapproxy/request/base.py +466 -0
  71. mapproxy/request/tile.py +131 -0
  72. mapproxy/request/wms/__init__.py +829 -0
  73. mapproxy/request/wms/exception.py +107 -0
  74. mapproxy/request/wmts.py +442 -0
  75. mapproxy/response.py +237 -0
  76. mapproxy/script/__init__.py +0 -0
  77. mapproxy/script/conf/__init__.py +0 -0
  78. mapproxy/script/conf/app.py +222 -0
  79. mapproxy/script/conf/caches.py +44 -0
  80. mapproxy/script/conf/geopackage.py +136 -0
  81. mapproxy/script/conf/layers.py +54 -0
  82. mapproxy/script/conf/seeds.py +36 -0
  83. mapproxy/script/conf/sources.py +88 -0
  84. mapproxy/script/conf/utils.py +148 -0
  85. mapproxy/script/defrag.py +187 -0
  86. mapproxy/script/export.py +337 -0
  87. mapproxy/script/grids.py +198 -0
  88. mapproxy/script/scales.py +134 -0
  89. mapproxy/script/util.py +410 -0
  90. mapproxy/script/wms_capabilities.py +160 -0
  91. mapproxy/seed/__init__.py +0 -0
  92. mapproxy/seed/cachelock.py +127 -0
  93. mapproxy/seed/cleanup.py +191 -0
  94. mapproxy/seed/config.py +481 -0
  95. mapproxy/seed/script.py +391 -0
  96. mapproxy/seed/seeder.py +551 -0
  97. mapproxy/seed/spec.py +66 -0
  98. mapproxy/seed/util.py +266 -0
  99. mapproxy/service/__init__.py +14 -0
  100. mapproxy/service/base.py +45 -0
  101. mapproxy/service/demo.py +364 -0
  102. mapproxy/service/kml.py +333 -0
  103. mapproxy/service/ows.py +39 -0
  104. mapproxy/service/template_helper.py +55 -0
  105. mapproxy/service/templates/demo/capabilities_demo.html +18 -0
  106. mapproxy/service/templates/demo/demo.html +181 -0
  107. mapproxy/service/templates/demo/openlayers-demo.cfg +16 -0
  108. mapproxy/service/templates/demo/static/img/blank.gif +0 -0
  109. mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
  110. mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
  111. mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
  112. mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
  113. mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
  114. mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
  115. mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
  116. mapproxy/service/templates/demo/static/logo.png +0 -0
  117. mapproxy/service/templates/demo/static/ol.css +345 -0
  118. mapproxy/service/templates/demo/static/ol.js +4 -0
  119. mapproxy/service/templates/demo/static/proj4.min.js +1 -0
  120. mapproxy/service/templates/demo/static/proj4defs.js +1 -0
  121. mapproxy/service/templates/demo/static/site.css +137 -0
  122. mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
  123. mapproxy/service/templates/demo/static/theme/default/google.css +17 -0
  124. mapproxy/service/templates/demo/static/theme/default/ie6-style.css +10 -0
  125. mapproxy/service/templates/demo/static/theme/default/style.css +482 -0
  126. mapproxy/service/templates/demo/static.html +34 -0
  127. mapproxy/service/templates/demo/tms_demo.html +117 -0
  128. mapproxy/service/templates/demo/wms_demo.html +144 -0
  129. mapproxy/service/templates/demo/wmts_demo.html +118 -0
  130. mapproxy/service/templates/tms_capabilities.xml +13 -0
  131. mapproxy/service/templates/tms_exception.xml +4 -0
  132. mapproxy/service/templates/tms_root_resource.xml +7 -0
  133. mapproxy/service/templates/tms_tilemap_capabilities.xml +14 -0
  134. mapproxy/service/templates/wms100capabilities.xml +112 -0
  135. mapproxy/service/templates/wms100exception.xml +4 -0
  136. mapproxy/service/templates/wms110capabilities.xml +152 -0
  137. mapproxy/service/templates/wms110exception.xml +5 -0
  138. mapproxy/service/templates/wms111capabilities.xml +183 -0
  139. mapproxy/service/templates/wms111exception.xml +5 -0
  140. mapproxy/service/templates/wms130capabilities.xml +326 -0
  141. mapproxy/service/templates/wms130exception.xml +8 -0
  142. mapproxy/service/templates/wmts100capabilities.xml +155 -0
  143. mapproxy/service/templates/wmts100exception.xml +9 -0
  144. mapproxy/service/tile.py +540 -0
  145. mapproxy/service/wms.py +868 -0
  146. mapproxy/service/wmts.py +387 -0
  147. mapproxy/source/__init__.py +83 -0
  148. mapproxy/source/arcgis.py +39 -0
  149. mapproxy/source/error.py +40 -0
  150. mapproxy/source/mapnik.py +262 -0
  151. mapproxy/source/tile.py +97 -0
  152. mapproxy/source/wms.py +273 -0
  153. mapproxy/srs.py +734 -0
  154. mapproxy/template.py +54 -0
  155. mapproxy/test/__init__.py +0 -0
  156. mapproxy/test/conftest.py +8 -0
  157. mapproxy/test/helper.py +255 -0
  158. mapproxy/test/http.py +511 -0
  159. mapproxy/test/image.py +219 -0
  160. mapproxy/test/mocker.py +2291 -0
  161. mapproxy/test/schemas/inspire/common/1.0/common.xsd +1461 -0
  162. mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +108 -0
  163. mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +108 -0
  164. mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +108 -0
  165. mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +108 -0
  166. mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +155 -0
  167. mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +108 -0
  168. mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +108 -0
  169. mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +108 -0
  170. mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +108 -0
  171. mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +109 -0
  172. mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +108 -0
  173. mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +108 -0
  174. mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +108 -0
  175. mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +108 -0
  176. mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +108 -0
  177. mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +108 -0
  178. mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +108 -0
  179. mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +108 -0
  180. mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +108 -0
  181. mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +108 -0
  182. mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +108 -0
  183. mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +108 -0
  184. mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +108 -0
  185. mapproxy/test/schemas/inspire/common/1.0/network.xsd +521 -0
  186. mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +19 -0
  187. mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +14 -0
  188. mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +66 -0
  189. mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +1646 -0
  190. mapproxy/test/schemas/kml/2.2.0/xAL.xsd +1680 -0
  191. mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +87 -0
  192. mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +235 -0
  193. mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +23 -0
  194. mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +157 -0
  195. mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +86 -0
  196. mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +127 -0
  197. mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +279 -0
  198. mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +76 -0
  199. mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +112 -0
  200. mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +51 -0
  201. mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +59 -0
  202. mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +125 -0
  203. mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +140 -0
  204. mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +60 -0
  205. mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +47 -0
  206. mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +27 -0
  207. mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +353 -0
  208. mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +188 -0
  209. mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +524 -0
  210. mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +260 -0
  211. mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +273 -0
  212. mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +303 -0
  213. mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +6 -0
  214. mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +33 -0
  215. mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +68 -0
  216. mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +22 -0
  217. mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +274 -0
  218. mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +5 -0
  219. mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +276 -0
  220. mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +303 -0
  221. mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +6 -0
  222. mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +33 -0
  223. mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +8 -0
  224. mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +277 -0
  225. mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +611 -0
  226. mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +34 -0
  227. mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +28 -0
  228. mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +68 -0
  229. mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +22 -0
  230. mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +283 -0
  231. mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +5 -0
  232. mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +276 -0
  233. mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +303 -0
  234. mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +6 -0
  235. mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +33 -0
  236. mapproxy/test/schemas/wmts/1.0/ReadMe.txt +32 -0
  237. mapproxy/test/schemas/wmts/1.0/wmts.xsd +28 -0
  238. mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +151 -0
  239. mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +38 -0
  240. mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +564 -0
  241. mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +57 -0
  242. mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +72 -0
  243. mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +91 -0
  244. mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +76 -0
  245. mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +70 -0
  246. mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +6 -0
  247. mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +122 -0
  248. mapproxy/test/schemas/xml.xsd +287 -0
  249. mapproxy/test/system/__init__.py +98 -0
  250. mapproxy/test/system/fixture/arcgis.yaml +57 -0
  251. mapproxy/test/system/fixture/auth.yaml +70 -0
  252. mapproxy/test/system/fixture/cache.mbtiles +0 -0
  253. mapproxy/test/system/fixture/cache_azureblob.yaml +59 -0
  254. mapproxy/test/system/fixture/cache_band_merge.yaml +73 -0
  255. mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +24 -0
  256. mapproxy/test/system/fixture/cache_coverage.yaml +84 -0
  257. mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
  258. mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
  259. mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
  260. mapproxy/test/system/fixture/cache_geopackage.yaml +56 -0
  261. mapproxy/test/system/fixture/cache_grid_names.yaml +50 -0
  262. mapproxy/test/system/fixture/cache_mbtiles.yaml +28 -0
  263. mapproxy/test/system/fixture/cache_s3.yaml +58 -0
  264. mapproxy/test/system/fixture/cache_source.yaml +81 -0
  265. mapproxy/test/system/fixture/combined_sources.yaml +130 -0
  266. mapproxy/test/system/fixture/coverage.yaml +77 -0
  267. mapproxy/test/system/fixture/demo.yaml +135 -0
  268. mapproxy/test/system/fixture/dimension.yaml +59 -0
  269. mapproxy/test/system/fixture/disable_storage.yaml +25 -0
  270. mapproxy/test/system/fixture/empty_ogrdata.geojson +1 -0
  271. mapproxy/test/system/fixture/formats.yaml +72 -0
  272. mapproxy/test/system/fixture/inspire.yaml +101 -0
  273. mapproxy/test/system/fixture/inspire_full.yaml +124 -0
  274. mapproxy/test/system/fixture/kml_layer.yaml +66 -0
  275. mapproxy/test/system/fixture/layer.yaml +260 -0
  276. mapproxy/test/system/fixture/layergroups.yaml +57 -0
  277. mapproxy/test/system/fixture/layergroups_root.yaml +106 -0
  278. mapproxy/test/system/fixture/legendgraphic.yaml +93 -0
  279. mapproxy/test/system/fixture/mapnik_source.yaml +66 -0
  280. mapproxy/test/system/fixture/mapproxy_export.yaml +12 -0
  281. mapproxy/test/system/fixture/mapserver.yaml +23 -0
  282. mapproxy/test/system/fixture/minimal_cgi.py +16 -0
  283. mapproxy/test/system/fixture/mixed_mode.yaml +49 -0
  284. mapproxy/test/system/fixture/multi_cache_layers.yaml +111 -0
  285. mapproxy/test/system/fixture/multiapp1.yaml +20 -0
  286. mapproxy/test/system/fixture/multiapp2.yaml +19 -0
  287. mapproxy/test/system/fixture/renderd_client.yaml +55 -0
  288. mapproxy/test/system/fixture/scalehints.yaml +70 -0
  289. mapproxy/test/system/fixture/seed.yaml +94 -0
  290. mapproxy/test/system/fixture/seed_mapproxy.yaml +39 -0
  291. mapproxy/test/system/fixture/seed_old.yaml +12 -0
  292. mapproxy/test/system/fixture/seed_timeouts.yaml +12 -0
  293. mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +27 -0
  294. mapproxy/test/system/fixture/seedonly.yaml +51 -0
  295. mapproxy/test/system/fixture/sld.yaml +35 -0
  296. mapproxy/test/system/fixture/source_errors.yaml +84 -0
  297. mapproxy/test/system/fixture/source_errors_raise.yaml +82 -0
  298. mapproxy/test/system/fixture/tileservice_origin.yaml +26 -0
  299. mapproxy/test/system/fixture/tileservice_refresh.yaml +59 -0
  300. mapproxy/test/system/fixture/tilesource_minmax_res.yaml +22 -0
  301. mapproxy/test/system/fixture/util-conf-base-grids.yaml +5 -0
  302. mapproxy/test/system/fixture/util-conf-overwrite.yaml +13 -0
  303. mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +90 -0
  304. mapproxy/test/system/fixture/util_grids.yaml +29 -0
  305. mapproxy/test/system/fixture/util_wms_capabilities111.xml +130 -0
  306. mapproxy/test/system/fixture/util_wms_capabilities130.xml +100 -0
  307. mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +5 -0
  308. mapproxy/test/system/fixture/watermark.yaml +50 -0
  309. mapproxy/test/system/fixture/wms_srs_extent.yaml +39 -0
  310. mapproxy/test/system/fixture/wms_versions.yaml +38 -0
  311. mapproxy/test/system/fixture/wmts.yaml +134 -0
  312. mapproxy/test/system/fixture/wmts_dimensions.yaml +57 -0
  313. mapproxy/test/system/fixture/xslt_featureinfo.yaml +54 -0
  314. mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +51 -0
  315. mapproxy/test/system/test_arcgis.py +156 -0
  316. mapproxy/test/system/test_auth.py +1133 -0
  317. mapproxy/test/system/test_behind_proxy.py +75 -0
  318. mapproxy/test/system/test_bulk_meta_tiles.py +106 -0
  319. mapproxy/test/system/test_cache_azureblob.py +127 -0
  320. mapproxy/test/system/test_cache_band_merge.py +103 -0
  321. mapproxy/test/system/test_cache_coverage.py +168 -0
  322. mapproxy/test/system/test_cache_geopackage.py +144 -0
  323. mapproxy/test/system/test_cache_grid_names.py +89 -0
  324. mapproxy/test/system/test_cache_mbtiles.py +85 -0
  325. mapproxy/test/system/test_cache_s3.py +115 -0
  326. mapproxy/test/system/test_cache_source.py +146 -0
  327. mapproxy/test/system/test_combined_sources.py +335 -0
  328. mapproxy/test/system/test_coverage.py +140 -0
  329. mapproxy/test/system/test_decorate_img.py +214 -0
  330. mapproxy/test/system/test_demo.py +56 -0
  331. mapproxy/test/system/test_demo_with_extra_service.py +57 -0
  332. mapproxy/test/system/test_dimensions.py +279 -0
  333. mapproxy/test/system/test_disable_storage.py +42 -0
  334. mapproxy/test/system/test_formats.py +219 -0
  335. mapproxy/test/system/test_inspire_vs.py +173 -0
  336. mapproxy/test/system/test_kml.py +264 -0
  337. mapproxy/test/system/test_layergroups.py +160 -0
  338. mapproxy/test/system/test_legendgraphic.py +308 -0
  339. mapproxy/test/system/test_mapnik.py +162 -0
  340. mapproxy/test/system/test_mapserver.py +83 -0
  341. mapproxy/test/system/test_mixed_mode_format.py +201 -0
  342. mapproxy/test/system/test_multi_cache_layers.py +169 -0
  343. mapproxy/test/system/test_multiapp.py +92 -0
  344. mapproxy/test/system/test_refresh.py +206 -0
  345. mapproxy/test/system/test_renderd_client.py +304 -0
  346. mapproxy/test/system/test_response_headers.py +54 -0
  347. mapproxy/test/system/test_scalehints.py +140 -0
  348. mapproxy/test/system/test_seed.py +425 -0
  349. mapproxy/test/system/test_seed_only.py +93 -0
  350. mapproxy/test/system/test_sld.py +120 -0
  351. mapproxy/test/system/test_source_errors.py +377 -0
  352. mapproxy/test/system/test_tilesource_minmax_res.py +54 -0
  353. mapproxy/test/system/test_tms.py +277 -0
  354. mapproxy/test/system/test_tms_origin.py +46 -0
  355. mapproxy/test/system/test_util_conf.py +434 -0
  356. mapproxy/test/system/test_util_export.py +210 -0
  357. mapproxy/test/system/test_util_grids.py +88 -0
  358. mapproxy/test/system/test_util_wms_capabilities.py +182 -0
  359. mapproxy/test/system/test_watermark.py +91 -0
  360. mapproxy/test/system/test_wms.py +1616 -0
  361. mapproxy/test/system/test_wms_srs_extent.py +165 -0
  362. mapproxy/test/system/test_wms_version.py +85 -0
  363. mapproxy/test/system/test_wmsc.py +116 -0
  364. mapproxy/test/system/test_wmts.py +334 -0
  365. mapproxy/test/system/test_wmts_dimensions.py +206 -0
  366. mapproxy/test/system/test_wmts_restful.py +198 -0
  367. mapproxy/test/system/test_xslt_featureinfo.py +423 -0
  368. mapproxy/test/test_http_helper.py +217 -0
  369. mapproxy/test/unit/__init__.py +0 -0
  370. mapproxy/test/unit/epsg +2 -0
  371. mapproxy/test/unit/polygons/polygons.dbf +0 -0
  372. mapproxy/test/unit/polygons/polygons.shp +0 -0
  373. mapproxy/test/unit/polygons/polygons.shx +0 -0
  374. mapproxy/test/unit/test_async.py +242 -0
  375. mapproxy/test/unit/test_auth.py +430 -0
  376. mapproxy/test/unit/test_cache.py +1356 -0
  377. mapproxy/test/unit/test_cache_azureblob.py +97 -0
  378. mapproxy/test/unit/test_cache_compact.py +324 -0
  379. mapproxy/test/unit/test_cache_couchdb.py +118 -0
  380. mapproxy/test/unit/test_cache_geopackage.py +256 -0
  381. mapproxy/test/unit/test_cache_redis.py +123 -0
  382. mapproxy/test/unit/test_cache_riak.py +80 -0
  383. mapproxy/test/unit/test_cache_s3.py +93 -0
  384. mapproxy/test/unit/test_cache_tile.py +477 -0
  385. mapproxy/test/unit/test_client.py +488 -0
  386. mapproxy/test/unit/test_client_arcgis.py +74 -0
  387. mapproxy/test/unit/test_client_cgi.py +140 -0
  388. mapproxy/test/unit/test_collections.py +116 -0
  389. mapproxy/test/unit/test_concat_legends.py +37 -0
  390. mapproxy/test/unit/test_conf_loader.py +1267 -0
  391. mapproxy/test/unit/test_conf_validator.py +427 -0
  392. mapproxy/test/unit/test_config.py +118 -0
  393. mapproxy/test/unit/test_decorate_img.py +185 -0
  394. mapproxy/test/unit/test_exceptions.py +270 -0
  395. mapproxy/test/unit/test_featureinfo.py +313 -0
  396. mapproxy/test/unit/test_file_lock_load.py +49 -0
  397. mapproxy/test/unit/test_geom.py +512 -0
  398. mapproxy/test/unit/test_grid.py +1279 -0
  399. mapproxy/test/unit/test_image.py +1051 -0
  400. mapproxy/test/unit/test_image_mask.py +181 -0
  401. mapproxy/test/unit/test_image_messages.py +209 -0
  402. mapproxy/test/unit/test_image_options.py +160 -0
  403. mapproxy/test/unit/test_isodate.py +118 -0
  404. mapproxy/test/unit/test_multiapp.py +163 -0
  405. mapproxy/test/unit/test_ogr_reader.py +51 -0
  406. mapproxy/test/unit/test_request.py +745 -0
  407. mapproxy/test/unit/test_request_wmts.py +178 -0
  408. mapproxy/test/unit/test_response.py +78 -0
  409. mapproxy/test/unit/test_seed.py +365 -0
  410. mapproxy/test/unit/test_seed_cachelock.py +91 -0
  411. mapproxy/test/unit/test_srs.py +215 -0
  412. mapproxy/test/unit/test_tiled_source.py +122 -0
  413. mapproxy/test/unit/test_tilefilter.py +31 -0
  414. mapproxy/test/unit/test_times.py +25 -0
  415. mapproxy/test/unit/test_timeutils.py +50 -0
  416. mapproxy/test/unit/test_util_conf_utils.py +75 -0
  417. mapproxy/test/unit/test_utils.py +476 -0
  418. mapproxy/test/unit/test_wms_capabilities.py +44 -0
  419. mapproxy/test/unit/test_wms_layer.py +113 -0
  420. mapproxy/test/unit/test_yaml.py +68 -0
  421. mapproxy/tilefilter.py +61 -0
  422. mapproxy/util/__init__.py +0 -0
  423. mapproxy/util/async_.py +229 -0
  424. mapproxy/util/collections.py +134 -0
  425. mapproxy/util/coverage.py +337 -0
  426. mapproxy/util/ext/__init__.py +14 -0
  427. mapproxy/util/ext/dictspec/__init__.py +1 -0
  428. mapproxy/util/ext/dictspec/spec.py +131 -0
  429. mapproxy/util/ext/dictspec/test/__init__.py +0 -0
  430. mapproxy/util/ext/dictspec/test/test_validator.py +278 -0
  431. mapproxy/util/ext/dictspec/validator.py +194 -0
  432. mapproxy/util/ext/local.py +198 -0
  433. mapproxy/util/ext/lockfile.py +140 -0
  434. mapproxy/util/ext/odict.py +321 -0
  435. mapproxy/util/ext/serving.py +491 -0
  436. mapproxy/util/ext/tempita/__init__.py +1093 -0
  437. mapproxy/util/ext/tempita/_looper.py +163 -0
  438. mapproxy/util/ext/tempita/string_utils.py +24 -0
  439. mapproxy/util/ext/wmsparse/__init__.py +3 -0
  440. mapproxy/util/ext/wmsparse/duration.py +600 -0
  441. mapproxy/util/ext/wmsparse/parse.py +307 -0
  442. mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
  443. mapproxy/util/ext/wmsparse/test/test_parse.py +111 -0
  444. mapproxy/util/ext/wmsparse/test/test_util.py +23 -0
  445. mapproxy/util/ext/wmsparse/test/wms-example-111.xml +90 -0
  446. mapproxy/util/ext/wmsparse/test/wms-example-130.xml +120 -0
  447. mapproxy/util/ext/wmsparse/test/wms-large-111.xml +2114 -0
  448. mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +386 -0
  449. mapproxy/util/ext/wmsparse/util.py +189 -0
  450. mapproxy/util/fs.py +164 -0
  451. mapproxy/util/geom.py +307 -0
  452. mapproxy/util/lib.py +117 -0
  453. mapproxy/util/lock.py +171 -0
  454. mapproxy/util/ogr.py +247 -0
  455. mapproxy/util/py.py +75 -0
  456. mapproxy/util/times.py +78 -0
  457. mapproxy/util/yaml.py +58 -0
  458. mapproxy/version.py +33 -0
  459. mapproxy/wsgiapp.py +167 -0
@@ -0,0 +1,427 @@
1
+ # This file is part of the MapProxy project.
2
+ # Copyright (C) 2015 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 print_function
17
+
18
+ import yaml
19
+
20
+ from mapproxy.config.validator import validate
21
+
22
+
23
+ class TestValidator(object):
24
+ def _test_conf(self, yaml_part=None):
25
+ base = yaml.safe_load('''
26
+ services:
27
+ wms:
28
+ md:
29
+ title: MapProxy
30
+ layers:
31
+ - name: one
32
+ title: One
33
+ sources: [one_cache]
34
+ caches:
35
+ one_cache:
36
+ grids: [GLOBAL_MERCATOR]
37
+ sources: [one_source]
38
+ sources:
39
+ one_source:
40
+ type: wms
41
+ req:
42
+ url: http://localhost/service?
43
+ layers: one
44
+ ''')
45
+ if yaml_part is not None:
46
+ base.update(yaml.safe_load(yaml_part))
47
+ return base
48
+
49
+ def test_valid_config(self):
50
+ conf = self._test_conf()
51
+
52
+ errors = validate(conf)
53
+ assert errors == []
54
+
55
+ def test_missing_layer_source(self):
56
+ conf = self._test_conf()
57
+ del conf['caches']['one_cache']
58
+
59
+ errors = validate(conf)
60
+ assert errors == [
61
+ "Source 'one_cache' for layer 'one' not in cache or source section"
62
+ ]
63
+
64
+ def test_multiple_errors(self):
65
+ conf = self._test_conf()
66
+ del conf['caches']['one_cache']
67
+ del conf['services']
68
+ errors = validate(conf)
69
+ assert errors == [
70
+ "'services' is a required property in root",
71
+ "Source 'one_cache' for layer 'one' not in cache or source section",
72
+ ]
73
+
74
+ def test_empty_layer_sources(self):
75
+ conf = self._test_conf('''
76
+ layers:
77
+ - name: one
78
+ title: One
79
+ sources: []
80
+ ''')
81
+
82
+ errors = validate(conf)
83
+ assert errors == [
84
+ "[] is too short in root.layers[0].sources"
85
+ ]
86
+
87
+ def test_missing_cache_source(self):
88
+ conf = self._test_conf()
89
+ del conf['sources']['one_source']
90
+
91
+ errors = validate(conf)
92
+ assert errors == [
93
+ "Source 'one_source' for cache 'one_cache' not found in config"
94
+ ]
95
+
96
+ def test_missing_layers_section(self):
97
+ conf = self._test_conf()
98
+ del conf['layers']
99
+
100
+ errors = validate(conf)
101
+ assert errors == [
102
+ "'layers' is a required property in root"
103
+ ]
104
+
105
+ def test_missing_services_section(self):
106
+ conf = self._test_conf()
107
+ del conf['services']
108
+ errors = validate(conf)
109
+ assert errors == [
110
+ "'services' is a required property in root"
111
+ ]
112
+
113
+ def test_tile_source(self):
114
+ conf = self._test_conf('''
115
+ layers:
116
+ - name: one
117
+ tile_sources: [missing]
118
+ ''')
119
+
120
+ errors = validate(conf)
121
+ assert errors == [
122
+ "Tile source 'missing' for layer 'one' not in cache section"
123
+ ]
124
+
125
+ def test_missing_grid(self):
126
+ conf = self._test_conf('''
127
+ caches:
128
+ one_cache:
129
+ grids: [MYGRID_OTHERGRID]
130
+ sources: []
131
+ grids:
132
+ MYGRID:
133
+ base: GLOBAL_GEODETIC
134
+ ''')
135
+
136
+ errors = validate(conf)
137
+ assert errors == [
138
+ "Grid 'MYGRID_OTHERGRID' for cache 'one_cache' not found in config"
139
+ ]
140
+
141
+ def test_misconfigured_wms_source(self):
142
+ conf = self._test_conf()
143
+
144
+ del conf['sources']['one_source']['req']['layers']
145
+
146
+ errors = validate(conf)
147
+ assert errors == [
148
+ "Missing 'layers' for source 'one_source'"
149
+ ]
150
+
151
+ def test_misconfigured_mapserver_source_without_globals(self):
152
+ conf = self._test_conf('''
153
+ sources:
154
+ one_source:
155
+ type: mapserver
156
+ req:
157
+ map: foo.map
158
+ mapserver:
159
+ binary: /foo/bar/baz
160
+ ''')
161
+
162
+ errors = validate(conf)
163
+ assert errors == [
164
+ 'Could not find mapserver binary (/foo/bar/baz)'
165
+ ]
166
+
167
+ del conf['sources']['one_source']['mapserver']['binary']
168
+
169
+ errors = validate(conf)
170
+ assert errors == [
171
+ "Missing mapserver binary for source 'one_source'"
172
+ ]
173
+
174
+ del conf['sources']['one_source']['mapserver']
175
+
176
+ errors = validate(conf)
177
+ assert errors == [
178
+ "Missing mapserver binary for source 'one_source'"
179
+ ]
180
+
181
+ def test_misconfigured_mapserver_source_with_globals(self):
182
+ conf = self._test_conf('''
183
+ sources:
184
+ one_source:
185
+ type: mapserver
186
+ req:
187
+ map: foo.map
188
+ globals:
189
+ mapserver:
190
+ binary: /foo/bar/baz
191
+ ''')
192
+
193
+ errors = validate(conf)
194
+ assert errors == [
195
+ 'Could not find mapserver binary (/foo/bar/baz)'
196
+ ]
197
+
198
+ del conf['globals']['mapserver']['binary']
199
+
200
+ errors = validate(conf)
201
+ assert errors == [
202
+ "Missing mapserver binary for source 'one_source'"
203
+ ]
204
+
205
+ def test_tagged_sources_with_layers(self):
206
+ conf = self._test_conf('''
207
+ caches:
208
+ one_cache:
209
+ grids: [GLOBAL_MERCATOR]
210
+ sources: ['one_source:foo,bar']
211
+ ''')
212
+
213
+ errors = validate(conf)
214
+ assert errors == [
215
+ "Supported layers for source 'one_source' are 'one' but tagged source "
216
+ "requested layers 'foo, bar'"
217
+ ]
218
+
219
+ def test_tagged_layer_sources_with_layers(self):
220
+ conf = self._test_conf('''
221
+ layers:
222
+ - name: one
223
+ title: One
224
+ sources: ['one_source:foo,bar']
225
+ ''')
226
+
227
+ errors = validate(conf)
228
+ assert errors == [
229
+ "Supported layers for source 'one_source' are 'one' but tagged source "
230
+ "requested layers 'foo, bar'"
231
+ ]
232
+
233
+ def test_tagged_layer_sources_without_layers(self):
234
+ conf = self._test_conf('''
235
+ layers:
236
+ - name: one
237
+ title: One
238
+ sources: ['one_source:foo,bar']
239
+ ''')
240
+
241
+ del conf['sources']['one_source']['req']['layers']
242
+
243
+ errors = validate(conf)
244
+ assert errors == []
245
+
246
+ def test_tagged_source_without_layers(self):
247
+ conf = self._test_conf('''
248
+ caches:
249
+ one_cache:
250
+ grids: [GLOBAL_MERCATOR]
251
+ sources: ['one_source:foo,bar']
252
+ ''')
253
+
254
+ del conf['sources']['one_source']['req']['layers']
255
+
256
+ errors = validate(conf)
257
+ assert errors == []
258
+
259
+ def test_tagged_source_with_colons(self):
260
+ conf = self._test_conf('''
261
+ caches:
262
+ one_cache:
263
+ grids: [GLOBAL_MERCATOR]
264
+ sources: ['one_source:ns:foo,ns:bar']
265
+ ''')
266
+
267
+ del conf['sources']['one_source']['req']['layers']
268
+
269
+ errors = validate(conf)
270
+ assert errors == []
271
+
272
+ def test_with_grouped_layer(self):
273
+ conf = self._test_conf('''
274
+ layers:
275
+ - name: group
276
+ title: Group
277
+ layers:
278
+ - name: one
279
+ title: One
280
+ sources: [one_cache]
281
+ ''')
282
+
283
+ errors = validate(conf)
284
+ assert errors == []
285
+
286
+ def test_without_cache(self):
287
+ conf = self._test_conf('''
288
+ layers:
289
+ - name: one
290
+ title: One
291
+ sources: [one_source]
292
+ ''')
293
+
294
+ errors = validate(conf)
295
+ assert errors == []
296
+
297
+ def test_mapserver_with_tagged_layers(self):
298
+ conf = self._test_conf('''
299
+ sources:
300
+ one_source:
301
+ type: mapserver
302
+ req:
303
+ map: foo.map
304
+ layers: one
305
+ mapserver:
306
+ binary: /foo/bar/baz
307
+ caches:
308
+ one_cache:
309
+ grids: [GLOBAL_MERCATOR]
310
+ sources: ['one_source:foo,bar']
311
+ ''')
312
+
313
+ errors = validate(conf)
314
+ assert errors == [
315
+ 'Could not find mapserver binary (/foo/bar/baz)',
316
+ "Supported layers for source 'one_source' are 'one' but tagged source "
317
+ "requested layers 'foo, bar'"
318
+ ]
319
+
320
+ def test_mapnik_with_tagged_layers(self):
321
+ conf = self._test_conf('''
322
+ sources:
323
+ one_source:
324
+ type: mapnik
325
+ mapfile: foo.map
326
+ layers: one
327
+ caches:
328
+ one_cache:
329
+ grids: [GLOBAL_MERCATOR]
330
+ sources: ['one_source:foo,bar']
331
+ ''')
332
+
333
+ errors = validate(conf)
334
+ assert errors == [
335
+ "Supported layers for source 'one_source' are 'one' but tagged source "
336
+ "requested layers 'foo, bar'"
337
+ ]
338
+
339
+ def test_tagged_layers_for_unsupported_source_type(self):
340
+ conf = self._test_conf('''
341
+ sources:
342
+ one_source:
343
+ type: tile
344
+ url: http://localhost/tiles/
345
+ caches:
346
+ one_cache:
347
+ grids: [GLOBAL_MERCATOR]
348
+ sources: ['one_source:foo,bar']
349
+ ''')
350
+
351
+ errors = validate(conf)
352
+ assert errors == [
353
+ "Found tagged source 'one_source' in cache 'one_cache' but tagged sources "
354
+ "only supported for 'wms, mapserver, mapnik' sources"
355
+ ]
356
+
357
+ def test_cascaded_caches(self):
358
+ conf = self._test_conf('''
359
+ caches:
360
+ one_cache:
361
+ sources: [two_cache]
362
+ two_cache:
363
+ grids: [GLOBAL_MERCATOR]
364
+ sources: ['one_source']
365
+ ''')
366
+
367
+ errors = validate(conf)
368
+ assert errors == []
369
+
370
+ def test_with_int_0_as_names_and_layers(self):
371
+ conf = self._test_conf('''
372
+ services:
373
+ wms:
374
+ md:
375
+ title: MapProxy
376
+ layers:
377
+ - name: 0
378
+ title: One
379
+ sources: [0]
380
+ caches:
381
+ 0:
382
+ grids: [GLOBAL_MERCATOR]
383
+ sources: [0]
384
+ sources:
385
+ 0:
386
+ type: wms
387
+ req:
388
+ url: http://localhost/service?
389
+ layers: 0
390
+ ''')
391
+
392
+ errors = validate(conf)
393
+ assert errors == []
394
+
395
+ def test_band_merge_missing_source(self):
396
+ conf = self._test_conf('''
397
+ caches:
398
+ one_cache:
399
+ sources:
400
+ l:
401
+ - source: dop
402
+ band: 1
403
+ factor: 0.4
404
+ - source: missing1
405
+ band: 2
406
+ factor: 0.2
407
+ - source: cache_missing_source
408
+ band: 2
409
+ factor: 0.2
410
+ grids: [GLOBAL_MERCATOR]
411
+ cache_missing_source:
412
+ sources: [missing2]
413
+ grids: [GLOBAL_MERCATOR]
414
+
415
+ sources:
416
+ dop:
417
+ type: wms
418
+ req:
419
+ url: http://localhost/service?
420
+ layers: dop
421
+ ''')
422
+
423
+ errors = validate(conf)
424
+ assert errors == [
425
+ "Source 'missing1' for cache 'one_cache' not found in config",
426
+ "Source 'missing2' for cache 'cache_missing_source' not found in config",
427
+ ]
@@ -0,0 +1,118 @@
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
+
17
+ from mapproxy.config import Options, base_config, load_base_config
18
+ from mapproxy.test.helper import TempFiles
19
+
20
+
21
+ class TestOptions(object):
22
+ def test_update_overwrite(self):
23
+ d = Options(foo='bar', baz=4)
24
+ d.update(Options(baz=5))
25
+ assert d.baz == 5
26
+ assert d.foo == 'bar'
27
+
28
+ def test_update_new(self):
29
+ d = Options(foo='bar', baz=4)
30
+ d.update(Options(biz=5))
31
+ assert d.baz == 4
32
+ assert d.biz == 5
33
+ assert d.foo == 'bar'
34
+
35
+ def test_update_recursive(self):
36
+ d = Options(
37
+ foo='bar',
38
+ baz=Options(ham=2, eggs=4))
39
+ d.update(Options(baz=Options(eggs=5)))
40
+ assert d.foo == 'bar'
41
+ assert d.baz.ham == 2
42
+ assert d.baz.eggs == 5
43
+
44
+ def test_compare(self):
45
+ assert Options(foo=4) == Options(foo=4)
46
+ assert Options(foo=Options(bar=4)) == Options(foo=Options(bar=4))
47
+
48
+
49
+ class TestDefaultsLoading(object):
50
+ def teardown_method(self):
51
+ load_base_config(clear_existing=True)
52
+
53
+ defaults_yaml = b"""
54
+ foo:
55
+ bar:
56
+ ham: 2
57
+ eggs: 4
58
+ biz: 'foobar'
59
+ wiz: 'foobar'
60
+ """
61
+
62
+ def test_defaults(self):
63
+ with TempFiles() as tmp:
64
+ with open(tmp[0], 'wb') as f:
65
+ f.write(TestDefaultsLoading.defaults_yaml)
66
+ load_base_config(config_file=tmp[0], clear_existing=True)
67
+
68
+ assert base_config().biz == 'foobar'
69
+ assert base_config().wiz == 'foobar'
70
+ assert base_config().foo.bar.ham == 2
71
+ assert base_config().foo.bar.eggs == 4
72
+ assert not hasattr(base_config(), 'wms')
73
+
74
+ def test_defaults_overwrite(self):
75
+ with TempFiles(2) as tmp:
76
+ with open(tmp[0], 'wb') as f:
77
+ f.write(TestDefaultsLoading.defaults_yaml)
78
+ with open(tmp[1], 'wb') as f:
79
+ f.write(b"""
80
+ baz: [9, 2, 1, 4]
81
+ biz: 'barfoo'
82
+ foo:
83
+ bar:
84
+ eggs: 5
85
+ """)
86
+
87
+ load_base_config(config_file=tmp[0], clear_existing=True)
88
+ load_base_config(config_file=tmp[1])
89
+
90
+ assert base_config().biz == 'barfoo'
91
+ assert base_config().wiz == 'foobar'
92
+ assert base_config().baz == [9, 2, 1, 4]
93
+ assert base_config().foo.bar.ham == 2
94
+ assert base_config().foo.bar.eggs == 5
95
+ assert not hasattr(base_config(), 'wms')
96
+
97
+
98
+ class TestSRSConfig(object):
99
+ def teardown_method(self):
100
+ load_base_config(clear_existing=True)
101
+
102
+ def test_user_srs_definitions(self):
103
+ user_yaml = b"""
104
+ srs:
105
+ axis_order_ne: ['EPSG:9999']
106
+ """
107
+ with TempFiles() as tmp:
108
+ with open(tmp[0], 'wb') as f:
109
+ f.write(user_yaml)
110
+
111
+ load_base_config(config_file=tmp[0])
112
+
113
+ assert 'EPSG:9999' in base_config().srs.axis_order_ne
114
+ assert 'EPSG:9999' not in base_config().srs.axis_order_en
115
+
116
+ # defaults still there
117
+ assert 'EPSG:31468' in base_config().srs.axis_order_ne
118
+ assert 'CRS:84' in base_config().srs.axis_order_en