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