c2cgeoportal-geoportal 2.3.5.80__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.
- 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 +77 -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 +172 -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 +304 -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 +513 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +21 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +65 -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 +16 -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 +78 -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 +304 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/.CONST_vars.yaml.swp +0 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_config-schema.yaml +927 -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 +83 -0
- c2cgeoportal_geoportal/scripts/manage_users.py +140 -0
- c2cgeoportal_geoportal/scripts/pcreate.py +296 -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 +684 -0
- c2cgeoportal_geoportal/views/mapserverproxy.py +234 -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 +192 -0
- c2cgeoportal_geoportal/views/proxy.py +261 -0
- c2cgeoportal_geoportal/views/raster.py +233 -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.9rc44.dist-info}/METADATA +21 -24
- c2cgeoportal_geoportal-2.9rc44.dist-info/RECORD +193 -0
- {c2cgeoportal_geoportal-2.3.5.80.dist-info → c2cgeoportal_geoportal-2.9rc44.dist-info}/WHEEL +1 -1
- c2cgeoportal_geoportal-2.9rc44.dist-info/entry_points.txt +28 -0
- c2cgeoportal_geoportal-2.9rc44.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,179 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
|
3
|
+
import argparse
|
4
|
+
import os
|
5
|
+
import os.path
|
6
|
+
import platform
|
7
|
+
import re
|
8
|
+
import shlex
|
9
|
+
import shutil
|
10
|
+
import stat
|
11
|
+
import subprocess
|
12
|
+
import sys
|
13
|
+
import urllib.request
|
14
|
+
from typing import TYPE_CHECKING, Any, List, Optional
|
15
|
+
|
16
|
+
import yaml
|
17
|
+
|
18
|
+
CompletedProcess = subprocess.CompletedProcess[str] if TYPE_CHECKING else subprocess.CompletedProcess
|
19
|
+
|
20
|
+
|
21
|
+
def run(
|
22
|
+
args: argparse.Namespace, command: List[str], exit_on_error: bool = True, **kwargs: Any
|
23
|
+
) -> Optional[CompletedProcess]:
|
24
|
+
if args.verbose or args.dry_run:
|
25
|
+
print(shlex.join(command))
|
26
|
+
if not args.dry_run or "stdout" in kwargs:
|
27
|
+
if args.stack_trace and exit_on_error and not "checks" in kwargs:
|
28
|
+
kwargs["check"] = True
|
29
|
+
process = subprocess.run(command, **kwargs) # nosec
|
30
|
+
if exit_on_error and process.returncode != 0:
|
31
|
+
print(f"An error occurred during execution of `{shlex.join(command)}`")
|
32
|
+
sys.exit(process.returncode)
|
33
|
+
return process
|
34
|
+
return None
|
35
|
+
|
36
|
+
|
37
|
+
def main() -> None:
|
38
|
+
parser = argparse.ArgumentParser(description="Build the project")
|
39
|
+
parser.add_argument("--verbose", action="store_true", help="Display the Docker build commands")
|
40
|
+
parser.add_argument(
|
41
|
+
"--dry-run", action="store_true", help="Display the docker build commands without executing them"
|
42
|
+
)
|
43
|
+
parser.add_argument("--service", help="Build only the specified service")
|
44
|
+
parser.add_argument("--env", action="store_true", help="Build only the .env file")
|
45
|
+
parser.add_argument("--simple", action="store_true", help="Force simple application mode")
|
46
|
+
parser.add_argument("--not-simple", action="store_true", help="Force not simple application mode")
|
47
|
+
parser.add_argument("--upgrade", help="Start upgrading the project to version")
|
48
|
+
parser.add_argument(
|
49
|
+
"--reload",
|
50
|
+
nargs="?",
|
51
|
+
action="store",
|
52
|
+
const="",
|
53
|
+
help="Comma separate list of services that will be reloaded after the build",
|
54
|
+
)
|
55
|
+
parser.add_argument(
|
56
|
+
"--no-pull",
|
57
|
+
action="store_true",
|
58
|
+
default=os.environ.get("CI", "FALSE").upper() == "TRUE",
|
59
|
+
help="Do not pull external or base images for faster rebuild during development.",
|
60
|
+
)
|
61
|
+
parser.add_argument(
|
62
|
+
"--debug", help="Path to c2cgeoportal source folder to be able to debug the upgrade procedure"
|
63
|
+
)
|
64
|
+
parser.add_argument("--stack-trace", action="store_true", help="Display the stack trace on error")
|
65
|
+
parser.add_argument("env_files", nargs="*", help="The environment config")
|
66
|
+
args = parser.parse_args()
|
67
|
+
|
68
|
+
if args.upgrade:
|
69
|
+
major_version = args.upgrade
|
70
|
+
match = re.match(r"^([0-9]+\.[0-9]+)\.[0-9]+$", args.upgrade)
|
71
|
+
if match is not None:
|
72
|
+
major_version = match.group(1)
|
73
|
+
match = re.match(r"^([0-9]+\.[0-9]+)\.[0-9a-z]+\.[0-9]+$", args.upgrade)
|
74
|
+
if match is not None:
|
75
|
+
major_version = match.group(1)
|
76
|
+
full_version = args.upgrade
|
77
|
+
with open("upgrade", "w", encoding="utf-8") as f:
|
78
|
+
with urllib.request.urlopen( # nosec
|
79
|
+
"https://raw.githubusercontent.com/camptocamp/c2cgeoportal/{major_version}/scripts/upgrade".format(
|
80
|
+
major_version=major_version
|
81
|
+
)
|
82
|
+
) as result:
|
83
|
+
if result.code != 200:
|
84
|
+
print("ERROR:")
|
85
|
+
print(result.read())
|
86
|
+
sys.exit(1)
|
87
|
+
f.write(result.read().decode())
|
88
|
+
debug_args = []
|
89
|
+
if args.debug:
|
90
|
+
shutil.copyfile(os.path.join(args.debug, "scripts", "upgrade"), "upgrade")
|
91
|
+
debug_args = ["--debug", args.debug]
|
92
|
+
os.chmod("upgrade", os.stat("upgrade").st_mode | stat.S_IXUSR)
|
93
|
+
try:
|
94
|
+
if platform.system() == "Windows":
|
95
|
+
run(args, ["python", "upgrade", full_version] + debug_args)
|
96
|
+
else:
|
97
|
+
run(args, ["./upgrade", full_version] + debug_args)
|
98
|
+
except subprocess.CalledProcessError:
|
99
|
+
sys.exit(1)
|
100
|
+
sys.exit(0)
|
101
|
+
|
102
|
+
docker_compose_command = ["docker", "compose"]
|
103
|
+
with open("project.yaml", encoding="utf-8") as project_file:
|
104
|
+
project_env = yaml.load(project_file, Loader=yaml.SafeLoader)["env"]
|
105
|
+
if len(args.env_files) != project_env["required_args"]:
|
106
|
+
print(project_env["help"])
|
107
|
+
sys.exit(1)
|
108
|
+
env_files = [e.format(*args.env_files) for e in project_env["files"]]
|
109
|
+
print("Use env files: {}".format(", ".join(env_files)))
|
110
|
+
for env_file in env_files:
|
111
|
+
if not os.path.exists(env_file):
|
112
|
+
print(f"Error: the env file '{env_file}' does not exist.")
|
113
|
+
sys.exit(1)
|
114
|
+
|
115
|
+
with open(".env", "w", encoding="utf-8") as dest:
|
116
|
+
for file_ in env_files:
|
117
|
+
with open(file_, encoding="utf-8") as src:
|
118
|
+
dest.write(src.read() + "\n")
|
119
|
+
|
120
|
+
simple = not os.path.exists("geoportal/Dockerfile")
|
121
|
+
if args.simple:
|
122
|
+
simple = True
|
123
|
+
if args.not_simple:
|
124
|
+
simple = False
|
125
|
+
|
126
|
+
git_hash = run(args, ["git", "rev-parse", "HEAD"], stdout=subprocess.PIPE).stdout.decode().strip()
|
127
|
+
|
128
|
+
dest.write(f"SIMPLE={str(simple).upper()}\n")
|
129
|
+
dest.write(f"GIT_HASH={git_hash}\n")
|
130
|
+
|
131
|
+
dest.write("# Used env files: {}\n".format(", ".join(env_files)))
|
132
|
+
|
133
|
+
if not args.env:
|
134
|
+
docker_compose_build_cmd = [*docker_compose_command, "build"]
|
135
|
+
|
136
|
+
if not args.no_pull:
|
137
|
+
# Pull all the images
|
138
|
+
if not args.service:
|
139
|
+
run(args, [*docker_compose_command, "pull", "--ignore-buildable"]) # nosec
|
140
|
+
docker_compose_build_cmd.append("--pull")
|
141
|
+
|
142
|
+
if args.service:
|
143
|
+
docker_compose_build_cmd.append(args.service)
|
144
|
+
|
145
|
+
print_args = [a.replace(" ", "\\ ") for a in docker_compose_build_cmd]
|
146
|
+
print_args = [a.replace('"', '\\"') for a in print_args]
|
147
|
+
print_args = [a.replace("'", "\\'") for a in print_args]
|
148
|
+
try:
|
149
|
+
env = {"DOCKER_BUILDKIT": "1", "COMPOSE_DOCKER_CLI_BUILD": "1"}
|
150
|
+
env.update(os.environ)
|
151
|
+
run(args, docker_compose_build_cmd, env=env) # nosec
|
152
|
+
except subprocess.CalledProcessError as e:
|
153
|
+
print("Error with command: " + " ".join(print_args))
|
154
|
+
sys.exit(e.returncode)
|
155
|
+
|
156
|
+
if args.reload:
|
157
|
+
services = args.reload.split(",")
|
158
|
+
elif args.reload == "":
|
159
|
+
services = [
|
160
|
+
service
|
161
|
+
for service in run(
|
162
|
+
args,
|
163
|
+
[*docker_compose_command, "ps", "--services", "--all"],
|
164
|
+
stdout=subprocess.PIPE,
|
165
|
+
exit_on_error=True,
|
166
|
+
)
|
167
|
+
.stdout.decode()
|
168
|
+
.splitlines()
|
169
|
+
if not service.startswith("redis")
|
170
|
+
]
|
171
|
+
|
172
|
+
if args.reload is not None:
|
173
|
+
run(args, [*docker_compose_command, "rm", "--force", "-v", "config"])
|
174
|
+
for service in services:
|
175
|
+
run(args, [*docker_compose_command, "up", "--detach", "--force-recreate", service])
|
176
|
+
|
177
|
+
|
178
|
+
if __name__ == "__main__":
|
179
|
+
main()
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/camptocamp/c2cciutils/master/c2cciutils/schema.json
|
2
|
+
|
3
|
+
checks:
|
4
|
+
codespell: False
|
5
|
+
required_workflows: False
|
6
|
+
dependabot_config: False
|
7
|
+
prospector_config: False
|
8
|
+
setup: False
|
9
|
+
|
10
|
+
version:
|
11
|
+
branch_to_version_re:
|
12
|
+
- from: (prod-[0-9]+-[0-9]+)
|
13
|
+
to: \1
|
14
|
+
- from: (int-[0-9]+-[0-9]+)
|
15
|
+
to: \1
|
16
|
+
|
17
|
+
publish:
|
18
|
+
pypi: false
|
19
|
+
docker:
|
20
|
+
dispatch: {}
|
21
|
+
images:
|
22
|
+
- name: camptocamp/{{cookiecutter.package}}-config
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
|
3
|
+
import argparse
|
4
|
+
import subprocess
|
5
|
+
import sys
|
6
|
+
|
7
|
+
|
8
|
+
def _main() -> None:
|
9
|
+
argparser = argparse.ArgumentParser("Tests that's all the services are running")
|
10
|
+
argparser.parse_args()
|
11
|
+
|
12
|
+
services = [
|
13
|
+
s.strip()
|
14
|
+
for s in subprocess.run(["docker", "compose", "ps"], check=True, stdout=subprocess.PIPE)
|
15
|
+
.stdout.decode("utf-8")
|
16
|
+
.splitlines()
|
17
|
+
]
|
18
|
+
errors_statuses = [s for s in services if " Exit " in s and not s.endswith(" Exit 0")]
|
19
|
+
if errors_statuses:
|
20
|
+
print("\n".join(errors_statuses))
|
21
|
+
sys.exit(1)
|
22
|
+
|
23
|
+
|
24
|
+
if __name__ == "__main__":
|
25
|
+
_main()
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# This file is used by the acceptance tests to have a local database.
|
2
|
+
|
3
|
+
volumes:
|
4
|
+
postgresql_data:
|
5
|
+
|
6
|
+
services:
|
7
|
+
config: &db-config
|
8
|
+
environment:
|
9
|
+
- PGHOST=db
|
10
|
+
- PGHOST_SLAVE=db
|
11
|
+
- PGSSLMODE=prefer
|
12
|
+
geoportal: *db-config
|
13
|
+
# geoportal-advance: *db-config
|
14
|
+
tools: *db-config
|
15
|
+
alembic: *db-config
|
16
|
+
# alembic-advance: *db-config
|
17
|
+
# webpack_dev_server: *db-config
|
18
|
+
|
19
|
+
db:
|
20
|
+
extends:
|
21
|
+
file: docker-compose-lib.yaml
|
22
|
+
service: db
|
23
|
+
volumes:
|
24
|
+
- postgresql_data:/var/lib/postgresql/data
|