c2cgeoportal-geoportal 2.6.0__py2.py3-none-any.whl → 2.8.1.180__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 +245 -95
- c2cgeoportal_geoportal/lib/__init__.py +67 -43
- c2cgeoportal_geoportal/lib/authentication.py +50 -26
- c2cgeoportal_geoportal/lib/bashcolor.py +17 -13
- c2cgeoportal_geoportal/lib/cacheversion.py +16 -8
- c2cgeoportal_geoportal/lib/caching.py +65 -193
- c2cgeoportal_geoportal/lib/check_collector.py +17 -10
- c2cgeoportal_geoportal/lib/checker.py +67 -65
- c2cgeoportal_geoportal/lib/common_headers.py +167 -0
- c2cgeoportal_geoportal/lib/dbreflection.py +61 -46
- c2cgeoportal_geoportal/lib/filter_capabilities.py +126 -88
- 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 +363 -240
- c2cgeoportal_geoportal/lib/loader.py +11 -16
- c2cgeoportal_geoportal/lib/metrics.py +28 -17
- c2cgeoportal_geoportal/lib/oauth2.py +392 -206
- c2cgeoportal_geoportal/lib/wmstparsing.py +105 -84
- 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} +22 -15
- 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 +100 -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/{create/geoportal/setup.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/setup.py} +6 -7
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/tsconfig.json +8 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +77 -0
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/webpack.apps.js_tmpl → advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js} +29 -28
- c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/webpack.commons.js +4 -7
- c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/webpack.config.js +1 -1
- 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/{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 -27
- 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 +57 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/rebuild.yaml +46 -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}}/.prettierignore +1 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.prettierrc.yaml +2 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +76 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +70 -0
- c2cgeoportal_geoportal/scaffolds/create/{README.rst_tmpl → {{cookiecutter.project}}/README.rst} +4 -4
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +186 -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 +1 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml +26 -0
- c2cgeoportal_geoportal/scaffolds/create/{docker-compose-lib.yaml → {{cookiecutter.project}}/docker-compose-lib.yaml} +165 -22
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +23 -0
- 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} +20 -15
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +101 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +69 -0
- c2cgeoportal_geoportal/scaffolds/create/{geoportal/vars.yaml_tmpl → {{cookiecutter.project}}/geoportal/vars.yaml} +126 -36
- 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 +3 -3
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/demo.map.tmpl +224 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.conf +15 -0
- c2cgeoportal_geoportal/scaffolds/create/{mapserver/mapserver.map.tmpl_tmpl → {{cookiecutter.project}}/mapserver/mapserver.map.tmpl} +9 -18
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Landscape.jrxml +13 -8
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Portrait.jrxml +13 -8
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Landscape.jrxml +13 -8
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Portrait.jrxml +13 -8
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/config.yaml.tmpl +11 -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/{pyproject.toml → {{cookiecutter.project}}/pyproject.toml} +4 -0
- c2cgeoportal_geoportal/scaffolds/create/{qgisserver/pg_service.conf.tmpl_tmpl → {{cookiecutter.project}}/qgisserver/pg_service.conf.tmpl} +2 -2
- c2cgeoportal_geoportal/scaffolds/create/{run_alembic.sh → {{cookiecutter.project}}/run_alembic.sh} +3 -5
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +110 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +114 -0
- c2cgeoportal_geoportal/scaffolds/create/{setup.cfg_tmpl → {{cookiecutter.project}}/setup.cfg} +1 -1
- 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 +38 -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 +61 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +273 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
- c2cgeoportal_geoportal/scaffolds/update/{geoportal → {{cookiecutter.project}}/geoportal}/CONST_config-schema.yaml +64 -17
- c2cgeoportal_geoportal/scaffolds/update/{geoportal/CONST_vars.yaml_tmpl → {{cookiecutter.project}}/geoportal/CONST_vars.yaml} +396 -19
- c2cgeoportal_geoportal/scripts/__init__.py +16 -30
- c2cgeoportal_geoportal/scripts/c2cupgrade.py +272 -234
- c2cgeoportal_geoportal/scripts/create_demo_theme.py +3 -6
- c2cgeoportal_geoportal/scripts/manage_users.py +34 -39
- c2cgeoportal_geoportal/scripts/pcreate.py +310 -0
- c2cgeoportal_geoportal/scripts/theme2fts.py +128 -24
- c2cgeoportal_geoportal/scripts/urllogin.py +19 -11
- 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 -6
- c2cgeoportal_geoportal/views/dev.py +9 -7
- c2cgeoportal_geoportal/views/dynamic.py +56 -19
- c2cgeoportal_geoportal/views/entry.py +85 -24
- c2cgeoportal_geoportal/views/fulltextsearch.py +29 -23
- c2cgeoportal_geoportal/views/geometry_processing.py +17 -9
- c2cgeoportal_geoportal/views/i18n.py +91 -9
- c2cgeoportal_geoportal/views/layers.py +166 -133
- c2cgeoportal_geoportal/views/login.py +161 -93
- c2cgeoportal_geoportal/views/mapserverproxy.py +47 -31
- c2cgeoportal_geoportal/views/memory.py +12 -12
- c2cgeoportal_geoportal/views/ogcproxy.py +52 -30
- c2cgeoportal_geoportal/views/pdfreport.py +30 -26
- c2cgeoportal_geoportal/views/printproxy.py +60 -52
- c2cgeoportal_geoportal/views/profile.py +24 -23
- c2cgeoportal_geoportal/views/proxy.py +88 -72
- c2cgeoportal_geoportal/views/raster.py +37 -26
- c2cgeoportal_geoportal/views/resourceproxy.py +13 -11
- c2cgeoportal_geoportal/views/shortener.py +27 -25
- c2cgeoportal_geoportal/views/theme.py +472 -332
- c2cgeoportal_geoportal/views/tinyowsproxy.py +42 -44
- c2cgeoportal_geoportal/views/vector_tiles.py +80 -0
- {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/METADATA +19 -8
- c2cgeoportal_geoportal-2.8.1.180.dist-info/RECORD +191 -0
- {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/WHEEL +1 -1
- {c2cgeoportal_geoportal-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/entry_points.txt +3 -0
- tests/__init__.py +10 -5
- tests/test_cachebuster.py +3 -5
- tests/test_caching.py +18 -26
- tests/test_checker.py +1 -3
- tests/test_decimaljson.py +5 -5
- tests/test_headerstween.py +1 -3
- tests/test_i18n.py +2 -2
- tests/test_init.py +16 -20
- tests/test_locale_negociator.py +4 -6
- tests/test_mapserverproxy_route_predicate.py +1 -4
- tests/test_raster.py +15 -17
- tests/test_wmstparsing.py +10 -12
- tests/xmlstr.py +1 -3
- 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/Dockerfile_tmpl +0 -67
- c2cgeoportal_geoportal/scaffolds/create/Makefile +0 -3
- c2cgeoportal_geoportal/scaffolds/create/build_tmpl +0 -167
- c2cgeoportal_geoportal/scaffolds/create/ci/config.yaml_tmpl +0 -23
- 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/env.default_tmpl +0 -67
- c2cgeoportal_geoportal/scaffolds/create/env.project_tmpl +0 -48
- 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/__init__.py_tmpl +0 -58
- 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/tools/extract-messages.js +0 -39
- 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/+dot+upgrade.yaml_tmpl +0 -181
- 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 → advance_create/{{cookiecutter.project}}}/geoportal/requirements.txt +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-2.6.0.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/top_level.txt +0 -0
tests/test_caching.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2015-2019, Camptocamp SA
|
1
|
+
# Copyright (c) 2015-2024, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -35,13 +33,8 @@ from unittest import TestCase
|
|
35
33
|
from tests import DummyRequest
|
36
34
|
|
37
35
|
from c2cgeoportal_geoportal.lib.cacheversion import get_cache_version
|
38
|
-
from c2cgeoportal_geoportal.lib.caching import
|
39
|
-
|
40
|
-
NO_CACHE,
|
41
|
-
init_region,
|
42
|
-
invalidate_region,
|
43
|
-
set_common_headers,
|
44
|
-
)
|
36
|
+
from c2cgeoportal_geoportal.lib.caching import init_region, invalidate_region
|
37
|
+
from c2cgeoportal_geoportal.lib.common_headers import CORS_METHODS, Cache, set_common_headers
|
45
38
|
|
46
39
|
|
47
40
|
class TestSetCorsHeaders(TestCase):
|
@@ -57,31 +50,31 @@ class TestSetCorsHeaders(TestCase):
|
|
57
50
|
request.registry.settings = {"headers": {"foo": settings}}
|
58
51
|
else:
|
59
52
|
request.registry.settings = {"headers": {}}
|
60
|
-
set_common_headers(request, "foo",
|
53
|
+
set_common_headers(request, "foo", Cache.PRIVATE_NO, credentials=credentials)
|
61
54
|
|
62
55
|
return dict(request.response.headers)
|
63
56
|
|
64
57
|
def test_simple(self):
|
65
58
|
"""
|
66
|
-
Tests specified in http://www.w3.org/TR/cors/#resource-requests
|
59
|
+
Tests specified in http://www.w3.org/TR/cors/#resource-requests.
|
67
60
|
"""
|
68
61
|
# 1. If the Origin header is not present terminate this set of steps.
|
69
62
|
# The request is outside the scope of this specification.
|
70
63
|
assert self._do("POST", {}) == {
|
71
|
-
"Cache-Control": "max-age=
|
64
|
+
"Cache-Control": "max-age=10, private",
|
72
65
|
"Content-Length": "0",
|
73
66
|
"Content-Type": "text/html; charset=UTF-8",
|
74
|
-
"Vary": "Origin",
|
67
|
+
"Vary": "Origin, Cookie",
|
75
68
|
}
|
76
69
|
|
77
70
|
# 2. If the value of the Origin header is not a case-sensitive match for
|
78
71
|
# any of the values in list of origins, do not set any additional
|
79
72
|
# headers and terminate this set of steps.
|
80
73
|
assert self._do("POST", {"Origin": "http://foe.com"}) == {
|
81
|
-
"Cache-Control": "max-age=
|
74
|
+
"Cache-Control": "max-age=10, private",
|
82
75
|
"Content-Length": "0",
|
83
76
|
"Content-Type": "text/html; charset=UTF-8",
|
84
|
-
"Vary": "Origin",
|
77
|
+
"Vary": "Origin, Cookie",
|
85
78
|
}
|
86
79
|
|
87
80
|
# 3. If the resource supports credentials add a single
|
@@ -89,10 +82,10 @@ class TestSetCorsHeaders(TestCase):
|
|
89
82
|
# header as value, and add a single Access-Control-Allow-Credentials
|
90
83
|
# header with the case-sensitive string "true" as value.
|
91
84
|
assert self._do("POST", {"Origin": self.ORIGIN2}, credentials=True) == {
|
92
|
-
"Cache-Control": "max-age=
|
85
|
+
"Cache-Control": "max-age=10, private",
|
93
86
|
"Content-Length": "0",
|
94
87
|
"Content-Type": "text/html; charset=UTF-8",
|
95
|
-
"Vary": "Origin",
|
88
|
+
"Vary": "Origin, Cookie",
|
96
89
|
"Access-Control-Max-Age": self.MAX_AGE,
|
97
90
|
"Access-Control-Allow-Origin": self.ORIGIN2,
|
98
91
|
"Access-Control-Allow-Methods": CORS_METHODS,
|
@@ -110,8 +103,7 @@ class TestSetCorsHeaders(TestCase):
|
|
110
103
|
|
111
104
|
def test_preflight(self):
|
112
105
|
"""
|
113
|
-
Tests specified in
|
114
|
-
http://www.w3.org/TR/cors/#resource-preflight-requests
|
106
|
+
Tests specified in http://www.w3.org/TR/cors/#resource-preflight-requests.
|
115
107
|
"""
|
116
108
|
# 1. If the Origin header is not present terminate this set of steps.
|
117
109
|
# The request is outside the scope of this specification.
|
@@ -210,10 +202,10 @@ class TestSetCorsHeaders(TestCase):
|
|
210
202
|
def test_not_configured(self):
|
211
203
|
# If the service is not configured, then no CORS head.
|
212
204
|
assert self._do("GET", {"Origin": self.ORIGIN1}, settings=None) == {
|
213
|
-
"Cache-Control": "max-age=
|
205
|
+
"Cache-Control": "max-age=10, private",
|
214
206
|
"Content-Length": "0",
|
215
207
|
"Content-Type": "text/html; charset=UTF-8",
|
216
|
-
"Vary": "Origin",
|
208
|
+
"Vary": "Origin, Cookie",
|
217
209
|
}
|
218
210
|
|
219
211
|
def test_match_all(self):
|
@@ -225,10 +217,10 @@ class TestSetCorsHeaders(TestCase):
|
|
225
217
|
# An origin included in the access_control_allow_origin list is OK with
|
226
218
|
# credentials
|
227
219
|
assert self._do("POST", {"Origin": self.ORIGIN1}, credentials=True, settings=settings) == {
|
228
|
-
"Cache-Control": "max-age=
|
220
|
+
"Cache-Control": "max-age=10, private",
|
229
221
|
"Content-Length": "0",
|
230
222
|
"Content-Type": "text/html; charset=UTF-8",
|
231
|
-
"Vary": "Origin",
|
223
|
+
"Vary": "Origin, Cookie",
|
232
224
|
"Access-Control-Max-Age": self.MAX_AGE,
|
233
225
|
"Access-Control-Allow-Origin": self.ORIGIN1,
|
234
226
|
"Access-Control-Allow-Methods": CORS_METHODS,
|
@@ -238,10 +230,10 @@ class TestSetCorsHeaders(TestCase):
|
|
238
230
|
# 3. Otherwise, add a single Access-Control-Allow-Origin header, with
|
239
231
|
# either the value of the Origin header or the string "*" as value.
|
240
232
|
assert self._do("POST", {"Origin": "http://www.guest.com"}, settings=settings) == {
|
241
|
-
"Cache-Control": "max-age=
|
233
|
+
"Cache-Control": "max-age=10, private",
|
242
234
|
"Content-Length": "0",
|
243
235
|
"Content-Type": "text/html; charset=UTF-8",
|
244
|
-
"Vary": "Origin",
|
236
|
+
"Vary": "Origin, Cookie",
|
245
237
|
"Access-Control-Max-Age": self.MAX_AGE,
|
246
238
|
"Access-Control-Allow-Origin": "*",
|
247
239
|
"Access-Control-Allow-Methods": CORS_METHODS,
|
tests/test_checker.py
CHANGED
tests/test_decimaljson.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2011-2019, Camptocamp SA
|
1
|
+
# Copyright (c) 2011-2023, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -34,14 +32,16 @@ import decimal
|
|
34
32
|
import json
|
35
33
|
from unittest import TestCase
|
36
34
|
|
37
|
-
from c2cwsgiutils.pretty_json import
|
35
|
+
from c2cwsgiutils.pretty_json import _FastDumps as FastDumps
|
38
36
|
|
39
37
|
|
40
38
|
class TestDecimalJSON(TestCase):
|
41
39
|
def test_decimal(self):
|
42
40
|
value = {"str": "an str", "int": 1, "dec": decimal.Decimal("1.2")}
|
41
|
+
fast_dumps = FastDumps(False, False)
|
43
42
|
result = fast_dumps(value)
|
44
43
|
self.assertEqual(json.loads(result), {"int": 1, "dec": 1.2, "str": "an str"})
|
45
44
|
|
46
45
|
def test_decimal_json(self):
|
47
|
-
|
46
|
+
fast_dumps = FastDumps(False, False)
|
47
|
+
assert fast_dumps({"a": decimal.Decimal("3.3")}) == '{"a":3.3}'
|
tests/test_headerstween.py
CHANGED
tests/test_i18n.py
CHANGED
@@ -24,8 +24,8 @@ class TestI18n(TestCase):
|
|
24
24
|
)
|
25
25
|
def test_available_locale_names(self, isdir_mock, listdir_mock, exists_mock):
|
26
26
|
locales = available_locale_names()
|
27
|
-
self.assertEqual(set(locales),
|
27
|
+
self.assertEqual(set(locales), {"de", "en", "fr"})
|
28
28
|
|
29
29
|
def test_available_locale_names_no_dir(self):
|
30
30
|
locales = available_locale_names()
|
31
|
-
|
31
|
+
assert locales == []
|
tests/test_init.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2012-2019, Camptocamp SA
|
1
|
+
# Copyright (c) 2012-2023, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -42,13 +40,12 @@ from c2cgeoportal_geoportal import (
|
|
42
40
|
call_hook,
|
43
41
|
create_get_user_from_request,
|
44
42
|
default_user_validator,
|
45
|
-
|
43
|
+
is_valid_referrer,
|
46
44
|
set_user_validator,
|
47
45
|
)
|
48
46
|
|
49
47
|
|
50
48
|
class TestIncludeme(TestCase):
|
51
|
-
|
52
49
|
config = None
|
53
50
|
|
54
51
|
def setup_method(self, _):
|
@@ -87,7 +84,7 @@ class TestIncludeme(TestCase):
|
|
87
84
|
|
88
85
|
def test_default_user_validator(self):
|
89
86
|
self.config.include(c2cgeoportal_geoportal.includeme)
|
90
|
-
self.
|
87
|
+
assert self.config.registry.validate_user == default_user_validator
|
91
88
|
|
92
89
|
def test_user_validator_overwrite(self):
|
93
90
|
self.config.include(c2cgeoportal_geoportal.includeme)
|
@@ -95,16 +92,15 @@ class TestIncludeme(TestCase):
|
|
95
92
|
def custom_validator(username, password):
|
96
93
|
del username # Unused
|
97
94
|
del password # Unused
|
98
|
-
return False
|
95
|
+
return False
|
99
96
|
|
100
97
|
self.config.set_user_validator(custom_validator)
|
101
|
-
self.
|
98
|
+
assert self.config.registry.validate_user == custom_validator
|
102
99
|
|
103
100
|
|
104
101
|
class TestReferer(TestCase):
|
105
102
|
"""
|
106
|
-
Check that accessing something with a bad HTTP
|
107
|
-
not authenticated query.
|
103
|
+
Check that accessing something with a bad HTTP referrer is equivalent to a not authenticated query.
|
108
104
|
"""
|
109
105
|
|
110
106
|
BASE1 = "http://example.com/app"
|
@@ -116,7 +112,7 @@ class TestReferer(TestCase):
|
|
116
112
|
class MockRequest:
|
117
113
|
def __init__(self, to, ref, method):
|
118
114
|
self.path_qs = to
|
119
|
-
self.
|
115
|
+
self.referrer = ref
|
120
116
|
self.user_ = TestReferer.USER
|
121
117
|
self.method = method
|
122
118
|
|
@@ -127,8 +123,8 @@ class TestReferer(TestCase):
|
|
127
123
|
def test_match_url(self):
|
128
124
|
def match(reference, value, expected):
|
129
125
|
r = DummyRequest()
|
130
|
-
r.
|
131
|
-
|
126
|
+
r.referrer = value
|
127
|
+
assert is_valid_referrer(r, {"authorized_referers": [reference]}) == expected
|
132
128
|
|
133
129
|
match("http://example.com/app/", "http://example.com/app?k=v", True)
|
134
130
|
match("http://example.com/app/", "http://example.com/app?k=v#link", True)
|
@@ -143,16 +139,16 @@ class TestReferer(TestCase):
|
|
143
139
|
match("http://example.com", "http://example.com.bad.org/app/x/y", False)
|
144
140
|
|
145
141
|
def test_positive(self):
|
146
|
-
self.
|
147
|
-
self.
|
148
|
-
self.
|
142
|
+
assert self._get_user(to=self.BASE1 + "/1", ref=self.BASE1) == self.USER
|
143
|
+
assert self._get_user(to=self.BASE1 + "/2", ref=self.BASE1 + "/3") == self.USER
|
144
|
+
assert self._get_user(to=self.BASE1 + "/4", ref=self.BASE2 + "/5") == self.USER
|
149
145
|
|
150
146
|
def test_no_ref(self):
|
151
|
-
self.
|
152
|
-
self.
|
147
|
+
assert self._get_user(to=self.BASE1, ref=None) == self.USER
|
148
|
+
assert self._get_user(to=self.BASE1, ref="") is None
|
153
149
|
|
154
|
-
self.
|
155
|
-
self.
|
150
|
+
assert self._get_user(to=self.BASE1, ref=None, method="POST") == self.USER
|
151
|
+
assert self._get_user(to=self.BASE1, ref="", method="POST") is None
|
156
152
|
|
157
153
|
def test_bad_ref(self):
|
158
154
|
self.assertIsNone(self._get_user(to=self.BASE1, ref="http://bad.com/hacker"))
|
tests/test_locale_negociator.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2013-2019, Camptocamp SA
|
1
|
+
# Copyright (c) 2013-2023, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -41,7 +39,7 @@ class TestLocalNegociator(TestCase):
|
|
41
39
|
|
42
40
|
request = DummyRequest(params=dict(lang="fr"))
|
43
41
|
lang = locale_negotiator(request)
|
44
|
-
|
42
|
+
assert lang == "fr"
|
45
43
|
|
46
44
|
def test_lang_is_not_available(self):
|
47
45
|
from pyramid.request import Request
|
@@ -55,7 +53,7 @@ class TestLocalNegociator(TestCase):
|
|
55
53
|
|
56
54
|
request.headers["accept-language"] = "en-us,en;q=0.3,fr;q=0.7"
|
57
55
|
lang = locale_negotiator(request)
|
58
|
-
|
56
|
+
assert lang == "de"
|
59
57
|
|
60
58
|
def test_lang_is_available(self):
|
61
59
|
from pyramid.request import Request
|
@@ -68,4 +66,4 @@ class TestLocalNegociator(TestCase):
|
|
68
66
|
request.registry.settings = {"default_locale_name": "de", "available_locale_names": ["de", "es"]}
|
69
67
|
request.accept_language = "en-us,en;q=0.3,es;q=0.7"
|
70
68
|
lang = locale_negotiator(request)
|
71
|
-
|
69
|
+
assert lang == "es"
|
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2013-2019, Camptocamp SA
|
1
|
+
# Copyright (c) 2013-2023, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -39,7 +37,6 @@ from c2cgeoportal_geoportal import MapserverproxyRoutePredicate
|
|
39
37
|
|
40
38
|
|
41
39
|
class TestMapserverproxyRoutePredicate(TestCase):
|
42
|
-
|
43
40
|
predicate = MapserverproxyRoutePredicate(None, None)
|
44
41
|
|
45
42
|
def test_hide_capabilities_unset(self):
|
tests/test_raster.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2013-2021, Camptocamp SA
|
1
|
+
# Copyright (c) 2013-2023, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -55,9 +53,9 @@ class TestRasterViews(TestCase):
|
|
55
53
|
request.params["lon"] = "565000"
|
56
54
|
request.params["lat"] = "218000"
|
57
55
|
result = raster.raster()
|
58
|
-
|
59
|
-
|
60
|
-
|
56
|
+
assert result["dem1"] == None
|
57
|
+
assert result["dem2"] == None
|
58
|
+
assert result["dem3"] == None
|
61
59
|
|
62
60
|
request.params["lon"] = "548000"
|
63
61
|
request.params["lat"] = "216000"
|
@@ -99,27 +97,27 @@ class TestRasterViews(TestCase):
|
|
99
97
|
request.params["lon"] = "547990.0"
|
100
98
|
request.params["lat"] = "216009.1"
|
101
99
|
result = raster.raster()
|
102
|
-
|
100
|
+
assert result["dem5"] == Decimal("1164.2")
|
103
101
|
request.params["lon"] = "547990.9"
|
104
102
|
request.params["lat"] = "216010.0"
|
105
103
|
result = raster.raster()
|
106
|
-
|
104
|
+
assert result["dem5"] == Decimal("1164.2")
|
107
105
|
|
108
106
|
# Lower right
|
109
107
|
request.params["lon"] = "547996.0"
|
110
108
|
request.params["lat"] = "216003.1"
|
111
109
|
result = raster.raster()
|
112
|
-
|
110
|
+
assert result["dem5"] == Decimal("1180.77")
|
113
111
|
request.params["lon"] = "547996.9"
|
114
112
|
request.params["lat"] = "216004.0"
|
115
113
|
result = raster.raster()
|
116
|
-
|
114
|
+
assert result["dem5"] == Decimal("1180.77")
|
117
115
|
|
118
116
|
# Out
|
119
117
|
request.params["lon"] = "547997.4"
|
120
118
|
request.params["lat"] = "216003.5"
|
121
119
|
result = raster.raster()
|
122
|
-
|
120
|
+
assert result["dem5"] == None
|
123
121
|
|
124
122
|
def test_raster_vrt(self):
|
125
123
|
from decimal import Decimal
|
@@ -144,7 +142,7 @@ class TestRasterViews(TestCase):
|
|
144
142
|
request.params["lon"] = "547990.4"
|
145
143
|
request.params["lat"] = "216009.5"
|
146
144
|
result = raster.raster()
|
147
|
-
|
145
|
+
assert result["dem6"] == Decimal("1164.2")
|
148
146
|
|
149
147
|
def test_absolute_path(self):
|
150
148
|
import fiona
|
@@ -179,7 +177,7 @@ class TestRasterViews(TestCase):
|
|
179
177
|
'{"type":"LineString",' '"coordinates":[[548009.5,215990],[547990,216009.5]]}'
|
180
178
|
)
|
181
179
|
result = profile.json()
|
182
|
-
|
180
|
+
assert len(result["profile"]) == 4
|
183
181
|
self.assertAlmostEqual(result["profile"][0]["y"], 215990)
|
184
182
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem2"], None)
|
185
183
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem"], None)
|
@@ -203,7 +201,7 @@ class TestRasterViews(TestCase):
|
|
203
201
|
|
204
202
|
request.params["layers"] = "dem"
|
205
203
|
result = profile.json()
|
206
|
-
|
204
|
+
assert len(result["profile"]) == 4
|
207
205
|
self.assertAlmostEqual(result["profile"][0]["y"], 215990)
|
208
206
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem"], None)
|
209
207
|
self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
|
@@ -224,7 +222,7 @@ class TestRasterViews(TestCase):
|
|
224
222
|
# test length = 0
|
225
223
|
request.params["geom"] = '{"type":"LineString",' '"coordinates":[[548000,216000]]}'
|
226
224
|
result = profile.json()
|
227
|
-
|
225
|
+
assert len(result["profile"]) == 1
|
228
226
|
self.assertAlmostEqual(result["profile"][0]["y"], 216000)
|
229
227
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem"], 1172)
|
230
228
|
self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
|
@@ -235,7 +233,7 @@ class TestRasterViews(TestCase):
|
|
235
233
|
'{"type":"LineString",' '"coordinates":[[548000,216000],[548001,216001],[548009,216009]]}'
|
236
234
|
)
|
237
235
|
result = profile.json()
|
238
|
-
|
236
|
+
assert len(result["profile"]) == 5
|
239
237
|
self.assertAlmostEqual(result["profile"][0]["y"], 216000)
|
240
238
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem"], 1172)
|
241
239
|
self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
|
@@ -243,7 +241,7 @@ class TestRasterViews(TestCase):
|
|
243
241
|
self.assertAlmostEqual(result["profile"][1]["y"], 216001.0)
|
244
242
|
self.assertAlmostEqual(result["profile"][1]["values"]["dem"], 1167)
|
245
243
|
self.assertAlmostEqual(result["profile"][1]["dist"], Decimal("1.4"))
|
246
|
-
|
244
|
+
assert result["profile"][1]["x"] == 548001.0
|
247
245
|
self.assertAlmostEqual(result["profile"][2]["y"], 216003.66666666666)
|
248
246
|
self.assertAlmostEqual(result["profile"][2]["values"]["dem"], 1155)
|
249
247
|
self.assertAlmostEqual(result["profile"][2]["dist"], Decimal("5.2"))
|
tests/test_wmstparsing.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2013-2019, Camptocamp SA
|
1
|
+
# Copyright (c) 2013-2023, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -123,35 +121,35 @@ class TestParseDate(TestCase):
|
|
123
121
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
124
122
|
|
125
123
|
date = _parse_date("2010")
|
126
|
-
|
124
|
+
assert "year" == date[0]
|
127
125
|
self.assertEqual(datetime.datetime(2010, 0o1, 0o1, tzinfo=isodate.UTC), date[1])
|
128
126
|
|
129
127
|
def test_parse_date_month(self):
|
130
128
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
131
129
|
|
132
130
|
date = _parse_date("2010-02")
|
133
|
-
|
131
|
+
assert "month" == date[0]
|
134
132
|
self.assertEqual(datetime.datetime(2010, 0o2, 0o1, tzinfo=isodate.UTC), date[1])
|
135
133
|
|
136
134
|
def test_parse_date(self):
|
137
135
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
138
136
|
|
139
137
|
date = _parse_date("2010-02-03")
|
140
|
-
|
138
|
+
assert "day" == date[0]
|
141
139
|
self.assertEqual(datetime.datetime(2010, 0o2, 0o3, tzinfo=isodate.UTC), date[1])
|
142
140
|
|
143
141
|
def test_parse_datetime(self):
|
144
142
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
145
143
|
|
146
144
|
date = _parse_date("2010-02-03T12:34")
|
147
|
-
|
145
|
+
assert "second" == date[0]
|
148
146
|
self.assertEqual(datetime.datetime(2010, 0o2, 0o3, 12, 34, tzinfo=isodate.UTC), date[1])
|
149
147
|
|
150
148
|
def test_parse_datetime_tz(self):
|
151
149
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
152
150
|
|
153
151
|
date = _parse_date("2010-02-03T12:34Z")
|
154
|
-
|
152
|
+
assert "second" == date[0]
|
155
153
|
self.assertEqual(datetime.datetime(2010, 0o2, 0o3, 12, 34, tzinfo=isodate.UTC), date[1])
|
156
154
|
|
157
155
|
def test_unsupported_format(self):
|
@@ -165,13 +163,13 @@ class TestFormat(TestCase):
|
|
165
163
|
from c2cgeoportal_geoportal.lib.wmstparsing import _format_date
|
166
164
|
|
167
165
|
dt = datetime.datetime(2010, 0o2, 0o1, 00, 00)
|
168
|
-
|
166
|
+
assert "2010-02-01T00:00:00Z" == _format_date(dt)
|
169
167
|
|
170
168
|
def test_format_tz(self):
|
171
169
|
from c2cgeoportal_geoportal.lib.wmstparsing import _format_date, _parse_date
|
172
170
|
|
173
171
|
dt = _parse_date("2010-02-03T12:34:00+01:00")
|
174
|
-
|
172
|
+
assert "2010-02-03T12:34:00+01:00" == _format_date(dt[1])
|
175
173
|
|
176
174
|
|
177
175
|
class TestParseDuration(TestCase):
|
@@ -221,9 +219,9 @@ class TestTimeInformation(TestCase):
|
|
221
219
|
self.assertFalse(ti.has_time())
|
222
220
|
self.assertTrue(ti.to_dict() is None)
|
223
221
|
ti.merge_mode("single")
|
224
|
-
|
222
|
+
assert ti.mode == "single"
|
225
223
|
ti.merge_mode("single")
|
226
|
-
|
224
|
+
assert ti.mode == "single"
|
227
225
|
|
228
226
|
def test_merge_different_modes(self):
|
229
227
|
from c2cgeoportal_geoportal.lib.wmstparsing import TimeInformation
|