c2cgeoportal-geoportal 2.7.1.157__py2.py3-none-any.whl → 2.8.1.89__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 (101) hide show
  1. c2cgeoportal_geoportal/__init__.py +23 -14
  2. c2cgeoportal_geoportal/lib/__init__.py +3 -5
  3. c2cgeoportal_geoportal/lib/authentication.py +10 -14
  4. c2cgeoportal_geoportal/lib/caching.py +8 -6
  5. c2cgeoportal_geoportal/lib/checker.py +10 -6
  6. c2cgeoportal_geoportal/lib/common_headers.py +2 -2
  7. c2cgeoportal_geoportal/lib/dbreflection.py +8 -8
  8. c2cgeoportal_geoportal/lib/filter_capabilities.py +8 -6
  9. c2cgeoportal_geoportal/lib/lingua_extractor.py +11 -12
  10. c2cgeoportal_geoportal/lib/loader.py +1 -1
  11. c2cgeoportal_geoportal/lib/oauth2.py +217 -100
  12. c2cgeoportal_geoportal/lib/wmstparsing.py +8 -12
  13. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/Dockerfile +9 -11
  14. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/development.ini +1 -1
  15. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/gunicorn.conf.py +3 -3
  16. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/requirements.txt +1 -1
  17. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.api.js +6 -4
  18. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.apps.js +1 -3
  19. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/webpack.commons.js +1 -0
  20. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/{{cookiecutter.package}}_geoportal/__init__.py +1 -6
  21. c2cgeoportal_geoportal/scaffolds/advance_update/{{cookiecutter.project}}/geoportal/CONST_Makefile +0 -20
  22. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/main.yaml +21 -7
  23. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/rebuild.yaml +1 -1
  24. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/.github/workflows/update_l10n.yaml +2 -1
  25. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Dockerfile +22 -22
  26. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/Makefile +58 -2
  27. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/build +49 -29
  28. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/config.yaml +2 -5
  29. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/docker-compose-check +25 -0
  30. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/ci/requirements.txt +1 -1
  31. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-db.yaml +26 -0
  32. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-lib.yaml +35 -26
  33. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose-qgis.yaml +23 -0
  34. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.override.sample.yaml +0 -2
  35. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/docker-compose.yaml +3 -3
  36. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.default +21 -2
  37. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/env.project +9 -0
  38. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/geoportal/vars.yaml +38 -14
  39. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/data/Readme.txt +2 -2
  40. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.conf +15 -0
  41. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/mapserver/mapserver.map.tmpl +2 -3
  42. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Landscape.jrxml +5 -0
  43. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A3_Portrait.jrxml +5 -0
  44. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Landscape.jrxml +5 -0
  45. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/A4_Portrait.jrxml +5 -0
  46. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/print/print-apps/{{cookiecutter.package}}/config.yaml.tmpl +6 -0
  47. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/pyproject.toml +4 -0
  48. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/run_alembic.sh +3 -5
  49. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-backup +5 -8
  50. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/scripts/db-restore +5 -8
  51. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/spell-ignore-words.txt +2 -0
  52. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/__init__.py +0 -0
  53. c2cgeoportal_geoportal/scaffolds/create/{{cookiecutter.project}}/tests/test_app.py +38 -0
  54. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/.upgrade.yaml +2 -132
  55. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_CHANGELOG.txt +200 -1105
  56. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/CONST_create_template/tests/test_testapp.py +48 -0
  57. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_config-schema.yaml +17 -15
  58. c2cgeoportal_geoportal/scaffolds/update/{{cookiecutter.project}}/geoportal/CONST_vars.yaml +48 -2
  59. c2cgeoportal_geoportal/scripts/__init__.py +3 -5
  60. c2cgeoportal_geoportal/scripts/c2cupgrade.py +1 -2
  61. c2cgeoportal_geoportal/scripts/pcreate.py +8 -10
  62. c2cgeoportal_geoportal/scripts/theme2fts.py +58 -3
  63. c2cgeoportal_geoportal/scripts/urllogin.py +2 -2
  64. c2cgeoportal_geoportal/views/__init__.py +1 -3
  65. c2cgeoportal_geoportal/views/dynamic.py +2 -3
  66. c2cgeoportal_geoportal/views/entry.py +2 -10
  67. c2cgeoportal_geoportal/views/fulltextsearch.py +1 -1
  68. c2cgeoportal_geoportal/views/geometry_processing.py +3 -3
  69. c2cgeoportal_geoportal/views/layers.py +10 -11
  70. c2cgeoportal_geoportal/views/login.py +63 -8
  71. c2cgeoportal_geoportal/views/mapserverproxy.py +3 -4
  72. c2cgeoportal_geoportal/views/ogcproxy.py +6 -2
  73. c2cgeoportal_geoportal/views/pdfreport.py +1 -1
  74. c2cgeoportal_geoportal/views/printproxy.py +6 -8
  75. c2cgeoportal_geoportal/views/profile.py +1 -1
  76. c2cgeoportal_geoportal/views/proxy.py +6 -9
  77. c2cgeoportal_geoportal/views/raster.py +2 -2
  78. c2cgeoportal_geoportal/views/resourceproxy.py +1 -1
  79. c2cgeoportal_geoportal/views/shortener.py +1 -2
  80. c2cgeoportal_geoportal/views/theme.py +97 -61
  81. c2cgeoportal_geoportal/views/tinyowsproxy.py +3 -12
  82. c2cgeoportal_geoportal/views/vector_tiles.py +1 -1
  83. {c2cgeoportal_geoportal-2.7.1.157.dist-info → c2cgeoportal_geoportal-2.8.1.89.dist-info}/METADATA +20 -15
  84. {c2cgeoportal_geoportal-2.7.1.157.dist-info → c2cgeoportal_geoportal-2.8.1.89.dist-info}/RECORD +100 -94
  85. {c2cgeoportal_geoportal-2.7.1.157.dist-info → c2cgeoportal_geoportal-2.8.1.89.dist-info}/entry_points.txt +1 -0
  86. tests/__init__.py +3 -2
  87. tests/test_cachebuster.py +3 -3
  88. tests/test_caching.py +1 -1
  89. tests/test_checker.py +1 -1
  90. tests/test_decimaljson.py +1 -1
  91. tests/test_headerstween.py +1 -1
  92. tests/test_i18n.py +1 -1
  93. tests/test_init.py +14 -15
  94. tests/test_locale_negociator.py +4 -4
  95. tests/test_mapserverproxy_route_predicate.py +1 -2
  96. tests/test_raster.py +15 -15
  97. tests/test_wmstparsing.py +10 -10
  98. tests/xmlstr.py +1 -3
  99. c2cgeoportal_geoportal/scaffolds/advance_create/{{cookiecutter.project}}/geoportal/tools/extract-messages.js +0 -41
  100. {c2cgeoportal_geoportal-2.7.1.157.dist-info → c2cgeoportal_geoportal-2.8.1.89.dist-info}/WHEEL +0 -0
  101. {c2cgeoportal_geoportal-2.7.1.157.dist-info → c2cgeoportal_geoportal-2.8.1.89.dist-info}/top_level.txt +0 -0
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;