c2cgeoportal-geoportal 2.5.0.100__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 +261 -130
- c2cgeoportal_geoportal/lib/__init__.py +72 -120
- c2cgeoportal_geoportal/lib/authentication.py +170 -21
- c2cgeoportal_geoportal/lib/bashcolor.py +17 -13
- c2cgeoportal_geoportal/lib/cacheversion.py +19 -11
- c2cgeoportal_geoportal/lib/caching.py +66 -160
- c2cgeoportal_geoportal/lib/check_collector.py +17 -10
- c2cgeoportal_geoportal/lib/checker.py +62 -64
- c2cgeoportal_geoportal/lib/common_headers.py +170 -0
- c2cgeoportal_geoportal/lib/dbreflection.py +70 -31
- c2cgeoportal_geoportal/lib/filter_capabilities.py +124 -96
- c2cgeoportal_geoportal/lib/fulltextsearch.py +50 -0
- c2cgeoportal_geoportal/lib/functionality.py +36 -21
- c2cgeoportal_geoportal/lib/headers.py +14 -5
- c2cgeoportal_geoportal/lib/i18n.py +39 -0
- c2cgeoportal_geoportal/lib/layers.py +29 -10
- c2cgeoportal_geoportal/lib/lingua_extractor.py +408 -211
- c2cgeoportal_geoportal/lib/loader.py +18 -16
- c2cgeoportal_geoportal/lib/metrics.py +29 -18
- c2cgeoportal_geoportal/lib/oauth2.py +1036 -0
- c2cgeoportal_geoportal/lib/wmstparsing.py +115 -90
- c2cgeoportal_geoportal/lib/xsd.py +29 -19
- 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/+dot+prospector.yaml → advance_create/{{cookiecutter.project}}/geoportal/.prospector.yaml} +8 -4
- c2cgeoportal_geoportal/scaffolds/{create/geoportal/Dockerfile_tmpl → advance_create/{{cookiecutter.project}}/geoportal/Dockerfile} +24 -15
- c2cgeoportal_geoportal/scaffolds/{create → advance_create/{{cookiecutter.project}}}/geoportal/alembic.ini +1 -0
- 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/advance_create/{{cookiecutter.project}}/geoportal/setup.py +25 -0
- 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 +4 -4
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py +47 -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/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/{create/geoportal/+package+_geoportal/subscribers.py_tmpl → advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/subscribers.py} +3 -6
- c2cgeoportal_geoportal/scaffolds/advance_update/cookiecutter.json +18 -0
- c2cgeoportal_geoportal/scaffolds/{update/geoportal/CONST_Makefile_tmpl → advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile} +32 -20
- 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} +4 -8
- 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} +34 -24
- 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/{{cookiecutter.project}}/ci/config.yaml +25 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +1 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml +474 -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} +43 -18
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +82 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +60 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml +396 -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/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/{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 +17 -9
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A3_Portrait.jrxml +17 -9
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Landscape.jrxml +17 -9
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/A4_Portrait.jrxml +17 -9
- c2cgeoportal_geoportal/scaffolds/create/{print/print-apps/+package+ → {{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}}/config.yaml.tmpl +30 -27
- 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/{project.yaml_tmpl → {{cookiecutter.project}}/project.yaml} +6 -6
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/pyproject.toml +3 -0
- 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/{{cookiecutter.project}}/setup.cfg +7 -0
- 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/{{cookiecutter.project}}/.upgrade.yaml +191 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +1153 -0
- c2cgeoportal_geoportal/scaffolds/update/{geoportal → {{cookiecutter.project}}/geoportal}/CONST_config-schema.yaml +99 -47
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml +1412 -0
- c2cgeoportal_geoportal/scripts/__init__.py +17 -33
- c2cgeoportal_geoportal/scripts/c2cupgrade.py +295 -200
- c2cgeoportal_geoportal/scripts/create_demo_theme.py +5 -6
- c2cgeoportal_geoportal/scripts/manage_users.py +34 -37
- c2cgeoportal_geoportal/scripts/pcreate.py +312 -0
- c2cgeoportal_geoportal/scripts/theme2fts.py +92 -25
- c2cgeoportal_geoportal/scripts/urllogin.py +23 -17
- c2cgeoportal_geoportal/templates/login.html +88 -84
- c2cgeoportal_geoportal/templates/notlogin.html +62 -0
- 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 +70 -40
- c2cgeoportal_geoportal/views/entry.py +93 -24
- c2cgeoportal_geoportal/views/fulltextsearch.py +36 -29
- c2cgeoportal_geoportal/views/geometry_processing.py +15 -7
- c2cgeoportal_geoportal/views/i18n.py +91 -9
- c2cgeoportal_geoportal/views/layers.py +173 -134
- c2cgeoportal_geoportal/views/login.py +206 -87
- c2cgeoportal_geoportal/views/mapserverproxy.py +59 -35
- c2cgeoportal_geoportal/views/memory.py +13 -13
- c2cgeoportal_geoportal/views/ogcproxy.py +48 -30
- c2cgeoportal_geoportal/views/pdfreport.py +31 -27
- c2cgeoportal_geoportal/views/printproxy.py +67 -53
- c2cgeoportal_geoportal/views/profile.py +25 -24
- c2cgeoportal_geoportal/views/proxy.py +97 -68
- c2cgeoportal_geoportal/views/raster.py +47 -29
- c2cgeoportal_geoportal/views/resourceproxy.py +13 -11
- c2cgeoportal_geoportal/views/shortener.py +31 -24
- c2cgeoportal_geoportal/views/theme.py +475 -365
- c2cgeoportal_geoportal/views/tinyowsproxy.py +46 -39
- c2cgeoportal_geoportal/views/vector_tiles.py +80 -0
- {c2cgeoportal_geoportal-2.5.0.100.dist-info → c2cgeoportal_geoportal-2.7.1.83.dist-info}/METADATA +16 -11
- c2cgeoportal_geoportal-2.7.1.83.dist-info/RECORD +185 -0
- {c2cgeoportal_geoportal-2.5.0.100.dist-info → c2cgeoportal_geoportal-2.7.1.83.dist-info}/WHEEL +1 -1
- {c2cgeoportal_geoportal-2.5.0.100.dist-info → c2cgeoportal_geoportal-2.7.1.83.dist-info}/entry_points.txt +3 -1
- tests/__init__.py +24 -3
- tests/test_cachebuster.py +1 -3
- tests/test_caching.py +19 -26
- tests/test_checker.py +2 -3
- tests/test_decimaljson.py +4 -4
- tests/test_headerstween.py +0 -3
- tests/test_i18n.py +31 -0
- tests/test_init.py +12 -27
- tests/test_locale_negociator.py +6 -6
- tests/test_mapserverproxy_route_predicate.py +0 -2
- tests/test_raster.py +18 -5
- tests/test_wmstparsing.py +7 -8
- c2cgeoportal_geoportal/scaffolds/__init__.py +0 -226
- c2cgeoportal_geoportal/scaffolds/create/+dot+dockerignore_tmpl +0 -11
- c2cgeoportal_geoportal/scaffolds/create/+dot+github/workflows/ci.yaml_tmpl +0 -56
- c2cgeoportal_geoportal/scaffolds/create/+dot+gitignore_tmpl +0 -12
- c2cgeoportal_geoportal/scaffolds/create/build_tmpl +0 -144
- c2cgeoportal_geoportal/scaffolds/create/docker-compose-lib.yaml_tmpl +0 -302
- c2cgeoportal_geoportal/scaffolds/create/docker-compose.override.sample.yaml_tmpl +0 -54
- c2cgeoportal_geoportal/scaffolds/create/env.default_tmpl +0 -49
- c2cgeoportal_geoportal/scaffolds/create/env.project_tmpl +0 -39
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+dockerignore_tmpl +0 -5
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+dot+eslintrc_tmpl +0 -19
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/__init__.py_tmpl +0 -48
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/models.py_tmpl +0 -10
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static/images/favicon.ico +0 -0
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static/robot.txt +0 -3
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static-ngeo/api/index.js_tmpl +0 -37
- c2cgeoportal_geoportal/scaffolds/create/geoportal/+package+_geoportal/static-ngeo/js/+package+module.js_tmpl +0 -22
- c2cgeoportal_geoportal/scaffolds/create/geoportal/production.ini_tmpl +0 -106
- c2cgeoportal_geoportal/scaffolds/create/geoportal/requirements.txt +0 -2
- c2cgeoportal_geoportal/scaffolds/create/geoportal/setup.py_tmpl +0 -18
- c2cgeoportal_geoportal/scaffolds/create/geoportal/tsconfig.json_tmpl +0 -9
- c2cgeoportal_geoportal/scaffolds/create/geoportal/vars.yaml_tmpl +0 -224
- c2cgeoportal_geoportal/scaffolds/create/geoportal/webpack.api.js_tmpl +0 -71
- 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 -166
- c2cgeoportal_geoportal/scaffolds/create/print/print-apps/+package+/legend.jrxml +0 -27
- c2cgeoportal_geoportal/scaffolds/create/qgisserver/geomapfish.yaml.tmpl_tmpl +0 -29
- c2cgeoportal_geoportal/scaffolds/create/scripts/publish-docker +0 -124
- c2cgeoportal_geoportal/scaffolds/create/setup.cfg_tmpl +0 -3
- c2cgeoportal_geoportal/scaffolds/create/spell-ignore-words.txt +0 -1
- c2cgeoportal_geoportal/scaffolds/create/tilegeneration/config.yaml.tmpl_tmpl +0 -169
- c2cgeoportal_geoportal/scaffolds/create/yamllint.yaml +0 -11
- c2cgeoportal_geoportal/scaffolds/update/+dot+upgrade.yaml_tmpl +0 -171
- c2cgeoportal_geoportal/scaffolds/update/CONST_CHANGELOG.txt_tmpl +0 -64
- c2cgeoportal_geoportal/scaffolds/update/geoportal/CONST_vars.yaml_tmpl +0 -783
- c2cgeoportal_geoportal/templates/dynamic.js +0 -21
- c2cgeoportal_geoportal-2.5.0.100.dist-info/RECORD +0 -162
- tests/test_get_url.py +0 -96
- tests/test_lib.py +0 -77
- /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/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/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}}}/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/{run_alembic.sh → {{cookiecutter.project}}/run_alembic.sh} +0 -0
- {c2cgeoportal_geoportal-2.5.0.100.dist-info → c2cgeoportal_geoportal-2.7.1.83.dist-info}/top_level.txt +0 -0
tests/test_caching.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
1
|
# Copyright (c) 2015-2019, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
@@ -32,16 +30,12 @@
|
|
32
30
|
|
33
31
|
from unittest import TestCase
|
34
32
|
|
35
|
-
from c2cgeoportal_geoportal.lib.cacheversion import get_cache_version
|
36
|
-
from c2cgeoportal_geoportal.lib.caching import (
|
37
|
-
CORS_METHODS,
|
38
|
-
NO_CACHE,
|
39
|
-
init_region,
|
40
|
-
invalidate_region,
|
41
|
-
set_common_headers,
|
42
|
-
)
|
43
33
|
from tests import DummyRequest
|
44
34
|
|
35
|
+
from c2cgeoportal_geoportal.lib.cacheversion import get_cache_version
|
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
|
38
|
+
|
45
39
|
|
46
40
|
class TestSetCorsHeaders(TestCase):
|
47
41
|
ORIGIN1 = "http://www.example.com"
|
@@ -56,31 +50,31 @@ class TestSetCorsHeaders(TestCase):
|
|
56
50
|
request.registry.settings = {"headers": {"foo": settings}}
|
57
51
|
else:
|
58
52
|
request.registry.settings = {"headers": {}}
|
59
|
-
set_common_headers(request, "foo",
|
53
|
+
set_common_headers(request, "foo", Cache.PRIVATE_NO, credentials=credentials)
|
60
54
|
|
61
55
|
return dict(request.response.headers)
|
62
56
|
|
63
57
|
def test_simple(self):
|
64
58
|
"""
|
65
|
-
Tests specified in http://www.w3.org/TR/cors/#resource-requests
|
59
|
+
Tests specified in http://www.w3.org/TR/cors/#resource-requests.
|
66
60
|
"""
|
67
61
|
# 1. If the Origin header is not present terminate this set of steps.
|
68
62
|
# The request is outside the scope of this specification.
|
69
63
|
assert self._do("POST", {}) == {
|
70
|
-
"Cache-Control": "max-age=
|
64
|
+
"Cache-Control": "max-age=10, public",
|
71
65
|
"Content-Length": "0",
|
72
66
|
"Content-Type": "text/html; charset=UTF-8",
|
73
|
-
"Vary": "Origin",
|
67
|
+
"Vary": "Origin, Cookie",
|
74
68
|
}
|
75
69
|
|
76
70
|
# 2. If the value of the Origin header is not a case-sensitive match for
|
77
71
|
# any of the values in list of origins, do not set any additional
|
78
72
|
# headers and terminate this set of steps.
|
79
73
|
assert self._do("POST", {"Origin": "http://foe.com"}) == {
|
80
|
-
"Cache-Control": "max-age=
|
74
|
+
"Cache-Control": "max-age=10, public",
|
81
75
|
"Content-Length": "0",
|
82
76
|
"Content-Type": "text/html; charset=UTF-8",
|
83
|
-
"Vary": "Origin",
|
77
|
+
"Vary": "Origin, Cookie",
|
84
78
|
}
|
85
79
|
|
86
80
|
# 3. If the resource supports credentials add a single
|
@@ -88,10 +82,10 @@ class TestSetCorsHeaders(TestCase):
|
|
88
82
|
# header as value, and add a single Access-Control-Allow-Credentials
|
89
83
|
# header with the case-sensitive string "true" as value.
|
90
84
|
assert self._do("POST", {"Origin": self.ORIGIN2}, credentials=True) == {
|
91
|
-
"Cache-Control": "max-age=
|
85
|
+
"Cache-Control": "max-age=10, public",
|
92
86
|
"Content-Length": "0",
|
93
87
|
"Content-Type": "text/html; charset=UTF-8",
|
94
|
-
"Vary": "Origin",
|
88
|
+
"Vary": "Origin, Cookie",
|
95
89
|
"Access-Control-Max-Age": self.MAX_AGE,
|
96
90
|
"Access-Control-Allow-Origin": self.ORIGIN2,
|
97
91
|
"Access-Control-Allow-Methods": CORS_METHODS,
|
@@ -109,8 +103,7 @@ class TestSetCorsHeaders(TestCase):
|
|
109
103
|
|
110
104
|
def test_preflight(self):
|
111
105
|
"""
|
112
|
-
Tests specified in
|
113
|
-
http://www.w3.org/TR/cors/#resource-preflight-requests
|
106
|
+
Tests specified in http://www.w3.org/TR/cors/#resource-preflight-requests.
|
114
107
|
"""
|
115
108
|
# 1. If the Origin header is not present terminate this set of steps.
|
116
109
|
# The request is outside the scope of this specification.
|
@@ -209,10 +202,10 @@ class TestSetCorsHeaders(TestCase):
|
|
209
202
|
def test_not_configured(self):
|
210
203
|
# If the service is not configured, then no CORS head.
|
211
204
|
assert self._do("GET", {"Origin": self.ORIGIN1}, settings=None) == {
|
212
|
-
"Cache-Control": "max-age=
|
205
|
+
"Cache-Control": "max-age=10, public",
|
213
206
|
"Content-Length": "0",
|
214
207
|
"Content-Type": "text/html; charset=UTF-8",
|
215
|
-
"Vary": "Origin",
|
208
|
+
"Vary": "Origin, Cookie",
|
216
209
|
}
|
217
210
|
|
218
211
|
def test_match_all(self):
|
@@ -224,10 +217,10 @@ class TestSetCorsHeaders(TestCase):
|
|
224
217
|
# An origin included in the access_control_allow_origin list is OK with
|
225
218
|
# credentials
|
226
219
|
assert self._do("POST", {"Origin": self.ORIGIN1}, credentials=True, settings=settings) == {
|
227
|
-
"Cache-Control": "max-age=
|
220
|
+
"Cache-Control": "max-age=10, public",
|
228
221
|
"Content-Length": "0",
|
229
222
|
"Content-Type": "text/html; charset=UTF-8",
|
230
|
-
"Vary": "Origin",
|
223
|
+
"Vary": "Origin, Cookie",
|
231
224
|
"Access-Control-Max-Age": self.MAX_AGE,
|
232
225
|
"Access-Control-Allow-Origin": self.ORIGIN1,
|
233
226
|
"Access-Control-Allow-Methods": CORS_METHODS,
|
@@ -237,10 +230,10 @@ class TestSetCorsHeaders(TestCase):
|
|
237
230
|
# 3. Otherwise, add a single Access-Control-Allow-Origin header, with
|
238
231
|
# either the value of the Origin header or the string "*" as value.
|
239
232
|
assert self._do("POST", {"Origin": "http://www.guest.com"}, settings=settings) == {
|
240
|
-
"Cache-Control": "max-age=
|
233
|
+
"Cache-Control": "max-age=10, public",
|
241
234
|
"Content-Length": "0",
|
242
235
|
"Content-Type": "text/html; charset=UTF-8",
|
243
|
-
"Vary": "Origin",
|
236
|
+
"Vary": "Origin, Cookie",
|
244
237
|
"Access-Control-Max-Age": self.MAX_AGE,
|
245
238
|
"Access-Control-Allow-Origin": "*",
|
246
239
|
"Access-Control-Allow-Methods": CORS_METHODS,
|
tests/test_checker.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
1
|
# Copyright (c) 2013-2019, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
@@ -32,9 +30,10 @@
|
|
32
30
|
|
33
31
|
from unittest import TestCase
|
34
32
|
|
35
|
-
from c2cgeoportal_geoportal.lib.checker import build_url
|
36
33
|
from tests import DummyRequest
|
37
34
|
|
35
|
+
from c2cgeoportal_geoportal.lib.checker import build_url
|
36
|
+
|
38
37
|
|
39
38
|
class TestExportCSVView(TestCase):
|
40
39
|
def test_build_url_docker(self):
|
tests/test_decimaljson.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
1
|
# Copyright (c) 2011-2019, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
@@ -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
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
from unittest import TestCase
|
2
|
+
from unittest.mock import patch
|
3
|
+
|
4
|
+
from c2cgeoportal_geoportal.lib.i18n import available_locale_names
|
5
|
+
|
6
|
+
example_locale_content = {
|
7
|
+
("de", True),
|
8
|
+
("en", True),
|
9
|
+
("fr", True),
|
10
|
+
(".emptyfolder", False),
|
11
|
+
("geomapfish_geoportal-client.pot", False),
|
12
|
+
}
|
13
|
+
|
14
|
+
|
15
|
+
class TestI18n(TestCase):
|
16
|
+
@patch("c2cgeoportal_geoportal.lib.i18n.os.path.exists", return_value=True)
|
17
|
+
@patch(
|
18
|
+
"c2cgeoportal_geoportal.lib.i18n.os.listdir",
|
19
|
+
return_value=[locale[0] for locale in example_locale_content],
|
20
|
+
)
|
21
|
+
@patch(
|
22
|
+
"c2cgeoportal_geoportal.lib.i18n.os.path.isdir",
|
23
|
+
side_effect=[locale[1] for locale in example_locale_content],
|
24
|
+
)
|
25
|
+
def test_available_locale_names(self, isdir_mock, listdir_mock, exists_mock):
|
26
|
+
locales = available_locale_names()
|
27
|
+
self.assertEqual(set(locales), {"de", "en", "fr"})
|
28
|
+
|
29
|
+
def test_available_locale_names_no_dir(self):
|
30
|
+
locales = available_locale_names()
|
31
|
+
self.assertEqual(locales, [])
|
tests/test_init.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
1
|
# Copyright (c) 2012-2019, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
@@ -31,19 +29,20 @@
|
|
31
29
|
|
32
30
|
|
33
31
|
from unittest import TestCase
|
32
|
+
from unittest.mock import patch
|
34
33
|
|
35
34
|
from c2c.template.config import config
|
36
35
|
from pyramid import testing
|
36
|
+
from tests import DummyRequest
|
37
37
|
|
38
38
|
import c2cgeoportal_geoportal
|
39
39
|
from c2cgeoportal_geoportal import (
|
40
40
|
call_hook,
|
41
41
|
create_get_user_from_request,
|
42
42
|
default_user_validator,
|
43
|
-
|
43
|
+
is_valid_referrer,
|
44
44
|
set_user_validator,
|
45
45
|
)
|
46
|
-
from tests import DummyRequest
|
47
46
|
|
48
47
|
|
49
48
|
class TestIncludeme(TestCase):
|
@@ -60,7 +59,6 @@ class TestIncludeme(TestCase):
|
|
60
59
|
"schema": "main",
|
61
60
|
"schema_static": "main_static",
|
62
61
|
"default_max_age": 86400,
|
63
|
-
"app.cfg": "/opt/c2cgeoportal/geoportal/tests/config.yaml",
|
64
62
|
"package": "c2cgeoportal",
|
65
63
|
"enable_admin_interface": False,
|
66
64
|
"getitfixed": {"enabled": False},
|
@@ -74,6 +72,12 @@ class TestIncludeme(TestCase):
|
|
74
72
|
},
|
75
73
|
}
|
76
74
|
)
|
75
|
+
config.init("/opt/c2cgeoportal/geoportal/tests/config.yaml")
|
76
|
+
|
77
|
+
@patch("c2cgeoportal_geoportal.available_locale_names", return_value=["de", "en", "fr"])
|
78
|
+
def test_available_locale_names(self, locales_mock):
|
79
|
+
self.config.include(c2cgeoportal_geoportal.includeme)
|
80
|
+
self.assertEqual(self.config.registry.settings["available_locale_names"], ["de", "en", "fr"])
|
77
81
|
|
78
82
|
def test_set_user_validator_directive(self):
|
79
83
|
self.config.include(c2cgeoportal_geoportal.includeme)
|
@@ -89,7 +93,7 @@ class TestIncludeme(TestCase):
|
|
89
93
|
def custom_validator(username, password):
|
90
94
|
del username # Unused
|
91
95
|
del password # Unused
|
92
|
-
return False
|
96
|
+
return False
|
93
97
|
|
94
98
|
self.config.set_user_validator(custom_validator)
|
95
99
|
self.assertEqual(self.config.registry.validate_user, custom_validator)
|
@@ -97,8 +101,7 @@ class TestIncludeme(TestCase):
|
|
97
101
|
|
98
102
|
class TestReferer(TestCase):
|
99
103
|
"""
|
100
|
-
Check that accessing something with a bad HTTP referer is equivalent to a
|
101
|
-
not authenticated query.
|
104
|
+
Check that accessing something with a bad HTTP referer is equivalent to a not authenticated query.
|
102
105
|
"""
|
103
106
|
|
104
107
|
BASE1 = "http://example.com/app"
|
@@ -122,7 +125,7 @@ class TestReferer(TestCase):
|
|
122
125
|
def match(reference, value, expected):
|
123
126
|
r = DummyRequest()
|
124
127
|
r.referer = value
|
125
|
-
self.assertEqual(
|
128
|
+
self.assertEqual(is_valid_referrer(r, {"authorized_referers": [reference]}), expected)
|
126
129
|
|
127
130
|
match("http://example.com/app/", "http://example.com/app?k=v", True)
|
128
131
|
match("http://example.com/app/", "http://example.com/app?k=v#link", True)
|
@@ -173,21 +176,3 @@ class TestHooks(TestCase):
|
|
173
176
|
|
174
177
|
def test_bad_hook(self):
|
175
178
|
self.assertRaises(AttributeError, call_hook, self.settings, "bad")
|
176
|
-
|
177
|
-
|
178
|
-
class TestInit(TestCase):
|
179
|
-
def test_add_url_params(self):
|
180
|
-
from c2cgeoportal_geoportal.lib import add_url_params
|
181
|
-
from urllib.parse import urlparse, parse_qs
|
182
|
-
|
183
|
-
params = {"Name": "Bob", "Age": 18, "Nationality": "Việt Nam"}
|
184
|
-
result = add_url_params("http://test/", params)
|
185
|
-
presult = urlparse(result)
|
186
|
-
self.assertEqual(presult.scheme, "http")
|
187
|
-
self.assertEqual(presult.netloc, "test")
|
188
|
-
self.assertEqual(presult.path, "/")
|
189
|
-
self.assertEqual(presult.params, "")
|
190
|
-
self.assertEqual(presult.fragment, "")
|
191
|
-
self.assertEqual(
|
192
|
-
parse_qs(presult.query), {"Name": ["Bob"], "Age": ["18"], "Nationality": ["Việt Nam"]}
|
193
|
-
)
|
tests/test_locale_negociator.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
1
|
# Copyright (c) 2013-2019, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
@@ -44,9 +42,10 @@ class TestLocalNegociator(TestCase):
|
|
44
42
|
self.assertEqual(lang, "fr")
|
45
43
|
|
46
44
|
def test_lang_is_not_available(self):
|
47
|
-
from c2cgeoportal_geoportal import locale_negotiator
|
48
|
-
from pyramid.threadlocal import get_current_registry
|
49
45
|
from pyramid.request import Request
|
46
|
+
from pyramid.threadlocal import get_current_registry
|
47
|
+
|
48
|
+
from c2cgeoportal_geoportal import locale_negotiator
|
50
49
|
|
51
50
|
request = Request.blank("/")
|
52
51
|
request.registry = get_current_registry()
|
@@ -57,9 +56,10 @@ class TestLocalNegociator(TestCase):
|
|
57
56
|
self.assertEqual(lang, "de")
|
58
57
|
|
59
58
|
def test_lang_is_available(self):
|
60
|
-
from c2cgeoportal_geoportal import locale_negotiator
|
61
|
-
from pyramid.threadlocal import get_current_registry
|
62
59
|
from pyramid.request import Request
|
60
|
+
from pyramid.threadlocal import get_current_registry
|
61
|
+
|
62
|
+
from c2cgeoportal_geoportal import locale_negotiator
|
63
63
|
|
64
64
|
request = Request.blank("/")
|
65
65
|
request.registry = get_current_registry()
|
tests/test_raster.py
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Copyright (c) 2013-2019, Camptocamp SA
|
1
|
+
# Copyright (c) 2013-2021, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
6
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -36,8 +34,10 @@ from unittest import TestCase
|
|
36
34
|
class TestRasterViews(TestCase):
|
37
35
|
def test_raster(self):
|
38
36
|
from decimal import Decimal
|
39
|
-
|
37
|
+
|
40
38
|
from pyramid.httpexceptions import HTTPNotFound
|
39
|
+
from tests import DummyRequest
|
40
|
+
|
41
41
|
from c2cgeoportal_geoportal.views.raster import Raster
|
42
42
|
|
43
43
|
request = DummyRequest()
|
@@ -76,7 +76,9 @@ class TestRasterViews(TestCase):
|
|
76
76
|
|
77
77
|
def test_raster_angle(self):
|
78
78
|
from decimal import Decimal
|
79
|
+
|
79
80
|
from tests import DummyRequest
|
81
|
+
|
80
82
|
from c2cgeoportal_geoportal.views.raster import Raster
|
81
83
|
|
82
84
|
request = DummyRequest()
|
@@ -119,7 +121,9 @@ class TestRasterViews(TestCase):
|
|
119
121
|
|
120
122
|
def test_raster_vrt(self):
|
121
123
|
from decimal import Decimal
|
124
|
+
|
122
125
|
from tests import DummyRequest
|
126
|
+
|
123
127
|
from c2cgeoportal_geoportal.views.raster import Raster
|
124
128
|
|
125
129
|
request = DummyRequest()
|
@@ -153,8 +157,10 @@ class TestRasterViews(TestCase):
|
|
153
157
|
|
154
158
|
def test_profile_json(self):
|
155
159
|
from decimal import Decimal
|
156
|
-
|
160
|
+
|
157
161
|
from pyramid.httpexceptions import HTTPNotFound
|
162
|
+
from tests import DummyRequest
|
163
|
+
|
158
164
|
from c2cgeoportal_geoportal.views.profile import Profile
|
159
165
|
|
160
166
|
request = DummyRequest()
|
@@ -252,3 +258,10 @@ class TestRasterViews(TestCase):
|
|
252
258
|
# test wrong layer name
|
253
259
|
request.params["layers"] = "wrong"
|
254
260
|
self.assertRaises(HTTPNotFound, profile.json)
|
261
|
+
|
262
|
+
def test_round_bigvalue(self):
|
263
|
+
from decimal import Decimal
|
264
|
+
|
265
|
+
from c2cgeoportal_geoportal.views.raster import Raster
|
266
|
+
|
267
|
+
assert Raster._round(-5.4775915e29, 1) == Decimal("-5.4775915E+29")
|
tests/test_wmstparsing.py
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
1
|
# Copyright (c) 2013-2019, Camptocamp SA
|
4
2
|
# All rights reserved.
|
5
3
|
|
@@ -38,13 +36,13 @@ import isodate
|
|
38
36
|
|
39
37
|
class TestExtent(TestCase):
|
40
38
|
def test_parse_values(self):
|
41
|
-
from c2cgeoportal_geoportal.lib.wmstparsing import
|
39
|
+
from c2cgeoportal_geoportal.lib.wmstparsing import TimeExtentValue, parse_extent
|
42
40
|
|
43
41
|
extent = parse_extent(["2005", "2006"], "2005")
|
44
42
|
self.assertTrue(isinstance(extent, TimeExtentValue))
|
45
43
|
|
46
44
|
def test_parse_interval(self):
|
47
|
-
from c2cgeoportal_geoportal.lib.wmstparsing import
|
45
|
+
from c2cgeoportal_geoportal.lib.wmstparsing import TimeExtentInterval, parse_extent
|
48
46
|
|
49
47
|
extent = parse_extent(["2000/2005/P1Y"], "2002")
|
50
48
|
self.assertTrue(isinstance(extent, TimeExtentInterval))
|
@@ -56,7 +54,7 @@ class TestExtent(TestCase):
|
|
56
54
|
self.assertRaises(ValueError, parse_extent, [], "2002")
|
57
55
|
|
58
56
|
def test_merge_values(self):
|
59
|
-
from c2cgeoportal_geoportal.lib.wmstparsing import
|
57
|
+
from c2cgeoportal_geoportal.lib.wmstparsing import TimeExtentValue, parse_extent
|
60
58
|
|
61
59
|
e1 = parse_extent(["2000", "2005"], "2000/2005")
|
62
60
|
e2 = parse_extent(["2001", "2003"], "2001/2003")
|
@@ -82,7 +80,7 @@ class TestExtent(TestCase):
|
|
82
80
|
)
|
83
81
|
|
84
82
|
def test_merge_interval(self):
|
85
|
-
from c2cgeoportal_geoportal.lib.wmstparsing import
|
83
|
+
from c2cgeoportal_geoportal.lib.wmstparsing import TimeExtentInterval, parse_extent
|
86
84
|
|
87
85
|
e1 = parse_extent(["2000/2005/P1Y"], "2000/2005")
|
88
86
|
e2 = parse_extent(["2006/2010/P1Y"], "2006/2010")
|
@@ -168,7 +166,7 @@ class TestFormat(TestCase):
|
|
168
166
|
self.assertEqual("2010-02-01T00:00:00Z", _format_date(dt))
|
169
167
|
|
170
168
|
def test_format_tz(self):
|
171
|
-
from c2cgeoportal_geoportal.lib.wmstparsing import
|
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
|
self.assertEqual("2010-02-03T12:34:00+01:00", _format_date(dt[1]))
|
@@ -206,9 +204,10 @@ class TestParseDuration(TestCase):
|
|
206
204
|
self.assertEqual((0, 0, 0, 10), _parse_duration("PT10S"))
|
207
205
|
|
208
206
|
def test_invalid(self):
|
209
|
-
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_duration
|
210
207
|
from isodate import ISO8601Error
|
211
208
|
|
209
|
+
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_duration
|
210
|
+
|
212
211
|
self.assertRaises(ISO8601Error, _parse_duration, "10S")
|
213
212
|
|
214
213
|
|