udata 10.8.1.dev36703__py2.py3-none-any.whl → 10.8.2__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.

Potentially problematic release.


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

Files changed (79) hide show
  1. udata/__init__.py +1 -1
  2. udata/app.py +0 -2
  3. udata/commands/db.py +22 -9
  4. udata/core/dataset/models.py +5 -3
  5. udata/core/discussions/api.py +2 -2
  6. udata/core/jobs/api.py +3 -3
  7. udata/core/metrics/helpers.py +10 -0
  8. udata/core/metrics/tasks.py +144 -1
  9. udata/core/organization/api.py +2 -2
  10. udata/core/post/api.py +1 -1
  11. udata/core/user/api.py +1 -1
  12. udata/features/identicon/api.py +1 -1
  13. udata/harvest/actions.py +24 -28
  14. udata/harvest/api.py +28 -36
  15. udata/harvest/backends/ckan/__init__.py +3 -0
  16. udata/harvest/backends/ckan/harvesters.py +274 -0
  17. udata/harvest/backends/ckan/schemas/__init__.py +0 -0
  18. udata/harvest/backends/ckan/schemas/ckan.py +86 -0
  19. udata/harvest/backends/ckan/schemas/dkan.py +98 -0
  20. udata/harvest/commands.py +7 -7
  21. udata/harvest/tasks.py +1 -1
  22. udata/harvest/tests/ckan/conftest.py +67 -0
  23. udata/harvest/tests/ckan/data/dkan-french-w-license.json +226 -0
  24. udata/harvest/tests/ckan/test_ckan_backend.py +697 -0
  25. udata/harvest/tests/ckan/test_ckan_backend_errors.py +140 -0
  26. udata/harvest/tests/ckan/test_ckan_backend_filters.py +130 -0
  27. udata/harvest/tests/ckan/test_dkan_backend.py +68 -0
  28. udata/harvest/tests/test_actions.py +27 -32
  29. udata/harvest/tests/test_api.py +23 -18
  30. udata/harvest/tests/test_dcat_backend.py +29 -29
  31. udata/migrations/2025-07-30-purge-old-harvest-dynamic-fields.py +29 -0
  32. udata/mongo/slug_fields.py +1 -1
  33. udata/routing.py +6 -0
  34. udata/static/chunks/{11.b6f741fcc366abfad9c4.js → 11.51d706fb9521c16976bc.js} +3 -3
  35. udata/static/chunks/{11.b6f741fcc366abfad9c4.js.map → 11.51d706fb9521c16976bc.js.map} +1 -1
  36. udata/static/chunks/{13.2d06442dd9a05d9777b5.js → 13.39e106d56f794ebd06a0.js} +2 -2
  37. udata/static/chunks/{13.2d06442dd9a05d9777b5.js.map → 13.39e106d56f794ebd06a0.js.map} +1 -1
  38. udata/static/chunks/{17.e8e4caaad5cb0cc0bacc.js → 17.70cbb4a91b002338007e.js} +2 -2
  39. udata/static/chunks/{17.e8e4caaad5cb0cc0bacc.js.map → 17.70cbb4a91b002338007e.js.map} +1 -1
  40. udata/static/chunks/{19.f03a102365af4315f9db.js → 19.a348a5fff8fe2801e52a.js} +3 -3
  41. udata/static/chunks/{19.f03a102365af4315f9db.js.map → 19.a348a5fff8fe2801e52a.js.map} +1 -1
  42. udata/static/chunks/{5.0fa1408dae4e76b87b2e.js → 5.343ca020a2d38cec1a14.js} +3 -3
  43. udata/static/chunks/{5.0fa1408dae4e76b87b2e.js.map → 5.343ca020a2d38cec1a14.js.map} +1 -1
  44. udata/static/chunks/{6.d663709d877baa44a71e.js → 6.a3b07de9dd2ca2d24e85.js} +3 -3
  45. udata/static/chunks/{6.d663709d877baa44a71e.js.map → 6.a3b07de9dd2ca2d24e85.js.map} +1 -1
  46. udata/static/chunks/{8.778091d55cd8ea39af6b.js → 8.462bb3029de008497675.js} +2 -2
  47. udata/static/chunks/{8.778091d55cd8ea39af6b.js.map → 8.462bb3029de008497675.js.map} +1 -1
  48. udata/static/common.js +1 -1
  49. udata/static/common.js.map +1 -1
  50. udata/tests/api/test_datasets_api.py +0 -46
  51. udata/tests/api/test_organizations_api.py +5 -0
  52. udata/tests/cli/test_db_cli.py +12 -0
  53. udata/tests/dataset/test_dataset_model.py +0 -16
  54. udata/tests/metrics/__init__.py +0 -0
  55. udata/tests/metrics/conftest.py +15 -0
  56. udata/tests/metrics/helpers.py +58 -0
  57. udata/tests/metrics/test_metrics.py +67 -0
  58. udata/tests/metrics/test_tasks.py +171 -0
  59. udata/translations/ar/LC_MESSAGES/udata.mo +0 -0
  60. udata/translations/ar/LC_MESSAGES/udata.po +72 -65
  61. udata/translations/de/LC_MESSAGES/udata.mo +0 -0
  62. udata/translations/de/LC_MESSAGES/udata.po +72 -65
  63. udata/translations/es/LC_MESSAGES/udata.mo +0 -0
  64. udata/translations/es/LC_MESSAGES/udata.po +72 -65
  65. udata/translations/fr/LC_MESSAGES/udata.mo +0 -0
  66. udata/translations/fr/LC_MESSAGES/udata.po +72 -65
  67. udata/translations/it/LC_MESSAGES/udata.mo +0 -0
  68. udata/translations/it/LC_MESSAGES/udata.po +72 -65
  69. udata/translations/pt/LC_MESSAGES/udata.mo +0 -0
  70. udata/translations/pt/LC_MESSAGES/udata.po +72 -65
  71. udata/translations/sr/LC_MESSAGES/udata.mo +0 -0
  72. udata/translations/sr/LC_MESSAGES/udata.po +72 -65
  73. udata/translations/udata.pot +74 -70
  74. {udata-10.8.1.dev36703.dist-info → udata-10.8.2.dist-info}/METADATA +15 -2
  75. {udata-10.8.1.dev36703.dist-info → udata-10.8.2.dist-info}/RECORD +79 -62
  76. {udata-10.8.1.dev36703.dist-info → udata-10.8.2.dist-info}/entry_points.txt +2 -0
  77. {udata-10.8.1.dev36703.dist-info → udata-10.8.2.dist-info}/LICENSE +0 -0
  78. {udata-10.8.1.dev36703.dist-info → udata-10.8.2.dist-info}/WHEEL +0 -0
  79. {udata-10.8.1.dev36703.dist-info → udata-10.8.2.dist-info}/top_level.txt +0 -0
