c2cgeoportal-geoportal 2.3.5.79__py3-none-any.whl → 2.9rc44__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 (198) hide show
  1. c2cgeoportal_geoportal/__init__.py +960 -0
  2. c2cgeoportal_geoportal/lib/__init__.py +256 -0
  3. c2cgeoportal_geoportal/lib/authentication.py +250 -0
  4. c2cgeoportal_geoportal/lib/bashcolor.py +46 -0
  5. c2cgeoportal_geoportal/lib/cacheversion.py +77 -0
  6. c2cgeoportal_geoportal/lib/caching.py +176 -0
  7. c2cgeoportal_geoportal/lib/check_collector.py +80 -0
  8. c2cgeoportal_geoportal/lib/checker.py +295 -0
  9. c2cgeoportal_geoportal/lib/common_headers.py +172 -0
  10. c2cgeoportal_geoportal/lib/dbreflection.py +266 -0
  11. c2cgeoportal_geoportal/lib/filter_capabilities.py +360 -0
  12. c2cgeoportal_geoportal/lib/fulltextsearch.py +50 -0
  13. c2cgeoportal_geoportal/lib/functionality.py +166 -0
  14. c2cgeoportal_geoportal/lib/headers.py +62 -0
  15. c2cgeoportal_geoportal/lib/i18n.py +38 -0
  16. c2cgeoportal_geoportal/lib/layers.py +132 -0
  17. c2cgeoportal_geoportal/lib/lingva_extractor.py +937 -0
  18. c2cgeoportal_geoportal/lib/loader.py +57 -0
  19. c2cgeoportal_geoportal/lib/metrics.py +117 -0
  20. c2cgeoportal_geoportal/lib/oauth2.py +1186 -0
  21. c2cgeoportal_geoportal/lib/oidc.py +304 -0
  22. c2cgeoportal_geoportal/lib/wmstparsing.py +353 -0
  23. c2cgeoportal_geoportal/lib/xsd.py +166 -0
  24. c2cgeoportal_geoportal/py.typed +0 -0
  25. c2cgeoportal_geoportal/resources.py +49 -0
  26. c2cgeoportal_geoportal/scaffolds/advance_create/ci/config.yaml +26 -0
  27. c2cgeoportal_geoportal/scaffolds/advance_create/cookiecutter.json +18 -0
  28. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.dockerignore +6 -0
  29. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.eslintrc.yaml +19 -0
  30. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.prospector.yaml +30 -0
  31. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile +75 -0
  32. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Makefile +6 -0
  33. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/alembic.ini +58 -0
  34. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/alembic.yaml +19 -0
  35. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/development.ini +121 -0
  36. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py +139 -0
  37. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/language_mapping +3 -0
  38. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/lingva-client.cfg +5 -0
  39. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/lingva-server.cfg +6 -0
  40. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/production.ini +38 -0
  41. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/requirements.txt +2 -0
  42. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/setup.py +25 -0
  43. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +41 -0
  44. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js +64 -0
  45. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.commons.js +11 -0
  46. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.config.js +22 -0
  47. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py +42 -0
  48. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/authentication.py +10 -0
  49. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/dev.py +14 -0
  50. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/models.py +8 -0
  51. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/multi_organization.py +7 -0
  52. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/resources.py +11 -0
  53. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/api/index.js +12 -0
  54. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/{{cookiecutter.package}}module.js +25 -0
  55. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/subscribers.py +39 -0
  56. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/views/__init__.py +0 -0
  57. c2cgeoportal_geoportal/scaffolds/advance_update/cookiecutter.json +18 -0
  58. c2cgeoportal_geoportal/scaffolds/advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile +121 -0
  59. c2cgeoportal_geoportal/scaffolds/create/cookiecutter.json +18 -0
  60. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.dockerignore +14 -0
  61. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.editorconfig +17 -0
  62. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/main.yaml +73 -0
  63. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/rebuild.yaml +50 -0
  64. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml +66 -0
  65. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.gitignore +16 -0
  66. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.pre-commit-config.yaml +35 -0
  67. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierignore +1 -0
  68. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierrc.yaml +2 -0
  69. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +75 -0
  70. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +70 -0
  71. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/README.rst +29 -0
  72. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +179 -0
  73. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/config.yaml +22 -0
  74. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/docker-compose-check +25 -0
  75. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +2 -0
  76. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml +24 -0
  77. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml +513 -0
  78. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +21 -0
  79. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +65 -0
  80. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.yaml +121 -0
  81. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +102 -0
  82. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +69 -0
  83. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml +430 -0
  84. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/locale/en/LC_MESSAGES/{{cookiecutter.package}}_geoportal-client.po +6 -0
  85. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/desktop.css +0 -0
  86. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/iframe_api.css +0 -0
  87. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/mobile.css +0 -0
  88. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/banner_left.png +0 -0
  89. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/banner_right.png +0 -0
  90. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/blank.png +0 -0
  91. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/markers/marker-blue.png +0 -0
  92. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/markers/marker-gold.png +0 -0
  93. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/markers/marker-green.png +0 -0
  94. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/markers/marker.png +0 -0
  95. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/robot.txt.tmpl +3 -0
  96. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/data/Readme.txt +69 -0
  97. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/data/TM_EUROPE_BORDERS-0.3.sql +70 -0
  98. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/demo.map.tmpl +224 -0
  99. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Arial.ttf +0 -0
  100. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Arialbd.ttf +0 -0
  101. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Arialbi.ttf +0 -0
  102. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Ariali.ttf +0 -0
  103. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/NotoSans-Bold.ttf +0 -0
  104. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/NotoSans-BoldItalic.ttf +0 -0
  105. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/NotoSans-Italic.ttf +0 -0
  106. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/NotoSans-Regular.ttf +0 -0
  107. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Verdana.ttf +0 -0
  108. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Verdanab.ttf +0 -0
  109. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Verdanai.ttf +0 -0
  110. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Verdanaz.ttf +0 -0
  111. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts.conf +12 -0
  112. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.conf +16 -0
  113. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.map.tmpl +87 -0
  114. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/tinyows.xml.tmpl +36 -0
  115. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Landscape.jrxml +207 -0
  116. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Portrait.jrxml +185 -0
  117. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Landscape.jrxml +200 -0
  118. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Portrait.jrxml +170 -0
  119. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/config.yaml.tmpl +175 -0
  120. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/legend.jrxml +109 -0
  121. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation.properties +4 -0
  122. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation_fr.properties +4 -0
  123. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/logo.png +0 -0
  124. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/north.svg +93 -0
  125. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/results.jrxml +25 -0
  126. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/project.yaml +18 -0
  127. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/pyproject.toml +7 -0
  128. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/qgisserver/pg_service.conf.tmpl +15 -0
  129. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/run_alembic.sh +11 -0
  130. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +126 -0
  131. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +132 -0
  132. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/setup.cfg +7 -0
  133. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/spell-ignore-words.txt +5 -0
  134. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/__init__.py +0 -0
  135. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/test_app.py +78 -0
  136. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tilegeneration/config.yaml.tmpl +195 -0
  137. c2cgeoportal_geoportal/scaffolds/update/cookiecutter.json +18 -0
  138. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/.upgrade.yaml +67 -0
  139. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +304 -0
  140. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
  141. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/.CONST_vars.yaml.swp +0 -0
  142. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_config-schema.yaml +927 -0
  143. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml +1503 -0
  144. c2cgeoportal_geoportal/scripts/__init__.py +64 -0
  145. c2cgeoportal_geoportal/scripts/c2cupgrade.py +879 -0
  146. c2cgeoportal_geoportal/scripts/create_demo_theme.py +83 -0
  147. c2cgeoportal_geoportal/scripts/manage_users.py +140 -0
  148. c2cgeoportal_geoportal/scripts/pcreate.py +296 -0
  149. c2cgeoportal_geoportal/scripts/theme2fts.py +347 -0
  150. c2cgeoportal_geoportal/scripts/urllogin.py +81 -0
  151. c2cgeoportal_geoportal/templates/login.html +90 -0
  152. c2cgeoportal_geoportal/templates/notlogin.html +62 -0
  153. c2cgeoportal_geoportal/templates/testi18n.html +12 -0
  154. c2cgeoportal_geoportal/views/__init__.py +59 -0
  155. c2cgeoportal_geoportal/views/dev.py +57 -0
  156. c2cgeoportal_geoportal/views/dynamic.py +208 -0
  157. c2cgeoportal_geoportal/views/entry.py +174 -0
  158. c2cgeoportal_geoportal/views/fulltextsearch.py +189 -0
  159. c2cgeoportal_geoportal/views/geometry_processing.py +75 -0
  160. c2cgeoportal_geoportal/views/i18n.py +129 -0
  161. c2cgeoportal_geoportal/views/layers.py +713 -0
  162. c2cgeoportal_geoportal/views/login.py +684 -0
  163. c2cgeoportal_geoportal/views/mapserverproxy.py +234 -0
  164. c2cgeoportal_geoportal/views/memory.py +90 -0
  165. c2cgeoportal_geoportal/views/ogcproxy.py +120 -0
  166. c2cgeoportal_geoportal/views/pdfreport.py +245 -0
  167. c2cgeoportal_geoportal/views/printproxy.py +143 -0
  168. c2cgeoportal_geoportal/views/profile.py +192 -0
  169. c2cgeoportal_geoportal/views/proxy.py +261 -0
  170. c2cgeoportal_geoportal/views/raster.py +233 -0
  171. c2cgeoportal_geoportal/views/resourceproxy.py +73 -0
  172. c2cgeoportal_geoportal/views/shortener.py +152 -0
  173. c2cgeoportal_geoportal/views/theme.py +1322 -0
  174. c2cgeoportal_geoportal/views/tinyowsproxy.py +189 -0
  175. c2cgeoportal_geoportal/views/vector_tiles.py +83 -0
  176. {c2cgeoportal_geoportal-2.3.5.79.dist-info → c2cgeoportal_geoportal-2.9rc44.dist-info}/METADATA +21 -24
  177. c2cgeoportal_geoportal-2.9rc44.dist-info/RECORD +193 -0
  178. {c2cgeoportal_geoportal-2.3.5.79.dist-info → c2cgeoportal_geoportal-2.9rc44.dist-info}/WHEEL +1 -1
  179. c2cgeoportal_geoportal-2.9rc44.dist-info/entry_points.txt +28 -0
  180. c2cgeoportal_geoportal-2.9rc44.dist-info/top_level.txt +2 -0
  181. tests/__init__.py +100 -0
  182. tests/test_cachebuster.py +71 -0
  183. tests/test_caching.py +275 -0
  184. tests/test_checker.py +85 -0
  185. tests/test_decimaljson.py +47 -0
  186. tests/test_headerstween.py +64 -0
  187. tests/test_i18n.py +31 -0
  188. tests/test_init.py +193 -0
  189. tests/test_locale_negociator.py +69 -0
  190. tests/test_mapserverproxy_route_predicate.py +64 -0
  191. tests/test_raster.py +267 -0
  192. tests/test_wmstparsing.py +238 -0
  193. tests/xmlstr.py +103 -0
  194. c2cgeoportal_geoportal-2.3.5.79.dist-info/DESCRIPTION.rst +0 -8
  195. c2cgeoportal_geoportal-2.3.5.79.dist-info/RECORD +0 -7
  196. c2cgeoportal_geoportal-2.3.5.79.dist-info/entry_points.txt +0 -22
  197. c2cgeoportal_geoportal-2.3.5.79.dist-info/metadata.json +0 -1
  198. c2cgeoportal_geoportal-2.3.5.79.dist-info/top_level.txt +0 -1
