c2cgeoportal-geoportal 2.6.0__py2.py3-none-any.whl → 2.7.1.156__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 (212) hide show
  1. c2cgeoportal_geoportal/__init__.py +224 -84
  2. c2cgeoportal_geoportal/lib/__init__.py +67 -43
  3. c2cgeoportal_geoportal/lib/authentication.py +50 -22
  4. c2cgeoportal_geoportal/lib/bashcolor.py +17 -13
  5. c2cgeoportal_geoportal/lib/cacheversion.py +16 -8
  6. c2cgeoportal_geoportal/lib/caching.py +61 -191
  7. c2cgeoportal_geoportal/lib/check_collector.py +17 -10
  8. c2cgeoportal_geoportal/lib/checker.py +61 -63
  9. c2cgeoportal_geoportal/lib/common_headers.py +170 -0
  10. c2cgeoportal_geoportal/lib/dbreflection.py +54 -39
  11. c2cgeoportal_geoportal/lib/filter_capabilities.py +122 -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 +361 -237
  18. c2cgeoportal_geoportal/lib/loader.py +10 -15
  19. c2cgeoportal_geoportal/lib/metrics.py +28 -17
  20. c2cgeoportal_geoportal/lib/oauth2.py +214 -145
  21. c2cgeoportal_geoportal/lib/wmstparsing.py +115 -90
  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} +18 -9
  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 +102 -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/advance_create/{{cookiecutter.project}}/geoportal/requirements.txt +2 -0
  36. c2cgeoportal_geoportal/scaffolds/{create/geoportal/setup.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/setup.py} +6 -7
  37. c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/tools/extract-messages.js +8 -6
  38. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/tsconfig.json +8 -0
  39. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +75 -0
  40. c2cgeoportal_geoportal/scaffolds/{create/geoportal/webpack.apps.js_tmpl → advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js} +31 -28
  41. c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/webpack.commons.js +3 -7
  42. c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/webpack.config.js +1 -1
  43. c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal/__init__.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py} +11 -22
  44. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/authentication.py +10 -0
  45. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/dev.py +14 -0
  46. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/models.py +8 -0
  47. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/multi_organization.py +7 -0
  48. c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/resources.py +4 -3
  49. 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
  50. 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
  51. c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal/subscribers.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/subscribers.py} +1 -3
  52. c2cgeoportal_geoportal/scaffolds/advance_update/cookiecutter.json +18 -0
  53. c2cgeoportal_geoportal/scaffolds/{update/geoportal/CONST_Makefile_tmpl → advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile} +3 -7
  54. c2cgeoportal_geoportal/scaffolds/create/cookiecutter.json +18 -0
  55. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.dockerignore +14 -0
  56. c2cgeoportal_geoportal/scaffolds/create/{+dot+editorconfig → {{cookiecutter.project}}/.editorconfig} +2 -5
  57. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/main.yaml +43 -0
  58. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/rebuild.yaml +46 -0
  59. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml +65 -0
  60. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.gitignore +16 -0
  61. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierignore +1 -0
  62. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierrc.yaml +2 -0
  63. c2cgeoportal_geoportal/scaffolds/create/{Dockerfile_tmpl → {{cookiecutter.project}}/Dockerfile} +20 -11
  64. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +14 -0
  65. c2cgeoportal_geoportal/scaffolds/create/{README.rst_tmpl → {{cookiecutter.project}}/README.rst} +4 -4
  66. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +162 -0
  67. c2cgeoportal_geoportal/scaffolds/create/{ci/config.yaml_tmpl → {{cookiecutter.project}}/ci/config.yaml} +7 -5
  68. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +1 -0
  69. c2cgeoportal_geoportal/scaffolds/create/{docker-compose-lib.yaml → {{cookiecutter.project}}/docker-compose-lib.yaml} +133 -17
  70. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +67 -0
  71. c2cgeoportal_geoportal/scaffolds/create/{docker-compose.yaml → {{cookiecutter.project}}/docker-compose.yaml} +17 -12
  72. c2cgeoportal_geoportal/scaffolds/create/{env.default_tmpl → {{cookiecutter.project}}/env.default} +29 -14
  73. c2cgeoportal_geoportal/scaffolds/create/{env.project_tmpl → {{cookiecutter.project}}/env.project} +16 -4
  74. c2cgeoportal_geoportal/scaffolds/create/{geoportal/vars.yaml_tmpl → {{cookiecutter.project}}/geoportal/vars.yaml} +93 -27
  75. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/mobile.css +0 -0
  76. c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/data/Readme.txt +1 -1
  77. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/demo.map.tmpl +224 -0
  78. c2cgeoportal_geoportal/scaffolds/create/{mapserver/mapserver.map.tmpl_tmpl → {{cookiecutter.project}}/mapserver/mapserver.map.tmpl} +7 -15
  79. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Landscape.jrxml +8 -8
  80. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Portrait.jrxml +8 -8
  81. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Landscape.jrxml +8 -8
  82. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Portrait.jrxml +8 -8
  83. c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/config.yaml.tmpl +5 -4
  84. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation.properties +4 -0
  85. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation_fr.properties +4 -0
  86. c2cgeoportal_geoportal/scaffolds/create/{project.yaml_tmpl → {{cookiecutter.project}}/project.yaml} +6 -6
  87. c2cgeoportal_geoportal/scaffolds/create/{qgisserver/pg_service.conf.tmpl_tmpl → {{cookiecutter.project}}/qgisserver/pg_service.conf.tmpl} +2 -2
  88. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +110 -0
  89. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +114 -0
  90. c2cgeoportal_geoportal/scaffolds/create/{setup.cfg_tmpl → {{cookiecutter.project}}/setup.cfg} +1 -1
  91. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/spell-ignore-words.txt +3 -0
  92. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tilegeneration/config.yaml.tmpl +195 -0
  93. c2cgeoportal_geoportal/scaffolds/update/cookiecutter.json +18 -0
  94. c2cgeoportal_geoportal/scaffolds/update/{+dot+upgrade.yaml_tmpl → {{cookiecutter.project}}/.upgrade.yaml} +49 -39
  95. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +1160 -0
  96. c2cgeoportal_geoportal/scaffolds/update/{geoportal → {{cookiecutter.project}}/geoportal}/CONST_config-schema.yaml +47 -2
  97. c2cgeoportal_geoportal/scaffolds/update/{geoportal/CONST_vars.yaml_tmpl → {{cookiecutter.project}}/geoportal/CONST_vars.yaml} +350 -17
  98. c2cgeoportal_geoportal/scripts/__init__.py +16 -30
  99. c2cgeoportal_geoportal/scripts/c2cupgrade.py +271 -232
  100. c2cgeoportal_geoportal/scripts/create_demo_theme.py +3 -6
  101. c2cgeoportal_geoportal/scripts/manage_users.py +34 -39
  102. c2cgeoportal_geoportal/scripts/pcreate.py +312 -0
  103. c2cgeoportal_geoportal/scripts/theme2fts.py +72 -23
  104. c2cgeoportal_geoportal/scripts/urllogin.py +19 -11
  105. c2cgeoportal_geoportal/templates/login.html +88 -84
  106. c2cgeoportal_geoportal/templates/notlogin.html +59 -59
  107. c2cgeoportal_geoportal/templates/testi18n.html +6 -8
  108. c2cgeoportal_geoportal/views/__init__.py +23 -4
  109. c2cgeoportal_geoportal/views/dev.py +9 -7
  110. c2cgeoportal_geoportal/views/dynamic.py +56 -19
  111. c2cgeoportal_geoportal/views/entry.py +93 -24
  112. c2cgeoportal_geoportal/views/fulltextsearch.py +28 -22
  113. c2cgeoportal_geoportal/views/geometry_processing.py +15 -7
  114. c2cgeoportal_geoportal/views/i18n.py +91 -9
  115. c2cgeoportal_geoportal/views/layers.py +160 -126
  116. c2cgeoportal_geoportal/views/login.py +106 -93
  117. c2cgeoportal_geoportal/views/mapserverproxy.py +46 -29
  118. c2cgeoportal_geoportal/views/memory.py +12 -12
  119. c2cgeoportal_geoportal/views/ogcproxy.py +48 -30
  120. c2cgeoportal_geoportal/views/pdfreport.py +26 -22
  121. c2cgeoportal_geoportal/views/printproxy.py +60 -52
  122. c2cgeoportal_geoportal/views/profile.py +24 -23
  123. c2cgeoportal_geoportal/views/proxy.py +87 -69
  124. c2cgeoportal_geoportal/views/raster.py +35 -24
  125. c2cgeoportal_geoportal/views/resourceproxy.py +13 -11
  126. c2cgeoportal_geoportal/views/shortener.py +27 -24
  127. c2cgeoportal_geoportal/views/theme.py +427 -321
  128. c2cgeoportal_geoportal/views/tinyowsproxy.py +46 -39
  129. c2cgeoportal_geoportal/views/vector_tiles.py +80 -0
  130. {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.7.1.156.dist-info}/METADATA +25 -20
  131. c2cgeoportal_geoportal-2.7.1.156.dist-info/RECORD +185 -0
  132. {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.7.1.156.dist-info}/WHEEL +1 -1
  133. {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.7.1.156.dist-info}/entry_points.txt +3 -1
  134. tests/__init__.py +7 -3
  135. tests/test_cachebuster.py +0 -2
  136. tests/test_caching.py +17 -25
  137. tests/test_checker.py +0 -2
  138. tests/test_decimaljson.py +4 -4
  139. tests/test_headerstween.py +0 -2
  140. tests/test_i18n.py +1 -1
  141. tests/test_init.py +4 -7
  142. tests/test_locale_negociator.py +0 -2
  143. tests/test_mapserverproxy_route_predicate.py +0 -2
  144. tests/test_raster.py +0 -2
  145. tests/test_wmstparsing.py +0 -2
  146. c2cgeoportal_geoportal/scaffolds/__init__.py +0 -227
  147. c2cgeoportal_geoportal/scaffolds/create/+dot+dockerignore_tmpl +0 -12
  148. c2cgeoportal_geoportal/scaffolds/create/+dot+github/workflows/main.yaml_tmpl +0 -89
  149. c2cgeoportal_geoportal/scaffolds/create/+dot+github/workflows/rebuild.yaml_tmpl +0 -78
  150. c2cgeoportal_geoportal/scaffolds/create/+dot+gitignore_tmpl +0 -16
  151. c2cgeoportal_geoportal/scaffolds/create/Makefile +0 -3
  152. c2cgeoportal_geoportal/scaffolds/create/build_tmpl +0 -167
  153. c2cgeoportal_geoportal/scaffolds/create/ci/requirements.txt +0 -1
  154. c2cgeoportal_geoportal/scaffolds/create/ci/trigger +0 -68
  155. c2cgeoportal_geoportal/scaffolds/create/docker-compose.override.sample.yaml +0 -54
  156. c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+dockerignore_tmpl +0 -6
  157. c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+eslintrc_tmpl +0 -15
  158. c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/models.py_tmpl +0 -10
  159. c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static/robot.txt +0 -3
  160. c2cgeoportal_geoportal/scaffolds/create/geoportal/production.ini_tmpl +0 -106
  161. c2cgeoportal_geoportal/scaffolds/create/geoportal/requirements.txt +0 -2
  162. c2cgeoportal_geoportal/scaffolds/create/geoportal/tsconfig.json_tmpl +0 -9
  163. c2cgeoportal_geoportal/scaffolds/create/geoportal/webpack.api.js_tmpl +0 -72
  164. c2cgeoportal_geoportal/scaffolds/create/mapserver/demo.map.tmpl_tmpl +0 -262
  165. c2cgeoportal_geoportal/scaffolds/create/mapserver/tinyows.xml +0 -36
  166. c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/config.yaml +0 -168
  167. c2cgeoportal_geoportal/scaffolds/create/qgisserver/geomapfish.yaml.tmpl_tmpl +0 -16
  168. c2cgeoportal_geoportal/scaffolds/create/spell-ignore-words.txt +0 -1
  169. c2cgeoportal_geoportal/scaffolds/create/tilegeneration/config.yaml.tmpl_tmpl +0 -185
  170. c2cgeoportal_geoportal/scaffolds/create/yamllint.yaml +0 -11
  171. c2cgeoportal_geoportal/scaffolds/update/CONST_CHANGELOG.txt_tmpl +0 -454
  172. c2cgeoportal_geoportal/templates/dynamic.js +0 -21
  173. c2cgeoportal_geoportal-2.6.0.dist-info/RECORD +0 -173
  174. /c2cgeoportal_geoportal/{scaffolds/create/geoportal/+package+_geoportal/static/css/desktop.css → py.typed} +0 -0
  175. /c2cgeoportal_geoportal/scaffolds/{create/geoportal/Makefile_tmpl → advance_create/{{cookiecutter.project}}/geoportal/Makefile} +0 -0
  176. /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/alembic.ini +0 -0
  177. /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/language_mapping +0 -0
  178. /c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/lingua-server.cfg +0 -0
  179. /c2cgeoportal_geoportal/scaffolds/{create/geoportal/+package+_geoportal → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/views/__init__.py +0 -0
  180. /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
  181. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal/static/css/iframe_api.css → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/desktop.css} +0 -0
  182. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal/static/css/mobile.css → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/iframe_api.css} +0 -0
  183. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/banner_left.png +0 -0
  184. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/banner_right.png +0 -0
  185. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/blank.png +0 -0
  186. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-blue.png +0 -0
  187. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-gold.png +0 -0
  188. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker-green.png +0 -0
  189. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/images/markers/marker.png +0 -0
  190. /c2cgeoportal_geoportal/scaffolds/create/{geoportal/+package+_geoportal → {{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal}/static/robot.txt.tmpl +0 -0
  191. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/data/TM_EUROPE_BORDERS-0.3.sql +0 -0
  192. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arial.ttf +0 -0
  193. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arialbd.ttf +0 -0
  194. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Arialbi.ttf +0 -0
  195. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Ariali.ttf +0 -0
  196. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Bold.ttf +0 -0
  197. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-BoldItalic.ttf +0 -0
  198. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Italic.ttf +0 -0
  199. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/NotoSans-Regular.ttf +0 -0
  200. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdana.ttf +0 -0
  201. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanab.ttf +0 -0
  202. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanai.ttf +0 -0
  203. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts/Verdanaz.ttf +0 -0
  204. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/fonts.conf +0 -0
  205. /c2cgeoportal_geoportal/scaffolds/create/{mapserver → {{cookiecutter.project}}/mapserver}/tinyows.xml.tmpl +0 -0
  206. /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/legend.jrxml +0 -0
  207. /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/logo.png +0 -0
  208. /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/north.svg +0 -0
  209. /c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/results.jrxml +0 -0
  210. /c2cgeoportal_geoportal/scaffolds/create/{pyproject.toml → {{cookiecutter.project}}/pyproject.toml} +0 -0
  211. /c2cgeoportal_geoportal/scaffolds/create/{run_alembic.sh → {{cookiecutter.project}}/run_alembic.sh} +0 -0
  212. {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.7.1.156.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,14 @@
1
+ from pyramid.config import Configurator
2
+
3
+
4
+ def includeme(config: Configurator) -> None:
5
+ """Initialize the development tools for a Pyramid app."""
6
+ del config # Unused.
7
+
8
+ try:
9
+ import ptvsd # pylint: disable=import-outside-toplevel
10
+
11
+ ptvsd.enable_attach(address=("172.17.0.1", 5678))
12
+ # ptvsd.wait_for_attach()
13
+ except ModuleNotFoundError:
14
+ pass
@@ -0,0 +1,8 @@
1
+ import logging
2
+
3
+ from pyramid.i18n import TranslationStringFactory
4
+
5
+ from c2cgeoportal_commons.models.main import * # noqa: ignore=F401, pylint: disable=unused-wildcard-import
6
+
7
+ _ = TranslationStringFactory("{{cookiecutter.package}}_geoportal-server")
8
+ LOG = logging.getLogger(__name__)
@@ -0,0 +1,7 @@
1
+ from pyramid.config import Configurator
2
+
3
+
4
+ def includeme(config: Configurator) -> None:
5
+ """Initialize the multi organization."""
6
+
7
+ del config # Unused
@@ -1,10 +1,11 @@
1
- # -*- coding: utf-8 -*-
2
-
1
+ import pyramid.request
3
2
  from pyramid.security import ALL_PERMISSIONS, Allow
4
3
 
5
4
 
6
5
  class Root:
6
+ """The Pyramid root object."""
7
+
7
8
  __acl__ = [(Allow, "role_admin", ALL_PERMISSIONS)]
8
9
 
9
- def __init__(self, request):
10
+ def __init__(self, request: pyramid.request.Request):
10
11
  self.request = request
@@ -2,12 +2,11 @@
2
2
  import Map from 'api/Map.js';
3
3
  import {dynamicUrl} from 'api/constants.js';
4
4
 
5
-
6
5
  // The URL to the dynamic constants service.
7
6
  dynamicUrl.dynamicUrl = '{FULL_ENTRY_POINT}dynamic.json?interface=api';
8
7
 
9
8
  const lib = {
10
- Map
9
+ Map,
11
10
  };
12
11
 
13
12
  export default lib;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file provides the "{{package}}" namespace, which is the
2
+ * This file provides the "{{cookiecutter.package}}" namespace, which is the
3
3
  * application's main namespace. And it defines the application's Angular
4
4
  * module.
5
5
  */
@@ -10,9 +10,9 @@ import {decodeQueryString} from 'ngeo/utils.js';
10
10
  /**
11
11
  * @type {!angular.IModule}
12
12
  */
13
- const module = angular.module('{{package}}', []);
13
+ const myModule = angular.module('{{cookiecutter.package}}', []);
14
14
 
15
- module.config([
15
+ myModule.config([
16
16
  '$compileProvider',
17
17
  function ($compileProvider) {
18
18
  if (!('debug' in decodeQueryString(window.location.search))) {
@@ -22,4 +22,4 @@ module.config([
22
22
  },
23
23
  ]);
24
24
 
25
- export default module;
25
+ export default myModule;
@@ -1,10 +1,8 @@
1
- # -*- coding: utf-8 -*-
2
-
3
1
  from pyramid.events import BeforeRender, NewRequest, subscriber
4
2
  from pyramid.i18n import TranslationStringFactory, get_localizer
5
3
 
6
4
  # use two translator to translate each strings in Make
7
- tsf_server = TranslationStringFactory("{{package}}-server")
5
+ tsf_server = TranslationStringFactory("{{cookiecutter.package}}-server")
8
6
  tsf_geoportal = TranslationStringFactory("c2cgeoportal")
9
7
  tsf_admin = TranslationStringFactory("c2cgeoportal_admin")
10
8
  tsf_c2cgeoform = TranslationStringFactory("c2cgeoform")
@@ -0,0 +1,18 @@
1
+ {
2
+ "project": "test_project",
3
+ "package": "test_project",
4
+ "srid": "2056",
5
+ "extent": "",
6
+ "extent_mapserver": "",
7
+ "authtkt_secret": "",
8
+ "unsafe_long_version": false,
9
+ "geomapfish_version": "",
10
+ "geomapfish_main_version": "",
11
+ "geomapfish_main_version_dash": "",
12
+ "geomapfish_main_minor_version": "",
13
+ "geomapfish_version_tag": "",
14
+ "geomapfish_version_tag_env": "",
15
+ "geomapfish_major_version_tag": "",
16
+ "geomapfish_major_version_tag_env": "",
17
+ "_copy_without_render": ["*.po", "*/contextualdata.html"]
18
+ }
@@ -1,4 +1,4 @@
1
- export PACKAGE = {{package}}
1
+ export PACKAGE = {{cookiecutter.package}}
2
2
 
3
3
  TEMPLATE_EXCLUDE += $(PACKAGE)_geoportal/static/lib
4
4
  FIND_OPTS = $(foreach ELEM, $(TEMPLATE_EXCLUDE),-path ./$(ELEM) -prune -o) -type f
@@ -76,7 +76,7 @@ PO_FILES = $(addprefix $(PACKAGE)_geoportal/locale/, $(addsuffix /LC_MESSAGES/$(
76
76
  .INTERMEDIATE: $(PACKAGE)_geoportal/locale/$(PACKAGE)_geoportal-server.pot
77
77
  $(PACKAGE)_geoportal/locale/$(PACKAGE)_geoportal-server.pot: lingua-server.cfg $(SRC_FILES)
78
78
  mkdir --parent $(dir $@)
79
- [ -z "$(SRC_FILES)" ] || pot-create --config $< --keyword _ --output $@ $(SRC_FILES)
79
+ [ -z "$(SRC_FILES)" ] || pot-create --width=110 --config=$< --keyword=_ --output=$@ $(SRC_FILES)
80
80
 
81
81
  .PRECIOUS: $(PACKAGE)_geoportal/locale/%/LC_MESSAGES/$(PACKAGE)_geoportal-server.po
82
82
  $(PACKAGE)_geoportal/locale/%/LC_MESSAGES/$(PACKAGE)_geoportal-server.po: \
@@ -93,7 +93,7 @@ update-server-po: $(PO_FILES)
93
93
 
94
94
  .PHONY: update-client-po
95
95
  update-client-po:
96
- cd .. && update-po $(USER_ID) $(GROUP_ID) $(LANGUAGES)
96
+ cd .. && SUFFIX= update-po $(USER_ID) $(GROUP_ID) $(LANGUAGES)
97
97
 
98
98
  .PHONY: update-po
99
99
  update-po: update-server-po update-client-po
@@ -122,10 +122,6 @@ apps: webpack.apps.js
122
122
  for interface in $(NGEO_INTERFACES); \
123
123
  do \
124
124
  mv $(APP_OUTPUT_DIR)/$${interface}.html $(APP_OUTPUT_DIR)/$${interface}.html.tmpl; \
125
- ls -1 $(APP_OUTPUT_DIR)/$${interface}.*.css|while read file; \
126
- do \
127
- mv $${file} $${file}.tmpl; \
128
- done; \
129
125
  done
130
126
 
131
127
  # API
@@ -0,0 +1,18 @@
1
+ {
2
+ "project": "test_project",
3
+ "package": "test_project",
4
+ "srid": "2056",
5
+ "extent": "",
6
+ "extent_mapserver": "",
7
+ "authtkt_secret": "",
8
+ "unsafe_long_version": false,
9
+ "geomapfish_version": "",
10
+ "geomapfish_main_version": "",
11
+ "geomapfish_main_version_dash": "",
12
+ "geomapfish_main_minor_version": "",
13
+ "geomapfish_version_tag": "",
14
+ "geomapfish_version_tag_env": "",
15
+ "geomapfish_major_version_tag": "",
16
+ "geomapfish_major_version_tag_env": "",
17
+ "_copy_without_render": ["*.po", "*/contextualdata.html"]
18
+ }
@@ -0,0 +1,14 @@
1
+ *
2
+ !bin/
3
+ !mapserver/
4
+ !qgisserver/
5
+ !tilegeneration/
6
+ !haproxy/
7
+ !print/print-apps/
8
+ !geoportal/vars*.yaml
9
+ !geoportal/interfaces/
10
+ !geoportal/CONST_vars.yaml
11
+ !geoportal/CONST_config-schema.yaml
12
+ !geoportal/{{cookiecutter.package}}_geoportal/static
13
+ !geoportal/{{cookiecutter.package}}_geoportal/locale
14
+ geoportal/{{cookiecutter.package}}_geoportal/locale/*.pot
@@ -10,11 +10,8 @@ trim_trailing_whitespace = true
10
10
  max_line_length = 110
11
11
  quote_type = single
12
12
 
13
- [*.{js,css,html,scss,html.ejs}]
13
+ [*.{js,ts,css,scss,yaml,yml,json,html,md,yaml.tmpl}]
14
14
  indent_size = 2
15
15
 
16
- [*.{yaml,yml,yaml.tmpl}]
17
- indent_size = 2
18
-
19
- [Makefile]
16
+ [{Makefile,*.mk}]
20
17
  indent_style = tab
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: Continuous integration
3
+
4
+ on:
5
+ push:
6
+
7
+ # To publish the images to be used on Kubernetes
8
+ #env:
9
+ # PROJECT: {{cookiecutter.package}}
10
+ # HAS_SECRETS: ${{'{{'}} secrets.HAS_SECRETS }}
11
+ # # Requires CI_GPG_PRIVATE_KEY and GOPASS_CI_GITHUB_TOKEN secrets.
12
+ # # The release branches
13
+ # HELM_RELEASE_NAMES: int-{{cookiecutter.geomapfish_main_version_dash}},prod-{{cookiecutter.geomapfish_main_version_dash}}
14
+
15
+ jobs:
16
+ main:
17
+ runs-on: ubuntu-22.04
18
+ name: Continuous integration
19
+ timeout-minutes: 10
20
+
21
+ steps:
22
+ - uses: actions/checkout@v2
23
+
24
+ # To publish the images to be used on Kubernetes
25
+ # - uses: camptocamp/initialise-gopass-summon-action@v2
26
+ # with:
27
+ # ci-gpg-private-key: ${{'{{'}} secrets.CI_GPG_PRIVATE_KEY }}
28
+ # github-gopass-ci-token: ${{'{{'}} secrets.GOPASS_CI_GITHUB_TOKEN }}
29
+ # patterns: docker
30
+ # if: env.HAS_SECRETS == 'HAS_SECRETS'
31
+
32
+ - run: echo "${HOME}/.local/bin" >> ${GITHUB_PATH}
33
+ - run: python3 -m pip install --user --requirement=ci/requirements.txt
34
+
35
+ - name: Checks
36
+ run: c2cciutils-checks
37
+
38
+ - name: Build
39
+ run: ./build --docker-compose-version-2
40
+
41
+ # To publish the images to be used on Kubernetes
42
+ # - name: Publish
43
+ # run: c2cciutils-publish
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: Rebuild
3
+
4
+ on:
5
+ schedule:
6
+ - cron: '30 2 * * *'
7
+
8
+ env:
9
+ PROJECT: {{cookiecutter.package}}
10
+ # Requires CI_GPG_PRIVATE_KEY and GOPASS_CI_GITHUB_TOKEN secrets.
11
+ # OPENSHIFT_PROJECT: gs-gmf-{{cookiecutter.package}}
12
+ # The release branches
13
+ HELM_RELEASE_NAMES: int-{{cookiecutter.geomapfish_main_version_dash}},prod-{{cookiecutter.geomapfish_main_version_dash}}
14
+
15
+ jobs:
16
+ rebuild:
17
+ runs-on: ubuntu-22.04
18
+ name: Rebuild
19
+ timeout-minutes: 10
20
+
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ branch:
25
+ - int-{{cookiecutter.geomapfish_main_version_dash}}
26
+ - prod-{{cookiecutter.geomapfish_main_version_dash}}
27
+
28
+ steps:
29
+ - uses: actions/checkout@v2
30
+ with:
31
+ ref: ${{'{{'}} matrix.branch }}
32
+
33
+ - uses: camptocamp/initialise-gopass-summon-action@v2
34
+ with:
35
+ ci-gpg-private-key: ${{'{{'}} secrets.CI_GPG_PRIVATE_KEY }}
36
+ github-gopass-ci-token: ${{'{{'}} secrets.GOPASS_CI_GITHUB_TOKEN }}
37
+ patterns: docker
38
+
39
+ - run: echo "${HOME}/.local/bin" >> ${GITHUB_PATH}
40
+ - run: python3 -m pip install --user --requirement=ci/requirements.txt
41
+
42
+ - name: Build
43
+ run: ./build --docker-compose-version-2
44
+
45
+ - name: Publish
46
+ run: c2cciutils-publish --branch=${{'{{'}} matrix.branch }} --type=rebuild
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: Update l10n cron job
3
+
4
+ on:
5
+ schedule:
6
+ - cron: '0 3 * * *'
7
+
8
+ jobs:
9
+ l10n:
10
+ runs-on: ubuntu-18.04
11
+ name: Update l10n cron job
12
+ timeout-minutes: 10
13
+
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ include:
18
+ - branch: int
19
+ base_url: int.customer.ch
20
+ - branch: prod
21
+ base_url: prod.customer.ch
22
+
23
+ steps:
24
+ - uses: actions/checkout@v2
25
+ with:
26
+ ref: ${{'{{'}} matrix.branch {{'}}'}}
27
+ token: ${{'{{'}} secrets.GOPASS_CI_GITHUB_TOKEN {{'}}'}}
28
+
29
+ - run: ./build --env
30
+ - run: PROJECT_PUBLIC_URL=${{'{{'}} matrix.base_url {{'}}'}} make -e update-po-from-url
31
+
32
+ - name: Init Git
33
+ run: |
34
+ git config --global user.email "geospatial-bot@camptocamp.com"
35
+ git config --global user.name CI
36
+
37
+ - id: status
38
+ run: echo "status=$(git diff --exit-code --quiet && echo 'unchanged' || echo 'changed')" >> $GITHUB_OUTPUT
39
+
40
+ - name: Push l10n branch and create pull request
41
+ run: |
42
+ sudo chown -R $(id -u) .
43
+ git add --all || true
44
+ git status
45
+ git commit -m "Update the l10n files"
46
+ git push --force origin HEAD:l10n-${{'{{'}} matrix.branch {{'}}'}}
47
+ python3 -c "import requests
48
+ response = requests.post(
49
+ 'https://api.github.com/repos/${GITHUB_REPOSITORY}/pulls',
50
+ json={
51
+ 'title': 'Update the l10n files on ${{'{{'}} matrix.branch {{'}}'}}',
52
+ 'body': '',
53
+ 'head': 'l10n-${{'{{'}} matrix.branch {{'}}'}}',
54
+ 'base': '${{'{{'}} matrix.branch {{'}}'}}',
55
+ 'maintainer_can_modify': True
56
+ },
57
+ headers={
58
+ 'Accept': 'application/vnd.github.v3+json',
59
+ 'Authorization': 'Bearer ${{'{{'}} secrets.GOPASS_CI_GITHUB_TOKEN {{'}}'}}',
60
+ 'Content-Type': 'application/json',
61
+ },
62
+ )
63
+ # 422 is the return code when the pull request already exists
64
+ assert response.status_code < 300 or response.status_code == 422, f'{response.status_code} - {response.text}'"
65
+ if: steps.status.outputs.status != 'unchanged'
@@ -0,0 +1,16 @@
1
+ *.pyc
2
+ *.pyo
3
+ __pycache__/
4
+ /.env
5
+ /env.personal
6
+ /docker-compose.override.yaml
7
+ /upgrade
8
+ /.upgrade.yaml
9
+ /.UPGRADE*
10
+ /geoportal/{{cookiecutter.package}}_geoportal/locale/{{cookiecutter.package}}_geoportal-client.pot
11
+
12
+ # Generated with dev mode
13
+ /geoportal/{{cookiecutter.package}}_geoportal/static/apihelp/index.html
14
+ /geoportal/{{cookiecutter.package}}_geoportal/static/robot.txt
15
+ /print/print-apps/{{cookiecutter.package}}/config.yaml
16
+ /mapserver/tinyows.xml
@@ -0,0 +1,2 @@
1
+ bracketSpacing: false
2
+ quoteProps: preserve
@@ -1,4 +1,7 @@
1
- FROM camptocamp/geomapfish-tools:{{geomapfish_version}} as builder
1
+ ARG {{cookiecutter.geomapfish_version_tag}}
2
+ ARG {{cookiecutter.geomapfish_major_version_tag}}
3
+
4
+ FROM camptocamp/geomapfish-tools:{{cookiecutter.geomapfish_version_tag_env}} as builder
2
5
 
3
6
  ENV VARS_FILE=vars.yaml
4
7
  ENV CONFIG_VARS sqlalchemy.url sqlalchemy.pool_recycle sqlalchemy.pool_size sqlalchemy.max_overflow \
@@ -8,28 +11,34 @@ ENV CONFIG_VARS sqlalchemy.url sqlalchemy.pool_recycle sqlalchemy.pool_size sqla
8
11
  raster shortener hide_capabilities tinyowsproxy resourceproxy print_url print_get_redirect \
9
12
  checker check_collector default_max_age package srid \
10
13
  reset_password fulltextsearch global_headers headers authorized_referers hooks stats db_chooser \
11
- dbsessions urllogin host_forward_host smtp c2c.base_path welcome_email \
12
- lingua_extractor interfaces_config interfaces devserver_url api authentication intranet metrics pdfreport
14
+ dbsessions urllogin host_forward_host headers_whitelist headers_blacklist \
15
+ smtp c2c.base_path welcome_email \
16
+ lingua_extractor interfaces_config interfaces devserver_url api authentication intranet metrics pdfreport \
17
+ vector_tiles i18next
13
18
 
14
19
  COPY . /tmp/config/
15
20
 
16
21
  ARG SIMPLE
17
22
  ENV SIMPLE=$SIMPLE
18
23
 
19
- RUN build-l10n "{{package}}"
24
+ RUN build-l10n "{{cookiecutter.package}}"
25
+
26
+ ARG PGSCHEMA
27
+ ENV PGSCHEMA=$PGSCHEMA
20
28
 
21
29
  RUN \
22
30
  cd /tmp/config/geoportal/ && \
23
31
  c2c-template --vars ${VARS_FILE} \
24
- --get-config {{package}}_geoportal/config.yaml \
32
+ --get-config {{cookiecutter.package}}_geoportal/config.yaml \
25
33
  ${CONFIG_VARS} && \
26
- pykwalify --data-file {{package}}_geoportal/config.yaml \
34
+ pykwalify --data-file {{cookiecutter.package}}_geoportal/config.yaml \
27
35
  --schema-file CONST_config-schema.yaml && \
28
- rm CONST_* vars.yaml
36
+ rm CONST_* vars.yaml && \
37
+ qgisserver-plugin-config {{cookiecutter.package}}_geoportal/config.yaml ../qgisserver/geomapfish.yaml.tmpl
29
38
 
30
39
  ###############################################################################
31
40
 
32
- FROM camptocamp/geomapfish-config:{{geomapfish_main_version}}
41
+ FROM camptocamp/geomapfish-config:{{cookiecutter.geomapfish_major_version_tag_env}} AS gmf_config
33
42
 
34
43
  ARG PGSCHEMA
35
44
  ENV PGSCHEMA=$PGSCHEMA
@@ -40,16 +49,17 @@ RUN \
40
49
  if [ -e /tmp/config/mapserver ]; then mv /tmp/config/mapserver /etc/; fi && \
41
50
  if [ -e /tmp/config/tilegeneration ]; then mv /tmp/config/tilegeneration /etc/; fi && \
42
51
  if [ -e /tmp/config/qgisserver ]; then mv /tmp/config/qgisserver /etc/qgisserver; fi && \
52
+ if [ -e /tmp/config/haproxy ]; then mv /tmp/config/haproxy/* /etc/haproxy/; fi && \
43
53
  mkdir --parent /usr/local/tomcat/webapps/ROOT/ && \
44
54
  if [ -e /tmp/config/print ]; then mv /tmp/config/print/print-apps /usr/local/tomcat/webapps/ROOT/; fi && \
45
- mv /tmp/config/geoportal/{{package}}_geoportal/ /etc/geomapfish/ && \
55
+ mv /tmp/config/geoportal/{{cookiecutter.package}}_geoportal/ /etc/geomapfish/ && \
56
+ mv /tmp/config/geoportal/* /etc/geomapfish/ || true && \
46
57
  chmod g+w -R \
47
58
  /etc/geomapfish \
48
59
  /etc/mapserver \
49
60
  /etc/qgisserver \
50
61
  /etc/tilegeneration \
51
62
  /usr/local/tomcat/webapps/ROOT/print-apps \
52
- /etc/gunicorn \
53
63
  /etc/haproxy_dev \
54
64
  /etc/haproxy && \
55
65
  adduser www-data root && \
@@ -62,6 +72,5 @@ VOLUME /etc/geomapfish \
62
72
  /etc/qgisserver \
63
73
  /etc/tilegeneration \
64
74
  /usr/local/tomcat/webapps/ROOT/print-apps \
65
- /etc/gunicorn \
66
75
  /etc/haproxy_dev \
67
76
  /etc/haproxy
@@ -0,0 +1,14 @@
1
+ PROJECT_PUBLIC_URL=https://example.camptocamp.com/
2
+ PACKAGE={{cookiecutter.package}}
3
+ LANGUAGES=en fr de it
4
+
5
+ .PHONY: update-po-from-url
6
+ update-po-from-url: ## Update the po files from the URL provide by PROJECT_PUBLIC_URL
7
+ curl --fail --retry 5 --retry-delay 1 \
8
+ $(PROJECT_PUBLIC_URL)locale.pot > geoportal/${PACKAGE}_geoportal/locale/${PACKAGE}_geoportal-client${SUFFIX}.pot
9
+ sed -i '/^"POT-Creation-Date: /d' geoportal/${PACKAGE}_geoportal/locale/${PACKAGE}_geoportal-client${SUFFIX}.pot
10
+ docker-compose run --rm -T tools update-po-only `id --user` `id --group` $(LANGUAGES)
11
+
12
+ .PHONY: update-po
13
+ update-po:
14
+ docker-compose exec -T tools sh -c "USER_ID=`id --user` GROUP_ID=`id --group` make -C geoportal update-po"
@@ -1,16 +1,16 @@
1
- {{project}} project
1
+ {{cookiecutter.project}} project
2
2
  ===================
3
3
 
4
- Read the `Documentation <https://camptocamp.github.io/c2cgeoportal/{{geomapfish_main_version}}/>`_
4
+ Read the `Documentation <https://camptocamp.github.io/c2cgeoportal/{{cookiecutter.geomapfish_main_version}}/>`_
5
5
 
6
6
  Checkout
7
7
  --------
8
8
 
9
9
  .. code::
10
10
 
11
- git clone git@github.com:camptocamp/{{project}}.git
11
+ git clone git@github.com:camptocamp/{{cookiecutter.project}}.git
12
12
 
13
- cd {{project}}
13
+ cd {{cookiecutter.project}}
14
14
 
15
15
  Build
16
16
  -----
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import argparse
4
+ import os
5
+ import os.path
6
+ import platform
7
+ import re
8
+ import shutil
9
+ import stat
10
+ import subprocess
11
+ import sys
12
+ import urllib.request
13
+ from typing import Any, Dict, List, Optional
14
+
15
+ import yaml
16
+
17
+
18
+ def run(args: argparse.Namespace, command: List[str], **kwargs: Any) -> None:
19
+ if args.verbose or args.dry_run:
20
+ print(" ".join(command))
21
+ if not args.dry_run:
22
+ subprocess.run(command, **kwargs) # nosec
23
+
24
+
25
+ def main() -> None:
26
+ parser = argparse.ArgumentParser(description="Build the project")
27
+ parser.add_argument("--verbose", action="store_true", help="Display the docker build commands")
28
+ parser.add_argument(
29
+ "--dry-run", action="store_true", help="Display the docker build commands without executing them"
30
+ )
31
+ parser.add_argument("--service", help="Build only the specified service")
32
+ parser.add_argument("--env", action="store_true", help="Build only the .env file")
33
+ parser.add_argument("--simple", action="store_true", help="Force simple application mode")
34
+ parser.add_argument("--not-simple", action="store_true", help="Force not simple application mode")
35
+ parser.add_argument("--upgrade", help="Start upgrading the project to version")
36
+ parser.add_argument(
37
+ "--fast-reload",
38
+ action="store_true",
39
+ help="Restart the composition without Redis to don't lost the cache",
40
+ )
41
+ parser.add_argument(
42
+ "--no-pull",
43
+ action="store_true",
44
+ default=os.environ.get("CI", "FALSE").upper() == "TRUE",
45
+ help="Do not pull external or base images for faster rebuild during development.",
46
+ )
47
+ parser.add_argument(
48
+ "--debug", help="Path to c2cgeoportal source folder to be able to debug the upgrade procedure"
49
+ )
50
+ parser.add_argument(
51
+ "--docker-compose-version-2", action="store_true", help="Use Docker Compose version 2"
52
+ )
53
+ parser.add_argument("env_files", nargs="*", help="The environment config")
54
+ args = parser.parse_args()
55
+
56
+ if args.upgrade:
57
+ major_version = args.upgrade
58
+ match = re.match(r"^([0-9]+\.[0-9]+)\.[0-9]+$", args.upgrade)
59
+ if match is not None:
60
+ major_version = match.group(1)
61
+ match = re.match(r"^([0-9]+\.[0-9]+)\.[0-9a-z]+\.[0-9]+$", args.upgrade)
62
+ if match is not None:
63
+ major_version = match.group(1)
64
+ full_version = args.upgrade if args.upgrade != "master" else "latest"
65
+ with open("upgrade", "w", encoding="utf-8") as f:
66
+ with urllib.request.urlopen( # nosec
67
+ "https://raw.githubusercontent.com/camptocamp/c2cgeoportal/{major_version}/scripts/upgrade".format(
68
+ major_version=major_version
69
+ )
70
+ ) as result:
71
+ if result.code != 200:
72
+ print("ERROR:")
73
+ print(result.read())
74
+ sys.exit(1)
75
+ f.write(result.read().decode())
76
+ debug_args = []
77
+ if args.debug:
78
+ shutil.copyfile(os.path.join(args.debug, "scripts", "upgrade"), "upgrade")
79
+ debug_args = ["--debug", args.debug]
80
+ os.chmod("upgrade", os.stat("upgrade").st_mode | stat.S_IXUSR)
81
+ try:
82
+ if platform.system() == "Windows":
83
+ run(args, ["python", "upgrade", full_version] + debug_args, check=True)
84
+ else:
85
+ run(args, ["./upgrade", full_version] + debug_args, check=True)
86
+ except subprocess.CalledProcessError:
87
+ sys.exit(1)
88
+ sys.exit(0)
89
+
90
+ with open("project.yaml", encoding="utf-8") as project_file:
91
+ project_env = yaml.load(project_file, Loader=yaml.SafeLoader)["env"]
92
+ if len(args.env_files) != project_env["required_args"]:
93
+ print(project_env["help"])
94
+ sys.exit(1)
95
+ env_files = [e.format(*args.env_files) for e in project_env["files"]]
96
+ print("Use env files: {}".format(", ".join(env_files)))
97
+ for env_file in env_files:
98
+ if not os.path.exists(env_file):
99
+ print("Error: the env file '{env_file}' does not exist.".format(env_file=env_file))
100
+ sys.exit(1)
101
+
102
+ with open(".env", "w", encoding="utf-8") as dest:
103
+ for file_ in env_files:
104
+ with open(file_, encoding="utf-8") as src:
105
+ dest.write(src.read() + "\n")
106
+
107
+ simple = not os.path.exists("geoportal/Dockerfile")
108
+ if args.simple:
109
+ simple = True
110
+ if args.not_simple:
111
+ simple = False
112
+
113
+ git_hash = (
114
+ subprocess.run(["git", "rev-parse", "HEAD"], check=True, stdout=subprocess.PIPE)
115
+ .stdout.strip()
116
+ .decode()
117
+ )
118
+
119
+ dest.write("SIMPLE={}\n".format(str(simple).upper()))
120
+ dest.write("GIT_HASH={git_hash}\n".format(git_hash=git_hash))
121
+
122
+ dest.write("# Used env files: {}\n".format(", ".join(env_files)))
123
+
124
+ docker_compose = ["docker", "compose"] if args.docker_compose_version_2 else ["docker-compose"]
125
+ if not args.env:
126
+ docker_compose_build_cmd = [*docker_compose, "build"]
127
+
128
+ if not args.no_pull:
129
+ # Pull all the images
130
+ if not args.service:
131
+ run(args, [*docker_compose, "pull", "--ignore-pull-failures"], check=True) # nosec
132
+ docker_compose_build_cmd.append("--pull")
133
+
134
+ if args.service:
135
+ docker_compose_build_cmd.append(args.service)
136
+
137
+ print_args = [a.replace(" ", "\\ ") for a in docker_compose_build_cmd]
138
+ print_args = [a.replace('"', '\\"') for a in print_args]
139
+ print_args = [a.replace("'", "\\'") for a in print_args]
140
+ try:
141
+ run(args, docker_compose_build_cmd, check=True) # nosec
142
+ except subprocess.CalledProcessError as e:
143
+ print("Error with command: " + " ".join(print_args))
144
+ sys.exit(e.returncode)
145
+
146
+ if args.fast_reload:
147
+ services = [
148
+ service
149
+ for service in subprocess.run(
150
+ [*docker_compose, "ps", "--services", "--all"], stdout=subprocess.PIPE, check=True
151
+ )
152
+ .stdout.decode()
153
+ .splitlines()
154
+ if not service.startswith("redis")
155
+ ]
156
+
157
+ run(args, [*docker_compose, "rm", "--stop", "--force"] + services, check=True)
158
+ run(args, [*docker_compose, "up", "-d"], check=True)
159
+
160
+
161
+ if __name__ == "__main__":
162
+ main()