@@ -2,8 +2,8 @@ msgid ""
2
2
  msgstr ""
3
3
  "Project-Id-Version: udata\n"
4
4
  "Report-Msgid-Bugs-To: i18n@opendata.team\n"
5
- "POT-Creation-Date: 2025-06-23 10:12+0200\n"
6
- "PO-Revision-Date: 2025-06-23 12:56\n"
5
+ "POT-Creation-Date: 2025-07-28 16:59+0200\n"
6
+ "PO-Revision-Date: 2025-07-28 15:36\n"
7
7
  "Last-Translator: Open Data Team <i18n@opendata.team>\n"
8
8
  "Language: fr\n"
9
9
  "Language-Team: French\n"
@@ -18,74 +18,74 @@ msgstr ""
18
18
  "X-Crowdin-File: /master/udata/translations/udata.pot\n"
19
19
  "X-Crowdin-File-ID: 6\n"
20
20
 
21
- #: udata/settings.py:109
21
+ #: udata/settings.py:111
22
22
  msgid "Welcome"
23
23
  msgstr "Bienvenue"
24
24
 
25
- #: udata/settings.py:110
25
+ #: udata/settings.py:112
26
26
  msgid "Please confirm your email"
27
27
  msgstr "Veuillez confirmer votre adresse e-mail"
28
28
 
29
- #: udata/settings.py:111
29
+ #: udata/settings.py:113
30
30
  msgid "Login instructions"
