c2cgeoportal-geoportal 2.7.1.156__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 +24 -14
- c2cgeoportal_geoportal/lib/authentication.py +10 -14
- c2cgeoportal_geoportal/lib/caching.py +8 -6
- c2cgeoportal_geoportal/lib/checker.py +10 -6
- c2cgeoportal_geoportal/lib/common_headers.py +5 -8
- c2cgeoportal_geoportal/lib/dbreflection.py +8 -8
- c2cgeoportal_geoportal/lib/filter_capabilities.py +5 -1
- c2cgeoportal_geoportal/lib/lingua_extractor.py +11 -12
- c2cgeoportal_geoportal/lib/loader.py +1 -1
- c2cgeoportal_geoportal/lib/oauth2.py +217 -100
- c2cgeoportal_geoportal/lib/wmstparsing.py +8 -12
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile +9 -11
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/development.ini +1 -1
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py +0 -2
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/requirements.txt +1 -1
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +6 -4
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js +1 -3
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.commons.js +1 -0
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py +1 -6
- c2cgeoportal_geoportal/scaffolds/advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile +0 -20
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/main.yaml +20 -6
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml +4 -3
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +22 -22
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +58 -2
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +48 -24
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/config.yaml +2 -5
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/docker-compose-check +25 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +1 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml +26 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml +53 -26
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +23 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +0 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.yaml +3 -3
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +21 -2
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +9 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml +38 -14
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/data/Readme.txt +2 -2
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.conf +15 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.map.tmpl +2 -3
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Landscape.jrxml +5 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Portrait.jrxml +5 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Landscape.jrxml +5 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Portrait.jrxml +5 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/config.yaml.tmpl +6 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/pyproject.toml +4 -0
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/run_alembic.sh +3 -5
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +1 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +1 -1
- c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/spell-ignore-words.txt +2 -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/update/{{cookiecutter.project}}/.upgrade.yaml +2 -132
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +210 -1097
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_config-schema.yaml +17 -15
- c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml +46 -2
- c2cgeoportal_geoportal/scripts/c2cupgrade.py +1 -2
- c2cgeoportal_geoportal/scripts/pcreate.py +8 -10
- c2cgeoportal_geoportal/scripts/theme2fts.py +58 -3
- c2cgeoportal_geoportal/views/__init__.py +1 -3
- c2cgeoportal_geoportal/views/dynamic.py +1 -1
- c2cgeoportal_geoportal/views/entry.py +2 -10
- c2cgeoportal_geoportal/views/fulltextsearch.py +1 -1
- c2cgeoportal_geoportal/views/geometry_processing.py +3 -3
- c2cgeoportal_geoportal/views/layers.py +10 -11
- c2cgeoportal_geoportal/views/login.py +63 -8
- c2cgeoportal_geoportal/views/mapserverproxy.py +2 -3
- c2cgeoportal_geoportal/views/ogcproxy.py +6 -2
- c2cgeoportal_geoportal/views/pdfreport.py +4 -4
- c2cgeoportal_geoportal/views/printproxy.py +2 -2
- c2cgeoportal_geoportal/views/profile.py +1 -1
- c2cgeoportal_geoportal/views/proxy.py +2 -4
- c2cgeoportal_geoportal/views/raster.py +2 -2
- c2cgeoportal_geoportal/views/resourceproxy.py +1 -1
- c2cgeoportal_geoportal/views/shortener.py +1 -2
- c2cgeoportal_geoportal/views/theme.py +97 -63
- c2cgeoportal_geoportal/views/tinyowsproxy.py +3 -12
- c2cgeoportal_geoportal/views/vector_tiles.py +1 -1
- {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/METADATA +21 -15
- {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/RECORD +96 -90
- {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/entry_points.txt +1 -0
- tests/__init__.py +3 -2
- tests/test_cachebuster.py +3 -3
- tests/test_caching.py +7 -7
- tests/test_checker.py +1 -1
- tests/test_decimaljson.py +1 -1
- tests/test_headerstween.py +1 -1
- tests/test_i18n.py +1 -1
- tests/test_init.py +14 -15
- tests/test_locale_negociator.py +4 -4
- tests/test_mapserverproxy_route_predicate.py +1 -2
- tests/test_raster.py +15 -15
- tests/test_wmstparsing.py +10 -10
- tests/xmlstr.py +1 -3
- c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/tools/extract-messages.js +0 -41
- {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/WHEEL +0 -0
- {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/top_level.txt +0 -0
tests/test_init.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2012-
|
1
|
+
# Copyright (c) 2012-2023, Camptocamp SA
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -46,7 +46,6 @@ from c2cgeoportal_geoportal import (
|
|
46
46
|
|
47
47
|
|
48
48
|
class TestIncludeme(TestCase):
|
49
|
-
|
50
49
|
config = None
|
51
50
|
|
52
51
|
def setup_method(self, _):
|
@@ -85,7 +84,7 @@ class TestIncludeme(TestCase):
|
|
85
84
|
|
86
85
|
def test_default_user_validator(self):
|
87
86
|
self.config.include(c2cgeoportal_geoportal.includeme)
|
88
|
-
self.
|
87
|
+
assert self.config.registry.validate_user == default_user_validator
|
89
88
|
|
90
89
|
def test_user_validator_overwrite(self):
|
91
90
|
self.config.include(c2cgeoportal_geoportal.includeme)
|
@@ -96,12 +95,12 @@ class TestIncludeme(TestCase):
|
|
96
95
|
return False
|
97
96
|
|
98
97
|
self.config.set_user_validator(custom_validator)
|
99
|
-
self.
|
98
|
+
assert self.config.registry.validate_user == custom_validator
|
100
99
|
|
101
100
|
|
102
101
|
class TestReferer(TestCase):
|
103
102
|
"""
|
104
|
-
Check that accessing something with a bad HTTP
|
103
|
+
Check that accessing something with a bad HTTP referrer is equivalent to a not authenticated query.
|
105
104
|
"""
|
106
105
|
|
107
106
|
BASE1 = "http://example.com/app"
|
@@ -113,7 +112,7 @@ class TestReferer(TestCase):
|
|
113
112
|
class MockRequest:
|
114
113
|
def __init__(self, to, ref, method):
|
115
114
|
self.path_qs = to
|
116
|
-
self.
|
115
|
+
self.referrer = ref
|
117
116
|
self.user_ = TestReferer.USER
|
118
117
|
self.method = method
|
119
118
|
|
@@ -124,8 +123,8 @@ class TestReferer(TestCase):
|
|
124
123
|
def test_match_url(self):
|
125
124
|
def match(reference, value, expected):
|
126
125
|
r = DummyRequest()
|
127
|
-
r.
|
128
|
-
|
126
|
+
r.referrer = value
|
127
|
+
assert is_valid_referrer(r, {"authorized_referers": [reference]}) == expected
|
129
128
|
|
130
129
|
match("http://example.com/app/", "http://example.com/app?k=v", True)
|
131
130
|
match("http://example.com/app/", "http://example.com/app?k=v#link", True)
|
@@ -140,16 +139,16 @@ class TestReferer(TestCase):
|
|
140
139
|
match("http://example.com", "http://example.com.bad.org/app/x/y", False)
|
141
140
|
|
142
141
|
def test_positive(self):
|
143
|
-
self.
|
144
|
-
self.
|
145
|
-
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
|
146
145
|
|
147
146
|
def test_no_ref(self):
|
148
|
-
self.
|
149
|
-
self.
|
147
|
+
assert self._get_user(to=self.BASE1, ref=None) == self.USER
|
148
|
+
assert self._get_user(to=self.BASE1, ref="") is None
|
150
149
|
|
151
|
-
self.
|
152
|
-
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
|
153
152
|
|
154
153
|
def test_bad_ref(self):
|
155
154
|
self.assertIsNone(self._get_user(to=self.BASE1, ref="http://bad.com/hacker"))
|
tests/test_locale_negociator.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2013-
|
1
|
+
# Copyright (c) 2013-2023, Camptocamp SA
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -39,7 +39,7 @@ class TestLocalNegociator(TestCase):
|
|
39
39
|
|
40
40
|
request = DummyRequest(params=dict(lang="fr"))
|
41
41
|
lang = locale_negotiator(request)
|
42
|
-
|
42
|
+
assert lang == "fr"
|
43
43
|
|
44
44
|
def test_lang_is_not_available(self):
|
45
45
|
from pyramid.request import Request
|
@@ -53,7 +53,7 @@ class TestLocalNegociator(TestCase):
|
|
53
53
|
|
54
54
|
request.headers["accept-language"] = "en-us,en;q=0.3,fr;q=0.7"
|
55
55
|
lang = locale_negotiator(request)
|
56
|
-
|
56
|
+
assert lang == "de"
|
57
57
|
|
58
58
|
def test_lang_is_available(self):
|
59
59
|
from pyramid.request import Request
|
@@ -66,4 +66,4 @@ class TestLocalNegociator(TestCase):
|
|
66
66
|
request.registry.settings = {"default_locale_name": "de", "available_locale_names": ["de", "es"]}
|
67
67
|
request.accept_language = "en-us,en;q=0.3,es;q=0.7"
|
68
68
|
lang = locale_negotiator(request)
|
69
|
-
|
69
|
+
assert lang == "es"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2013-
|
1
|
+
# Copyright (c) 2013-2023, Camptocamp SA
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -37,7 +37,6 @@ from c2cgeoportal_geoportal import MapserverproxyRoutePredicate
|
|
37
37
|
|
38
38
|
|
39
39
|
class TestMapserverproxyRoutePredicate(TestCase):
|
40
|
-
|
41
40
|
predicate = MapserverproxyRoutePredicate(None, None)
|
42
41
|
|
43
42
|
def test_hide_capabilities_unset(self):
|
tests/test_raster.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2013-
|
1
|
+
# Copyright (c) 2013-2023, Camptocamp SA
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -53,9 +53,9 @@ class TestRasterViews(TestCase):
|
|
53
53
|
request.params["lon"] = "565000"
|
54
54
|
request.params["lat"] = "218000"
|
55
55
|
result = raster.raster()
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
assert result["dem1"] == None
|
57
|
+
assert result["dem2"] == None
|
58
|
+
assert result["dem3"] == None
|
59
59
|
|
60
60
|
request.params["lon"] = "548000"
|
61
61
|
request.params["lat"] = "216000"
|
@@ -97,27 +97,27 @@ class TestRasterViews(TestCase):
|
|
97
97
|
request.params["lon"] = "547990.0"
|
98
98
|
request.params["lat"] = "216009.1"
|
99
99
|
result = raster.raster()
|
100
|
-
|
100
|
+
assert result["dem5"] == Decimal("1164.2")
|
101
101
|
request.params["lon"] = "547990.9"
|
102
102
|
request.params["lat"] = "216010.0"
|
103
103
|
result = raster.raster()
|
104
|
-
|
104
|
+
assert result["dem5"] == Decimal("1164.2")
|
105
105
|
|
106
106
|
# Lower right
|
107
107
|
request.params["lon"] = "547996.0"
|
108
108
|
request.params["lat"] = "216003.1"
|
109
109
|
result = raster.raster()
|
110
|
-
|
110
|
+
assert result["dem5"] == Decimal("1180.77")
|
111
111
|
request.params["lon"] = "547996.9"
|
112
112
|
request.params["lat"] = "216004.0"
|
113
113
|
result = raster.raster()
|
114
|
-
|
114
|
+
assert result["dem5"] == Decimal("1180.77")
|
115
115
|
|
116
116
|
# Out
|
117
117
|
request.params["lon"] = "547997.4"
|
118
118
|
request.params["lat"] = "216003.5"
|
119
119
|
result = raster.raster()
|
120
|
-
|
120
|
+
assert result["dem5"] == None
|
121
121
|
|
122
122
|
def test_raster_vrt(self):
|
123
123
|
from decimal import Decimal
|
@@ -142,7 +142,7 @@ class TestRasterViews(TestCase):
|
|
142
142
|
request.params["lon"] = "547990.4"
|
143
143
|
request.params["lat"] = "216009.5"
|
144
144
|
result = raster.raster()
|
145
|
-
|
145
|
+
assert result["dem6"] == Decimal("1164.2")
|
146
146
|
|
147
147
|
def test_absolute_path(self):
|
148
148
|
import fiona
|
@@ -177,7 +177,7 @@ class TestRasterViews(TestCase):
|
|
177
177
|
'{"type":"LineString",' '"coordinates":[[548009.5,215990],[547990,216009.5]]}'
|
178
178
|
)
|
179
179
|
result = profile.json()
|
180
|
-
|
180
|
+
assert len(result["profile"]) == 4
|
181
181
|
self.assertAlmostEqual(result["profile"][0]["y"], 215990)
|
182
182
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem2"], None)
|
183
183
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem"], None)
|
@@ -201,7 +201,7 @@ class TestRasterViews(TestCase):
|
|
201
201
|
|
202
202
|
request.params["layers"] = "dem"
|
203
203
|
result = profile.json()
|
204
|
-
|
204
|
+
assert len(result["profile"]) == 4
|
205
205
|
self.assertAlmostEqual(result["profile"][0]["y"], 215990)
|
206
206
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem"], None)
|
207
207
|
self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
|
@@ -222,7 +222,7 @@ class TestRasterViews(TestCase):
|
|
222
222
|
# test length = 0
|
223
223
|
request.params["geom"] = '{"type":"LineString",' '"coordinates":[[548000,216000]]}'
|
224
224
|
result = profile.json()
|
225
|
-
|
225
|
+
assert len(result["profile"]) == 1
|
226
226
|
self.assertAlmostEqual(result["profile"][0]["y"], 216000)
|
227
227
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem"], 1172)
|
228
228
|
self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
|
@@ -233,7 +233,7 @@ class TestRasterViews(TestCase):
|
|
233
233
|
'{"type":"LineString",' '"coordinates":[[548000,216000],[548001,216001],[548009,216009]]}'
|
234
234
|
)
|
235
235
|
result = profile.json()
|
236
|
-
|
236
|
+
assert len(result["profile"]) == 5
|
237
237
|
self.assertAlmostEqual(result["profile"][0]["y"], 216000)
|
238
238
|
self.assertAlmostEqual(result["profile"][0]["values"]["dem"], 1172)
|
239
239
|
self.assertAlmostEqual(result["profile"][0]["dist"], Decimal("0.0"))
|
@@ -241,7 +241,7 @@ class TestRasterViews(TestCase):
|
|
241
241
|
self.assertAlmostEqual(result["profile"][1]["y"], 216001.0)
|
242
242
|
self.assertAlmostEqual(result["profile"][1]["values"]["dem"], 1167)
|
243
243
|
self.assertAlmostEqual(result["profile"][1]["dist"], Decimal("1.4"))
|
244
|
-
|
244
|
+
assert result["profile"][1]["x"] == 548001.0
|
245
245
|
self.assertAlmostEqual(result["profile"][2]["y"], 216003.66666666666)
|
246
246
|
self.assertAlmostEqual(result["profile"][2]["values"]["dem"], 1155)
|
247
247
|
self.assertAlmostEqual(result["profile"][2]["dist"], Decimal("5.2"))
|
tests/test_wmstparsing.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2013-
|
1
|
+
# Copyright (c) 2013-2023, Camptocamp SA
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
4
|
# Redistribution and use in source and binary forms, with or without
|
@@ -121,35 +121,35 @@ class TestParseDate(TestCase):
|
|
121
121
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
122
122
|
|
123
123
|
date = _parse_date("2010")
|
124
|
-
|
124
|
+
assert "year" == date[0]
|
125
125
|
self.assertEqual(datetime.datetime(2010, 0o1, 0o1, tzinfo=isodate.UTC), date[1])
|
126
126
|
|
127
127
|
def test_parse_date_month(self):
|
128
128
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
129
129
|
|
130
130
|
date = _parse_date("2010-02")
|
131
|
-
|
131
|
+
assert "month" == date[0]
|
132
132
|
self.assertEqual(datetime.datetime(2010, 0o2, 0o1, tzinfo=isodate.UTC), date[1])
|
133
133
|
|
134
134
|
def test_parse_date(self):
|
135
135
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
136
136
|
|
137
137
|
date = _parse_date("2010-02-03")
|
138
|
-
|
138
|
+
assert "day" == date[0]
|
139
139
|
self.assertEqual(datetime.datetime(2010, 0o2, 0o3, tzinfo=isodate.UTC), date[1])
|
140
140
|
|
141
141
|
def test_parse_datetime(self):
|
142
142
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
143
143
|
|
144
144
|
date = _parse_date("2010-02-03T12:34")
|
145
|
-
|
145
|
+
assert "second" == date[0]
|
146
146
|
self.assertEqual(datetime.datetime(2010, 0o2, 0o3, 12, 34, tzinfo=isodate.UTC), date[1])
|
147
147
|
|
148
148
|
def test_parse_datetime_tz(self):
|
149
149
|
from c2cgeoportal_geoportal.lib.wmstparsing import _parse_date
|
150
150
|
|
151
151
|
date = _parse_date("2010-02-03T12:34Z")
|
152
|
-
|
152
|
+
assert "second" == date[0]
|
153
153
|
self.assertEqual(datetime.datetime(2010, 0o2, 0o3, 12, 34, tzinfo=isodate.UTC), date[1])
|
154
154
|
|
155
155
|
def test_unsupported_format(self):
|
@@ -163,13 +163,13 @@ class TestFormat(TestCase):
|
|
163
163
|
from c2cgeoportal_geoportal.lib.wmstparsing import _format_date
|
164
164
|
|
165
165
|
dt = datetime.datetime(2010, 0o2, 0o1, 00, 00)
|
166
|
-
|
166
|
+
assert "2010-02-01T00:00:00Z" == _format_date(dt)
|
167
167
|
|
168
168
|
def test_format_tz(self):
|
169
169
|
from c2cgeoportal_geoportal.lib.wmstparsing import _format_date, _parse_date
|
170
170
|
|
171
171
|
dt = _parse_date("2010-02-03T12:34:00+01:00")
|
172
|
-
|
172
|
+
assert "2010-02-03T12:34:00+01:00" == _format_date(dt[1])
|
173
173
|
|
174
174
|
|
175
175
|
class TestParseDuration(TestCase):
|
@@ -219,9 +219,9 @@ class TestTimeInformation(TestCase):
|
|
219
219
|
self.assertFalse(ti.has_time())
|
220
220
|
self.assertTrue(ti.to_dict() is None)
|
221
221
|
ti.merge_mode("single")
|
222
|
-
|
222
|
+
assert ti.mode == "single"
|
223
223
|
ti.merge_mode("single")
|
224
|
-
|
224
|
+
assert ti.mode == "single"
|
225
225
|
|
226
226
|
def test_merge_different_modes(self):
|
227
227
|
from c2cgeoportal_geoportal.lib.wmstparsing import TimeInformation
|
tests/xmlstr.py
CHANGED
@@ -1,41 +0,0 @@
|
|
1
|
-
const fs = require('fs');
|
2
|
-
const options = require('commander');
|
3
|
-
const Extractor = require('angular-gettext-tools').Extractor;
|
4
|
-
|
5
|
-
function main(inputs) {
|
6
|
-
const extractor = new Extractor();
|
7
|
-
|
8
|
-
const promises = [];
|
9
|
-
inputs.forEach((input) => {
|
10
|
-
promises.push(
|
11
|
-
new Promise((resolve) => {
|
12
|
-
fs.readFile(input, 'utf-8', (error, content) => {
|
13
|
-
resolve(error ? undefined : {input, content});
|
14
|
-
});
|
15
|
-
})
|
16
|
-
);
|
17
|
-
});
|
18
|
-
|
19
|
-
const messages = [];
|
20
|
-
Promise.all(promises).then((contents) => {
|
21
|
-
contents = contents.filter((content) => content !== undefined);
|
22
|
-
contents.forEach(({input, content}) => extractor.parse(input, content));
|
23
|
-
for (const msgstr in extractor.strings) {
|
24
|
-
if (extractor.strings.hasOwnProperty(msgstr)) {
|
25
|
-
const msg = extractor.strings[msgstr];
|
26
|
-
const contexts = Object.keys(msg).sort();
|
27
|
-
const ref = msg[contexts]['references'].join(', ');
|
28
|
-
messages.push([ref, msgstr]);
|
29
|
-
}
|
30
|
-
}
|
31
|
-
process.stdout.write(JSON.stringify(messages));
|
32
|
-
});
|
33
|
-
}
|
34
|
-
|
35
|
-
// If running this module directly then call the main function.
|
36
|
-
if (require.main === module) {
|
37
|
-
options.parse(process.argv);
|
38
|
-
main(options.args);
|
39
|
-
}
|
40
|
-
|
41
|
-
module.exports = main;
|
{c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|