c2cgeoportal-geoportal 2.3.5.80__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.80.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.80.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.80.dist-info/DESCRIPTION.rst +0 -8
- c2cgeoportal_geoportal-2.3.5.80.dist-info/RECORD +0 -7
- c2cgeoportal_geoportal-2.3.5.80.dist-info/entry_points.txt +0 -22
- c2cgeoportal_geoportal-2.3.5.80.dist-info/metadata.json +0 -1
- c2cgeoportal_geoportal-2.3.5.80.dist-info/top_level.txt +0 -1
@@ -0,0 +1,132 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
|
3
|
+
# Copyright (c) 2021-2024, Camptocamp SA
|
4
|
+
# All rights reserved.
|
5
|
+
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
8
|
+
|
9
|
+
# 1. Redistributions of source code must retain the above copyright notice, this
|
10
|
+
# list of conditions and the following disclaimer.
|
11
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
|
15
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
16
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
17
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
18
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
19
|
+
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
20
|
+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
21
|
+
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
22
|
+
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
23
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
24
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
25
|
+
|
26
|
+
# The views and conclusions contained in the software and documentation are those
|
27
|
+
# of the authors and should not be interpreted as representing official policies,
|
28
|
+
# either expressed or implied, of the FreeBSD Project.
|
29
|
+
|
30
|
+
import argparse
|
31
|
+
import shlex
|
32
|
+
import subprocess
|
33
|
+
import sys
|
34
|
+
|
35
|
+
|
36
|
+
def main() -> None:
|
37
|
+
"""Restore the database backup."""
|
38
|
+
parser = argparse.ArgumentParser(description="Restore the database backup.")
|
39
|
+
parser.add_argument("--verbose", action="store_true", help="Print the command that is executed.")
|
40
|
+
parser.add_argument(
|
41
|
+
"--dry-run", action="store_true", help="Only print the command that would be executed."
|
42
|
+
)
|
43
|
+
parser.add_argument(
|
44
|
+
"--env",
|
45
|
+
help="The env file to use to get the connection settings, by default we log in the composition to "
|
46
|
+
"do the restore.",
|
47
|
+
)
|
48
|
+
parser.add_argument(
|
49
|
+
"--docker-compose-file",
|
50
|
+
action="append",
|
51
|
+
default=[],
|
52
|
+
help="The docker compose file to used.",
|
53
|
+
)
|
54
|
+
parser.add_argument(
|
55
|
+
"--arg",
|
56
|
+
action="append",
|
57
|
+
default=[],
|
58
|
+
help="Additional pg_restore argument, example: '--arg=--schema=main', may be used multiple times.",
|
59
|
+
)
|
60
|
+
parser.add_argument("file", help="The file path to restore")
|
61
|
+
args = parser.parse_args()
|
62
|
+
|
63
|
+
with open(args.file, "rb") as file_in:
|
64
|
+
if args.env:
|
65
|
+
env = {}
|
66
|
+
with open(args.env, encoding="utf-8") as file_env:
|
67
|
+
for line in file_env:
|
68
|
+
if line and line[0] != "#":
|
69
|
+
try:
|
70
|
+
index = line.index("=")
|
71
|
+
env[line[:index].strip()] = line[index + 1 :].strip()
|
72
|
+
except ValueError:
|
73
|
+
# Ignore lines that don't have a '='
|
74
|
+
pass
|
75
|
+
command1 = [
|
76
|
+
"docker",
|
77
|
+
"run",
|
78
|
+
"--rm",
|
79
|
+
"--interactive",
|
80
|
+
"--env=PGHOST={}".format(env["PGHOST"]),
|
81
|
+
"--env=PGPORT={}".format(env["PGPORT"]),
|
82
|
+
"--env=PGUSER={}".format(env["PGUSER"]),
|
83
|
+
]
|
84
|
+
command2 = [
|
85
|
+
"--env=PGPASSWORD={}".format(env["PGPASSWORD"]),
|
86
|
+
]
|
87
|
+
command2_annon = ["--env=PGPASSWORD=***"]
|
88
|
+
command3 = [
|
89
|
+
*(["--env=PGSSLMODE={}".format(env["PGSSLMODE"])] if "PGSSLMODE" in env else []),
|
90
|
+
*(["--env=PGOPTIONS={}".format(env["PGOPTIONS"])] if "PGOPTIONS" in env else []),
|
91
|
+
"camptocamp/postgres:{}".format(env["POSTGRES_TAG"]),
|
92
|
+
"pg_restore",
|
93
|
+
"--dbname={}".format(env["PGDATABASE"]),
|
94
|
+
*args.arg,
|
95
|
+
]
|
96
|
+
if args.verbose or args.dry_run:
|
97
|
+
subprocess.run(
|
98
|
+
[
|
99
|
+
"docker",
|
100
|
+
"run",
|
101
|
+
"--rm",
|
102
|
+
"camptocamp/postgres:{}".format(env["POSTGRES_TAG"]),
|
103
|
+
"pg_restore",
|
104
|
+
"--version",
|
105
|
+
]
|
106
|
+
)
|
107
|
+
print(shlex.join([*command1, *command2_annon, *command3]))
|
108
|
+
if args.dry_run:
|
109
|
+
sys.exit(0)
|
110
|
+
sys.exit(subprocess.run([*command1, *command2, *command3], stdin=file_in).returncode)
|
111
|
+
else:
|
112
|
+
command = [
|
113
|
+
"docker",
|
114
|
+
"compose",
|
115
|
+
*[f"--file={f}" for f in args.docker_compose_file],
|
116
|
+
"exec",
|
117
|
+
"-T",
|
118
|
+
"tools",
|
119
|
+
"bash",
|
120
|
+
"-c",
|
121
|
+
'pg_restore --dbname="$PGDATABASE" ' + " ".join(args.arg),
|
122
|
+
]
|
123
|
+
if args.verbose or args.dry_run:
|
124
|
+
subprocess.run(["docker", "compose", "exec", "tools", "pg_restore", "--version"])
|
125
|
+
print(shlex.join(command))
|
126
|
+
if args.dry_run:
|
127
|
+
sys.exit(0)
|
128
|
+
sys.exit(subprocess.run(command, stdin=file_in).returncode)
|
129
|
+
|
130
|
+
|
131
|
+
if __name__ == "__main__":
|
132
|
+
main()
|
File without changes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import time
|
2
|
+
|
3
|
+
import pytest
|
4
|
+
import requests
|
5
|
+
|
6
|
+
|
7
|
+
@pytest.mark.parametrize(
|
8
|
+
"url,params,timeout",
|
9
|
+
[
|
10
|
+
("https://front/", {}, 10),
|
11
|
+
("https://front/themes", {}, 120),
|
12
|
+
("https://front/static-geomapfish/0/locales/fr.json", {}, 2),
|
13
|
+
("https://front/dynamic.json", {"interface": "desktop"}, 10),
|
14
|
+
("https://front/dynamic.json", {"interface": "desktop", "query": "", "path": "/"}, 10),
|
15
|
+
("https://front/c2c/health_check", {}, 2),
|
16
|
+
("https://front/c2c/health_check", {"max_level": "1"}, 2),
|
17
|
+
("https://front/c2c/health_check", {"checker": "check_collector"}, 2),
|
18
|
+
("https://front/admin/layertree", {}, 10),
|
19
|
+
("https://front/admin/layertree/children", {}, 10),
|
20
|
+
("http://mapserver:8080/mapserv_proxy", {"SERVICE": "WMS", "REQUEST": "GetCapabilities"}, 60),
|
21
|
+
(
|
22
|
+
"https://front/mapserv_proxy",
|
23
|
+
{"ogcserver": "source for image/png", "SERVICE": "WMS", "REQUEST": "GetCapabilities"},
|
24
|
+
60,
|
25
|
+
),
|
26
|
+
],
|
27
|
+
)
|
28
|
+
def test_url(url: str, params: dict[str, str], timeout: int) -> None:
|
29
|
+
"""Tests that some URL didn't return an error."""
|
30
|
+
for _ in range(6):
|
31
|
+
response = requests.get(url, params=params, verify=False, timeout=timeout) # nosec
|
32
|
+
if response.status_code == 503:
|
33
|
+
time.sleep(1)
|
34
|
+
continue
|
35
|
+
break
|
36
|
+
assert response.status_code == 200, response.text
|
37
|
+
|
38
|
+
|
39
|
+
def test_admin() -> None:
|
40
|
+
"""Tests that the admin page will provide the login page."""
|
41
|
+
response = requests.get("https://front/admin/", verify=False, timeout=30) # nosec
|
42
|
+
assert response.status_code == 200, response.text
|
43
|
+
assert "Login" in response.text
|
c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tilegeneration/config.yaml.tmpl
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/camptocamp/tilecloud-chain/master/tilecloud_chain/schema.json
|
2
|
+
|
3
|
+
grids:
|
4
|
+
# grid name, I just recommends to add the min resolution because it's common to not generate all the layers at the same resolution.
|
5
|
+
swissgrid_05:
|
6
|
+
# resolutions [required]
|
7
|
+
# Resolutions from eCH-0056 - WMTS-07
|
8
|
+
# https://www.ech.ch/dokument/473ea824-bbcd-43fa-ad0a-c7c84edfa1b8
|
9
|
+
resolutions: [4000, 2000, 1000, 500, 250, 100, 50, 20, 10, 5, 2.5, 1, 0.5, 0.25, 0.1, 0.05]
|
10
|
+
# bbox [required]
|
11
|
+
bbox: [2420000, 1030000, 2900000, 1350000]
|
12
|
+
# srs [required]
|
13
|
+
srs: EPSG:{{cookiecutter.srid}}
|
14
|
+
|
15
|
+
caches:
|
16
|
+
${DISABLE_LOCAL} local:
|
17
|
+
${DISABLE_LOCAL} type: filesystem
|
18
|
+
${DISABLE_LOCAL} folder: /var/sig/tiles
|
19
|
+
${DISABLE_LOCAL} # for GetCapabilities
|
20
|
+
${DISABLE_LOCAL} http_url: ${VISIBLE_WEB_PROTOCOL}://${VISIBLE_WEB_HOST}${VISIBLE_ENTRY_POINT}
|
21
|
+
${DISABLE_LOCAL} s3:
|
22
|
+
${DISABLE_LOCAL} type: s3
|
23
|
+
${DISABLE_LOCAL} bucket: ${TILEGENERATION_S3_BUCKET}
|
24
|
+
${DISABLE_LOCAL} folder: ''
|
25
|
+
${DISABLE_LOCAL} # for GetCapabilities
|
26
|
+
${DISABLE_LOCAL} http_url: ${VISIBLE_WEB_PROTOCOL}://${VISIBLE_WEB_HOST}${VISIBLE_ENTRY_POINT}
|
27
|
+
${DISABLE_LOCAL} cache_control: 'public, max-age=14400'
|
28
|
+
${DISABLE_LOCAL} host: ${AWS_S3_ENDPOINT}
|
29
|
+
azure:
|
30
|
+
type: azure
|
31
|
+
container: ${TILEGENERATION_AZURE_CONTAINER}
|
32
|
+
folder: ''
|
33
|
+
# for GetCapabilities
|
34
|
+
http_url: ${VISIBLE_WEB_PROTOCOL}://${VISIBLE_WEB_HOST}${VISIBLE_ENTRY_POINT}
|
35
|
+
cache_control: 'public, max-age=14400'
|
36
|
+
|
37
|
+
# this defines some defaults values for all the layers
|
38
|
+
defaults:
|
39
|
+
layer: &layer
|
40
|
+
type: wms
|
41
|
+
grid: swissgrid_05
|
42
|
+
# The minimum resolution to seed, useful to use with mapcache, optional.
|
43
|
+
# min_resolution_seed: 1
|
44
|
+
# the URL of the WMS server to used
|
45
|
+
url: ${MAPSERVER_URL}
|
46
|
+
# Set the headers to get the right virtual host, and don't get any cached result
|
47
|
+
headers:
|
48
|
+
Host: '${VISIBLE_WEB_HOST}'
|
49
|
+
Cache-Control: no-cache, no-store
|
50
|
+
Pragma: no-cache
|
51
|
+
# file name extension
|
52
|
+
extension: png
|
53
|
+
# legend file name extension
|
54
|
+
legend_extension: png
|
55
|
+
# the bbox there we want to generate tiles
|
56
|
+
#bbox: [493000, 114000, 586000, 204000]
|
57
|
+
|
58
|
+
# mime type used for the WMS request and the WMTS capabilities generation
|
59
|
+
mime_type: image/png
|
60
|
+
# mime type used for the WMS request and the WMTS legend image generation
|
61
|
+
legend_mime: image/png
|
62
|
+
wmts_style: default
|
63
|
+
# the WMTS dimensions definition [default is []]
|
64
|
+
#dimensions:
|
65
|
+
# - name: DATE
|
66
|
+
# # the default value for the WMTS capabilities
|
67
|
+
# default: '2012'
|
68
|
+
# # the generated values
|
69
|
+
# generate: ['2012']
|
70
|
+
# # all the available values in the WMTS capabilities
|
71
|
+
# values: ['2012']
|
72
|
+
# the meta tiles definition [default is false]
|
73
|
+
meta: true
|
74
|
+
# the meta tiles size [default is 8]
|
75
|
+
meta_size: 5
|
76
|
+
# the meta tiles buffer [default is 128]
|
77
|
+
meta_buffer: 128
|
78
|
+
# connection an sql to get geometries (in column named geom) where we want to generate tiles
|
79
|
+
# Warn: too complex result can slow down the application
|
80
|
+
# connection: host=localhost port=5432 user=www-data password=www-data dbname=<db>
|
81
|
+
# geoms:
|
82
|
+
# - sql: <column> AS geom FROM <table>
|
83
|
+
# size and hash used to detect empty tiles and metatiles [optional, default is None]
|
84
|
+
empty_metatile_detection:
|
85
|
+
size: 740
|
86
|
+
hash: 3237839c217b51b8a9644d596982f342f8041546
|
87
|
+
empty_tile_detection:
|
88
|
+
size: 921
|
89
|
+
hash: 1e3da153be87a493c4c71198366485f290cad43c
|
90
|
+
|
91
|
+
layers:
|
92
|
+
plan:
|
93
|
+
<<: *layer
|
94
|
+
layers: plan
|
95
|
+
ortho:
|
96
|
+
<<: *layer
|
97
|
+
layers: ortho
|
98
|
+
extension: jpeg
|
99
|
+
mime_type: image/jpeg
|
100
|
+
# no buffer needed on rater sources
|
101
|
+
meta_buffer: 0
|
102
|
+
empty_metatile_detection:
|
103
|
+
size: 66163
|
104
|
+
hash: a9d16a1794586ef92129a2fb41a739451ed09914
|
105
|
+
empty_tile_detection:
|
106
|
+
size: 1651
|
107
|
+
hash: 2892fea0a474228f5d66a534b0b5231d923696da
|
108
|
+
|
109
|
+
generation:
|
110
|
+
default_cache: s3
|
111
|
+
|
112
|
+
${DISABLE_LOCAL}redis:
|
113
|
+
${DISABLE_LOCAL} socket_timeout: ${REDIS_TIMEOUT}
|
114
|
+
${DISABLE_LOCAL} # For standalone version
|
115
|
+
${DISABLE_LOCAL} url: 'redis://${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}'
|
116
|
+
${DISABLE_LOCAL} # For Kubernetes version
|
117
|
+
${DISABLE_LOCAL} # sentinels:
|
118
|
+
${DISABLE_LOCAL} # - - ${REDIS_HOST}
|
119
|
+
${DISABLE_LOCAL} # - ${REDIS_PORT}
|
120
|
+
${DISABLE_LOCAL} # service_name: ${REDIS_SERVICENAME}
|
121
|
+
${DISABLE_LOCAL} # db: ${REDIS_DB}
|
122
|
+
|
123
|
+
server:
|
124
|
+
${DISABLE_LOCAL} wmts_path: tiles
|
125
|
+
${DISABLE_LOCAL} static_path: tiles/static
|
126
|
+
${DISABLE_LOCAL} admin_path: tiles/admin
|
127
|
+
expires: 8 # 8 hours
|
128
|
+
predefined_commands:
|
129
|
+
- name: Generation all layers
|
130
|
+
command: generate-tiles
|
131
|
+
- name: Generation layer plan
|
132
|
+
command: generate-tiles --layer=plan
|
133
|
+
- name: Generation layer ortho
|
134
|
+
command: generate-tiles --layer=ortho
|
135
|
+
- name: Generate the legend images
|
136
|
+
command: generate_controller --generate-legend-images
|
137
|
+
|
138
|
+
process:
|
139
|
+
optipng_test:
|
140
|
+
- cmd: optipng -o7 -simulate %(in)s
|
141
|
+
optipng:
|
142
|
+
- cmd: optipng %(args)s -zc9 -zm8 -zs3 -f5 %(in)s
|
143
|
+
arg:
|
144
|
+
default: '-q'
|
145
|
+
quiet: '-q'
|
146
|
+
jpegoptim:
|
147
|
+
- cmd: jpegoptim %(args)s --strip-all --all-normal -m 90 %(in)s
|
148
|
+
arg:
|
149
|
+
default: '-q'
|
150
|
+
quiet: '-q'
|
151
|
+
|
152
|
+
openlayers:
|
153
|
+
srs: EPSG:{{cookiecutter.srid}}
|
154
|
+
center_x: 2600000
|
155
|
+
center_y: 1200000
|
156
|
+
# The proj4js definition, get it from https://epsg.io/
|
157
|
+
# For EPSG:2056
|
158
|
+
proj4js_def: |
|
159
|
+
+proj=somerc
|
160
|
+
+lat_0=46.95240555555556
|
161
|
+
+lon_0=7.439583333333333
|
162
|
+
+k_0=1
|
163
|
+
+x_0=2600000
|
164
|
+
+y_0=1200000
|
165
|
+
+ellps=bessel
|
166
|
+
+towgs84=674.374,15.056,405.346,0,0,0,0
|
167
|
+
+units=m +no_defs
|
168
|
+
|
169
|
+
metadata:
|
170
|
+
title: Some title
|
171
|
+
abstract: Some abstract
|
172
|
+
servicetype: OGC WMTS
|
173
|
+
keywords:
|
174
|
+
- some
|
175
|
+
- keywords
|
176
|
+
fees: None
|
177
|
+
access_constraints: None
|
178
|
+
|
179
|
+
provider:
|
180
|
+
name: The provider name
|
181
|
+
url: The provider URL
|
182
|
+
contact:
|
183
|
+
name: The contact name
|
184
|
+
position: The position name
|
185
|
+
info:
|
186
|
+
phone:
|
187
|
+
voice: +41 11 222 33 44
|
188
|
+
fax: +41 11 222 33 44
|
189
|
+
address:
|
190
|
+
delivery: Address delivery
|
191
|
+
city: Berne
|
192
|
+
area: BE
|
193
|
+
postal_code: 3000
|
194
|
+
country: Switzerland
|
195
|
+
email: info@example.com
|
@@ -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", "*.html.mako"]
|
18
|
+
}
|
@@ -0,0 +1,67 @@
|
|
1
|
+
---
|
2
|
+
# The list (by include, exclude) of default files that will not be overwritten by the upgrade.
|
3
|
+
# That that can be extended with managed_files or reduced with unmanaged_files from the
|
4
|
+
# project.yaml file in the project root directory.
|
5
|
+
default_project_file:
|
6
|
+
include:
|
7
|
+
- geoportal/setup\.py
|
8
|
+
- geoportal/vars\.yaml
|
9
|
+
- geoportal/Makefile
|
10
|
+
- geoportal/{{cookiecutter.package}}_geoportal/__init__\.py
|
11
|
+
- geoportal/{{cookiecutter.package}}_geoportal/templates/.*
|
12
|
+
- geoportal/{{cookiecutter.package}}_geoportal/locale/.*
|
13
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static/.*
|
14
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/.*
|
15
|
+
- print/print-apps/.*
|
16
|
+
- mapserver/.*
|
17
|
+
- tilegeneration/config\.yaml\.tmpl
|
18
|
+
- project\.yaml
|
19
|
+
- docker-compose\.yaml
|
20
|
+
- env\.project
|
21
|
+
- README\.rst
|
22
|
+
- \.github/workflows/main\.yaml
|
23
|
+
- \.github/workflows/rebuild\.yaml
|
24
|
+
exclude:
|
25
|
+
- mapserver/demo\.map\.tmpl
|
26
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/image/favicon\.ico
|
27
|
+
|
28
|
+
# Files ignored when creating the diff files => will just be left untouched.
|
29
|
+
no_diff:
|
30
|
+
- .*\.po
|
31
|
+
- CONST_.+
|
32
|
+
- .*/CONST_.+
|
33
|
+
|
34
|
+
# Files that will be present in the CONST_create_template but will not be considered in the upgrade.
|
35
|
+
# Used to provide the alt applications => does not disturb the user during upgrade.
|
36
|
+
extra:
|
37
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/mobile_alt\.html\.ejs
|
38
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/oeedit\.html\.ejs
|
39
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/Controllermobile_alt\.js
|
40
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/Controlleroeedit\.js
|
41
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/sass/mobile_alt\.scss
|
42
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/sass/vars_mobile_alt\.scss
|
43
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/sass/oeedit\.scss
|
44
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static-ngeo/js/apps/sass/vars_oeedit\.scss
|
45
|
+
- geoportal/interfaces/desktop_alt\.html\.mako
|
46
|
+
- geoportal/{{cookiecutter.package}}_geoportal/static/images/background-layer-button\.png
|
47
|
+
- tests/test_testapp.py
|
48
|
+
|
49
|
+
# Automated file system operations:
|
50
|
+
# Remove some files or directories:
|
51
|
+
# - action: remove
|
52
|
+
# paths:
|
53
|
+
# - <one file or directory>
|
54
|
+
# Move a file:
|
55
|
+
# - action: move
|
56
|
+
# from: <src file>
|
57
|
+
# to: <dst file>
|
58
|
+
upgrade_files:
|
59
|
+
- action: remove
|
60
|
+
paths:
|
61
|
+
- geoportal/tools/extract-messages.js
|
62
|
+
- action: move
|
63
|
+
from: geoportal/lingua-server.cfg
|
64
|
+
to: geoportal/lingva-server.cfg
|
65
|
+
- action: move
|
66
|
+
from: geoportal/lingua-client.cfg
|
67
|
+
to: geoportal/lingva-client.cfg
|