@@ -0,0 +1,139 @@
1
+ # Copyright (c) 2019-2024, Camptocamp SA
2
+ # All rights reserved.
3
+
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+
7
+ # 1. Redistributions of source code must retain the above copyright notice, this
8
+ # list of conditions and the following disclaimer.
9
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ # this list of conditions and the following disclaimer in the documentation
11
+ # and/or other materials provided with the distribution.
12
+
13
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
17
+ # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20
+ # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
+
24
+ # The views and conclusions contained in the software and documentation are those
25
+ # of the authors and should not be interpreted as representing official policies,
26
+ # either expressed or implied, of the FreeBSD Project.
27
+
28
+ ###
29
+ # app configuration
30
+ # https://docs.gunicorn.org/en/stable/settings.html
31
+ ###
32
+
33
+ import os
34
+
35
+ import gunicorn.arbiter
36
+ import gunicorn.workers.base
37
+ from c2cwsgiutils import get_config_defaults, prometheus
38
+ from prometheus_client import multiprocess
39
+
40
+ bind = ":8080"
41
+
42
+ worker_class = "gthread"
43
+ workers = int(os.environ.get("GUNICORN_WORKERS", 2))
44
+ threads = int(os.environ.get("GUNICORN_THREADS", 10))
45
+
46
+ timeout = int(os.environ.get("GUNICORN_TIMEOUT", 120))
47
+
48
+ max_requests = int(os.environ.get("GUNICORN_MAX_REQUESTS", 1000))
49
+ max_requests_jitter = int(os.environ.get("GUNICORN_MAX_REQUESTS_JITTER", 100))
50
+ worker_tmp_dir = "/dev/shm" # nosec
51
+ limit_request_line = int(os.environ.get("GUNICORN_LIMIT_REQUEST_LINE", 8190))
52
+
53
+ accesslog = "-"
54
+ access_log_format = os.environ.get(
55
+ "GUNICORN_ACCESS_LOG_FORMAT",
56
+ '%(H)s %({Host}i)s %(m)s %(U)s?%(q)s "%(f)s" "%(a)s" %(s)s %(B)s %(D)s %(p)s',
57
+ )
58
+
59
+ ###
60
+ # logging configuration
61
+ # https://docs.python.org/3/library/logging.config.html#logging-config-dictschema
62
+ ###
63
+ logconfig_dict = {
64
+ "version": 1,
65
+ "root": {
66
+ "level": os.environ["OTHER_LOG_LEVEL"],
67
+ "handlers": [os.environ["LOG_TYPE"]],
68
+ },
69
+ "loggers": {
70
+ "gunicorn.error": {"level": os.environ["GUNICORN_LOG_LEVEL"]},
71
+ # "level = INFO" logs SQL queries.
72
+ # "level = DEBUG" logs SQL queries and results.
73
+ # "level = WARN" logs neither. (Recommended for production systems.)
74
+ "sqlalchemy.engine": {"level": os.environ["SQL_LOG_LEVEL"]},
75
+ "dogpile.cache": {"level": os.environ["DOGPILECACHE_LOG_LEVEL"]},
76
+ "c2cwsgiutils": {"level": os.environ["C2CWSGIUTILS_LOG_LEVEL"]},
77
+ "c2cgeoportal_commons": {"level": os.environ["C2CGEOPORTAL_LOG_LEVEL"]},
78
+ "c2cgeoportal_geoportal": {"level": os.environ["C2CGEOPORTAL_LOG_LEVEL"]},
79
+ "c2cgeoportal_admin": {"level": os.environ["C2CGEOPORTAL_LOG_LEVEL"]},
80
+ "{{cookiecutter.package}}_geoportal": {"level": os.environ["LOG_LEVEL"]},
81
+ },
82
+ "handlers": {
83
+ "console": {
84
+ "class": "logging.StreamHandler",
85
+ "formatter": "generic",
86
+ "stream": "ext://sys.stdout",
87
+ },
88
+ "json": {
89
+ "class": "c2cwsgiutils.pyramid_logging.JsonLogHandler",
90
+ "formatter": "generic",
91
+ "stream": "ext://sys.stdout",
92
+ },
93
+ },
94
+ "formatters": {
95
+ "generic": {
96
+ "format": "%(asctime)s [%(process)d] [%(levelname)-5.5s] %(message)s",
97
+ "datefmt": "[%Y-%m-%d %H:%M:%S %z]",
98
+ "class": "logging.Formatter",
99
+ }
100
+ },
101
+ }
102
+
103
+ raw_paste_global_conf = ["=".join(e) for e in get_config_defaults().items()]
104
+
105
+
106
+ def on_starting(server: gunicorn.arbiter.Arbiter) -> None:
107
+ """
108
+ Will start the prometheus server.
109
+
110
+ Called just before the master process is initialized.
111
+ """
112
+
113
+ del server
114
+
115
+ prometheus.start()
116
+
117
+
118
+ def post_fork(server: gunicorn.arbiter.Arbiter, worker: gunicorn.workers.base.Worker) -> None:
119
+ """
120
+ Will cleanup the configuration we get from the main process.
121
+
122
+ Called just after a worker has been forked.
123
+ """
124
+
125
+ del server, worker
126
+
127
+ prometheus.cleanup()
128
+
129
+
130
+ def child_exit(server: gunicorn.arbiter.Arbiter, worker: gunicorn.workers.base.Worker) -> None:
131
+ """
132
+ Remove the metrics for the exited worker.
133
+
134
+ Called just after a worker has been exited, in the master process.
135
+ """
136
+
137
+ del server
138
+
139
+ multiprocess.mark_process_dead(worker.pid)
@@ -0,0 +1,5 @@
1
+ [extensions]
2
+ .js = geomapfish-angular
3
+ .html = geomapfish-angular
4
+ .ejs = geomapfish-angular
5
+ .yaml = geomapfish-config
@@ -0,0 +1,6 @@
1
+ [extensions]
2
+ .html = babel-mako
3
+
4
+ [extractor:babel-mako]
5
+ comment-tags = TRANSLATORS:
6
+ input_encoding = utf-8
@@ -0,0 +1,38 @@
1
+ ###
2
+ # app configuration
3
+ # http://docs.pylonsproject.org/projects/pyramid/en/1.6-branch/narr/environment.html
4
+ # this file should be used by gunicorn.
5
+ ###
6
+ [app:app]
7
+ use = egg:{{cookiecutter.package}}_geoportal
8
+ filter-with = proxy-prefix
9
+
10
+ pyramid.reload_templates = %(DEVELOPMENT)s
11
+ pyramid.debug_authorization = %(DEVELOPMENT)s
12
+ pyramid.debug_notfound = %(DEVELOPMENT)s
13
+ pyramid.debug_routematch = %(DEVELOPMENT)s
14
+ pyramid.debug_templates = %(DEVELOPMENT)s
15
+
16
+ mako.directories = {{cookiecutter.package}}_geoportal:templates
17
+ c2cgeoportal_geoportal:templates
18
+
19
+ authtkt_secret = %(AUTHTKT_SECRET)s
20
+ authtkt_cookie_name = %(AUTHTKT_COOKIENAME)s
21
+ authtkt_timeout = %(AUTHTKT_TIMEOUT)s
22
+ authtkt_max_age = %(AUTHTKT_MAXAGE)s
23
+ authtkt_reissue_time = %(AUTHTKT_REISSUE_TIME)s
24
+ authtkt_http_only = %(AUTHTKT_HTTP_ONLY)s
25
+ authtkt_secure = %(AUTHTKT_SECURE)s
26
+ authtkt_samesite = %(AUTHTKT_SAMESITE)s
27
+ basicauth = %(BASICAUTH)s
28
+
29
+ app.cfg = /etc/geomapfish/config.yaml
30
+
31
+ tm.annotate_user = false
32
+
33
+ [filter:proxy-prefix]
34
+ use = egg:PasteDeploy#prefix
35
+ prefix = %(VISIBLE_ENTRY_POINT)s
36
+
37
+ [pipeline:main]
38
+ pipeline = egg:c2cwsgiutils#client_info egg:c2cwsgiutils#sentry app
@@ -0,0 +1,2 @@
1
+ #ptvsd # Remote debugging
2
+ #wsgi-lineprof # Profiling
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env python3
2
+
3
+ from setuptools import find_packages, setup
4
+
5
+ setup(
6
+ name="{{cookiecutter.package}}_geoportal",
7
+ version="1.0",
8
+ description="{{cookiecutter.package}}, a c2cgeoportal project",
9
+ author="{{cookiecutter.package}}",
10
+ author_email="info@{{cookiecutter.package}}.com",
11
+ url="https://www.{{cookiecutter.package}}.com/",
12
+ install_requires=[
13
+ "c2cgeoportal_geoportal",
14
+ "c2cgeoportal_admin",
15
+ ],
16
+ packages=find_packages(),
17
+ include_package_data=True,
18
+ zip_safe=False,
19
+ entry_points={
20
+ "paste.app_factory": [
21
+ "main = {{cookiecutter.package}}_geoportal:main",
22
+ ],
23
+ "console_scripts": [],
24
+ },
25
+ )
@@ -0,0 +1,41 @@
1
+ const path = require('path');
2
+ const TerserPlugin = require('terser-webpack-plugin');
3
+
4
+ const destDir = '/etc/static-ngeo/';
5
+
6
+ module.exports = (env, argv) => {
7
+ const library = argv.library ? argv.library : '{{cookiecutter.package}}';
8
+ return {
9
+ entry: path.resolve(__dirname, '{{cookiecutter.package}}_geoportal/static-ngeo/api/index.js'),
10
+ devtool: 'source-map',
11
+ mode: 'production',
12
+ output: {
13
+ filename: 'api.js',
14
+ path: destDir,
15
+ libraryTarget: 'umd',
16
+ globalObject: 'this',
17
+ libraryExport: 'default',
18
+ library: library,
19
+ },
20
+ optimization: {
21
+ minimizer: [
22
+ new TerserPlugin({
23
+ parallel: true,
24
+ terserOptions: {
25
+ compress: false,
26
+ },
27
+ }),
28
+ ],
29
+ },
30
+ resolve: {
31
+ modules: ['/opt/c2cgeoportal/geoportal/node_modules'],
32
+ alias: {
33
+ api: '/opt/c2cgeoportal/geoportal/node_modules/ngeo/distlib/api/src',
34
+ ngeo: '/opt/c2cgeoportal/geoportal/node_modules/ngeo/distlib/src',
35
+ },
36
+ },
37
+ resolveLoader: {
38
+ modules: ['/usr/lib/node_modules'],
39
+ },
40
+ };
41
+ };
@@ -0,0 +1,64 @@
1
+ const path = require('path');
2
+ const ls = require('ngeo/buildtools/ls.js');
3
+ const HtmlWebpackPlugin = require('html-webpack-plugin');
4
+
5
+ const plugins = [];
6
+ const entry = {};
7
+
8
+ // The dev mode will be used for builds on local machine outside docker
9
+ const nodeEnv = process.env['NODE_ENV'] || 'development';
10
+ const dev = nodeEnv == 'development';
11
+
12
+ for (const filename of ls(
13
+ path.resolve(__dirname, '{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/*.html.ejs')
14
+ )) {
15
+ const name = filename.file.substr(0, filename.file.length - '.html.ejs'.length);
16
+ entry[name] = '{{cookiecutter.package}}/apps/Controller' + name + '.js';
17
+ plugins.push(
18
+ new HtmlWebpackPlugin({
19
+ template: filename.full,
20
+ inject: false,
21
+ chunksSortMode: 'manual',
22
+ filename: name + '.html',
23
+ chunks: [name],
24
+ vars: {
25
+ entry_point: '${VISIBLE_ENTRY_POINT}',
26
+ version: '{{cookiecutter.geomapfish_version}}',
27
+ cache_version: '${CACHE_VERSION}',
28
+ },
29
+ })
30
+ );
31
+ }
32
+
33
+ const noDevServer = process.env['NO_DEV_SERVER'] == 'TRUE';
34
+ const devServer = dev && !noDevServer;
35
+
36
+ console.log('Use dev mode: ' + dev);
37
+ console.log('Use dev server mode: ' + devServer);
38
+
39
+ module.exports = {
40
+ output: {
41
+ path: '/etc/static-ngeo/',
42
+ publicPath: devServer ? '${VISIBLE_ENTRY_POINT}dev/' : '.__ENTRY_POINT__static-ngeo/',
43
+ },
44
+ devServer: {
45
+ publicPath: '${VISIBLE_WEB_PROTOCOL}://${VISIBLE_WEB_HOST}${VISIBLE_ENTRY_POINT}dev/',
46
+ port: 8080,
47
+ host: 'webpack_dev_server',
48
+ hot: true,
49
+ },
50
+ entry: entry,
51
+ plugins: plugins,
52
+ resolve: {
53
+ modules: ['/opt/c2cgeoportal/geoportal/node_modules/'],
54
+ alias: {
55
+ '{{cookiecutter.package}}': path.resolve(
56
+ __dirname,
57
+ '{{cookiecutter.package}}_geoportal/static-ngeo/js'
58
+ ),
59
+ ngeo: '/opt/c2cgeoportal/geoportal/node_modules/ngeo/distlib/src',
60
+ gmf: '/opt/c2cgeoportal/geoportal/node_modules/ngeo/distlib/src',
61
+ gmfapi: '/opt/c2cgeoportal/geoportal/node_modules/ngeo/distlib/srcapi',
62
+ },
63
+ },
64
+ };
@@ -0,0 +1,11 @@
1
+ const commons = require('ngeo/buildtools/webpack.commons.js');
2
+
3
+ const config = commons({
4
+ DllReferencePluginOptions: {
5
+ context: '/usr/lib/',
6
+ },
7
+ noTs: true,
8
+ nodll: true,
9
+ });
10
+
11
+ module.exports = () => config;
@@ -0,0 +1,22 @@
1
+ const {merge} = require('webpack-merge');
2
+ const apps = require('./webpack.apps.js');
3
+ const commons = require('./webpack.commons.js');
4
+
5
+ let config = commons();
6
+
7
+ const nodeEnv = process.env['NODE_ENV'] || 'development';
8
+ switch (nodeEnv) {
9
+ case 'development':
10
+ config = merge(config, require('ngeo/buildtools/webpack.dev')());
11
+ break;
12
+ case 'production':
13
+ config = merge(config, require('ngeo/buildtools/webpack.prod')());
14
+ break;
15
+ default:
16
+ console.log(`The 'NODE_ENV' environment variable is set to an invalid value: ${process.env.NODE_ENV}.`);
17
+ process.exit(2);
18
+ }
19
+
20
+ config = merge(config, apps);
21
+
22
+ module.exports = config;
@@ -0,0 +1,42 @@
1
+ from pyramid.config import Configurator
2
+
3
+ import {{cookiecutter.package}}_geoportal.authentication
4
+ import {{cookiecutter.package}}_geoportal.dev
5
+ import {{cookiecutter.package}}_geoportal.multi_organization
6
+ from c2cgeoportal_geoportal import add_interface_config, locale_negotiator
7
+ from c2cgeoportal_geoportal.lib.i18n import LOCALE_PATH
8
+ from {{cookiecutter.package}}_geoportal.resources import Root
9
+
10
+
11
+ def main(global_config, **settings):
12
+ """
13
+ This function returns a Pyramid WSGI application.
14
+ """
15
+ del global_config # Unused
16
+
17
+ config = Configurator(
18
+ root_factory=Root,
19
+ settings=settings,
20
+ locale_negotiator=locale_negotiator,
21
+ )
22
+
23
+ config.include("c2cgeoportal_commons")
24
+
25
+ config.include({{cookiecutter.package}}_geoportal.authentication.includeme)
26
+
27
+ config.add_translation_dirs(LOCALE_PATH)
28
+
29
+ config.include("c2cgeoportal_geoportal")
30
+
31
+ config.include({{cookiecutter.package}}_geoportal.multi_organization.includeme)
32
+
33
+ # Scan view decorator for adding routes
34
+ config.scan()
35
+
36
+ # Add the interfaces
37
+ for interface in config.get_settings().get("interfaces", []):
38
+ add_interface_config(config, interface)
39
+
40
+ config.include({{cookiecutter.package}}_geoportal.dev.includeme)
41
+
42
+ return config.make_wsgi_app()
@@ -0,0 +1,10 @@
1
+ from pyramid.authorization import ACLAuthorizationPolicy
2
+ from pyramid.config import Configurator
3
+
4
+ from c2cgeoportal_geoportal.lib.authentication import create_authentication
5
+
6
+
7
+ def includeme(config: Configurator) -> None:
8
+ """Initialize the authentication( for a Pyramid app."""
9
+ config.set_authorization_policy(ACLAuthorizationPolicy())
10
+ config.set_authentication_policy(create_authentication(config.get_settings()))
@@ -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
@@ -0,0 +1,11 @@
1
+ import pyramid.request
2
+ from pyramid.security import ALL_PERMISSIONS, Allow
3
+
4
+
5
+ class Root:
6
+ """The Pyramid root object."""
7
+
8
+ __acl__ = [(Allow, "role_admin", ALL_PERMISSIONS)]
9
+
10
+ def __init__(self, request: pyramid.request.Request):
11
+ self.request = request
@@ -0,0 +1,12 @@
1
+ /* eslint-disable */
2
+ import Map from 'api/Map.js';
3
+ import {dynamicUrl} from 'api/constants.js';
4
+
5
+ // The URL to the dynamic constants service.
6
+ dynamicUrl.dynamicUrl = '{FULL_ENTRY_POINT}dynamic.json?interface=api';
7
+
8
+ const lib = {
9
+ Map,
10
+ };
11
+
12
+ export default lib;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This file provides the "{{cookiecutter.package}}" namespace, which is the
3
+ * application's main namespace. And it defines the application's Angular
4
+ * module.
5
+ */
6
+
7
+ import angular from 'angular';
8
+ import {decodeQueryString} from 'ngeo/utils.js';
9
+
10
+ /**
11
+ * @type {!angular.IModule}
12
+ */
13
+ const myModule = angular.module('{{cookiecutter.package}}', []);
14
+
15
+ myModule.config([
16
+ '$compileProvider',
17
+ function ($compileProvider) {
18
+ if (!('debug' in decodeQueryString(window.location.search))) {
19
+ // Disable the debug info
20
+ $compileProvider.debugInfoEnabled(false);
21
+ }
22
+ },
23
+ ]);
24
+
25
+ export default myModule;
@@ -0,0 +1,39 @@
1
+ from pyramid.events import BeforeRender, NewRequest, subscriber
2
+ from pyramid.i18n import TranslationStringFactory, get_localizer
3
+
4
+ # use two translator to translate each strings in Make
5
+ tsf_server = TranslationStringFactory("{{cookiecutter.package}}-server")
6
+ tsf_geoportal = TranslationStringFactory("c2cgeoportal")
7
+ tsf_admin = TranslationStringFactory("c2cgeoportal_admin")
8
+ tsf_c2cgeoform = TranslationStringFactory("c2cgeoform")
9
+ tsf_getitfixed = TranslationStringFactory("getitfixed")
10
+
11
+
12
+ @subscriber(NewRequest)
13
+ def add_localizer(event):
14
+ request = event.request
15
+ localizer = get_localizer(request)
16
+
17
+ def auto_translate(string):
18
+ if request.path_info.startswith("/admin/"):
19
+ tsf_list = [tsf_admin, tsf_c2cgeoform]
20
+ elif request.path_info.startswith("/getitfixed"):
21
+ tsf_list = [tsf_getitfixed, tsf_c2cgeoform]
22
+ else:
23
+ tsf_list = [tsf_server, tsf_geoportal]
24
+ for tsf in tsf_list:
25
+ result = localizer.translate(tsf(string))
26
+ if result != string:
27
+ break
28
+ return result
29
+
30
+ request.localizer = localizer
31
+ request.translate = auto_translate
32
+
33
+
34
+ @subscriber(BeforeRender)
35
+ def add_renderer_globals(event):
36
+ request = event.get("request")
37
+ if request:
38
+ event["_"] = request.translate
39
+ event["localizer"] = request.localizer
@@ -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
+ }