c2cgeoportal-geoportal 2.6.0__py2.py3-none-any.whl → 2.8.1.180__py2.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 (225) hide show
  1. c2cgeoportal_geoportal/__init__.py +245 -95
  2. c2cgeoportal_geoportal/lib/__init__.py +67 -43
  3. c2cgeoportal_geoportal/lib/authentication.py +50 -26
  4. c2cgeoportal_geoportal/lib/bashcolor.py +17 -13
  5. c2cgeoportal_geoportal/lib/cacheversion.py +16 -8
  6. c2cgeoportal_geoportal/lib/caching.py +65 -193
  7. c2cgeoportal_geoportal/lib/check_collector.py +17 -10
  8. c2cgeoportal_geoportal/lib/checker.py +67 -65
  9. c2cgeoportal_geoportal/lib/common_headers.py +167 -0
  10. c2cgeoportal_geoportal/lib/dbreflection.py +61 -46
  11. c2cgeoportal_geoportal/lib/filter_capabilities.py +126 -88
  12. c2cgeoportal_geoportal/lib/fulltextsearch.py +6 -5
  13. c2cgeoportal_geoportal/lib/functionality.py +20 -17
  14. c2cgeoportal_geoportal/lib/headers.py +14 -5
  15. c2cgeoportal_geoportal/lib/i18n.py +4 -4
  16. c2cgeoportal_geoportal/lib/layers.py +30 -11
  17. c2cgeoportal_geoportal/lib/lingua_extractor.py +363 -240
  18. c2cgeoportal_geoportal/lib/loader.py +11 -16
  19. c2cgeoportal_geoportal/lib/metrics.py +28 -17
  20. c2cgeoportal_geoportal/lib/oauth2.py +392 -206
  21. c2cgeoportal_geoportal/lib/wmstparsing.py +105 -84
  22. c2cgeoportal_geoportal/lib/xsd.py +26 -16
  23. c2cgeoportal_geoportal/resources.py +15 -9
  24. c2cgeoportal_geoportal/scaffolds/advance_create/ci/config.yaml +26 -0
  25. c2cgeoportal_geoportal/scaffolds/advance_create/cookiecutter.json +18 -0
  26. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.dockerignore +6 -0
  27. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.eslintrc.yaml +19 -0
  28. c2cgeoportal_geoportal/scaffolds/{create/geoportal/+dot+prospector.yaml → advance_create/{{cookiecutter.project}}/geoportal/.prospector.yaml} +8 -2
  29. c2cgeoportal_geoportal/scaffolds/{create/geoportal/Dockerfile_tmpl → advance_create/{{cookiecutter.project}}/geoportal/Dockerfile} +22 -15
  30. c2cgeoportal_geoportal/scaffolds/{create/geoportal/alembic.yaml_tmpl → advance_create/{{cookiecutter.project}}/geoportal/alembic.yaml} +1 -1
  31. c2cgeoportal_geoportal/scaffolds/{create/geoportal/development.ini_tmpl → advance_create/{{cookiecutter.project}}/geoportal/development.ini} +34 -15
  32. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py +100 -0
  33. c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/lingua-client.cfg +1 -0
  34. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/production.ini +38 -0
  35. c2cgeoportal_geoportal/scaffolds/{create/geoportal/setup.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/setup.py} +6 -7
  36. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/tsconfig.json +8 -0
  37. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +77 -0
  38. c2cgeoportal_geoportal/scaffolds/{create/geoportal/webpack.apps.js_tmpl → advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js} +29 -28
  39. c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/webpack.commons.js +4 -7
  40. c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/webpack.config.js +1 -1
  41. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py +42 -0
  42. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/authentication.py +10 -0
  43. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/dev.py +14 -0
  44. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/models.py +8 -0
  45. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/multi_organization.py +7 -0
  46. c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/resources.py +4 -3
  47. c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal/static-ngeo/api/index.js_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/api/index.js} +1 -2
  48. c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal/static-ngeo/js/+package+module.js_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/{{cookiecutter.package}}module.js} +4 -4
  49. c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal/subscribers.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/subscribers.py} +1 -3
  50. c2cgeoportal_geoportal/scaffolds/advance_update/cookiecutter.json +18 -0
  51. c2cgeoportal_geoportal/scaffolds/{update/geoportal/CONST_Makefile_tmpl → advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile} +3 -27
  52. c2cgeoportal_geoportal/scaffolds/create/cookiecutter.json +18 -0
  53. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.dockerignore +14 -0
  54. c2cgeoportal_geoportal/scaffolds/create/{+dot+editorconfig → {{cookiecutter.project}}/.editorconfig} +2 -5
  55. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/main.yaml +57 -0
  56. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/rebuild.yaml +46 -0
  57. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml +66 -0
  58. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.gitignore +16 -0
  59. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierignore +1 -0
  60. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierrc.yaml +2 -0
  61. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +76 -0
  62. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +70 -0
  63. c2cgeoportal_geoportal/scaffolds/create/{README.rst_tmpl → {{cookiecutter.project}}/README.rst} +4 -4
  64. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +186 -0
  65. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/config.yaml +22 -0
  66. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/docker-compose-check +25 -0
  67. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +1 -0
  68. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml +26 -0
  69. c2cgeoportal_geoportal/scaffolds/create/{docker-compose-lib.yaml → {{cookiecutter.project}}/docker-compose-lib.yaml} +165 -22
  70. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +23 -0
  71. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +66 -0
  72. c2cgeoportal_geoportal/scaffolds/create/{docker-compose.yaml → {{cookiecutter.project}}/docker-compose.yaml} +20 -15
  73. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +101 -0
  74. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +69 -0
  75. c2cgeoportal_geoportal/scaffolds/create/{geoportal/vars.yaml_tmpl → {{cookiecutter.project}}/geoportal/vars.yaml} +126 -36
  76. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/mobile.css +0 -0
  77. c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/data/Readme.txt +3 -3
  78. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/demo.map.tmpl +224 -0
  79. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.conf +15 -0
  80. c2cgeoportal_geoportal/scaffolds/create/{mapserver/mapserver.map.tmpl_tmpl → {{cookiecutter.project}}/mapserver/mapserver.map.tmpl} +9 -18
  81. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Landscape.jrxml +13 -8
  82. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Portrait.jrxml +13 -8
  83. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Landscape.jrxml +13 -8
  84. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Portrait.jrxml +13 -8
  85. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/config.yaml.tmpl +11 -4
  86. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation.properties +4 -0
  87. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation_fr.properties +4 -0
  88. c2cgeoportal_geoportal/scaffolds/create/{project.yaml_tmpl → {{cookiecutter.project}}/project.yaml} +6 -6
  89. c2cgeoportal_geoportal/scaffolds/create/{pyproject.toml → {{cookiecutter.project}}/pyproject.toml} +4 -0
  90. c2cgeoportal_geoportal/scaffolds/create/{qgisserver/pg_service.conf.tmpl_tmpl → {{cookiecutter.project}}/qgisserver/pg_service.conf.tmpl} +2 -2
  91. c2cgeoportal_geoportal/scaffolds/create/{run_alembic.sh → {{cookiecutter.project}}/run_alembic.sh} +3 -5
  92. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +110 -0
  93. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +114 -0
  94. c2cgeoportal_geoportal/scaffolds/create/{setup.cfg_tmpl → {{cookiecutter.project}}/setup.cfg} +1 -1
  95. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/spell-ignore-words.txt +5 -0
  96. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/__init__.py +0 -0
  97. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/test_app.py +38 -0
  98. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tilegeneration/config.yaml.tmpl +195 -0
  99. c2cgeoportal_geoportal/scaffolds/update/cookiecutter.json +18 -0
  100. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/.upgrade.yaml +61 -0
  101. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +273 -0
  102. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
  103. c2cgeoportal_geoportal/scaffolds/update/{geoportal → {{cookiecutter.project}}/geoportal}/CONST_config-schema.yaml +64 -17
  104. c2cgeoportal_geoportal/scaffolds/update/{geoportal/CONST_vars.yaml_tmpl → {{cookiecutter.project}}/geoportal/CONST_vars.yaml} +396 -19
  105. c2cgeoportal_geoportal/scripts/__init__.py +16 -30
  106. c2cgeoportal_geoportal/scripts/c2cupgrade.py +272 -234
  107. c2cgeoportal_geoportal/scripts/create_demo_theme.py +3 -6
  108. c2cgeoportal_geoportal/scripts/manage_users.py +34 -39
  109. c2cgeoportal_geoportal/scripts/pcreate.py +310 -0
  110. c2cgeoportal_geoportal/scripts/theme2fts.py +128 -24
  111. c2cgeoportal_geoportal/scripts/urllogin.py +19 -11
  112. c2cgeoportal_geoportal/templates/login.html +88 -84
  113. c2cgeoportal_geoportal/templates/notlogin.html +59 -59
  114. c2cgeoportal_geoportal/templates/testi18n.html +6 -8
  115. c2cgeoportal_geoportal/views/__init__.py +23 -6
  116. c2cgeoportal_geoportal/views/dev.py +9 -7
  117. c2cgeoportal_geoportal/views/dynamic.py +56 -19
  118. c2cgeoportal_geoportal/views/entry.py +85 -24
  119. c2cgeoportal_geoportal/views/fulltextsearch.py +29 -23
  120. c2cgeoportal_geoportal/views/geometry_processing.py +17 -9
  121. c2cgeoportal_geoportal/views/i18n.py +91 -9
  122. c2cgeoportal_geoportal/views/layers.py +166 -133
  123. c2cgeoportal_geoportal/views/login.py +161 -93
  124. c2cgeoportal_geoportal/views/mapserverproxy.py +47 -31
  125. c2cgeoportal_geoportal/views/memory.py +12 -12
  126. c2cgeoportal_geoportal/views/ogcproxy.py +52 -30
  127. c2cgeoportal_geoportal/views/pdfreport.py +30 -26
  128. c2cgeoportal_geoportal/views/printproxy.py +60 -52
  129. c2cgeoportal_geoportal/views/profile.py +24 -23
  130. c2cgeoportal_geoportal/views/proxy.py +88 -72
  131. c2cgeoportal_geoportal/views/raster.py +37 -26
  132. c2cgeoportal_geoportal/views/resourceproxy.py +13 -11
  133. c2cgeoportal_geoportal/views/shortener.py +27 -25
  134. c2cgeoportal_geoportal/views/theme.py +472 -332
  135. c2cgeoportal_geoportal/views/tinyowsproxy.py +42 -44
  136. c2cgeoportal_geoportal/views/vector_tiles.py +80 -0
  137. {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/METADATA +19 -8
  138. c2cgeoportal_geoportal-2.8.1.180.dist-info/RECORD +191 -0
  139. {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/WHEEL +1 -1
  140. {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/entry_points.txt +3 -0
  141. tests/__init__.py +10 -5
  142. tests/test_cachebuster.py +3 -5
  143. tests/test_caching.py +18 -26
  144. tests/test_checker.py +1 -3
  145. tests/test_decimaljson.py +5 -5
  146. tests/test_headerstween.py +1 -3
  147. tests/test_i18n.py +2 -2
  148. tests/test_init.py +16 -20
  149. tests/test_locale_negociator.py +4 -6
  150. tests/test_mapserverproxy_route_predicate.py +1 -4
  151. tests/test_raster.py +15 -17
  152. tests/test_wmstparsing.py +10 -12
  153. tests/xmlstr.py +1 -3
  154. c2cgeoportal_geoportal/scaffolds/__init__.py +0 -227
  155. c2cgeoportal_geoportal/scaffolds/create/+dot+dockerignore_tmpl +0 -12
  156. c2cgeoportal_geoportal/scaffolds/create/+dot+github/workflows/main.yaml_tmpl +0 -89
  157. c2cgeoportal_geoportal/scaffolds/create/+dot+github/workflows/rebuild.yaml_tmpl +0 -78
  158. c2cgeoportal_geoportal/scaffolds/create/+dot+gitignore_tmpl +0 -16
  159. c2cgeoportal_geoportal/scaffolds/create/Dockerfile_tmpl +0 -67
  160. c2cgeoportal_geoportal/scaffolds/create/Makefile +0 -3
  161. c2cgeoportal_geoportal/scaffolds/create/build_tmpl +0 -167
  162. c2cgeoportal_geoportal/scaffolds/create/ci/config.yaml_tmpl +0 -23
  163. c2cgeoportal_geoportal/scaffolds/create/ci/requirements.txt +0 -1
  164. c2cgeoportal_geoportal/scaffolds/create/ci/trigger +0 -68
  165. c2cgeoportal_geoportal/scaffolds/create/docker-compose.override.sample.yaml +0 -54
  166. c2cgeoportal_geoportal/scaffolds/create/env.default_tmpl +0 -67
  167. c2cgeoportal_geoportal/scaffolds/create/env.project_tmpl +0 -48
  168. c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+dockerignore_tmpl +0 -6
  169. c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+eslintrc_tmpl +0 -15
  170. c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/__init__.py_tmpl +0 -58
  171. c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/models.py_tmpl +0 -10
  172. c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static/robot.txt +0 -3
  173. c2cgeoportal_geoportal/scaffolds/create/geoportal/production.ini_tmpl +0 -106
  174. c2cgeoportal_geoportal/scaffolds/create/geoportal/tools/extract-messages.js +0 -39
  175. c2cgeoportal_geoportal/scaffolds/create/geoportal/tsconfig.json_tmpl +0 -9
  176. c2cgeoportal_geoportal/scaffolds/create/geoportal/webpack.api.js_tmpl +0 -72
  177. c2cgeoportal_geoportal/scaffolds/create/mapserver/demo.map.tmpl_tmpl +0 -262
  178. c2cgeoportal_geoportal/scaffolds/create/mapserver/tinyows.xml +0 -36
  179. c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml +0 -168
  180. c2cgeoportal_geoportal/scaffolds/create/qgisserver/geomapfish.yaml.tmpl_tmpl +0 -16
  181. c2cgeoportal_geoportal/scaffolds/create/spell-ignore-words.txt +0 -1
  182. c2cgeoportal_geoportal/scaffolds/create/tilegeneration/config.yaml.tmpl_tmpl +0 -185
  183. c2cgeoportal_geoportal/scaffolds/create/yamllint.yaml +0 -11
  184. c2cgeoportal_geoportal/scaffolds/update/+dot+upgrade.yaml_tmpl +0 -181
  185. c2cgeoportal_geoportal/scaffolds/update/CONST_CHANGELOG.txt_tmpl +0 -454
  186. c2cgeoportal_geoportal/templates/dynamic.js +0 -21
  187. c2cgeoportal_geoportal-2.6.0.dist-info/RECORD +0 -173
  188. /c2cgeoportal_geoportal/{scaffolds/create/geoportal/+package+_geoportal/static/css/desktop.css → py.typed} +0 -0
  189. /c2cgeoportal_geoportal/scaffolds/{create/geoportal/Makefile_tmpl → advance_create/{{cookiecutter.project}}/geoportal/Makefile} +0 -0
  190. /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/alembic.ini +0 -0
  191. /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/language_mapping +0 -0
  192. /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/lingua-server.cfg +0 -0
  193. /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/requirements.txt +0 -0
  194. /c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/views/__init__.py +0 -0
  195. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal/locale/en/LC_MESSAGES/+package+_geoportal-client.po → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/locale/en/LC_MESSAGES/{{cookiecutter.package}}_geoportal-client.po} +0 -0
  196. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal/static/css/iframe_api.css → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/desktop.css} +0 -0
  197. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal/static/css/mobile.css → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/iframe_api.css} +0 -0
  198. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/banner_left.png +0 -0
  199. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/banner_right.png +0 -0
  200. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/blank.png +0 -0
  201. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-blue.png +0 -0
  202. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-gold.png +0 -0
  203. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-green.png +0 -0
  204. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker.png +0 -0
  205. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/robot.txt.tmpl +0 -0
  206. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/data/TM_EUROPE_BORDERS-0.3.sql +0 -0
  207. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arial.ttf +0 -0
  208. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arialbd.ttf +0 -0
  209. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arialbi.ttf +0 -0
  210. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Ariali.ttf +0 -0
  211. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Bold.ttf +0 -0
  212. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-BoldItalic.ttf +0 -0
  213. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Italic.ttf +0 -0
  214. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Regular.ttf +0 -0
  215. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdana.ttf +0 -0
  216. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanab.ttf +0 -0
  217. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanai.ttf +0 -0
  218. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanaz.ttf +0 -0
  219. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts.conf +0 -0
  220. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/tinyows.xml.tmpl +0 -0
  221. /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/legend.jrxml +0 -0
  222. /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/logo.png +0 -0
  223. /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/north.svg +0 -0
  224. /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/results.jrxml +0 -0
  225. {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/top_level.txt +0 -0
tests/test_caching.py CHANGED
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2015-2019, Camptocamp SA
1
+ # Copyright (c) 2015-2024, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
@@ -35,13 +33,8 @@ from unittest import TestCase
35
33
  from tests import DummyRequest
36
34
 
37
35
  from c2cgeoportal_geoportal.lib.cacheversion import get_cache_version
38
- from c2cgeoportal_geoportal.lib.caching import (
39
- CORS_METHODS,
40
- NO_CACHE,
41
- init_region,
42
- invalidate_region,
43
- set_common_headers,
44
- )
36
+ from c2cgeoportal_geoportal.lib.caching import init_region, invalidate_region
37
+ from c2cgeoportal_geoportal.lib.common_headers import CORS_METHODS, Cache, set_common_headers
45
38
 
46
39
 
47
40
  class TestSetCorsHeaders(TestCase):
@@ -57,31 +50,31 @@ class TestSetCorsHeaders(TestCase):
57
50
  request.registry.settings = {"headers": {"foo": settings}}
58
51
  else:
59
52
  request.registry.settings = {"headers": {}}
60
- set_common_headers(request, "foo", NO_CACHE, credentials=credentials)
53
+ set_common_headers(request, "foo", Cache.PRIVATE_NO, credentials=credentials)
61
54
 
62
55
  return dict(request.response.headers)
63
56
 
64
57
  def test_simple(self):
65
58
  """
66
- Tests specified in http://www.w3.org/TR/cors/#resource-requests
59
+ Tests specified in http://www.w3.org/TR/cors/#resource-requests.
67
60
  """
68
61
  # 1. If the Origin header is not present terminate this set of steps.
69
62
  # The request is outside the scope of this specification.
70
63
  assert self._do("POST", {}) == {
71
- "Cache-Control": "max-age=0, no-cache",
64
+ "Cache-Control": "max-age=10, private",
72
65
  "Content-Length": "0",
73
66
  "Content-Type": "text/html; charset=UTF-8",
74
- "Vary": "Origin",
67
+ "Vary": "Origin, Cookie",
75
68
  }
76
69
 
77
70
  # 2. If the value of the Origin header is not a case-sensitive match for
78
71
  # any of the values in list of origins, do not set any additional
79
72
  # headers and terminate this set of steps.
80
73
  assert self._do("POST", {"Origin": "http://foe.com"}) == {
81
- "Cache-Control": "max-age=0, no-cache",
74
+ "Cache-Control": "max-age=10, private",
82
75
  "Content-Length": "0",
83
76
  "Content-Type": "text/html; charset=UTF-8",
84
- "Vary": "Origin",
77
+ "Vary": "Origin, Cookie",
85
78
  }
86
79
 
87
80
  # 3. If the resource supports credentials add a single
@@ -89,10 +82,10 @@ class TestSetCorsHeaders(TestCase):
89
82
  # header as value, and add a single Access-Control-Allow-Credentials
90
83
  # header with the case-sensitive string "true" as value.
91
84
  assert self._do("POST", {"Origin": self.ORIGIN2}, credentials=True) == {
92
- "Cache-Control": "max-age=0, no-cache",
85
+ "Cache-Control": "max-age=10, private",
93
86
  "Content-Length": "0",
94
87
  "Content-Type": "text/html; charset=UTF-8",
95
- "Vary": "Origin",
88
+ "Vary": "Origin, Cookie",
96
89
  "Access-Control-Max-Age": self.MAX_AGE,
97
90
  "Access-Control-Allow-Origin": self.ORIGIN2,
98
91
  "Access-Control-Allow-Methods": CORS_METHODS,
@@ -110,8 +103,7 @@ class TestSetCorsHeaders(TestCase):
110
103
 
111
104
  def test_preflight(self):
112
105
  """
113
- Tests specified in
114
- http://www.w3.org/TR/cors/#resource-preflight-requests
106
+ Tests specified in http://www.w3.org/TR/cors/#resource-preflight-requests.
115
107
  """
116
108
  # 1. If the Origin header is not present terminate this set of steps.
117
109
  # The request is outside the scope of this specification.
@@ -210,10 +202,10 @@ class TestSetCorsHeaders(TestCase):
210
202
  def test_not_configured(self):
211
203
  # If the service is not configured, then no CORS head.
212
204
  assert self._do("GET", {"Origin": self.ORIGIN1}, settings=None) == {
213
- "Cache-Control": "max-age=0, no-cache",
205
+ "Cache-Control": "max-age=10, private",
214
206
  "Content-Length": "0",
215
207
  "Content-Type": "text/html; charset=UTF-8",
216
- "Vary": "Origin",
208
+ "Vary": "Origin, Cookie",
217
209
  }
218
210
 
219
211
  def test_match_all(self):
@@ -225,10 +217,10 @@ class TestSetCorsHeaders(TestCase):
225
217
  # An origin included in the access_control_allow_origin list is OK with
226
218
  # credentials
227
219
  assert self._do("POST", {"Origin": self.ORIGIN1}, credentials=True, settings=settings) == {
228
- "Cache-Control": "max-age=0, no-cache",
220
+ "Cache-Control": "max-age=10, private",
229
221
  "Content-Length": "0",
230
222
  "Content-Type": "text/html; charset=UTF-8",
231
- "Vary": "Origin",
223
+ "Vary": "Origin, Cookie",
232
224
  "Access-Control-Max-Age": self.MAX_AGE,
233
225
  "Access-Control-Allow-Origin": self.ORIGIN1,
234
226
  "Access-Control-Allow-Methods": CORS_METHODS,
@@ -238,10 +230,10 @@ class TestSetCorsHeaders(TestCase):
238
230
  # 3. Otherwise, add a single Access-Control-Allow-Origin header, with
239
231
  # either the value of the Origin header or the string "*" as value.
240
232
  assert self._do("POST", {"Origin": "http://www.guest.com"}, settings=settings) == {
241
- "Cache-Control": "max-age=0, no-cache",
233
+ "Cache-Control": "max-age=10, private",
242
234
  "Content-Length": "0",
243
235
  "Content-Type": "text/html; charset=UTF-8",
244
- "Vary": "Origin",
236
+ "Vary": "Origin, Cookie",
245
237
  "Access-Control-Max-Age": self.MAX_AGE,
246
238
  "Access-Control-Allow-Origin": "*",
247
239
  "Access-Control-Allow-Methods": CORS_METHODS,
tests/test_checker.py CHANGED
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2013-2019, Camptocamp SA
1
+ # Copyright (c) 2013-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
tests/test_decimaljson.py CHANGED
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2011-2019, Camptocamp SA
1
+ # Copyright (c) 2011-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
@@ -34,14 +32,16 @@ import decimal
34
32
  import json
35
33
  from unittest import TestCase
36
34
 
37
- from c2cwsgiutils.pretty_json import fast_dumps
35
+ from c2cwsgiutils.pretty_json import _FastDumps as FastDumps
38
36
 
39
37
 
40
38
  class TestDecimalJSON(TestCase):
41
39
  def test_decimal(self):
42
40
  value = {"str": "an str", "int": 1, "dec": decimal.Decimal("1.2")}
41
+ fast_dumps = FastDumps(False, False)
43
42
  result = fast_dumps(value)
44
43
  self.assertEqual(json.loads(result), {"int": 1, "dec": 1.2, "str": "an str"})
45
44
 
46
45
  def test_decimal_json(self):
47
- self.assertEqual(fast_dumps({"a": decimal.Decimal("3.3")}), '{\n "a": 3.3\n}')
46
+ fast_dumps = FastDumps(False, False)
47
+ assert fast_dumps({"a": decimal.Decimal("3.3")}) == '{"a":3.3}'
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2018-2019, Camptocamp SA
1
+ # Copyright (c) 2018-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
tests/test_i18n.py CHANGED
@@ -24,8 +24,8 @@ class TestI18n(TestCase):
24
24
  )
25
25
  def test_available_locale_names(self, isdir_mock, listdir_mock, exists_mock):
26
26
  locales = available_locale_names()
27
- self.assertEqual(set(locales), set(["de", "en", "fr"]))
27
+ self.assertEqual(set(locales), {"de", "en", "fr"})
28
28
 
29
29
  def test_available_locale_names_no_dir(self):
30
30
  locales = available_locale_names()
31
- self.assertEqual(locales, [])
31
+ assert locales == []
tests/test_init.py CHANGED
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2012-2019, Camptocamp SA
1
+ # Copyright (c) 2012-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
@@ -42,13 +40,12 @@ from c2cgeoportal_geoportal import (
42
40
  call_hook,
43
41
  create_get_user_from_request,
44
42
  default_user_validator,
45
- is_valid_referer,
43
+ is_valid_referrer,
46
44
  set_user_validator,
47
45
  )
48
46
 
49
47
 
50
48
  class TestIncludeme(TestCase):
51
-
52
49
  config = None
53
50
 
54
51
  def setup_method(self, _):
@@ -87,7 +84,7 @@ class TestIncludeme(TestCase):
87
84
 
88
85
  def test_default_user_validator(self):
89
86
  self.config.include(c2cgeoportal_geoportal.includeme)
90
- self.assertEqual(self.config.registry.validate_user, default_user_validator)
87
+ assert self.config.registry.validate_user == default_user_validator
91
88
 
92
89
  def test_user_validator_overwrite(self):
93
90
  self.config.include(c2cgeoportal_geoportal.includeme)
@@ -95,16 +92,15 @@ class TestIncludeme(TestCase):
95
92
  def custom_validator(username, password):
96
93
  del username # Unused
97
94
  del password # Unused
98
- return False # pragma: no cover
95
+ return False
99
96
 
100
97
  self.config.set_user_validator(custom_validator)
101
- self.assertEqual(self.config.registry.validate_user, custom_validator)
98
+ assert self.config.registry.validate_user == custom_validator
102
99
 
103
100
 
104
101
  class TestReferer(TestCase):
105
102
  """
106
- Check that accessing something with a bad HTTP referer is equivalent to a
107
- not authenticated query.
103
+ Check that accessing something with a bad HTTP referrer is equivalent to a not authenticated query.
108
104
  """
109
105
 
110
106
  BASE1 = "http://example.com/app"
@@ -116,7 +112,7 @@ class TestReferer(TestCase):
116
112
  class MockRequest:
117
113
  def __init__(self, to, ref, method):
118
114
  self.path_qs = to
119
- self.referer = ref
115
+ self.referrer = ref
120
116
  self.user_ = TestReferer.USER
121
117
  self.method = method
122
118
 
@@ -127,8 +123,8 @@ class TestReferer(TestCase):
127
123
  def test_match_url(self):
128
124
  def match(reference, value, expected):
129
125
  r = DummyRequest()
130
- r.referer = value
131
- self.assertEqual(is_valid_referer(r, {"authorized_referers": [reference]}), expected)
126
+ r.referrer = value
127
+ assert is_valid_referrer(r, {"authorized_referers": [reference]}) == expected
132
128
 
133
129
  match("http://example.com/app/", "http://example.com/app?k=v", True)
134
130
  match("http://example.com/app/", "http://example.com/app?k=v#link", True)
@@ -143,16 +139,16 @@ class TestReferer(TestCase):
143
139
  match("http://example.com", "http://example.com.bad.org/app/x/y", False)
144
140
 
145
141
  def test_positive(self):
146
- self.assertEqual(self._get_user(to=self.BASE1 + "/1", ref=self.BASE1), self.USER)
147
- self.assertEqual(self._get_user(to=self.BASE1 + "/2", ref=self.BASE1 + "/3"), self.USER)
148
- self.assertEqual(self._get_user(to=self.BASE1 + "/4", ref=self.BASE2 + "/5"), self.USER)
142
+ assert self._get_user(to=self.BASE1 + "/1", ref=self.BASE1) == self.USER
143
+ assert self._get_user(to=self.BASE1 + "/2", ref=self.BASE1 + "/3") == self.USER
144
+ assert self._get_user(to=self.BASE1 + "/4", ref=self.BASE2 + "/5") == self.USER
149
145
 
150
146
  def test_no_ref(self):
151
- self.assertEqual(self._get_user(to=self.BASE1, ref=None), self.USER)
152
- self.assertIsNone(self._get_user(to=self.BASE1, ref=""))
147
+ assert self._get_user(to=self.BASE1, ref=None) == self.USER
148
+ assert self._get_user(to=self.BASE1, ref="") is None
153
149
 
154
- self.assertEqual(self._get_user(to=self.BASE1, ref=None, method="POST"), self.USER)
155
- self.assertIsNone(self._get_user(to=self.BASE1, ref="", method="POST"))
150
+ assert self._get_user(to=self.BASE1, ref=None, method="POST") == self.USER
151
+ assert self._get_user(to=self.BASE1, ref="", method="POST") is None
156
152
 
157
153
  def test_bad_ref(self):
158
154
  self.assertIsNone(self._get_user(to=self.BASE1, ref="http://bad.com/hacker"))
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2013-2019, Camptocamp SA
1
+ # Copyright (c) 2013-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
@@ -41,7 +39,7 @@ class TestLocalNegociator(TestCase):
41
39
 
42
40
  request = DummyRequest(params=dict(lang="fr"))
43
41
  lang = locale_negotiator(request)
44
- self.assertEqual(lang, "fr")
42
+ assert lang == "fr"
45
43
 
46
44
  def test_lang_is_not_available(self):
47
45
  from pyramid.request import Request
@@ -55,7 +53,7 @@ class TestLocalNegociator(TestCase):
55
53
 
56
54
  request.headers["accept-language"] = "en-us,en;q=0.3,fr;q=0.7"
57
55
  lang = locale_negotiator(request)
58
- self.assertEqual(lang, "de")
56
+ assert lang == "de"
59
57
 
60
58
  def test_lang_is_available(self):
61
59
  from pyramid.request import Request
@@ -68,4 +66,4 @@ class TestLocalNegociator(TestCase):
68
66
  request.registry.settings = {"default_locale_name": "de", "available_locale_names": ["de", "es"]}
69
67
  request.accept_language = "en-us,en;q=0.3,es;q=0.7"
70
68
  lang = locale_negotiator(request)
71
- self.assertEqual(lang, "es")
69
+ assert lang == "es"
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2013-2019, Camptocamp SA
1
+ # Copyright (c) 2013-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
@@ -39,7 +37,6 @@ from c2cgeoportal_geoportal import MapserverproxyRoutePredicate
39
37
 
40
38
 
41
39
  class TestMapserverproxyRoutePredicate(TestCase):
42
-
43
40
  predicate = MapserverproxyRoutePredicate(None, None)
44
41
 
45
42
  def test_hide_capabilities_unset(self):
tests/test_raster.py CHANGED
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2013-2021, Camptocamp SA
1
+ # Copyright (c) 2013-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
@@ -55,9 +53,9 @@ class TestRasterViews(TestCase):
55
53
  request.params["lon"] = "565000"
56
54
  request.params["lat"] = "218000"
57
55
  result = raster.raster()
58
- self.assertEqual(result["dem1"], None)
59
- self.assertEqual(result["dem2"], None)
60
- self.assertEqual(result["dem3"], None)
56
+ assert result["dem1"] == None
57
+ assert result["dem2"] == None
58
+ assert result["dem3"] == None
61
59
 
62
60
  request.params["lon"] = "548000"
63
61
  request.params["lat"] = "216000"
@@ -99,27 +97,27 @@ class TestRasterViews(TestCase):
99
97
  request.params["lon"] = "547990.0"
100
98
  request.params["lat"] = "216009.1"
101
99
  result = raster.raster()
102
- self.assertEqual(result["dem5"], Decimal("1164.2"))
100
+ assert result["dem5"] == Decimal("1164.2")
103
101
  request.params["lon"] = "547990.9"
104
102
  request.params["lat"] = "216010.0"
105
103
  result = raster.raster()
106
- self.assertEqual(result["dem5"], Decimal("1164.2"))
104
+ assert result["dem5"] == Decimal("1164.2")
107
105
 
108
106
  # Lower right
109
107
  request.params["lon"] = "547996.0"
110
108
  request.params["lat"] = "216003.1"
111
109
  result = raster.raster()
112
- self.assertEqual(result["dem5"], Decimal("1180.77"))
110
+ assert result["dem5"] == Decimal("1180.77")
113
111
  request.params["lon"] = "547996.9"
114
112
  request.params["lat"] = "216004.0"
115
113
  result = raster.raster()
116
- self.assertEqual(result["dem5"], Decimal("1180.77"))
114
+ assert result["dem5"] == Decimal("1180.77")
117
115
 
118
116
  # Out
119
117
  request.params["lon"] = "547997.4"
120
118
  request.params["lat"] = "216003.5"
121
119
  result = raster.raster()
122
- self.assertEqual(result["dem5"], None)
120
+ assert result["dem5"] == None
123
121
 
124
122
  def test_raster_vrt(self):
125
123
  from decimal import Decimal
@@ -144,7 +142,7 @@ class TestRasterViews(TestCase):
144
142
  request.params["lon"] = "547990.4"
145
143
  request.params["lat"] = "216009.5"
146
144
  result = raster.raster()
147
- self.assertEqual(result["dem6"], Decimal("1164.2"))
145
+ assert result["dem6"] == Decimal("1164.2")
148
146
 
149
147
  def test_absolute_path(self):
150
148
  import fiona
@@ -179,7 +177,7 @@ class TestRasterViews(TestCase):
179
177
  '{"type":"LineString",' '"coordinates":[[548009.5,215990],[547990,216009.5]]}'
180
178
  )
181
179
  result = profile.json()
182
- self.assertEqual(len(result["profile"]), 4)
180
+ assert len(result["profile"]) == 4
183
181
  self.assertAlmostEqual(result["profile"][0]["y"], 215990)
184
182
  self.assertAlmostEqual(result["profile"][0]["values"]["dem2"], None)
185
183
  self.assertAlmostEqual(result["profile"][0]["values"]["dem"], None)
@@ -203,7 +201,7 @@ class TestRasterViews(TestCase):
203
201
 
204
202
  request.params["layers"] = "dem"
205
203
  result = profile.json()
206
- self.assertEqual(len(result["profile"]), 4)
204
+ assert len(result["profile"]) == 4
207
205
  self.assertAlmostEqual(result["profile"][0]["y"], 215990)
208
206
  self.assertAlmostEqual(result["profile"][0]["values"]["dem"], None)
209
207
  self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
@@ -224,7 +222,7 @@ class TestRasterViews(TestCase):
224
222
  # test length = 0
225
223
  request.params["geom"] = '{"type":"LineString",' '"coordinates":[[548000,216000]]}'
226
224
  result = profile.json()
227
- self.assertEqual(len(result["profile"]), 1)
225
+ assert len(result["profile"]) == 1
228
226
  self.assertAlmostEqual(result["profile"][0]["y"], 216000)
229
227
  self.assertAlmostEqual(result["profile"][0]["values"]["dem"], 1172)
230
228
  self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
@@ -235,7 +233,7 @@ class TestRasterViews(TestCase):
235
233
  '{"type":"LineString",' '"coordinates":[[548000,216000],[548001,216001],[548009,216009]]}'
236
234
  )
237
235
  result = profile.json()
238
- self.assertEqual(len(result["profile"]), 5)
236
+ assert len(result["profile"]) == 5
239
237
  self.assertAlmostEqual(result["profile"][0]["y"], 216000)
240
238
  self.assertAlmostEqual(result["profile"][0]["values"]["dem"], 1172)
241
239
  self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
@@ -243,7 +241,7 @@ class TestRasterViews(TestCase):
243
241
  self.assertAlmostEqual(result["profile"][1]["y"], 216001.0)
244
242
  self.assertAlmostEqual(result["profile"][1]["values"]["dem"], 1167)
245
243
  self.assertAlmostEqual(result["profile"][1]["dist"], Decimal("1.4"))
246
- self.assertEqual(result["profile"][1]["x"], 548001.0)
244
+ assert result["profile"][1]["x"] == 548001.0
247
245
  self.assertAlmostEqual(result["profile"][2]["y"], 216003.66666666666)
248
246
  self.assertAlmostEqual(result["profile"][2]["values"]["dem"], 1155)
249
247
  self.assertAlmostEqual(result["profile"][2]["dist"], Decimal("5.2"))
tests/test_wmstparsing.py CHANGED
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2013-2019, Camptocamp SA
1
+ # Copyright (c) 2013-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without
@@ -123,35 +121,35 @@ class TestParseDate(TestCase):
123
121
  from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
124
122
 
125
123
  date = _parse_date("2010")
126
- self.assertEqual("year", date[0])
124
+ assert "year" == date[0]
127
125
  self.assertEqual(datetime.datetime(2010, 0o1, 0o1, tzinfo=isodate.UTC), date[1])
128
126
 
129
127
  def test_parse_date_month(self):
130
128
  from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
131
129
 
132
130
  date = _parse_date("2010-02")
133
- self.assertEqual("month", date[0])
131
+ assert "month" == date[0]
134
132
  self.assertEqual(datetime.datetime(2010, 0o2, 0o1, tzinfo=isodate.UTC), date[1])
135
133
 
136
134
  def test_parse_date(self):
137
135
  from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
138
136
 
139
137
  date = _parse_date("2010-02-03")
140
- self.assertEqual("day", date[0])
138
+ assert "day" == date[0]
141
139
  self.assertEqual(datetime.datetime(2010, 0o2, 0o3, tzinfo=isodate.UTC), date[1])
142
140
 
143
141
  def test_parse_datetime(self):
144
142
  from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
145
143
 
146
144
  date = _parse_date("2010-02-03T12:34")
147
- self.assertEqual("second", date[0])
145
+ assert "second" == date[0]
148
146
  self.assertEqual(datetime.datetime(2010, 0o2, 0o3, 12, 34, tzinfo=isodate.UTC), date[1])
149
147
 
150
148
  def test_parse_datetime_tz(self):
151
149
  from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
152
150
 
153
151
  date = _parse_date("2010-02-03T12:34Z")
154
- self.assertEqual("second", date[0])
152
+ assert "second" == date[0]
155
153
  self.assertEqual(datetime.datetime(2010, 0o2, 0o3, 12, 34, tzinfo=isodate.UTC), date[1])
156
154
 
157
155
  def test_unsupported_format(self):
@@ -165,13 +163,13 @@ class TestFormat(TestCase):
165
163
  from c2cgeoportal_geoportal.lib.wmstparsing import _format_date
166
164
 
167
165
  dt = datetime.datetime(2010, 0o2, 0o1, 00, 00)
168
- self.assertEqual("2010-02-01T00:00:00Z", _format_date(dt))
166
+ assert "2010-02-01T00:00:00Z" == _format_date(dt)
169
167
 
170
168
  def test_format_tz(self):
171
169
  from c2cgeoportal_geoportal.lib.wmstparsing import _format_date, _parse_date
172
170
 
173
171
  dt = _parse_date("2010-02-03T12:34:00+01:00")
174
- self.assertEqual("2010-02-03T12:34:00+01:00", _format_date(dt[1]))
172
+ assert "2010-02-03T12:34:00+01:00" == _format_date(dt[1])
175
173
 
176
174
 
177
175
  class TestParseDuration(TestCase):
@@ -221,9 +219,9 @@ class TestTimeInformation(TestCase):
221
219
  self.assertFalse(ti.has_time())
222
220
  self.assertTrue(ti.to_dict() is None)
223
221
  ti.merge_mode("single")
224
- self.assertEqual(ti.mode, "single")
222
+ assert ti.mode == "single"
225
223
  ti.merge_mode("single")
226
- self.assertEqual(ti.mode, "single")
224
+ assert ti.mode == "single"
227
225
 
228
226
  def test_merge_different_modes(self):
229
227
  from c2cgeoportal_geoportal.lib.wmstparsing import TimeInformation
tests/xmlstr.py CHANGED
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- # Copyright (c) 2013-2019, Camptocamp SA
1
+ # Copyright (c) 2013-2023, Camptocamp SA
4
2
  # All rights reserved.
5
3
 
6
4
  # Redistribution and use in source and binary forms, with or without