c2cgeoportal-geoportal 2.3.5.79__py3-none-any.whl → 2.9rc1__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.
- c2cgeoportal_geoportal/__init__.py +960 -0
- c2cgeoportal_geoportal/lib/__init__.py +256 -0
- c2cgeoportal_geoportal/lib/authentication.py +250 -0
- c2cgeoportal_geoportal/lib/bashcolor.py +46 -0
- c2cgeoportal_geoportal/lib/cacheversion.py +75 -0
- c2cgeoportal_geoportal/lib/caching.py +176 -0
- c2cgeoportal_geoportal/lib/check_collector.py +80 -0
- c2cgeoportal_geoportal/lib/checker.py +295 -0
- c2cgeoportal_geoportal/lib/common_headers.py +170 -0
- c2cgeoportal_geoportal/lib/dbreflection.py +266 -0
- c2cgeoportal_geoportal/lib/filter_capabilities.py +360 -0
- c2cgeoportal_geoportal/lib/fulltextsearch.py +50 -0
- c2cgeoportal_geoportal/lib/functionality.py +166 -0
- c2cgeoportal_geoportal/lib/headers.py +62 -0
- c2cgeoportal_geoportal/lib/i18n.py +38 -0
- c2cgeoportal_geoportal/lib/layers.py +132 -0
- c2cgeoportal_geoportal/lib/lingva_extractor.py +937 -0
- c2cgeoportal_geoportal/lib/loader.py +57 -0
- c2cgeoportal_geoportal/lib/metrics.py +117 -0
- c2cgeoportal_geoportal/lib/oauth2.py +1186 -0
- c2cgeoportal_geoportal/lib/oidc.py +302 -0
- c2cgeoportal_geoportal/lib/wmstparsing.py +353 -0
- c2cgeoportal_geoportal/lib/xsd.py +166 -0
- c2cgeoportal_geoportal/py.typed +0 -0
- c2cgeoportal_geoportal/resources.py +49 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/ci/config.yaml +26 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.dockerignore +6 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.eslintrc.yaml +19 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/.prospector.yaml +30 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile +75 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Makefile +6 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/alembic.ini +58 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/alembic.yaml +19 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/development.ini +121 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py +139 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/language_mapping +3 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/lingva-client.cfg +5 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/lingva-server.cfg +6 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/production.ini +38 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/requirements.txt +2 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/setup.py +25 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +41 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js +64 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.commons.js +11 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.config.js +22 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py +42 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/authentication.py +10 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/dev.py +14 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/models.py +8 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/multi_organization.py +7 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/resources.py +11 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/api/index.js +12 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/{{cookiecutter.package}}module.js +25 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/subscribers.py +39 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/views/__init__.py +0 -0
- c2cgeoportal_geoportal/scaffolds/advance_update/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile +121 -0
- c2cgeoportal_geoportal/scaffolds/create/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.dockerignore +14 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.editorconfig +17 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/main.yaml +73 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/rebuild.yaml +50 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml +66 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.gitignore +16 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.pre-commit-config.yaml +35 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierignore +1 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierrc.yaml +2 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +75 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +70 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/README.rst +29 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +179 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/config.yaml +22 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/docker-compose-check +25 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +2 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml +24 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml +511 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +21 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +59 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.yaml +121 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +102 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +69 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml +430 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/locale/en/LC_MESSAGES/{{cookiecutter.package}}_geoportal-client.po +6 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/desktop.css +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/iframe_api.css +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/css/mobile.css +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/banner_left.png +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/banner_right.png +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/blank.png +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/markers/marker-blue.png +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/markers/marker-gold.png +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/markers/marker-green.png +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/images/markers/marker.png +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/static/robot.txt.tmpl +3 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/data/Readme.txt +69 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/data/TM_EUROPE_BORDERS-0.3.sql +70 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/demo.map.tmpl +224 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Arial.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Arialbd.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Arialbi.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Ariali.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/NotoSans-Bold.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/NotoSans-BoldItalic.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/NotoSans-Italic.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/NotoSans-Regular.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Verdana.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Verdanab.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Verdanai.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts/Verdanaz.ttf +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/fonts.conf +12 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.conf +15 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.map.tmpl +87 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/tinyows.xml.tmpl +36 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Landscape.jrxml +207 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Portrait.jrxml +185 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Landscape.jrxml +200 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Portrait.jrxml +170 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/config.yaml.tmpl +175 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/legend.jrxml +109 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation.properties +4 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/localisation_fr.properties +4 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/logo.png +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/north.svg +93 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/results.jrxml +25 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/project.yaml +18 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/pyproject.toml +7 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/qgisserver/pg_service.conf.tmpl +15 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/run_alembic.sh +11 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +126 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +132 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/setup.cfg +7 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/spell-ignore-words.txt +5 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/__init__.py +0 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/test_app.py +43 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tilegeneration/config.yaml.tmpl +195 -0
- c2cgeoportal_geoportal/scaffolds/update/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/.upgrade.yaml +67 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +295 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_config-schema.yaml +922 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml +1503 -0
- c2cgeoportal_geoportal/scripts/__init__.py +64 -0
- c2cgeoportal_geoportal/scripts/c2cupgrade.py +879 -0
- c2cgeoportal_geoportal/scripts/create_demo_theme.py +80 -0
- c2cgeoportal_geoportal/scripts/manage_users.py +140 -0
- c2cgeoportal_geoportal/scripts/pcreate.py +314 -0
- c2cgeoportal_geoportal/scripts/theme2fts.py +347 -0
- c2cgeoportal_geoportal/scripts/urllogin.py +81 -0
- c2cgeoportal_geoportal/templates/login.html +90 -0
- c2cgeoportal_geoportal/templates/notlogin.html +62 -0
- c2cgeoportal_geoportal/templates/testi18n.html +12 -0
- c2cgeoportal_geoportal/views/__init__.py +59 -0
- c2cgeoportal_geoportal/views/dev.py +57 -0
- c2cgeoportal_geoportal/views/dynamic.py +208 -0
- c2cgeoportal_geoportal/views/entry.py +174 -0
- c2cgeoportal_geoportal/views/fulltextsearch.py +189 -0
- c2cgeoportal_geoportal/views/geometry_processing.py +75 -0
- c2cgeoportal_geoportal/views/i18n.py +129 -0
- c2cgeoportal_geoportal/views/layers.py +713 -0
- c2cgeoportal_geoportal/views/login.py +679 -0
- c2cgeoportal_geoportal/views/mapserverproxy.py +191 -0
- c2cgeoportal_geoportal/views/memory.py +90 -0
- c2cgeoportal_geoportal/views/ogcproxy.py +120 -0
- c2cgeoportal_geoportal/views/pdfreport.py +245 -0
- c2cgeoportal_geoportal/views/printproxy.py +143 -0
- c2cgeoportal_geoportal/views/profile.py +127 -0
- c2cgeoportal_geoportal/views/proxy.py +259 -0
- c2cgeoportal_geoportal/views/raster.py +193 -0
- c2cgeoportal_geoportal/views/resourceproxy.py +73 -0
- c2cgeoportal_geoportal/views/shortener.py +152 -0
- c2cgeoportal_geoportal/views/theme.py +1322 -0
- c2cgeoportal_geoportal/views/tinyowsproxy.py +189 -0
- c2cgeoportal_geoportal/views/vector_tiles.py +83 -0
- {c2cgeoportal_geoportal-2.3.5.79.dist-info → c2cgeoportal_geoportal-2.9rc1.dist-info}/METADATA +21 -24
- c2cgeoportal_geoportal-2.9rc1.dist-info/RECORD +192 -0
- {c2cgeoportal_geoportal-2.3.5.79.dist-info → c2cgeoportal_geoportal-2.9rc1.dist-info}/WHEEL +1 -1
- c2cgeoportal_geoportal-2.9rc1.dist-info/entry_points.txt +28 -0
- c2cgeoportal_geoportal-2.9rc1.dist-info/top_level.txt +2 -0
- tests/__init__.py +100 -0
- tests/test_cachebuster.py +71 -0
- tests/test_caching.py +275 -0
- tests/test_checker.py +85 -0
- tests/test_decimaljson.py +47 -0
- tests/test_headerstween.py +64 -0
- tests/test_i18n.py +31 -0
- tests/test_init.py +193 -0
- tests/test_locale_negociator.py +69 -0
- tests/test_mapserverproxy_route_predicate.py +64 -0
- tests/test_raster.py +267 -0
- tests/test_wmstparsing.py +238 -0
- tests/xmlstr.py +103 -0
- c2cgeoportal_geoportal-2.3.5.79.dist-info/DESCRIPTION.rst +0 -8
- c2cgeoportal_geoportal-2.3.5.79.dist-info/RECORD +0 -7
- c2cgeoportal_geoportal-2.3.5.79.dist-info/entry_points.txt +0 -22
- c2cgeoportal_geoportal-2.3.5.79.dist-info/metadata.json +0 -1
- c2cgeoportal_geoportal-2.3.5.79.dist-info/top_level.txt +0 -1
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py
ADDED
@@ -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)
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/production.ini
ADDED
@@ -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,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
|
+
)
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js
ADDED
@@ -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
|
+
};
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js
ADDED
@@ -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
|
+
};
|
c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.config.js
ADDED
@@ -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,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
|
File without changes
|
@@ -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
|
+
}
|