udata 14.4.1.dev7__py3-none-any.whl → 14.5.1.dev6__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 (45) hide show
  1. udata/api/__init__.py +2 -0
  2. udata/auth/views.py +7 -3
  3. udata/commands/dcat.py +1 -1
  4. udata/core/dataservices/api.py +8 -1
  5. udata/core/dataservices/apiv2.py +2 -5
  6. udata/core/dataservices/models.py +4 -1
  7. udata/core/dataservices/rdf.py +2 -1
  8. udata/core/dataservices/tasks.py +6 -2
  9. udata/core/dataset/api.py +8 -0
  10. udata/core/dataset/models.py +4 -4
  11. udata/core/dataset/rdf.py +8 -2
  12. udata/core/dataset/tasks.py +6 -2
  13. udata/core/discussions/api.py +15 -1
  14. udata/core/discussions/models.py +5 -0
  15. udata/core/legal/__init__.py +0 -0
  16. udata/core/legal/mails.py +128 -0
  17. udata/core/organization/api.py +8 -0
  18. udata/core/organization/apiv2.py +2 -3
  19. udata/core/organization/models.py +6 -1
  20. udata/core/reuse/api.py +8 -0
  21. udata/core/reuse/apiv2.py +2 -5
  22. udata/core/topic/models.py +8 -2
  23. udata/core/user/api.py +10 -3
  24. udata/core/user/models.py +7 -1
  25. udata/flask_mongoengine/pagination.py +1 -1
  26. udata/harvest/backends/dcat.py +4 -1
  27. udata/harvest/tests/test_dcat_backend.py +24 -0
  28. udata/mail.py +14 -0
  29. udata/rdf.py +13 -4
  30. udata/settings.py +4 -0
  31. udata/tests/api/test_datasets_api.py +6 -0
  32. udata/tests/apiv2/test_search.py +30 -0
  33. udata/tests/dataservice/test_dataservice_tasks.py +29 -0
  34. udata/tests/dataset/test_dataset_tasks.py +25 -0
  35. udata/tests/frontend/test_auth.py +34 -0
  36. udata/tests/helpers.py +6 -0
  37. udata/tests/search/test_search_integration.py +33 -0
  38. udata/tests/test_api_fields.py +10 -0
  39. udata/tests/test_legal_mails.py +359 -0
  40. {udata-14.4.1.dev7.dist-info → udata-14.5.1.dev6.dist-info}/METADATA +2 -2
  41. {udata-14.4.1.dev7.dist-info → udata-14.5.1.dev6.dist-info}/RECORD +45 -40
  42. {udata-14.4.1.dev7.dist-info → udata-14.5.1.dev6.dist-info}/WHEEL +0 -0
  43. {udata-14.4.1.dev7.dist-info → udata-14.5.1.dev6.dist-info}/entry_points.txt +0 -0
  44. {udata-14.4.1.dev7.dist-info → udata-14.5.1.dev6.dist-info}/licenses/LICENSE +0 -0
  45. {udata-14.4.1.dev7.dist-info → udata-14.5.1.dev6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,359 @@
1
+ import pytest
2
+ from flask import url_for
3
+
4
+ from udata.core.dataservices.factories import DataserviceFactory
5
+ from udata.core.dataset.factories import DatasetFactory
6
+ from udata.core.discussions.factories import DiscussionFactory, MessageDiscussionFactory
7
+ from udata.core.organization.factories import OrganizationFactory
8
+ from udata.core.reuse.factories import ReuseFactory
9
+ from udata.core.user.factories import AdminFactory, UserFactory
10
+ from udata.tests.api import APITestCase
11
+ from udata.tests.helpers import capture_mails
12
+
13
+
14
+ class AdminMailsOnDeleteTest(APITestCase):
15
+ """Test admin mails are sent on delete when send_legal_notice=True and user is sysadmin"""
16
+
17
+ modules = []
18
+
19
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
20
+ def test_dataset_delete_with_mail_as_admin(self):
21
+ """Admin deleting dataset with send_legal_notice=True should send email to owner"""
22
+ self.login(AdminFactory())
23
+ owner = UserFactory()
24
+ dataset = DatasetFactory(owner=owner)
25
+
26
+ with capture_mails() as mails:
27
+ response = self.delete(
28
+ url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true"
29
+ )
30
+
31
+ self.assertStatus(response, 204)
32
+ assert len(mails) == 1
33
+ assert mails[0].recipients[0] == owner.email
34
+ assert "deletion" in mails[0].subject.lower()
35
+
36
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
37
+ def test_dataset_delete_without_mail_as_admin(self):
38
+ """Admin deleting dataset without send_mail should not send email"""
39
+ self.login(AdminFactory())
40
+ owner = UserFactory()
41
+ dataset = DatasetFactory(owner=owner)
42
+
43
+ with capture_mails() as mails:
44
+ response = self.delete(url_for("api.dataset", dataset=dataset))
45
+
46
+ self.assertStatus(response, 204)
47
+ assert len(mails) == 0
48
+
49
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
50
+ def test_dataset_delete_with_mail_as_non_admin(self):
51
+ """Non-admin deleting their dataset with send_legal_notice=True should not send email"""
52
+ owner = self.login()
53
+ dataset = DatasetFactory(owner=owner)
54
+
55
+ with capture_mails() as mails:
56
+ response = self.delete(
57
+ url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true"
58
+ )
59
+
60
+ self.assertStatus(response, 204)
61
+ assert len(mails) == 0
62
+
63
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
64
+ def test_dataset_delete_with_org_owner_sends_to_admins(self):
65
+ """Deleting org-owned dataset should send email to org admins"""
66
+ self.login(AdminFactory())
67
+ org_admin = UserFactory()
68
+ org = OrganizationFactory(members=[{"user": org_admin, "role": "admin"}])
69
+ dataset = DatasetFactory(organization=org)
70
+
71
+ with capture_mails() as mails:
72
+ response = self.delete(
73
+ url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true"
74
+ )
75
+
76
+ self.assertStatus(response, 204)
77
+ assert len(mails) == 1
78
+ assert mails[0].recipients[0] == org_admin.email
79
+
80
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
81
+ def test_reuse_delete_with_mail_as_admin(self):
82
+ """Admin deleting reuse with send_legal_notice=True should send email to owner"""
83
+ self.login(AdminFactory())
84
+ owner = UserFactory()
85
+ reuse = ReuseFactory(owner=owner)
86
+
87
+ with capture_mails() as mails:
88
+ response = self.delete(url_for("api.reuse", reuse=reuse) + "?send_legal_notice=true")
89
+
90
+ self.assertStatus(response, 204)
91
+ assert len(mails) == 1
92
+ assert mails[0].recipients[0] == owner.email
93
+
94
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
95
+ def test_reuse_delete_without_mail_as_admin(self):
96
+ """Admin deleting reuse without send_mail should not send email"""
97
+ self.login(AdminFactory())
98
+ owner = UserFactory()
99
+ reuse = ReuseFactory(owner=owner)
100
+
101
+ with capture_mails() as mails:
102
+ response = self.delete(url_for("api.reuse", reuse=reuse))
103
+
104
+ self.assertStatus(response, 204)
105
+ assert len(mails) == 0
106
+
107
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
108
+ def test_dataservice_delete_with_mail_as_admin(self):
109
+ """Admin deleting dataservice with send_legal_notice=True should send email to owner"""
110
+ self.login(AdminFactory())
111
+ owner = UserFactory()
112
+ dataservice = DataserviceFactory(owner=owner)
113
+
114
+ with capture_mails() as mails:
115
+ response = self.delete(
116
+ url_for("api.dataservice", dataservice=dataservice) + "?send_legal_notice=true"
117
+ )
118
+
119
+ self.assertStatus(response, 204)
120
+ assert len(mails) == 1
121
+ assert mails[0].recipients[0] == owner.email
122
+
123
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
124
+ def test_organization_delete_with_mail_as_admin(self):
125
+ """Admin deleting organization with send_legal_notice=True should send email to org admins"""
126
+ self.login(AdminFactory())
127
+ org_admin = UserFactory()
128
+ org = OrganizationFactory(members=[{"user": org_admin, "role": "admin"}])
129
+
130
+ with capture_mails() as mails:
131
+ response = self.delete(url_for("api.organization", org=org) + "?send_legal_notice=true")
132
+
133
+ self.assertStatus(response, 204)
134
+ assert len(mails) == 1
135
+ assert mails[0].recipients[0] == org_admin.email
136
+
137
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
138
+ def test_user_delete_with_legal_notice_skips_simple_notification(self):
139
+ """Admin deleting user with send_legal_notice=True automatically skips simple notification"""
140
+ self.login(AdminFactory())
141
+ user_to_delete = UserFactory()
142
+
143
+ with capture_mails() as mails:
144
+ response = self.delete(
145
+ url_for("api.user", user=user_to_delete) + "?send_legal_notice=true"
146
+ )
147
+
148
+ self.assertStatus(response, 204)
149
+ # Only legal notice mail, simple notification is automatically skipped
150
+ assert len(mails) == 1
151
+ assert mails[0].recipients[0] == user_to_delete.email
152
+ # Verify it's the legal notice (with appeal info), not the simple notification
153
+ assert "Deletion of your" in mails[0].subject # Legal notice subject
154
+ assert "contest this decision" in mails[0].body # Legal notice contains appeal info
155
+
156
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
157
+ def test_discussion_delete_with_mail_as_admin(self):
158
+ """Admin deleting discussion with send_legal_notice=True should send email to author"""
159
+ self.login(AdminFactory())
160
+ author = UserFactory()
161
+ dataset = DatasetFactory()
162
+ discussion = DiscussionFactory(subject=dataset, user=author)
163
+
164
+ with capture_mails() as mails:
165
+ response = self.delete(
166
+ url_for("api.discussion", id=discussion.id) + "?send_legal_notice=true"
167
+ )
168
+
169
+ self.assertStatus(response, 204)
170
+ assert len(mails) == 1
171
+ assert mails[0].recipients[0] == author.email
172
+
173
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
174
+ def test_message_delete_with_mail_as_admin(self):
175
+ """Admin deleting message with send_legal_notice=True should send email to author"""
176
+ self.login(AdminFactory())
177
+ author = UserFactory()
178
+ message_author = UserFactory()
179
+ dataset = DatasetFactory()
180
+ discussion = DiscussionFactory(
181
+ subject=dataset,
182
+ user=author,
183
+ discussion=[
184
+ MessageDiscussionFactory(posted_by=author),
185
+ MessageDiscussionFactory(posted_by=message_author),
186
+ ],
187
+ )
188
+
189
+ with capture_mails() as mails:
190
+ response = self.delete(
191
+ url_for("api.discussion_comment", id=discussion.id, cidx=1)
192
+ + "?send_legal_notice=true"
193
+ )
194
+
195
+ self.assertStatus(response, 204)
196
+ assert len(mails) == 1
197
+ assert mails[0].recipients[0] == message_author.email
198
+
199
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
200
+ def test_dataset_delete_without_owner_no_mail_sent(self):
201
+ """Deleting dataset without owner or organization should not send email"""
202
+ self.login(AdminFactory())
203
+ dataset = DatasetFactory(owner=None, organization=None)
204
+
205
+ with capture_mails() as mails:
206
+ response = self.delete(
207
+ url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true"
208
+ )
209
+
210
+ self.assertStatus(response, 204)
211
+ assert len(mails) == 0
212
+
213
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
214
+ def test_reuse_delete_without_owner_no_mail_sent(self):
215
+ """Deleting reuse without owner or organization should not send email"""
216
+ self.login(AdminFactory())
217
+ reuse = ReuseFactory(owner=None, organization=None)
218
+
219
+ with capture_mails() as mails:
220
+ response = self.delete(url_for("api.reuse", reuse=reuse) + "?send_legal_notice=true")
221
+
222
+ self.assertStatus(response, 204)
223
+ assert len(mails) == 0
224
+
225
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
226
+ def test_dataservice_delete_without_owner_no_mail_sent(self):
227
+ """Deleting dataservice without owner or organization should not send email"""
228
+ self.login(AdminFactory())
229
+ dataservice = DataserviceFactory(owner=None, organization=None)
230
+
231
+ with capture_mails() as mails:
232
+ response = self.delete(
233
+ url_for("api.dataservice", dataservice=dataservice) + "?send_legal_notice=true"
234
+ )
235
+
236
+ self.assertStatus(response, 204)
237
+ assert len(mails) == 0
238
+
239
+ @pytest.mark.options(DEFAULT_LANGUAGE="en")
240
+ def test_organization_delete_without_admins_no_mail_sent(self):
241
+ """Deleting organization without admin members should not send email"""
242
+ self.login(AdminFactory())
243
+ editor = UserFactory()
244
+ org = OrganizationFactory(members=[{"user": editor, "role": "editor"}])
245
+
246
+ with capture_mails() as mails:
247
+ response = self.delete(url_for("api.organization", org=org) + "?send_legal_notice=true")
248
+
249
+ self.assertStatus(response, 204)
250
+ assert len(mails) == 0
251
+
252
+
253
+ class MailContentVariantsTest(APITestCase):
254
+ """Test mail content varies based on settings"""
255
+
256
+ modules = []
257
+
258
+ @pytest.mark.options(
259
+ DEFAULT_LANGUAGE="en",
260
+ TERMS_OF_USE_URL="https://example.com/terms",
261
+ TERMS_OF_USE_DELETION_ARTICLE="5.1.2",
262
+ TELERECOURS_URL="https://telerecours.fr",
263
+ )
264
+ def test_mail_with_all_settings(self):
265
+ """Mail should contain terms of use reference and telerecours when all settings defined"""
266
+ self.login(AdminFactory())
267
+ owner = UserFactory()
268
+ dataset = DatasetFactory(owner=owner)
269
+
270
+ with capture_mails() as mails:
271
+ self.delete(url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true")
272
+
273
+ assert len(mails) == 1
274
+ body = mails[0].body
275
+ assert "Our terms of use specify" in body
276
+ assert "5.1.2" in body
277
+ assert "Télérecours" in body
278
+
279
+ @pytest.mark.options(
280
+ DEFAULT_LANGUAGE="en",
281
+ TERMS_OF_USE_DELETION_ARTICLE=None,
282
+ TELERECOURS_URL=None,
283
+ )
284
+ def test_mail_without_settings(self):
285
+ """Mail should use generic text when settings are not defined"""
286
+ self.login(AdminFactory())
287
+ owner = UserFactory()
288
+ dataset = DatasetFactory(owner=owner)
289
+
290
+ with capture_mails() as mails:
291
+ self.delete(url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true")
292
+
293
+ assert len(mails) == 1
294
+ body = mails[0].body
295
+ assert "Our terms of use specify" not in body
296
+ assert "Télérecours" not in body
297
+ assert "contacting us" in body
298
+
299
+ @pytest.mark.options(
300
+ DEFAULT_LANGUAGE="en",
301
+ TERMS_OF_USE_URL="https://example.com/terms",
302
+ TERMS_OF_USE_DELETION_ARTICLE="3.2",
303
+ TELERECOURS_URL=None,
304
+ )
305
+ def test_mail_with_terms_only(self):
306
+ """Mail should contain terms of use but generic appeal when only terms defined"""
307
+ self.login(AdminFactory())
308
+ owner = UserFactory()
309
+ dataset = DatasetFactory(owner=owner)
310
+
311
+ with capture_mails() as mails:
312
+ self.delete(url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true")
313
+
314
+ assert len(mails) == 1
315
+ body = mails[0].body
316
+ assert "Our terms of use specify" in body
317
+ assert "3.2" in body
318
+ assert "Télérecours" not in body
319
+ assert "contacting us" in body
320
+
321
+ @pytest.mark.options(
322
+ DEFAULT_LANGUAGE="en",
323
+ TERMS_OF_USE_DELETION_ARTICLE=None,
324
+ TELERECOURS_URL="https://telerecours.fr",
325
+ )
326
+ def test_mail_with_telerecours_only(self):
327
+ """Mail should contain telerecours but generic terms when only telerecours defined"""
328
+ self.login(AdminFactory())
329
+ owner = UserFactory()
330
+ dataset = DatasetFactory(owner=owner)
331
+
332
+ with capture_mails() as mails:
333
+ self.delete(url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true")
334
+
335
+ assert len(mails) == 1
336
+ body = mails[0].body
337
+ assert "Our terms of use specify" not in body
338
+ assert "Télérecours" in body
339
+ assert "contacting us" not in body
340
+
341
+ @pytest.mark.options(
342
+ DEFAULT_LANGUAGE="en",
343
+ TERMS_OF_USE_URL=None,
344
+ TERMS_OF_USE_DELETION_ARTICLE="5.1.2",
345
+ TELERECOURS_URL=None,
346
+ )
347
+ def test_mail_with_article_but_no_url(self):
348
+ """Mail should use generic terms when article is defined but URL is missing"""
349
+ self.login(AdminFactory())
350
+ owner = UserFactory()
351
+ dataset = DatasetFactory(owner=owner)
352
+
353
+ with capture_mails() as mails:
354
+ self.delete(url_for("api.dataset", dataset=dataset) + "?send_legal_notice=true")
355
+
356
+ assert len(mails) == 1
357
+ body = mails[0].body
358
+ assert "Our terms of use specify" not in body
359
+ assert "5.1.2" not in body
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: udata
3
- Version: 14.4.1.dev7
3
+ Version: 14.5.1.dev6
4
4
  Summary: Open data portal
5
5
  Author-email: Opendata Team <opendatateam@data.gouv.fr>
6
6
  Maintainer-email: Opendata Team <opendatateam@data.gouv.fr>
@@ -85,7 +85,7 @@ Requires-Dist: tzdata
85
85
  Requires-Dist: urlextract<2.0.0,>=1.9.0
86
86
  Requires-Dist: urllib3<3.0.0,>=2.0.0
87
87
  Requires-Dist: voluptuous<1.0.0,>=0.15.2
88
- Requires-Dist: werkzeug<4.0.0,>=3.0.0
88
+ Requires-Dist: werkzeug<3.1.4,>=3.0.0
89
89
  Requires-Dist: wtforms[email]<4.0.0,>=3.2.1
90
90
  Requires-Dist: wtforms-json<1.0.0,>=0.3.5
91
91
  Dynamic: license-file
@@ -5,11 +5,11 @@ udata/cors.py,sha256=7An9bsiNZk0PbNqDy8--ZJ0vmq1ubrtcfGB3DWAHBlA,3681
5
5
  udata/errors.py,sha256=E8W7b4PH7c5B85g_nsUMt8fHqMVpDFOZFkO6wMPl6bA,117
6
6
  udata/factories.py,sha256=MoklZnU8iwNL25dm3JsoXhoQs1PQWSVYL1WvcUBtJqM,492
7
7
  udata/i18n.py,sha256=R7WdU0EZslj5xEHdqbyQ4iOORGjiqcVvQFCnmQEkpHA,2602
8
- udata/mail.py,sha256=_kxDlsKZr3wLu16OqYSOIav-y3KDMUtv0CSOf_IdtQ4,3492
9
- udata/rdf.py,sha256=4DGtLvmuGXnwAZebpk28ZNl2IzsdvOQuTJTdN3u2_44,23351
8
+ udata/mail.py,sha256=-5OjGWqW7X5EuLLsJfhdqIrjlBGJ3T0V_wVLKc9OyPQ,3722
9
+ udata/rdf.py,sha256=pUD7VbmhHo9cgmBbaYUd142nmB0R7VKsMXTkZWJ62jY,23825
10
10
  udata/routing.py,sha256=3YQu9L81QYe4NxPSR_qyXe5WQLOgtm3sYKrkRxoxY-4,7741
11
11
  udata/sentry.py,sha256=j_6PSHV1id21KFX1XvpQR-Ur4d24310HgIq7MynEZ2Q,2887
12
- udata/settings.py,sha256=U8zAsQkKnxEkMR99n6N46Y7wxPMIS7yk7zQ6X8gqR_A,22393
12
+ udata/settings.py,sha256=tk9VyAxg-umX3QW8hfFRsdA683IHxrEOBV-lJOWScGg,22490
13
13
  udata/sitemap.py,sha256=oRRWoPI7ZsFFnUAOqGT1YuXFFKHBe8EcRnUCNHD7xjM,979
14
14
  udata/tags.py,sha256=8R2gJieQtHgj7ZWIckMCkQu39fqzEUehxlYRfSD6bYQ,631
15
15
  udata/tasks.py,sha256=1cK9HCtbFFbsOztW_3sr-9LDM3h7vKvSW1GaUnOTUnI,5208
@@ -18,7 +18,7 @@ udata/uris.py,sha256=YMIZv6ypIYfYGAeLUJuBt58fbkpJ6fSzdWDKCbAylKA,4391
18
18
  udata/utils.py,sha256=S8ViJSbQgzT3RYbcCW5JTkTjkI1hhifLinPXVuASvl4,13820
19
19
  udata/worker.py,sha256=K-Wafye5-uXP4kQlffRKws2J9YbJ6m6n2QjcVsY8Nsg,118
20
20
  udata/wsgi.py,sha256=MY8en9K9eDluvJYUxTdzqSDoYaDgCVZ69ZcUvxAvgqA,77
21
- udata/api/__init__.py,sha256=-It_El58MIQkV06KbNfc2RGeoknkGCBL6zNBgd0FAmo,11732
21
+ udata/api/__init__.py,sha256=y-ULl38jINI7RfdZezCZ544nIGiZo9_pgo3Zj4NKA8w,11854
22
22
  udata/api/commands.py,sha256=LJ4u-yhGij7QuH7OR92u3n7BEptqWMjDwMnG8pqdBxo,3523
23
23
  udata/api/errors.py,sha256=P_UigBf6HAL73LbXKULagmp5Cuw-H1Ms6LmXxOmFIeg,211
24
24
  udata/api/fields.py,sha256=w3qpMGntcOQa5bwFenZNJrnIoEZGZkEhRq0OwWFHsgc,3801
@@ -31,11 +31,11 @@ udata/auth/helpers.py,sha256=7Yr5k7ImdgqxVap4Bjq_ylTXmzq4NR0KgEOOhqSbaf4,267
31
31
  udata/auth/mails.py,sha256=-HbXbxSeertEfcpEo3FBG2JwZw-De3-annl-DiuS9PY,5101
32
32
  udata/auth/password_validation.py,sha256=ODVdEsiXbtq_8ws4Yf3hs5Sq7jz-IDa1RxAm_WPIJnA,1806
33
33
  udata/auth/proconnect.py,sha256=hsvQ71Hqy42NvwgYtcMniRXWax3Q7LX1INcmaS7gaIQ,5073
34
- udata/auth/views.py,sha256=1LfBR9Epm-epFOtcq1S8gCgTPnyLBd1LrTDwP_VSih4,7804
34
+ udata/auth/views.py,sha256=jM0HHWmAfZr6wAULNQbdrRxAX7HCMyLCCh6_uFxrLIQ,7912
35
35
  udata/commands/__init__.py,sha256=-jwfKRGqbJMG-NcVG6AMRhVx2yPnwhAt8dzHAeVvy0k,7231
36
36
  udata/commands/cache.py,sha256=bLdrf_fCWFYX9ULlL2ADsZRwijkI4pArsJxfx24OivM,341
37
37
  udata/commands/db.py,sha256=8Fe4f4qZwdq2hYaOx8pwIROqJo2FK2t4LFa5OjaPCRY,19823
38
- udata/commands/dcat.py,sha256=f6jT2AGZem-w1CaRH_ahfWB9A4oCDvjG13tPmBpeCqw,3910
38
+ udata/commands/dcat.py,sha256=h4FYUO1O_Dvx33SFkUnJTYHsTv0KDiNyuerXq6KuZHM,3923
39
39
  udata/commands/fixtures.py,sha256=Mo_Q0tARawiUK3ZidWlJLrO8uvqnSYcg_OeWMzCwkvk,11376
40
40
  udata/commands/images.py,sha256=0rVojLik5DYgJ6W4uNEfMP2g2QUU2V761tj3z6lo8no,2050
41
41
  udata/commands/info.py,sha256=U8s5CnSG9NTA0UeeVJrBuWdfYEh3AwHSyx4NZjs1zas,832
@@ -84,20 +84,20 @@ udata/core/contact_point/forms.py,sha256=oBe1agSJFyx2QRgYzPRg2A7qVscaBTaKG4V-AyI
84
84
  udata/core/contact_point/models.py,sha256=4GKbf0C1r1id35t4eQ3RcZIEfS_9kb6WW4QaXqejwQc,1161
85
85
  udata/core/dataservices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
86
  udata/core/dataservices/activities.py,sha256=wcYQCyYpKciCz99VqQqKti72a5Fyhc-AvDZBWdF0KUc,1763
87
- udata/core/dataservices/api.py,sha256=LLRfuWxNddc8xC-ZNPYLCoBuYvWNNsp-dSis36iIRr0,9937
88
- udata/core/dataservices/apiv2.py,sha256=-XfIjxx7LuzICtKvh1W8EbR8zWyrw13_nCKYiRgi98M,1312
87
+ udata/core/dataservices/api.py,sha256=u1aiwIwz9ypw8I6XT8gAbpN6M3qJGcVSK2UaFRJT5tg,10263
88
+ udata/core/dataservices/apiv2.py,sha256=FWkEfreOuyX7Krr604rQzSGLtBoVZrOR4nBEkYlhVIc,1231
89
89
  udata/core/dataservices/constants.py,sha256=PlfoLJv1rqRSUHbCe80vGkfTl9B0hUYgCxrop_e5JUY,45
90
90
  udata/core/dataservices/csv.py,sha256=HWI2JrN_Vuw0te9FHlJ6eyqcRcKHOKXuzg45D4Ti6F0,1106
91
91
  udata/core/dataservices/factories.py,sha256=pKVoArNSCIbvGA-cWUc7vr8TmjYsUvOXzzcuUB5JyF4,964
92
- udata/core/dataservices/models.py,sha256=NkUXrvI5qav5RLZTp0l7zQUM32orqVgPZveSVBaYGXc,12295
92
+ udata/core/dataservices/models.py,sha256=iRrAo3rO6fU_kE8K4-e69Y1YJWXC9I-Gfye_3yYW5gQ,12306
93
93
  udata/core/dataservices/permissions.py,sha256=98zM_R4v2ZtRubflB7ajaVQz-DVc-pZBMgtKUYy34oI,169
94
- udata/core/dataservices/rdf.py,sha256=7OZfWxfivrCTdaPd3Jw32V5ywYoOWwZ-8qMsBZcPTRw,8081
94
+ udata/core/dataservices/rdf.py,sha256=Xs5TAJ2sah0DFOk3pMGs-xoxLjKf53-5CWUyAp50sTE,8122
95
95
  udata/core/dataservices/search.py,sha256=9Ylg-veM6x1sv-xAugx-lHIHJSqiGAN60Ww8ZYikjzY,4708
96
- udata/core/dataservices/tasks.py,sha256=P3-9CS6oWC9xyOtJ7cBSWvcxfL8T-vXY6jOCFmwBA3M,2840
96
+ udata/core/dataservices/tasks.py,sha256=DgOsTjQMx3poI0DdLPlTysRVNhf9dYNg-Zc_ut2S2ec,3045
97
97
  udata/core/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
98
  udata/core/dataset/actions.py,sha256=mX6xox0PiMrbcAPZ3VZsI26rfM-ciYfEXxN6sqqImKA,1222
99
99
  udata/core/dataset/activities.py,sha256=eGxMUnC47YHxTgcls6igQ3qP7cYgwFtPfj0asCylGsI,3315
100
- udata/core/dataset/api.py,sha256=3zG1jKurzH9fjar1tPmUzjLj5pFTb-ZdDu1nBZMSFSM,35676
100
+ udata/core/dataset/api.py,sha256=07uiI9sF3ebGjMyNMFmbu0r-_NPt0B1zk7g9rTePBwc,35987
101
101
  udata/core/dataset/api_fields.py,sha256=tmC9zpsMUc3ZNsrYYRBbioGNo12YmTZ0lT3i14n7B0w,18591
102
102
  udata/core/dataset/apiv2.py,sha256=6nI_R2Uv-PUl3fyI3EPsW8Ppk5GiXvKSdA3HYondiW0,21576
103
103
  udata/core/dataset/commands.py,sha256=3mKSdJ-M7ggdG29AVn77C4ouZanbYoqkTaGQoBKOp3s,3471
@@ -108,25 +108,25 @@ udata/core/dataset/exceptions.py,sha256=uKiayLSpSzsnLvClObS6hOO0qXEqvURKN7_w8eim
108
108
  udata/core/dataset/factories.py,sha256=tb18axsk8Tx5iUIqWM9IELdt-2Ryp2UN0-iY4fdea4U,9059
109
109
  udata/core/dataset/forms.py,sha256=q345go8G6qN1_YTX1Uhpl7M2kqF_44KA91OnFMcOGYk,8207
110
110
  udata/core/dataset/metrics.py,sha256=s8Xs_rqRXfNWsErkiJTuRMG5o_cU5iSK8mUJFKVSc7w,1204
111
- udata/core/dataset/models.py,sha256=rHeYbWpmECLzy48NX8r6M_7kOXPr-VTYSoapZtUYTbQ,42241
111
+ udata/core/dataset/models.py,sha256=NY1h3aY-OQzp80ZR9LuEzg2aXWTHk0srpsAJd_Np5jI,42089
112
112
  udata/core/dataset/permissions.py,sha256=qZCo_wKRwm_hONKdAPhYcb4PqJj7qW4PBqH5WJ0FWB4,2199
113
113
  udata/core/dataset/preview.py,sha256=uFEpK-p5nIAlY8hVOMhd7mtkwFt6C_PQRMNxPvAyoo4,839
114
- udata/core/dataset/rdf.py,sha256=w3pY9kz2a8CqWJ-9cq1QTF5EFGFw1pZVv825V3zy8pQ,33028
114
+ udata/core/dataset/rdf.py,sha256=jEpp0wrCvpfpkzlNEr6yroLCChcPo9TCHIfbjoRnYPM,33088
115
115
  udata/core/dataset/recommendations.py,sha256=DlGSLU8D0nW6Ds1rjBav1WxC-0VW5yOCjkO5w-ltFcI,7171
116
116
  udata/core/dataset/search.py,sha256=UEYMPwj4kDkGlGaUmsYECh1c3_BjCt1RDcMLDGrV_dA,6019
117
117
  udata/core/dataset/signals.py,sha256=WN4sV-lJlNsRkhcnhoy0SYJvCoYmK_5QFYZd1u-h4gs,161
118
- udata/core/dataset/tasks.py,sha256=Rg-g9Nr_fHX2XXNrnvXesfbN4ychMU0I9s0lwFOXzXQ,11491
118
+ udata/core/dataset/tasks.py,sha256=RWVWbSdJevyJqzNCB0xKYdXMnCcU3XLlLN4bjw_VI1o,11688
119
119
  udata/core/dataset/transport.py,sha256=ihCXirY1dZjOfXKbf9HRCJTfIOc75rM1McwbeGjsW6A,1296
120
120
  udata/core/discussions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
121
  udata/core/discussions/actions.py,sha256=kjdBLDIeu0yWTSxQGgOpN1WoxUqbMygn4SiBk_S9T5I,1051
122
- udata/core/discussions/api.py,sha256=B4vkRSG10HgEP3bTrEZnIWKe1mwOwfgZyWcq2NixzQE,13261
122
+ udata/core/discussions/api.py,sha256=-fMnPzyqdcAeBM3JoLPaZLF7WRT8SNneUk1mfGuVLas,13822
123
123
  udata/core/discussions/constants.py,sha256=8crl2Lmkv9dmJe4KACM0JJcpoHePmGtmvI6ixfvukhc,277
124
124
  udata/core/discussions/csv.py,sha256=vIuMPJBrAOQmQ4P9SSY1wun0Av1qOE7i0TlQi-Vy7iU,772
125
125
  udata/core/discussions/factories.py,sha256=CgQaUmmyDu90XtyBsqXVa-TmZMrN7Dwuu1Cnr5wNrVc,350
126
126
  udata/core/discussions/forms.py,sha256=sR8tFBIBh-Rbx9VPzFzG1N54QY1y7UrdeboQ_60gXXQ,1265
127
127
  udata/core/discussions/mails.py,sha256=FOov-8LIpFyv3WbNi5ivEUUowudMVGsfPgEijON_R_U,2608
128
128
  udata/core/discussions/metrics.py,sha256=WMalLO9GEHXlqE2WbZX-HQUpvte6cRwuHuoL96QwWSg,354
129
- udata/core/discussions/models.py,sha256=KsHoR-lUP-uMDogDIuxeuh3lMq7LGIY-eRS31cTkKAo,6230
129
+ udata/core/discussions/models.py,sha256=o36lTljOOr7C0walpl0V9xYQZh2O4q_hxC1gIRN8hB8,6340
130
130
  udata/core/discussions/notifications.py,sha256=5MuoZDPmmvkloZ3i8I6TELgE1KXZ_cB9QiDerFBD9dM,1052
131
131
  udata/core/discussions/permissions.py,sha256=VY2_PEsazz1fBgCX9-K-_spRgxUoNY4HuNDShqZjw6E,1583
132
132
  udata/core/discussions/signals.py,sha256=tJ83RJIsBAny08Q6IDwehE6lDDRf6ynIFCl0WqnayoU,543
@@ -142,6 +142,8 @@ udata/core/jobs/api.py,sha256=Cml8mTEXFPw9SBd-1sYBH50YrVv4nvxo7R1o5VpPXE0,5959
142
142
  udata/core/jobs/commands.py,sha256=85P5hDPdKMJzV_xbobNT8nqEW71HchPjTUJ-1u5wddE,4402
143
143
  udata/core/jobs/forms.py,sha256=B-B6jXHZsYV-PWAkD8DLoOlh6trv4l1hGZ4HOPm-PD4,1495
144
144
  udata/core/jobs/models.py,sha256=xK8T3FCmhtERNbZmh1Tq_ZTO6vojM172tTc0oplNoQ0,1358
145
+ udata/core/legal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
+ udata/core/legal/mails.py,sha256=1Xlz9eXaiTN2cI0_Q8DBNDASVirKbjUrz2XC18m_n9w,5611
145
147
  udata/core/metrics/__init__.py,sha256=lNvQZS4j-PTfN7kYOwaIW3qgxH2eSMdFc2zSYVqxHP0,329
146
148
  udata/core/metrics/commands.py,sha256=JmEBsjmvQl0W32g4m_n7OdtB3zcAvcMCvlzJa0DzZJ4,6191
147
149
  udata/core/metrics/helpers.py,sha256=DRefxJfpePuDcWmV7b-gaNE6tjEcttQaWmKpYNBSECM,4370
@@ -150,9 +152,9 @@ udata/core/metrics/signals.py,sha256=9mdJW__gR2GJT3huBr6HN2SDhKYJRgNbW9dnh48cAnU
150
152
  udata/core/metrics/tasks.py,sha256=5hVSvBFF2-k_MZGn1XrzEWLgRp3TlrZJtPjX1Y_niS4,4963
151
153
  udata/core/organization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
154
  udata/core/organization/activities.py,sha256=Mw4-R8Q6G745IZnCDgrj7h2ax2crGYRhZtcewSK6_Ok,1213
153
- udata/core/organization/api.py,sha256=Mj0XRA2siF6IYg5_7Lj1RvJC8g66keAwnAl2MajEKAE,22613
155
+ udata/core/organization/api.py,sha256=RGyxe5LRqkyk5HzsXRB9r6z_YhGVqNeKkiaEgMaOvU8,22908
154
156
  udata/core/organization/api_fields.py,sha256=UlDYS62Wt1capSO0rYf6-m_rza3lCmpTuA93R-sV9w8,7776
155
- udata/core/organization/apiv2.py,sha256=fLMN5T7s8yF4u7c1WWHXMqQAlyH2OCSyAfmleiFlf7M,3037
157
+ udata/core/organization/apiv2.py,sha256=HVZmfO-Cw9hlMPcHKAC1HnSmPXeWpBz-hqWUDl2Bhs8,2983
156
158
  udata/core/organization/commands.py,sha256=DsRAtFDZvTciYNsUWumQWdn0jnNmKW-PwfIHUUZoBb8,1591
157
159
  udata/core/organization/constants.py,sha256=fncNtA-vFrRM22K1Wo6iYu9DQZjzknYxH6TIYfxM9kA,563
158
160
  udata/core/organization/csv.py,sha256=zdLeB4La-TeOEELg0WI3FryoQWnoAYit_DssInVSHRI,979
@@ -160,7 +162,7 @@ udata/core/organization/factories.py,sha256=g8ubBcz79xbjvpunZ02IDOakFg1KE6cXjNkE
160
162
  udata/core/organization/forms.py,sha256=tscDb1_yOpbTx3ahl8ttA7oDkX9jIyzLc4gOf6WbN3s,3552
161
163
  udata/core/organization/mails.py,sha256=JxVzsJe4hoFbohB5hmWY33BmqMg8Bz-nwYDvnvUzXW8,4944
162
164
  udata/core/organization/metrics.py,sha256=CEhkZLUufDyWi2XyizMoXkuddz7xDJvmdkPTweqfWyI,1144
163
- udata/core/organization/models.py,sha256=Mr3GKPFjzluXFVqi5hScH4jpeySVYbhf4QdhoaWz_T0,11262
165
+ udata/core/organization/models.py,sha256=6_HT7O5Fa1viiC2rv_bY3B8H3v5F-NoMcmCm1hi37Ag,11338
164
166
  udata/core/organization/notifications.py,sha256=bAtb-Of3KCAu30KBg0Y55qHJk9kx82HlMWSCYOfYyHM,3710
165
167
  udata/core/organization/permissions.py,sha256=hcnFuc8RkDesFSnq-ei4LV0ZUpRUf8zXyxRoXT_aLQc,1274
166
168
  udata/core/organization/rdf.py,sha256=KYJXTE5Yxhp3Cb7GZsRT1BY3Bd7rcRfwFSK9dWG2xQ4,1807
@@ -186,9 +188,9 @@ udata/core/reports/constants.py,sha256=LRZSX3unyqZeB4yQjK3ws_hGbJcXYk4bu1Rhnhi5D
186
188
  udata/core/reports/models.py,sha256=_Niab0hL4tzM4V1A1WdcPoVxRPvJ6TZFLQXV-cka-uE,3629
187
189
  udata/core/reuse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
190
  udata/core/reuse/activities.py,sha256=5D7cV-hGZnzHsp8hohZqqgK3RSGQpfAqJ_Wfq_AYfM8,1420
189
- udata/core/reuse/api.py,sha256=5-wd-xXlRli1tjKw0AMxqHIWNdgK7QsBWm6AGHNE3Ps,13476
191
+ udata/core/reuse/api.py,sha256=zRHYVkpceWwXyIKM7eMBz0VZAL0TMSdo7m-CicxbN5w,13779
190
192
  udata/core/reuse/api_fields.py,sha256=ccym6v9Ap68PlHZmIMMtHQFnEyV7Gbxrfdw0b6rj51A,1232
191
- udata/core/reuse/apiv2.py,sha256=mgvL1ZBts872zNSo0Wh3AkNAh2ldzP9yQkRY3WfzGPM,944
193
+ udata/core/reuse/apiv2.py,sha256=ixayPlYkCl67GxqFBHijSigjkzmkXuY-HX7X-_SH-3U,863
192
194
  udata/core/reuse/constants.py,sha256=JgDBrjOKSt9q0auv9rjzbGsch83H-Oi8YXAKeI5hO4o,1215
193
195
  udata/core/reuse/csv.py,sha256=c9t9nyAqjx-QNyeku6RpcC8kSdlQ12wxzXCJHUj6GBY,899
194
196
  udata/core/reuse/factories.py,sha256=GrQqYTIvwQrwkvJrbTr38-2faFW_PC99gn3yOVpgFec,850
@@ -245,13 +247,13 @@ udata/core/topic/api_fields.py,sha256=zMjoTSoe7-Q8F-i7Ry5EAUv-ds4Lzao3jfETZq-Vg0
245
247
  udata/core/topic/apiv2.py,sha256=WVyZDNew8m0qVFn9RLKW0SeLQHuUwWIcGAfomzua7sw,6449
246
248
  udata/core/topic/factories.py,sha256=Rhx12aTrYFZScu53IhYNP0zJKfiVZPba34ybZ7gGSwo,3010
247
249
  udata/core/topic/forms.py,sha256=OkWFo0FkSnjZ2LURoq2i2cpingFz1TrOEI3TJ7qQ8pk,3465
248
- udata/core/topic/models.py,sha256=kQ3EMqss5G4f6jKC528NNAoQdPxZ3I73Gv63Mt31Yvs,4656
250
+ udata/core/topic/models.py,sha256=CBcMk_3A9NE1lahHJCk_r9_yQIK9L9Fd0D2KAA0NU0s,4732
249
251
  udata/core/topic/parsers.py,sha256=oteskLLFje-zufAYzSl1zsy-MLac2hpXhGI0S3igA1g,4560
250
252
  udata/core/topic/permissions.py,sha256=RtFPPlxuU_Bv7ip6LDO4AoPrKFnIOEs9cCMXaSSmEdk,118
251
253
  udata/core/topic/tasks.py,sha256=_OrPfuZ9rKENp4p4IkoyV-Yqp9bxI3nNxhpfKrbgl-w,357
252
254
  udata/core/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
253
255
  udata/core/user/activities.py,sha256=d91G45XEgoxYUJetkSjVolSM-nqmNSuM5b-6geayGE4,3338
254
- udata/core/user/api.py,sha256=DhbjrK2bote_QX45evTHWJICZ9g0vog9RXUW3S6bv1o,13442
256
+ udata/core/user/api.py,sha256=xO6Bsc_5IHH8DV7y2gmT-sTWhBVvIeRJOvXXv4hAoQE,13903
255
257
  udata/core/user/api_fields.py,sha256=fx3rv8YmovIKJpZ8ldtcUOAWuJHEELDYa4HwdaQOAnA,5986
256
258
  udata/core/user/apiv2.py,sha256=4eNsvJjb4ChJQFrXtVbkOtAvXEcQcQpZf8vkEbriXRA,1125
257
259
  udata/core/user/commands.py,sha256=8dyowvylgYqdScgzVGgr61MWLshlS6-UopZGAMvp4zA,3539
@@ -260,7 +262,7 @@ udata/core/user/factories.py,sha256=kkwaojciLzfuAOeRnL1E7XCcGPo8waAal_G2eeuVc0k,
260
262
  udata/core/user/forms.py,sha256=yotqZozH9ViKuNI8SwdKocDEi7NXVs_XUMpdr_bIe5s,966
261
263
  udata/core/user/mails.py,sha256=JPoPdjt38T3QECR7g7dqc5MbWxm1wwCNUYIO1I4VSaI,1945
262
264
  udata/core/user/metrics.py,sha256=J4zgjcAudQAi6NUIb47o2Pfe0xZ_Eu17ta9HjhE-HvE,1274
263
- udata/core/user/models.py,sha256=7eoaZLJeRE5qQJHoX2PHLyNlCuUEuhRpUwMsG5xUg3c,11675
265
+ udata/core/user/models.py,sha256=R0imfkTiNTryiccOZIdNgWIhKRwqDgbUMv9EWFgVe4E,11787
264
266
  udata/core/user/permissions.py,sha256=Wbd8bLqSjqp9RHJ6ffLBj74L-LECcAhWazuw4Hq-2Gk,435
265
267
  udata/core/user/rdf.py,sha256=_tN8KlJHt8mYwJhLKoULhmZ3sapUGmX1Sl5W8uawxeU,718
266
268
  udata/core/user/tasks.py,sha256=iaL997_aYTvHSXekHWWHuYb6a1WNQkc48dtfOdE_4SI,2924
@@ -289,7 +291,7 @@ udata/flask_mongoengine/document.py,sha256=KY_PtwbLuqtnlV105YX6ot5GVHq9k61EGv-V6
289
291
  udata/flask_mongoengine/engine.py,sha256=mBY1qQVQtBl5bzuc6F_j5Vcy6kYbJnGDPev4r3Um3Os,6650
290
292
  udata/flask_mongoengine/fields.py,sha256=moNEAt6_QYu3-Tv9uwI7Okak61iLQSn5_J-0IiP1pB0,3290
291
293
  udata/flask_mongoengine/model_form.py,sha256=LI6eqd2zykhron29U280mjt0uZlBpM8GP9NDKrB46Tw,718
292
- udata/flask_mongoengine/pagination.py,sha256=AmKZqC6Pe4K8Y2TF1kj5O4gM5_m1NVthtJQVvoayX2M,5592
294
+ udata/flask_mongoengine/pagination.py,sha256=dVWk8Pdg5WCMMorREQ4Kd5J31udWmPvyZLuY9NapDF0,5608
293
295
  udata/flask_mongoengine/wtf.py,sha256=BU2ahk6xkUmM18oaUf539RXFTP04O8S2CvEniYGJ1co,1226
294
296
  udata/forms/__init__.py,sha256=WdBOu40HijJi0A6kjUkuT-WEP2YNW3k_ftSzQS_Zl9Y,789
295
297
  udata/forms/fields.py,sha256=7zPxvgvUG4X3Yt1nm1NvksY9RcgUtNsgPTHiZ8J_rVY,30042
@@ -312,7 +314,7 @@ udata/harvest/signals.py,sha256=3AhFHMPIFH5vz01NX5ycR_RWH14MXFWnCT6__LSa-QI,1338
312
314
  udata/harvest/tasks.py,sha256=OMc4Jw_M_UgOokxj9IfRKqEqjwi9t9Eih79X_uzr5FA,1676
313
315
  udata/harvest/backends/__init__.py,sha256=HIr7kSdmMUMnfCYnkJ4MydC_GcqbYoBozSbee7l6Qs8,1031
314
316
  udata/harvest/backends/base.py,sha256=ww_PzXrJZP91QaujJ-psOd8ilzr_5NuLOe0SNogE7M4,19183
315
- udata/harvest/backends/dcat.py,sha256=owVrY-WXBHWlZRNT_iY56y4tO-9ezFqwzsKP9FbahAs,19499
317
+ udata/harvest/backends/dcat.py,sha256=FwFJ0SHhKkyrUUfILYn3iZ79dQJqGUF3BhW7Qrxb5f0,19573
316
318
  udata/harvest/backends/maaf.py,sha256=SN_831VeWphR63EC9v0n94bRH-9B5htTE70HSsVfzyc,8373
317
319
  udata/harvest/backends/maaf.xsd,sha256=vEyG8Vqw7Yn_acjRdXjqUJgxOj4pv8bibep-FX-f3BQ,18322
318
320
  udata/harvest/backends/ckan/__init__.py,sha256=JE7Qa7kX7Yd8OvmJnAO_NupZe0tqYyhhkgJ-iGNxX64,35
@@ -326,7 +328,7 @@ udata/harvest/tests/person.jsonld,sha256=I7Ynh-PQlNeD51I1LrCgYOEjhL-WBeb65xzIE_s
326
328
  udata/harvest/tests/test_actions.py,sha256=nB53_Hi4U38R4gjce9ZnwRXHJfbxbQ1n4mIKkKgfdcA,27899
327
329
  udata/harvest/tests/test_api.py,sha256=aWWkYpDhUdcSVz2C9jooLWLWKhu28D3Rs2xydmvQUT8,27657
328
330
  udata/harvest/tests/test_base_backend.py,sha256=iu_GFkadVnc82pg4auhUhpfIFcrfSVbZ_c8ZVDaYObc,22279
329
- udata/harvest/tests/test_dcat_backend.py,sha256=HWcbHd3fHfTmntHf0nKE-xYZIkuVjsCuBRoBv-dPhxs,55483
331
+ udata/harvest/tests/test_dcat_backend.py,sha256=A_OJ9LcDfC7tCLRu8-_nNA8x2PWjTHbnec6QAgvYL8o,56381
330
332
  udata/harvest/tests/test_filters.py,sha256=uXcoUGBgEL8EPShFtrZikVOTqKMrfc6ljtXgc_ES5O8,2621
331
333
  udata/harvest/tests/test_models.py,sha256=TIpNRx3gjwI5wznr_y2Ad5fdESfhqhPoOOOSBfvyfQI,850
332
334
  udata/harvest/tests/test_notifications.py,sha256=i4TZo-hFN6aIi1c9MouqS-ElihccBnqKb_Ed0QQWgyo,835
@@ -443,15 +445,16 @@ udata/templates/security/reset_password.html,sha256=R0AMqkmPulFZpCoqP6NzP-dSTcdx
443
445
  udata/templates/security/send_confirmation.html,sha256=llnEawIMXWP8Wu9EUL2czY38Z7URk-hRCEK9A4cxVJQ,784
444
446
  udata/tests/__init__.py,sha256=yaEd8auFOkEg2DX0m0mutomNTHSiugyVEO9QPMyvjeE,2650
445
447
  udata/tests/es-fake-result.json,sha256=z0CX9Gs-NRj49dmtdFvw8ZKsAbMhDt97Na6JX3ucX34,3155
446
- udata/tests/helpers.py,sha256=FLKu23w-GJhN2E6AvolIrnqPCwCSuJfWc5AqoEmch00,6503
448
+ udata/tests/helpers.py,sha256=67i83_ClNyYu3MH30hgkkHo-wjyeQ3eBuLkYHBuZiVM,6705
447
449
  udata/tests/models.py,sha256=5oTC-cgKSL0sUdlqjUiJ6U8-YZBQanObb-MhZhQIV3M,238
448
450
  udata/tests/plugin.py,sha256=K2oQMYnWnElg0C0zPUQJqelPp0VuNj09hfGkLNd3KmY,708
449
451
  udata/tests/schemas.json,sha256=szM1jDpkogfOG4xWbjIGjLgG8l9-ZyE3JKQtecJyD1E,4990
450
452
  udata/tests/test_activity.py,sha256=YAPQZAVDqfC91_lgzJxfaMZH_U5PmFAkRQXPh_n3Ljs,9797
451
- udata/tests/test_api_fields.py,sha256=BAgxSQjgMQ6B3ZUamhdg5GDXfP5ZpFUfRUPJLfooIzw,12886
453
+ udata/tests/test_api_fields.py,sha256=iS75yPnvQMAAwSU5WYhyuWj0rfQk18ctu_tJwryQL30,13296
452
454
  udata/tests/test_cors.py,sha256=6_YNrn_zwve2eiRjBskBu7fO3NTpxewFlAhl06po5mg,2911
453
455
  udata/tests/test_dcat_commands.py,sha256=lNro98quTA_PnVATnum2mokSKBRfSVd_MxSzA32nbjY,939
454
456
  udata/tests/test_discussions.py,sha256=y_nVPWDTx3t-_dVGXYtFaTWDudf-QnJS-f3TQpZaAKA,47615
457
+ udata/tests/test_legal_mails.py,sha256=WyHYkzWRiikZUqTYG-trXJKimSgNqenCorYC2txwh34,13901
455
458
  udata/tests/test_mail.py,sha256=IvWCtRJ1qikJp4rSu-q8bqYbQTSkW8GOawuwsgSR7io,5906
456
459
  udata/tests/test_migrations.py,sha256=PC9hWaWBqQR1E_tEqAbJF-xC1fBlBA7U9oN8ROczPaY,7739
457
460
  udata/tests/test_model.py,sha256=j9_9xiLLPAFibL5Rz6uMD7Npjz0bS1Nu88A3fQF_3UI,22194
@@ -472,7 +475,7 @@ udata/tests/api/test_auth_api.py,sha256=vLyDU1hdF2QEwpNTNUgP2QPUjL0y61lzj5Viaaj9
472
475
  udata/tests/api/test_base_api.py,sha256=jbT9s_YYuh-37xR98VMS5mAHHIL0g-6F_kkhFBb4E3A,2272
473
476
  udata/tests/api/test_contact_points.py,sha256=QmnTmJZ5oIohsUH_E_wfFalRx-Fx91jO7gs7PErpLqQ,8690
474
477
  udata/tests/api/test_dataservices_api.py,sha256=UPMH6OEEczYvebyV7thf7LjrEYFctgIm1TuJV1VC-OI,29914
475
- udata/tests/api/test_datasets_api.py,sha256=ob8n5MJEs41vPQ-VrIFCzsvdJWtWex6gAtUAQPyJjpM,111685
478
+ udata/tests/api/test_datasets_api.py,sha256=ue8ncXBfOf3XR1ZK3YwtoWqONSk2dsAzrRIWFXIj9kM,111967
476
479
  udata/tests/api/test_fields.py,sha256=OW85Z5MES5HeWOpapeem8OvR1cIcrqW-xMWpdZO4LZ8,1033
477
480
  udata/tests/api/test_follow_api.py,sha256=4nFXG5pZ_Hf2PJ4KEdHJX_uggjc9RpB8v0fidkAcw9I,5792
478
481
  udata/tests/api/test_me_api.py,sha256=MiKN9P75h2HyMxepuxt2SiLs3Yhgl22iQXKbvTR42sg,13796
@@ -488,6 +491,7 @@ udata/tests/apiv2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
488
491
  udata/tests/apiv2/test_datasets.py,sha256=lugL_CE2MlP4R--GEersBIwJOn66xVmLz5lU8L4YpcA,23216
489
492
  udata/tests/apiv2/test_me_api.py,sha256=YxSCtZBlSXgzQPgwMJoZHMcpSoKjL6IKz2jhJi8xL5I,1399
490
493
  udata/tests/apiv2/test_organizations.py,sha256=JqQHnOzRLR4l19P-EC9k2VToLbebU7jYESY4T-Y9LS8,6370
494
+ udata/tests/apiv2/test_search.py,sha256=PW6vzchc-OUVH80kPIHdShqyD0lvbDmupa-DLjyT1QQ,1233
491
495
  udata/tests/apiv2/test_swagger.py,sha256=fIwblhKFnbXnLJb_Qs33P0c44LRm0c1JODblKEcf_4M,832
492
496
  udata/tests/apiv2/test_topics.py,sha256=pHHsPo7Qs8DoDqLBBcB0GtoptkHHXT25Jo96B2Vg_4k,37970
493
497
  udata/tests/cli/test_cli_base.py,sha256=opaL3La-ig47wpak7A-zdRUzj2hIXIYXD_0t842YrBQ,465
@@ -496,7 +500,7 @@ udata/tests/data/image.jpg,sha256=hdmpaCjOhmAAfNGuTqWKEjv7IC4GXJx-nP_rT274hc8,33
496
500
  udata/tests/data/image.png,sha256=GAqXz7w_u7CapODIUF45UpVddmqelnGQkcrwKZq3448,266488
497
501
  udata/tests/dataservice/test_csv_adapter.py,sha256=trGzWENGpkDFI84XZhwwNR61_nmukphKvS6aOKf7uBo,1981
498
502
  udata/tests/dataservice/test_dataservice_rdf.py,sha256=dsBLkpn1kYVVcOVx6O5fn-UacQXFHpTFoNaZ_ciRWo0,6405
499
- udata/tests/dataservice/test_dataservice_tasks.py,sha256=XnXnvC81coXP_APe2OecPNIMogW3GJX-c95OkUYQc28,1764
503
+ udata/tests/dataservice/test_dataservice_tasks.py,sha256=ANbPcKhWzAGZABXVYKDLhGUItr5qFc9Trdq3eMWSlT8,3003
500
504
  udata/tests/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
501
505
  udata/tests/dataset/test_csv_adapter.py,sha256=d5Wx2yqXpXh93IY5JtnGVTDo9O_3j0F_XnfmXnA__UI,3902
502
506
  udata/tests/dataset/test_dataset_actions.py,sha256=8d-6AUKCt3Nnb_uEaztV0BzNYFDyqAYLrThRD-ubLNA,741
@@ -505,7 +509,7 @@ udata/tests/dataset/test_dataset_events.py,sha256=tKCQ55y_pc0wOKv2B2iej5dDxWalgu
505
509
  udata/tests/dataset/test_dataset_model.py,sha256=YWhQ6RxVdgUrQbtvwATzypyl8XyNpdDjHDetyK37chU,35795
506
510
  udata/tests/dataset/test_dataset_rdf.py,sha256=_7QDypmPQvL4DzrOgsVfkbL-hW5RrIftctIz3O0wMEw,58199
507
511
  udata/tests/dataset/test_dataset_recommendations.py,sha256=UMwAsLHs6_XA1vp7-lnTjaPOc9E6zQYqw9VIuSCNUtk,7102
508
- udata/tests/dataset/test_dataset_tasks.py,sha256=iOoP4JlQGC7JawvPRvU_wEM245ny0jlQp-2PQVUzXO0,3524
512
+ udata/tests/dataset/test_dataset_tasks.py,sha256=6YmDBJUv3pIPNFj6DvY7FLsa4k7XxGeQ7BgOLrJOeTY,4564
509
513
  udata/tests/dataset/test_resource_preview.py,sha256=387FEdNHWZyEeOlmSETMIFlnhVuKQ-U4o2RkWgxXwik,2208
510
514
  udata/tests/dataset/test_transport_tasks.py,sha256=GgXu_MXGKmVzugi-7SUVNJ_PkTo36kJsASapYaxlcQw,2998
511
515
  udata/tests/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -524,7 +528,7 @@ udata/tests/forms/test_publish_as_field.py,sha256=o-agTC4Lq-wJXxACWTPBIlPUovQnjv
524
528
  udata/tests/forms/test_reference_field.py,sha256=oa57TatMG9Ul5Z_ehCsLK0Zau31n3xaRU0gLAmZlg9w,6290
525
529
  udata/tests/forms/test_user_forms.py,sha256=Uo0l-4jd7pyp6d7_4GVBp9InLwlWYEh984utQHat7Ng,1142
526
530
  udata/tests/forms/test_uuid_field.py,sha256=256hFDZSWBeoRQuKIAF5RBt4hAKssSHFVAqMMHz8rcc,1788
527
- udata/tests/frontend/test_auth.py,sha256=CkVwYQYxOS8FeI2f2JcSrkuStmcTwAL4jKkKR7kmN3k,1627
531
+ udata/tests/frontend/test_auth.py,sha256=nO9OvTc9SX2QRShyseV6WoEPlqSbrE8wmQ-pRdaWhWU,2921
528
532
  udata/tests/frontend/test_csv.py,sha256=v7hpTtWgPrMRJxED-6Ql-RNYI62thuy36eO4tAkHe9I,11583
529
533
  udata/tests/frontend/test_error_handlers.py,sha256=oUk-x5uUwDDDv1b7_wMBWVu26Dolh5tH_ScrnOIFRxA,3106
530
534
  udata/tests/frontend/test_markdown.py,sha256=khpmtc9cvBAFSuSZhy8P1hg-8ILRW171_Jue00Aps_0,13875
@@ -545,6 +549,7 @@ udata/tests/search/__init__.py,sha256=ub8kS6vG9EjzkJ-9sAR7j1eLSYpud1Gzry4MQ8fpgx
545
549
  udata/tests/search/test_adapter.py,sha256=4Sh8T-a8TYRMWUNe93WkVOy2b5q7i5hvjFUjXbX3UZw,8648
546
550
  udata/tests/search/test_query.py,sha256=aFZKFTJjlih5csy3eNp4MxL5hg13NqiIsrS5bCTOLrI,2182
547
551
  udata/tests/search/test_results.py,sha256=vHMkywoW6SQKGy5OtCriYpSo-KbVEdjVzOf8un2mjZE,2043
552
+ udata/tests/search/test_search_integration.py,sha256=BZhoCNmvwDJV_jSYE9ILC3pmp_SeBYOiDfHfJMrwn4I,1190
548
553
  udata/tests/site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
549
554
  udata/tests/site/test_site_api.py,sha256=j9pu91KfkL8-O0lyTA546cJJGZyENEauebF_uuxKVTE,1363
550
555
  udata/tests/site/test_site_csv_exports.py,sha256=XNNCUsX3Q17ov2nBOEfBLklKpwF3wxIG_1ZeayFfKls,17758
@@ -575,9 +580,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=n7ZHvruSL9hIPoSl4aCkGeC52LZYeg
575
580
  udata/translations/pt/LC_MESSAGES/udata.po,sha256=24CsHDZ84nqTMr-cOvOZ-LNYsokLQNyQchI41o3Cq9M,49765
576
581
  udata/translations/sr/LC_MESSAGES/udata.mo,sha256=pw3gsvr8lPQJZvX9Jo8ymu59I3L6-rrpX2Fqy0Nu5r4,20441
577
582
  udata/translations/sr/LC_MESSAGES/udata.po,sha256=1h8akWRpcQ1uD5zezqjp-Q-gAld5_93MkJL4BRlqKjQ,54738
578
- udata-14.4.1.dev7.dist-info/licenses/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
579
- udata-14.4.1.dev7.dist-info/METADATA,sha256=NXCIwDldv24bi65XL1050Lwo5pjzQsYmq_yfwY9tvlM,4358
580
- udata-14.4.1.dev7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
581
- udata-14.4.1.dev7.dist-info/entry_points.txt,sha256=XwrEzP-n_6CKnwTsrNHzyCTWbMwg2FkvxVVB686f_C0,476
582
- udata-14.4.1.dev7.dist-info/top_level.txt,sha256=EF6CE6YSHd_og-8LCEA4q25ALUpWVe8D0okOLdMAE3A,6
583
- udata-14.4.1.dev7.dist-info/RECORD,,
583
+ udata-14.5.1.dev6.dist-info/licenses/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
584
+ udata-14.5.1.dev6.dist-info/METADATA,sha256=qbQHMoJGGldXV--7F7oWanV4xdfGPPbMr49r5vGsnLs,4358
585
+ udata-14.5.1.dev6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
586
+ udata-14.5.1.dev6.dist-info/entry_points.txt,sha256=XwrEzP-n_6CKnwTsrNHzyCTWbMwg2FkvxVVB686f_C0,476
587
+ udata-14.5.1.dev6.dist-info/top_level.txt,sha256=EF6CE6YSHd_og-8LCEA4q25ALUpWVe8D0okOLdMAE3A,6
588
+ udata-14.5.1.dev6.dist-info/RECORD,,