31
31
  msgstr "Instructions de connexion"
32
32
 
33
- #: udata/settings.py:112
33
+ #: udata/settings.py:114
34
34
  msgid "Your password has been reset"
35
35
  msgstr "Votre mot de passe a été réinitialisé"
36
36
 
37
- #: udata/settings.py:113
37
+ #: udata/settings.py:115
38
38
  msgid "Your password has been changed"
39
39
  msgstr "Votre mot de passe a été modifié"
40
40
 
41
- #: udata/settings.py:114
41
+ #: udata/settings.py:116
42
42
  msgid "Password reset instructions"
43
43
  msgstr "Instructions de réinitialisation du mot de passe"
44
44
 
45
- #: udata/settings.py:509
45
+ #: udata/settings.py:513
46
46
  msgid "This dataset has been archived"
47
47
  msgstr "Ce jeu de données a été archivé"
48
48
 
49
- #: udata/uris.py:53
49
+ #: udata/uris.py:55
50
50
  #, python-brace-format
51
51
  msgid "Invalid URL \"{url}\": {reason}"
52
52
  msgstr "URL invalide \"{url}\" : {reason}"
53
53
 
54
- #: udata/tests/api/test_datasets_api.py:1113 udata/tests/test_model.py:403
55
- #: udata/uris.py:55
54
+ #: udata/tests/api/test_datasets_api.py:1129 udata/tests/test_model.py:403
55
+ #: udata/uris.py:57
56
56
  #, python-brace-format
57
57
  msgid "Invalid URL \"{url}\""
58
58
  msgstr "URL invalide \"{url}\""
59
59
 
60
- #: udata/uris.py:104
60
+ #: udata/uris.py:125
61
61
  #, python-brace-format
62
62
  msgid "Invalid scheme {0}, allowed schemes: {1}"
63
63
  msgstr "Schéma invalide {0}, schémas autorisés : {1}"
64
64
 
65
- #: udata/uris.py:107
65
+ #: udata/uris.py:128
66
66
  msgid "Credentials in URL are not allowed"
67
67
  msgstr "Les identifiants dans l'URL ne sont pas autorisés"
68
68
 
69
- #: udata/uris.py:111
69
+ #: udata/uris.py:132
70
70
  #, python-brace-format
71
71
  msgid "Invalid TLD {0}"
72
72
  msgstr "Domaine invalide {0}"
73
73
 
74
- #: udata/uris.py:120
74
+ #: udata/uris.py:141
75
75
  #, python-brace-format
76
76
  msgid "{0} is a multicast IP"
77
77
  msgstr "{0} est une IP multicast"
78
78
 
79
- #: udata/uris.py:122
79
+ #: udata/uris.py:143
80
80
  #, python-brace-format
81
81
  msgid "{0} is a mask IP"
82
82
  msgstr "{0} est une IP de masque"
83
83
 
84
- #: udata/uris.py:126
84
+ #: udata/uris.py:147
85
85
  msgid "is a local URL"
86
86
  msgstr "est une URL locale"
87
87
 
88
- #: udata/tests/test_model.py:421 udata/uris.py:133
88
+ #: udata/tests/test_model.py:421 udata/uris.py:154
89
89
  msgid "is a private URL"
90
90
  msgstr "est une URL privée"
91
91
 
@@ -169,24 +169,10 @@ msgstr "Le mot de passe doit contenir des majuscules"
169
169
  msgid "Password must contain symbols"
170
170
  msgstr "Le mot de passe doit contenir des caractères spéciaux"
171
171
 
172
- #: udata/auth/views.py:51
172
+ #: udata/auth/views.py:49
173
173
  msgid "Confirm change of email instructions"
174
174
  msgstr "Instructions pour confirmer le changement d'email"
175
175
 
