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.
Files changed (97) hide show
  1. c2cgeoportal_geoportal/__init__.py +24 -14
  2. c2cgeoportal_geoportal/lib/authentication.py +10 -14
  3. c2cgeoportal_geoportal/lib/caching.py +8 -6
  4. c2cgeoportal_geoportal/lib/checker.py +10 -6
  5. c2cgeoportal_geoportal/lib/common_headers.py +5 -8
  6. c2cgeoportal_geoportal/lib/dbreflection.py +8 -8
  7. c2cgeoportal_geoportal/lib/filter_capabilities.py +5 -1
  8. c2cgeoportal_geoportal/lib/lingua_extractor.py +11 -12
  9. c2cgeoportal_geoportal/lib/loader.py +1 -1
  10. c2cgeoportal_geoportal/lib/oauth2.py +217 -100
  11. c2cgeoportal_geoportal/lib/wmstparsing.py +8 -12
  12. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile +9 -11
  13. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/development.ini +1 -1
  14. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py +0 -2
  15. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/requirements.txt +1 -1
  16. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +6 -4
  17. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js +1 -3
  18. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.commons.js +1 -0
  19. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py +1 -6
  20. c2cgeoportal_geoportal/scaffolds/advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile +0 -20
  21. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/main.yaml +20 -6
  22. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml +4 -3
  23. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +22 -22
  24. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +58 -2
  25. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +48 -24
  26. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/config.yaml +2 -5
  27. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/docker-compose-check +25 -0
  28. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +1 -1
  29. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml +26 -0
  30. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml +53 -26
  31. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +23 -0
  32. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +0 -1
  33. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.yaml +3 -3
  34. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +21 -2
  35. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +9 -0
  36. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml +38 -14
  37. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/data/Readme.txt +2 -2
  38. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.conf +15 -0
  39. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.map.tmpl +2 -3
  40. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Landscape.jrxml +5 -0
  41. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Portrait.jrxml +5 -0
  42. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Landscape.jrxml +5 -0
  43. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Portrait.jrxml +5 -0
  44. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/config.yaml.tmpl +6 -0
  45. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/pyproject.toml +4 -0
  46. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/run_alembic.sh +3 -5
  47. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +1 -1
  48. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +1 -1
  49. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/spell-ignore-words.txt +2 -0
  50. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/__init__.py +0 -0
  51. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/test_app.py +38 -0
  52. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/.upgrade.yaml +2 -132
  53. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +210 -1097
  54. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
  55. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_config-schema.yaml +17 -15
  56. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml +46 -2
  57. c2cgeoportal_geoportal/scripts/c2cupgrade.py +1 -2
  58. c2cgeoportal_geoportal/scripts/pcreate.py +8 -10
  59. c2cgeoportal_geoportal/scripts/theme2fts.py +58 -3
  60. c2cgeoportal_geoportal/views/__init__.py +1 -3
  61. c2cgeoportal_geoportal/views/dynamic.py +1 -1
  62. c2cgeoportal_geoportal/views/entry.py +2 -10
  63. c2cgeoportal_geoportal/views/fulltextsearch.py +1 -1
  64. c2cgeoportal_geoportal/views/geometry_processing.py +3 -3
  65. c2cgeoportal_geoportal/views/layers.py +10 -11
  66. c2cgeoportal_geoportal/views/login.py +63 -8
  67. c2cgeoportal_geoportal/views/mapserverproxy.py +2 -3
  68. c2cgeoportal_geoportal/views/ogcproxy.py +6 -2
  69. c2cgeoportal_geoportal/views/pdfreport.py +4 -4
  70. c2cgeoportal_geoportal/views/printproxy.py +2 -2
  71. c2cgeoportal_geoportal/views/profile.py +1 -1
  72. c2cgeoportal_geoportal/views/proxy.py +2 -4
  73. c2cgeoportal_geoportal/views/raster.py +2 -2
  74. c2cgeoportal_geoportal/views/resourceproxy.py +1 -1
  75. c2cgeoportal_geoportal/views/shortener.py +1 -2
  76. c2cgeoportal_geoportal/views/theme.py +97 -63
  77. c2cgeoportal_geoportal/views/tinyowsproxy.py +3 -12
  78. c2cgeoportal_geoportal/views/vector_tiles.py +1 -1
  79. {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/METADATA +21 -15
  80. {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/RECORD +96 -90
  81. {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/entry_points.txt +1 -0
  82. tests/__init__.py +3 -2
  83. tests/test_cachebuster.py +3 -3
  84. tests/test_caching.py +7 -7
  85. tests/test_checker.py +1 -1
  86. tests/test_decimaljson.py +1 -1
  87. tests/test_headerstween.py +1 -1
  88. tests/test_i18n.py +1 -1
  89. tests/test_init.py +14 -15
  90. tests/test_locale_negociator.py +4 -4
  91. tests/test_mapserverproxy_route_predicate.py +1 -2
  92. tests/test_raster.py +15 -15
  93. tests/test_wmstparsing.py +10 -10
  94. tests/xmlstr.py +1 -3
  95. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/tools/extract-messages.js +0 -41
  96. {c2cgeoportal_geoportal-2.7.1.156.dist-info → c2cgeoportal_geoportal-2.8.1.180.dist-info}/WHEEL +0 -0
  97. {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-2019, Camptocamp SA
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.assertEqual(self.config.registry.validate_user, default_user_validator)
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.assertEqual(self.config.registry.validate_user, custom_validator)
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 referer is equivalent to a not authenticated query.
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.referer = ref
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.referer = value
128
- self.assertEqual(is_valid_referrer(r, {"authorized_referers": [reference]}), expected)
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.assertEqual(self._get_user(to=self.BASE1 + "/1", ref=self.BASE1), self.USER)
144
- self.assertEqual(self._get_user(to=self.BASE1 + "/2", ref=self.BASE1 + "/3"), self.USER)
145
- self.assertEqual(self._get_user(to=self.BASE1 + "/4", ref=self.BASE2 + "/5"), self.USER)
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.assertEqual(self._get_user(to=self.BASE1, ref=None), self.USER)
149
- self.assertIsNone(self._get_user(to=self.BASE1, ref=""))
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.assertEqual(self._get_user(to=self.BASE1, ref=None, method="POST"), self.USER)
152
- self.assertIsNone(self._get_user(to=self.BASE1, ref="", method="POST"))
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"))
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013-2019, Camptocamp SA
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
- self.assertEqual(lang, "fr")
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
- self.assertEqual(lang, "de")
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
- self.assertEqual(lang, "es")
69
+ assert lang == "es"
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013-2019, Camptocamp SA
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-2021, Camptocamp SA
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
- self.assertEqual(result["dem1"], None)
57
- self.assertEqual(result["dem2"], None)
58
- self.assertEqual(result["dem3"], None)
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
- self.assertEqual(result["dem5"], Decimal("1164.2"))
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
- self.assertEqual(result["dem5"], Decimal("1164.2"))
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
- self.assertEqual(result["dem5"], Decimal("1180.77"))
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
- self.assertEqual(result["dem5"], Decimal("1180.77"))
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
- self.assertEqual(result["dem5"], None)
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
- self.assertEqual(result["dem6"], Decimal("1164.2"))
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
- self.assertEqual(len(result["profile"]), 4)
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
- self.assertEqual(len(result["profile"]), 4)
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
- self.assertEqual(len(result["profile"]), 1)
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
- self.assertEqual(len(result["profile"]), 5)
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
- self.assertEqual(result["profile"][1]["x"], 548001.0)
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-2019, Camptocamp SA
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
- self.assertEqual("year", date[0])
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
- self.assertEqual("month", date[0])
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
- self.assertEqual("day", date[0])
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
- self.assertEqual("second", date[0])
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
- self.assertEqual("second", date[0])
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
- self.assertEqual("2010-02-01T00:00:00Z", _format_date(dt))
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
- self.assertEqual("2010-02-03T12:34:00+01:00", _format_date(dt[1]))
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
- self.assertEqual(ti.mode, "single")
222
+ assert ti.mode == "single"
223
223
  ti.merge_mode("single")
224
- self.assertEqual(ti.mode, "single")
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,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
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
@@ -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;