udata 11.1.2.dev8__py3-none-any.whl → 11.1.2.dev11__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.

Potentially problematic release.


This version of udata might be problematic. Click here for more details.

Files changed (43) hide show
  1. udata/api/oauth2.py +22 -3
  2. udata/app.py +3 -0
  3. udata/auth/__init__.py +11 -0
  4. udata/auth/forms.py +70 -3
  5. udata/auth/mails.py +6 -0
  6. udata/auth/proconnect.py +127 -0
  7. udata/auth/views.py +57 -2
  8. udata/core/__init__.py +2 -0
  9. udata/core/captchetat.py +80 -0
  10. udata/core/dataset/api.py +2 -2
  11. udata/core/dataset/api_fields.py +3 -4
  12. udata/core/dataset/apiv2.py +6 -6
  13. udata/core/dataset/commands.py +0 -10
  14. udata/core/dataset/constants.py +124 -38
  15. udata/core/dataset/factories.py +2 -1
  16. udata/core/dataset/forms.py +14 -10
  17. udata/core/dataset/models.py +8 -36
  18. udata/core/dataset/rdf.py +76 -54
  19. udata/core/dataset/tasks.py +2 -50
  20. udata/cors.py +19 -2
  21. udata/harvest/backends/ckan/harvesters.py +10 -14
  22. udata/harvest/backends/maaf.py +15 -14
  23. udata/harvest/tests/ckan/test_ckan_backend.py +4 -3
  24. udata/harvest/tests/test_dcat_backend.py +3 -2
  25. udata/i18n.py +7 -32
  26. udata/migrations/2025-09-04-update-legacy-frequencies.py +36 -0
  27. udata/settings.py +27 -0
  28. udata/templates/security/email/reset_instructions.html +1 -1
  29. udata/templates/security/email/reset_instructions.txt +1 -1
  30. udata/tests/api/test_datasets_api.py +41 -12
  31. udata/tests/dataset/test_dataset_model.py +17 -53
  32. udata/tests/dataset/test_dataset_rdf.py +27 -28
  33. udata/translations/udata.pot +226 -150
  34. udata/utils.py +8 -1
  35. {udata-11.1.2.dev8.dist-info → udata-11.1.2.dev11.dist-info}/METADATA +1 -1
  36. {udata-11.1.2.dev8.dist-info → udata-11.1.2.dev11.dist-info}/RECORD +40 -40
  37. udata/templates/mail/frequency_reminder.html +0 -34
  38. udata/templates/mail/frequency_reminder.txt +0 -18
  39. udata/tests/test_i18n.py +0 -93
  40. {udata-11.1.2.dev8.dist-info → udata-11.1.2.dev11.dist-info}/WHEEL +0 -0
  41. {udata-11.1.2.dev8.dist-info → udata-11.1.2.dev11.dist-info}/entry_points.txt +0 -0
  42. {udata-11.1.2.dev8.dist-info → udata-11.1.2.dev11.dist-info}/licenses/LICENSE +0 -0
  43. {udata-11.1.2.dev8.dist-info → udata-11.1.2.dev11.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,7 @@ from rdflib.resource import Resource as RdfResource
10
10
 
11
11
  from udata.core.contact_point.factories import ContactPointFactory
12
12
  from udata.core.dataservices.factories import DataserviceFactory
13
+ from udata.core.dataset.constants import UpdateFrequency
13
14
  from udata.core.dataset.factories import DatasetFactory, LicenseFactory, ResourceFactory
14
15
  from udata.core.dataset.models import (
15
16
  Checksum,
@@ -20,7 +21,8 @@ from udata.core.dataset.models import (
20
21
  Resource,
21
22
  )
22
23
  from udata.core.dataset.rdf import (
23
- EU_RDF_REQUENCIES,
24
+ EUFREQ_TERM_TO_UDATA,
25
+ FREQ_TERM_TO_UDATA,
24
26
  dataset_from_rdf,
25
27
  dataset_to_rdf,
26
28
  frequency_from_rdf,
@@ -38,6 +40,7 @@ from udata.rdf import (
38
40
  DCAT,
39
41
  DCATAP,
40
42
  DCT,
43
+ EUFREQ,
41
44
  FREQ,
42
45
  GEODCAT,
43
46
  HVD_LEGISLATION,
@@ -54,13 +57,6 @@ from udata.utils import faker
54
57
 
55
58
  pytestmark = pytest.mark.usefixtures("app")
56
59
 
57
- FREQ_SAMPLE = [
58
- (FREQ.annual, "annual"),
59
- (FREQ.monthly, "monthly"),
60
- (FREQ.daily, "daily"),
61
- (FREQ.continuous, "continuous"),
62
- ]
63
-
64
60
  GOV_UK_REF = "http://reference.data.gov.uk/id/year/2017"
65
61
 
66
62
  try:
@@ -104,7 +100,7 @@ class DatasetToRdfTest:
104
100
  dataset = DatasetFactory(
105
101
  tags=faker.tags(nb=3),
106
102
  resources=resources,
107
- frequency="daily",
103
+ frequency=UpdateFrequency.DAILY,
108
104
  acronym="acro",
109
105
  organization=org,
110
106
  contact_points=[contact],
@@ -178,19 +174,19 @@ class DatasetToRdfTest:
178
174
  assert org_rdf.value(RDF.type).identifier == FOAF.Organization
179
175
  assert org_rdf.value(FOAF.name) == Literal("organization")
180
176
 
181
- def test_map_unkownn_frequencies(self):
182
- assert frequency_to_rdf("hourly") == FREQ.continuous
183
-
184
- assert frequency_to_rdf("fourTimesADay") == FREQ.daily
185
- assert frequency_to_rdf("threeTimesADay") == FREQ.daily
186
- assert frequency_to_rdf("semidaily") == FREQ.daily
187
-
188
- assert frequency_to_rdf("fourTimesAWeek") == FREQ.threeTimesAWeek
177
+ def test_map_null_frequency(self):
178
+ assert frequency_to_rdf(None) is None
189
179
 
190
- assert frequency_to_rdf("punctual") is None
191
- assert frequency_to_rdf("unknown") is None
180
+ @pytest.mark.parametrize("term,freq", FREQ_TERM_TO_UDATA.items())
181
+ def test_map_dublin_core_frequencies(self, term, freq):
182
+ assert frequency_to_rdf(freq) == term
192
183
 
193
- assert frequency_to_rdf("quinquennial") is None # Better idea ?
184
+ @pytest.mark.parametrize(
185
+ "term,freq",
186
+ [(k, v) for k, v in EUFREQ_TERM_TO_UDATA.items() if v not in FREQ_TERM_TO_UDATA.values()],
187
+ )
188
+ def test_map_european_frequencies(self, term, freq):
189
+ assert frequency_to_rdf(freq) == term
194
190
 
195
191
  def test_minimal_resource_fields(self):
196
192
  resource = ResourceFactory()
@@ -462,7 +458,7 @@ class RdfToDatasetTest:
462
458
  g.set((node, DCT.title, Literal(title)))
463
459
  g.set((node, SKOS.altLabel, Literal(acronym)))
464
460
  g.set((node, DCT.description, Literal(description)))
465
- g.set((node, DCT.accrualPeriodicity, FREQ.daily))
461
+ g.set((node, DCT.accrualPeriodicity, EUFREQ.DAILY))
466
462
  pot = BNode()
467
463
  g.add((node, DCT.temporal, pot))
468
464
  g.set((pot, RDF.type, DCT.PeriodOfTime))
@@ -478,7 +474,7 @@ class RdfToDatasetTest:
478
474
  assert dataset.title == title
479
475
  assert dataset.acronym == acronym
480
476
  assert dataset.description == description
481
- assert dataset.frequency == "daily"
477
+ assert dataset.frequency == UpdateFrequency.DAILY
482
478
  assert set(dataset.tags) == set(tags)
483
479
  assert isinstance(dataset.temporal_coverage, db.DateRange)
484
480
  assert dataset.temporal_coverage.start == start
@@ -539,31 +535,34 @@ class RdfToDatasetTest:
539
535
  assert isinstance(dataset, Dataset)
540
536
  assert set(dataset.tags) == set(tags + themes)
541
537
 
542
- @pytest.mark.parametrize("freq,expected", FREQ_SAMPLE)
538
+ def test_parse_null_frequency(self):
539
+ assert frequency_from_rdf(None) is None
540
+
541
+ @pytest.mark.parametrize("freq,expected", FREQ_TERM_TO_UDATA.items())
543
542
  def test_parse_dublin_core_frequencies(self, freq, expected):
544
543
  assert frequency_from_rdf(freq) == expected
545
544
 
546
- @pytest.mark.parametrize("freq,expected", FREQ_SAMPLE)
545
+ @pytest.mark.parametrize("freq,expected", FREQ_TERM_TO_UDATA.items())
547
546
  def test_parse_dublin_core_frequencies_as_resource(self, freq, expected):
548
547
  g = Graph()
549
548
  resource = RdfResource(g, freq)
550
549
  assert frequency_from_rdf(resource) == expected
551
550
 
552
- @pytest.mark.parametrize("freq,expected", FREQ_SAMPLE)
551
+ @pytest.mark.parametrize("freq,expected", FREQ_TERM_TO_UDATA.items())
553
552
  def test_parse_dublin_core_frequencies_as_url(self, freq, expected):
554
553
  assert frequency_from_rdf(str(freq)) == expected
555
554
 
556
- @pytest.mark.parametrize("freq,expected", EU_RDF_REQUENCIES.items())
555
+ @pytest.mark.parametrize("freq,expected", EUFREQ_TERM_TO_UDATA.items())
557
556
  def test_parse_european_frequencies(self, freq, expected):
558
557
  assert frequency_from_rdf(freq) == expected
559
558
 
560
- @pytest.mark.parametrize("freq,expected", EU_RDF_REQUENCIES.items())
559
+ @pytest.mark.parametrize("freq,expected", EUFREQ_TERM_TO_UDATA.items())
561
560
  def test_parse_european_frequencies_as_resource(self, freq, expected):
562
561
  g = Graph()
563
562
  resource = RdfResource(g, freq)
564
563
  assert frequency_from_rdf(resource) == expected
565
564
 
566
- @pytest.mark.parametrize("freq,expected", EU_RDF_REQUENCIES.items())
565
+ @pytest.mark.parametrize("freq,expected", EUFREQ_TERM_TO_UDATA.items())
567
566
  def test_parse_european_frequencies_as_url(self, freq, expected):
568
567
  assert frequency_from_rdf(str(freq)) == expected
569
568