176
- #: udata/auth/views.py:85
177
- #, python-brace-format
178
- msgid "You did not confirm your change of email within {email_within}. New instructions to confirm your change of email have been sent to {new_email}."
179
- msgstr "Vous n'avez pas confirmé le changement d'adresse email en moins de {email_within}. De nouvelles instructions pour confirmer votre changement d'email ont été envoyées à {new_email}."
180
-
181
- #: udata/auth/views.py:98
182
- msgid "Thank you. Your change of email has been confirmed."
183
- msgstr "Merci. Votre changement d'email a été confirmé."
184
-
185
- #: udata/auth/views.py:115
186
- #, python-brace-format
187
- msgid "Thank you. Confirmation instructions for changing your email have been sent to {new_email}."
188
- msgstr "Merci. Les instructions de confirmation pour changer votre adresse email ont été envoyées à {new_email}."
189
-
190
176
  #: udata/commands/init.py:32
191
177
  msgid "Do you want to create a superadmin user?"
192
178
  msgstr "Souhaitez-vous créer un super utilisateur ?"
@@ -229,6 +215,10 @@ msgstr "Type"
229
215
  msgid "Kind of badge (certified, etc)"
230
216
  msgstr "Type de badge (certifié, etc)"
231
217
 
218
+ #: udata/core/contact_point/api.py:62
219
+ msgid "An existing contact point already exists with these informations."
220
+ msgstr "Un point de contact existe déjà avec ces informations."
221
+
232
222
  #: udata/core/contact_point/forms.py:12 udata/core/jobs/forms.py:27
233
223
  #: udata/core/organization/forms.py:46 udata/core/post/forms.py:15
234
224
  #: udata/core/topic/forms.py:16 udata/harvest/forms.py:78
@@ -271,7 +261,7 @@ msgstr "Créateur"
271
261
  msgid "Publisher"
272
262
  msgstr "Éditeur"
273
263
 
274
- #: udata/core/contact_point/models.py:26 udata/tests/api/test_contact_points.py:59
264
+ #: udata/core/contact_point/models.py:26 udata/tests/api/test_contact_points.py:142
275
265
  msgid "At least an email or a contact form is required for a contact point"
276
266
  msgstr "Au moins un e-mail ou un formulaire de contact est requis pour un point de contact"
277
267
 
@@ -291,20 +281,20 @@ msgstr "a supprimé une API"
291
281
  msgid "Latest APIs"
292
282
  msgstr "Dernières APIs"
293
283
 
294
- #: udata/core/dataservices/models.py:128
284
+ #: udata/core/dataservices/models.py:129
295
285
  msgid "You can only set one condition for a given access audience role"
296
286
  msgstr "Vous ne pouvez définir qu'une seule condition pour une audience donnée"
297
287
 
298
- #: udata/core/dataservices/models.py:158
288
+ #: udata/core/dataservices/models.py:159
299
289
  msgid "dataservice"
300
290
  msgstr "API"
301
291
 
302
- #: udata/core/dataservices/models.py:240 udata/core/dataset/models.py:585
292
+ #: udata/core/dataservices/models.py:241 udata/core/dataset/models.py:589
303
293
  #: udata/mongo/datetime_fields.py:60
304
294
  msgid "Creation date"
305
295
  msgstr "Date de création"
306
296
 
307
- #: udata/core/dataservices/models.py:246 udata/core/dataset/models.py:590
297
+ #: udata/core/dataservices/models.py:247 udata/core/dataset/models.py:594
308
298
  #: udata/mongo/datetime_fields.py:66
309
299
  msgid "Last modification date"
310
300
  msgstr "Date de dernière modification"
@@ -543,7 +533,7 @@ msgstr "La taille du fichier en octets"
543
533
  msgid "Related dataset"
544
534
  msgstr "Jeu de données concerné"
545
535
 
546
- #: udata/core/dataset/forms.py:138 udata/tests/api/test_datasets_api.py:1025
536
+ #: udata/core/dataset/forms.py:138 udata/tests/api/test_datasets_api.py:1041
547
537
  msgid "Wrong contact point id or contact point ownership mismatch"
548
538
  msgstr "Mauvais ID de point de contact ou incompatibilité de possession du point de contact"
549
539
 
@@ -617,32 +607,37 @@ msgstr "Données pivot"
617
607
  msgid "A schema must contains a name or an URL when a version is provided."
618
608
  msgstr "Un schéma doit contenir un nom ou une URL lorsqu'une version est fournie."
619
609
 
620
- #: udata/core/dataset/models.py:171 udata/tests/api/test_datasets_api.py:1121
621
- #: udata/tests/api/test_datasets_api.py:1132
610
+ #: udata/core/dataset/models.py:171 udata/tests/api/test_datasets_api.py:1137
611
+ #: udata/tests/api/test_datasets_api.py:1148
622
612
  #, python-brace-format
623
613
  msgid "Schema name \"{schema}\" is not an allowed value. Allowed values: {values}"
624
614
  msgstr "Le nom du schéma \"{schema}\" n'est pas une valeur autorisée. Valeurs autorisées : {values}"
625
615
 
626
- #: udata/core/dataset/models.py:190 udata/tests/api/test_datasets_api.py:1144
616
+ #: udata/core/dataset/models.py:190 udata/tests/api/test_datasets_api.py:1160
627
617
  #, python-brace-format
628
618
  msgid "Version \"{version}\" is not an allowed value for the schema \"{name}\". Allowed versions: {values}"
629
619
  msgstr "La version \"{version}\" n'est pas une valeur autorisée pour le schéma \"{name}\". Versions autorisées : {values}"
630
620
 
631
- #: udata/core/dataset/models.py:469 udata/core/dataset/rdf.py:603
632
- #: udata/tests/dataset/test_dataset_rdf.py:687
633
- #: udata/tests/dataset/test_dataset_rdf.py:700
621
+ #: udata/core/dataset/models.py:467 udata/core/dataset/rdf.py:567
622
+ #: udata/tests/dataset/test_dataset_rdf.py:709
623
+ #: udata/tests/dataset/test_dataset_rdf.py:722
634
624
  msgid "Nameless resource"
635
625
  msgstr "Ressource sans nom"
636
626
 
637
- #: udata/core/dataset/models.py:564
627
+ #: udata/core/dataset/models.py:568
638
628
  msgid "Future date of update"
639
629
  msgstr "Future date de mise à jour"
640
630
 
641
- #: udata/core/dataset/models.py:640
631
+ #: udata/core/dataset/models.py:600
632
+ msgid "Last update of the dataset resources"
633
+ msgstr "Dernière mise à jour des ressources de ce jeu de données"
634
+
635
+ #: udata/core/dataset/models.py:653
642
636
  msgid "dataset"
643
637
  msgstr "jeu de données"
644
638
 
645
- #: udata/core/dataset/rdf.py:601 udata/tests/dataset/test_dataset_rdf.py:674
639
+ #: udata/core/dataset/rdf.py:565 udata/tests/dataset/test_dataset_rdf.py:679
640
+ #: udata/tests/dataset/test_dataset_rdf.py:696
646
641
  #, python-brace-format
647
642
  msgid "{format} resource"
648
643
  msgstr "Ressource {format}"
@@ -725,17 +720,17 @@ msgid "Refused"
725
720
  msgstr "Refusée"
726
721
 
727
722
  #: udata/core/organization/forms.py:25
728
- #: udata/tests/api/test_organizations_api.py:137
723
+ #: udata/tests/api/test_organizations_api.py:159
729
724
  msgid "A siret number is made of 14 digits"
730
725
  msgstr "Un numéro siret est composé de 14 chiffres"
731
726
 
732
727
  #: udata/core/organization/forms.py:36
733
- #: udata/tests/api/test_organizations_api.py:149
728
+ #: udata/tests/api/test_organizations_api.py:171
734
729
  msgid "A siret number is only made of digits"
735
730
  msgstr "Un numéro siret est composé uniquement de chiffres"
736
731
 
737
732
  #: udata/core/organization/forms.py:39
738
- #: udata/tests/api/test_organizations_api.py:143
733
+ #: udata/tests/api/test_organizations_api.py:165
739
734
  msgid "Invalid Siret number"
740
735
  msgstr "Numéro siret invalide"
741
736
 
@@ -767,23 +762,23 @@ msgstr "Numéro d'identification d'entreprise"
767
762
  msgid "Business identification number"
768
763
  msgstr "Numéro d'identification d'entreprise"
769
764
 
770
- #: udata/core/organization/models.py:37
765
+ #: udata/core/organization/models.py:38
771
766
  msgid "Public Service"
772
767
  msgstr "Service Public"
773
768
 
774
- #: udata/core/organization/models.py:38
769
+ #: udata/core/organization/models.py:39
775
770
  msgid "Certified"
776
771
  msgstr "Certifié"
777
772
 
778
- #: udata/core/organization/models.py:39
773
+ #: udata/core/organization/models.py:40
779
774
  msgid "Association"
780
775
  msgstr "Association"
781
776
 
782
- #: udata/core/organization/models.py:40
777
+ #: udata/core/organization/models.py:41
783
778
  msgid "Company"
784
779
  msgstr "Entreprise"
785
780
 
786
- #: udata/core/organization/models.py:41
781
+ #: udata/core/organization/models.py:42
787
782
  msgid "Local authority"
788
783
  msgstr "Collectivité territoriale"
789
784
 
@@ -873,7 +868,7 @@ msgstr "type du contenu"
873
868
  msgid "Specify your body type (HTML or markdown)"
874
869
  msgstr "Spécifiez votre type de contenu (HTML ou markdown)"
875
870
 
876
- #: udata/core/post/models.py:54
871
+ #: udata/core/post/models.py:55
877
872
  msgid "post"
878
873
  msgstr "article"
879
874
 
@@ -1001,11 +996,11 @@ msgstr "Droit et justice"
1001
996
  msgid "Open data tools"
1002
997
  msgstr "Outils open data"
1003
998
 
1004
- #: udata/core/reuse/models.py:38
999
+ #: udata/core/reuse/models.py:39
1005
1000
  msgid "This URL is already registered"
1006
1001
  msgstr "Cette URL est déjà enregistrée"
1007
1002
 
1008
- #: udata/core/reuse/models.py:183
1003
+ #: udata/core/reuse/models.py:185
1009
1004
  msgid "reuse"
1010
1005
  msgstr "réutilisation"
1011
1006
 
@@ -1170,7 +1165,7 @@ msgstr "À propos"
1170
1165
  msgid "Roles"
1171
1166
  msgstr "Rôles"
1172
1167
 
1173
- #: udata/core/user/models.py:304 udata/tests/api/test_me_api.py:297
1168
+ #: udata/core/user/models.py:298 udata/tests/api/test_me_api.py:297
1174
1169
  msgid "Account deletion"
1175
1170
  msgstr "Suppression de compte"
1176
1171
 
@@ -1330,6 +1325,22 @@ msgstr "Préfixe d'URL distante"
1330
1325
  msgid "A prefix used to build the remote URL of the harvested items."
1331
1326
  msgstr "Un préfixe utilisé pour construire l'URL distante des éléments récoltés."
1332
1327
 
1328
+ #: udata/harvest/backends/ckan/harvesters.py:35
1329
+ msgid "Organization"
1330
+ msgstr "Organisation"
1331
+
1332
+ #: udata/harvest/backends/ckan/harvesters.py:35
1333
+ msgid "A CKAN Organization name"
1334
+ msgstr "Un nom d'organisation CKAN"
1335
+
1336
+ #: udata/harvest/backends/ckan/harvesters.py:36
1337
+ msgid "Tag"
1338
+ msgstr "Mot-clé"
1339
+
1340
+ #: udata/harvest/backends/ckan/harvesters.py:36
1341
+ msgid "A CKAN tag name"
1342
+ msgstr "Un nom de mot-clé CKAN"
1343
+
1333
1344
  #: udata/templates/admin.html:7
1334
1345
  msgid "Admin"
1335
1346
  msgstr "Admin"
@@ -1579,10 +1590,6 @@ msgstr "Une nouvelle réutilisation de votre jeu de données %(dataset)s a été
1579
1590
  msgid "See the reuse"
1580
1591
  msgstr "Voir la réutilisation"
1581
1592
 
1582
- #: udata/templates/mail/new_reuse.html:37
1583
- msgid "See on the dataset page"
1584
- msgstr "Voir sur la page du jeu de données"
1585
-
1586
1593
  #: udata/templates/mail/test.html:4
1587
1594
  msgid "This is a test mail"
1588
1595
  msgstr "Ceci est un mail de test"
Binary file