udata 7.0.5.dev28140__py2.py3-none-any.whl → 7.0.6__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 (74) hide show
  1. udata/__init__.py +1 -1
  2. udata/commands/__init__.py +0 -3
  3. udata/commands/dcat.py +7 -4
  4. udata/core/activity/api.py +1 -1
  5. udata/core/activity/models.py +4 -3
  6. udata/core/activity/tasks.py +6 -5
  7. udata/core/dataset/factories.py +2 -4
  8. udata/core/dataset/models.py +2 -5
  9. udata/core/dataset/rdf.py +65 -25
  10. udata/core/dataset/search.py +0 -1
  11. udata/core/spatial/tests/test_api.py +7 -10
  12. udata/core/topic/factories.py +2 -2
  13. udata/harvest/backends/dcat.py +128 -24
  14. udata/harvest/tests/csw_dcat/XSLT.xml +4298 -0
  15. udata/harvest/tests/csw_dcat/geonetwork-iso-page-1.xml +1291 -0
  16. udata/harvest/tests/csw_dcat/geonetwork-iso-page-3.xml +1139 -0
  17. udata/harvest/tests/csw_dcat/geonetwork-iso-page-5.xml +1266 -0
  18. udata/harvest/tests/dcat/bnodes.xml +7 -1
  19. udata/harvest/tests/dcat/evian.json +464 -0
  20. udata/harvest/tests/test_dcat_backend.py +82 -9
  21. udata/migrations/2024-03-22-migrate-activity-kwargs-to-extras.py +16 -0
  22. udata/rdf.py +22 -1
  23. udata/search/__init__.py +2 -2
  24. udata/static/chunks/{11.c0ccea08914b6b41568e.js → 11.a23c110811a9ac943478.js} +3 -3
  25. udata/static/chunks/{11.c0ccea08914b6b41568e.js.map → 11.a23c110811a9ac943478.js.map} +1 -1
  26. udata/static/chunks/{13.526a25163ababaa44409.js → 13.0889e093f8664e38568c.js} +2 -2
  27. udata/static/chunks/{13.526a25163ababaa44409.js.map → 13.0889e093f8664e38568c.js.map} +1 -1
  28. udata/static/chunks/{16.7901839b4227881947f6.js → 16.f41599478d3e97ad9a30.js} +2 -2
  29. udata/static/chunks/{16.7901839b4227881947f6.js.map → 16.f41599478d3e97ad9a30.js.map} +1 -1
  30. udata/static/chunks/{19.471d5a2a08eef6e5338a.js → 19.2b534a26af8b17e9170b.js} +3 -3
  31. udata/static/chunks/{19.471d5a2a08eef6e5338a.js.map → 19.2b534a26af8b17e9170b.js.map} +1 -1
  32. udata/static/chunks/{5.534e0531d0e2b150146f.js → 5.7115454a1183e5c12eef.js} +3 -3
  33. udata/static/chunks/{5.534e0531d0e2b150146f.js.map → 5.7115454a1183e5c12eef.js.map} +1 -1
  34. udata/static/chunks/{6.e56975229e6065f68d2a.js → 6.16bb24fb8240f2746488.js} +3 -3
  35. udata/static/chunks/{6.e56975229e6065f68d2a.js.map → 6.16bb24fb8240f2746488.js.map} +1 -1
  36. udata/static/chunks/{9.534426728626f11f4571.js → 9.3e752966ff14e47e11f2.js} +2 -2
  37. udata/static/chunks/{9.534426728626f11f4571.js.map → 9.3e752966ff14e47e11f2.js.map} +1 -1
  38. udata/static/common.js +1 -1
  39. udata/static/common.js.map +1 -1
  40. udata/tests/api/test_datasets_api.py +45 -45
  41. udata/tests/api/test_me_api.py +13 -14
  42. udata/tests/dataset/test_dataset_actions.py +2 -2
  43. udata/tests/dataset/test_dataset_commands.py +3 -3
  44. udata/tests/dataset/test_dataset_model.py +2 -1
  45. udata/tests/organization/test_organization_model.py +3 -3
  46. udata/tests/organization/test_organization_rdf.py +3 -3
  47. udata/tests/reuse/test_reuse_model.py +2 -2
  48. udata/tests/search/test_adapter.py +12 -12
  49. udata/tests/search/test_results.py +4 -4
  50. udata/tests/site/test_site_api.py +3 -3
  51. udata/tests/site/test_site_metrics.py +3 -3
  52. udata/tests/site/test_site_rdf.py +6 -6
  53. udata/tests/test_activity.py +12 -0
  54. udata/tests/test_transfer.py +18 -17
  55. udata/translations/ar/LC_MESSAGES/udata.mo +0 -0
  56. udata/translations/ar/LC_MESSAGES/udata.po +90 -44
  57. udata/translations/de/LC_MESSAGES/udata.mo +0 -0
  58. udata/translations/de/LC_MESSAGES/udata.po +91 -45
  59. udata/translations/es/LC_MESSAGES/udata.mo +0 -0
  60. udata/translations/es/LC_MESSAGES/udata.po +90 -44
  61. udata/translations/fr/LC_MESSAGES/udata.mo +0 -0
  62. udata/translations/fr/LC_MESSAGES/udata.po +91 -45
  63. udata/translations/it/LC_MESSAGES/udata.mo +0 -0
  64. udata/translations/it/LC_MESSAGES/udata.po +90 -44
  65. udata/translations/pt/LC_MESSAGES/udata.mo +0 -0
  66. udata/translations/pt/LC_MESSAGES/udata.po +91 -45
  67. udata/translations/sr/LC_MESSAGES/udata.mo +0 -0
  68. udata/translations/sr/LC_MESSAGES/udata.po +91 -45
  69. {udata-7.0.5.dev28140.dist-info → udata-7.0.6.dist-info}/METADATA +13 -3
  70. {udata-7.0.5.dev28140.dist-info → udata-7.0.6.dist-info}/RECORD +74 -68
  71. {udata-7.0.5.dev28140.dist-info → udata-7.0.6.dist-info}/entry_points.txt +1 -0
  72. {udata-7.0.5.dev28140.dist-info → udata-7.0.6.dist-info}/LICENSE +0 -0
  73. {udata-7.0.5.dev28140.dist-info → udata-7.0.6.dist-info}/WHEEL +0 -0
  74. {udata-7.0.5.dev28140.dist-info → udata-7.0.6.dist-info}/top_level.txt +0 -0
@@ -14,7 +14,7 @@ from udata.utils import clean_string
14
14
  from udata.search import reindex, as_task_param
15
15
  from udata.search.commands import index_model
16
16
  from udata.core.dataset.search import DatasetSearch
17
- from udata.core.dataset.factories import DatasetFactory, ResourceFactory, VisibleDatasetFactory
17
+ from udata.core.dataset.factories import DatasetFactory, ResourceFactory, HiddenDatasetFactory
18
18
  from udata.tests.api import APITestCase
19
19
 
20
20
  from . import FakeSearch
@@ -104,35 +104,35 @@ class SearchAdaptorTest:
104
104
  assertHasArgument(parser, 'page_size', int)
105
105
 
106
106
 
107
- @pytest.mark.options(SEARCH_SERVICE_API_URL="smtg")
107
+ @pytest.mark.options(SEARCH_SERVICE_API_URL="smtg/")
108
108
  class IndexingLifecycleTest(APITestCase):
109
109
 
110
110
  @patch('requests.delete')
111
111
  def test_producer_should_send_a_message_without_payload_if_not_indexable(self, mock_req):
112
- fake_data = DatasetFactory(id='61fd30cb29ea95c7bc0e1211')
112
+ fake_data = HiddenDatasetFactory(id='61fd30cb29ea95c7bc0e1211')
113
113
 
114
114
  reindex.run(*as_task_param(fake_data))
115
115
 
116
116
  search_service_url = current_app.config['SEARCH_SERVICE_API_URL']
117
- url = f'{search_service_url}{DatasetSearch.search_url}/{str(fake_data.id)}/unindex'
117
+ url = f'{search_service_url}{DatasetSearch.search_url}{str(fake_data.id)}/unindex'
118
118
  mock_req.assert_called_with(url)
119
119
 
120
120
  @patch('requests.post')
121
121
  def test_producer_should_send_a_message_with_payload_if_indexable(self, mock_req):
122
122
  resource = ResourceFactory(schema=Schema(url="http://localhost/my-schema"))
123
- fake_data = VisibleDatasetFactory(id='61fd30cb29ea95c7bc0e1211', resources=[resource])
123
+ fake_data = DatasetFactory(id='61fd30cb29ea95c7bc0e1211', resources=[resource])
124
124
 
125
125
  reindex.run(*as_task_param(fake_data))
126
126
 
127
127
  expected_value = {
128
128
  'document': DatasetSearch.serialize(fake_data)
129
129
  }
130
- url = f"{current_app.config['SEARCH_SERVICE_API_URL']}{DatasetSearch.search_url}/index"
130
+ url = f"{current_app.config['SEARCH_SERVICE_API_URL']}{DatasetSearch.search_url}index"
131
131
  mock_req.assert_called_with(url, json=expected_value)
132
132
 
133
133
  @patch('requests.Session.post')
134
134
  def test_index_model(self, mock_req):
135
- fake_data = VisibleDatasetFactory(id='61fd30cb29ea95c7bc0e1211')
135
+ fake_data = DatasetFactory(id='61fd30cb29ea95c7bc0e1211')
136
136
 
137
137
  index_model(DatasetSearch, start=None, reindex=False, from_datetime=None)
138
138
 
@@ -146,7 +146,7 @@ class IndexingLifecycleTest(APITestCase):
146
146
  @patch('requests.post')
147
147
  @patch('requests.Session.post')
148
148
  def test_reindex_model(self, mock_session, mock_req):
149
- fake_data = VisibleDatasetFactory(id='61fd30cb29ea95c7bc0e1211')
149
+ fake_data = DatasetFactory(id='61fd30cb29ea95c7bc0e1211')
150
150
 
151
151
  index_model(DatasetSearch, start=datetime.datetime(2022, 2, 20, 20, 2), reindex=True)
152
152
 
@@ -167,10 +167,10 @@ class IndexingLifecycleTest(APITestCase):
167
167
 
168
168
  @patch('requests.Session.post')
169
169
  def test_index_model_from_datetime(self, mock_req):
170
- VisibleDatasetFactory(id='61fd30cb29ea95c7bc0e1211',
171
- last_modified_internal=datetime.datetime(2020, 1, 1))
172
- fake_data = VisibleDatasetFactory(id='61fd30cb29ea95c7bc0e1212',
173
- last_modified_internal=datetime.datetime(2022, 1, 1))
170
+ DatasetFactory(id='61fd30cb29ea95c7bc0e1211',
171
+ last_modified_internal=datetime.datetime(2020, 1, 1))
172
+ fake_data = DatasetFactory(id='61fd30cb29ea95c7bc0e1212',
173
+ last_modified_internal=datetime.datetime(2022, 1, 1))
174
174
 
175
175
  index_model(DatasetSearch, start=None, from_datetime=datetime.datetime(2023, 1, 1))
176
176
  mock_req.assert_not_called()
@@ -1,6 +1,6 @@
1
1
  from udata.tests.api import APITestCase
2
2
  from udata.search.result import SearchResult
3
- from udata.core.dataset.factories import VisibleDatasetFactory
3
+ from udata.core.dataset.factories import DatasetFactory
4
4
  from udata.core.dataset.search import DatasetSearch
5
5
  from udata.models import Dataset
6
6
 
@@ -9,7 +9,7 @@ class ResultTest(APITestCase):
9
9
  def test_results_get_objects(self):
10
10
  data = []
11
11
  for _ in range(3):
12
- random_dataset = VisibleDatasetFactory()
12
+ random_dataset = DatasetFactory()
13
13
  data.append(DatasetSearch.serialize(random_dataset))
14
14
 
15
15
  search_class = DatasetSearch.temp_search()
@@ -30,10 +30,10 @@ class ResultTest(APITestCase):
30
30
  def test_results_should_not_fail_on_missing_objects(self):
31
31
  data = []
32
32
  for _ in range(3):
33
- random_dataset = VisibleDatasetFactory()
33
+ random_dataset = DatasetFactory()
34
34
  data.append(DatasetSearch.serialize(random_dataset))
35
35
 
36
- to_delete_random_dataset = VisibleDatasetFactory()
36
+ to_delete_random_dataset = DatasetFactory()
37
37
  data.append(DatasetSearch.serialize(to_delete_random_dataset))
38
38
 
39
39
  search_class = DatasetSearch.temp_search()
@@ -5,7 +5,7 @@ from flask import url_for
5
5
  from udata.core.site.models import Site
6
6
  from udata.core.site.models import current_site
7
7
  from udata.core.site.factories import SiteFactory
8
- from udata.core.dataset.factories import VisibleDatasetFactory
8
+ from udata.core.dataset.factories import DatasetFactory
9
9
  from udata.core.reuse.factories import VisibleReuseFactory
10
10
  from udata.core.user.factories import AdminFactory
11
11
 
@@ -22,7 +22,7 @@ class SiteAPITest(APITestCase):
22
22
  def test_get_home_datasets(self):
23
23
  site = SiteFactory.create(
24
24
  id=self.app.config['SITE_ID'],
25
- settings__home_datasets=VisibleDatasetFactory.create_batch(3)
25
+ settings__home_datasets=DatasetFactory.create_batch(3)
26
26
  )
27
27
  current_site.reload()
28
28
 
@@ -46,7 +46,7 @@ class SiteAPITest(APITestCase):
46
46
  self.assertEqual(len(response.json), len(site.settings.home_reuses))
47
47
 
48
48
  def test_set_home_datasets(self):
49
- ids = [d.id for d in VisibleDatasetFactory.create_batch(3)]
49
+ ids = [d.id for d in DatasetFactory.create_batch(3)]
50
50
 
51
51
  self.login(AdminFactory())
52
52
  response = self.put(url_for('api.home_datasets'), ids)
@@ -1,6 +1,6 @@
1
1
  import pytest
2
2
 
3
- from udata.core.dataset.factories import DatasetFactory, VisibleDatasetFactory, OrganizationFactory
3
+ from udata.core.dataset.factories import DatasetFactory, HiddenDatasetFactory, OrganizationFactory
4
4
  from udata.core.reuse.factories import VisibleReuseFactory
5
5
  from udata.harvest.tests.factories import HarvestSourceFactory
6
6
  from udata.core.site.factories import SiteFactory
@@ -34,11 +34,11 @@ class SiteMetricTest:
34
34
  id=app.config['SITE_ID']
35
35
  )
36
36
  DatasetFactory.create_batch(2)
37
- VisibleDatasetFactory.create_batch(3)
37
+ HiddenDatasetFactory.create_batch(3)
38
38
 
39
39
  site.count_datasets()
40
40
 
41
- assert site.get_metrics()['datasets'] == 3
41
+ assert site.get_metrics()['datasets'] == 2
42
42
 
43
43
  def test_resources_metric(self, app):
44
44
  site = SiteFactory.create(
@@ -6,7 +6,7 @@ from rdflib import URIRef, Literal, Graph
6
6
  from rdflib.namespace import RDF, FOAF
7
7
  from rdflib.resource import Resource
8
8
 
9
- from udata.core.dataset.factories import VisibleDatasetFactory
9
+ from udata.core.dataset.factories import DatasetFactory
10
10
  from udata.core.dataset.models import Dataset
11
11
  from udata.core.organization.factories import OrganizationFactory
12
12
  from udata.core.site.factories import SiteFactory
@@ -26,7 +26,7 @@ class CatalogTest:
26
26
  site = SiteFactory()
27
27
  home_url = url_for('api.site', _external=True)
28
28
  uri = url_for('api.site_rdf_catalog', _external=True)
29
- datasets = VisibleDatasetFactory.create_batch(3)
29
+ datasets = DatasetFactory.create_batch(3)
30
30
  catalog = build_catalog(site, datasets)
31
31
  graph = catalog.graph
32
32
 
@@ -59,8 +59,8 @@ class CatalogTest:
59
59
  site = SiteFactory()
60
60
  org = OrganizationFactory()
61
61
  user = UserFactory()
62
- datasets = VisibleDatasetFactory.create_batch(2, owner=user)
63
- datasets += VisibleDatasetFactory.create_batch(2, organization=org)
62
+ datasets = DatasetFactory.create_batch(2, owner=user)
63
+ datasets += DatasetFactory.create_batch(2, organization=org)
64
64
  catalog = build_catalog(site, datasets)
65
65
  graph = catalog.graph
66
66
 
@@ -82,7 +82,7 @@ class CatalogTest:
82
82
  page=1, page_size=page_size, _external=True)
83
83
  uri_last = url_for('api.site_rdf_catalog_format', format='json',
84
84
  page=2, page_size=page_size, _external=True)
85
- VisibleDatasetFactory.create_batch(total)
85
+ DatasetFactory.create_batch(total)
86
86
 
87
87
  # First page
88
88
  datasets = Dataset.objects.paginate(1, page_size)
@@ -208,7 +208,7 @@ class SiteRdfViewsTest:
208
208
  assert_redirects(response, expected_url)
209
209
 
210
210
  def test_catalog_rdf_paginate(self, client):
211
- VisibleDatasetFactory.create_batch(4)
211
+ DatasetFactory.create_batch(4)
212
212
  url = url_for('api.site_rdf_catalog_format', format='n3', page_size=3)
213
213
  next_url = url_for('api.site_rdf_catalog_format', format='n3',
214
214
  page=2, page_size=3, _external=True)
@@ -27,6 +27,18 @@ class ActivityTest(WebTestMixin, DBTestMixin, TestCase):
27
27
  self.assertEqual(len(activities), 1)
28
28
  self.assertIsInstance(activities[0], FakeActivity)
29
29
 
30
+ def test_create_and_retrieve_with_extras(self):
31
+ FakeActivity.objects.create(actor=self.user, related_to=self.fake, extras={'some_key': 'some_value',
32
+ 'other_key': 'other_value'})
33
+
34
+ activities = Activity.objects(actor=self.user)
35
+
36
+ self.assertEqual(len(activities), 1)
37
+ self.assertEqual(activities[0].extras['some_key'], 'some_value')
38
+ self.assertEqual(activities[0].extras['other_key'], 'other_value')
39
+ self.assertIsInstance(activities[0], FakeActivity)
40
+
41
+
30
42
  def test_create_and_retrieve_for_org(self):
31
43
  org = OrganizationFactory()
32
44
  FakeActivity.objects.create(
@@ -7,14 +7,15 @@ from udata.features.transfer.actions import request_transfer, accept_transfer
7
7
  from udata.features.transfer.notifications import (
8
8
  transfer_request_notifications
9
9
  )
10
- from udata.models import Member
11
- from udata.core.user.metrics import update_owner_metrics
12
- from udata.core.organization.metrics import update_org_metrics
10
+ from udata.models import Member, Dataset
13
11
 
14
12
  from udata.utils import faker
15
- from udata.core.dataset.factories import VisibleDatasetFactory
13
+ from udata.core.dataset.factories import DatasetFactory
16
14
  from udata.core.organization.factories import OrganizationFactory
17
- from udata.core.user.factories import UserFactory
15
+ from udata.core.organization.metrics import update_org_metrics # noqa needed to register signals
16
+ from udata.core.user.factories import UserFactory
17
+ from udata.core.user.metrics import update_owner_metrics # noqa needed to register signals
18
+ from udata.tests.helpers import assert_emit
18
19
 
19
20
 
20
21
  pytestmark = pytest.mark.usefixtures('clean_db')
@@ -32,7 +33,7 @@ class TransferStartTest:
32
33
 
33
34
  def test_request_transfer_owner_to_user(self):
34
35
  user = UserFactory()
35
- dataset = VisibleDatasetFactory(owner=user)
36
+ dataset = DatasetFactory(owner=user)
36
37
  recipient = UserFactory()
37
38
  comment = faker.sentence()
38
39
 
@@ -43,7 +44,7 @@ class TransferStartTest:
43
44
  user = UserFactory()
44
45
  member = Member(user=user, role='admin')
45
46
  org = OrganizationFactory(members=[member])
46
- dataset = VisibleDatasetFactory(owner=user, organization=org)
47
+ dataset = DatasetFactory(owner=user, organization=org)
47
48
  recipient = UserFactory()
48
49
  comment = faker.sentence()
49
50
 
@@ -52,7 +53,7 @@ class TransferStartTest:
52
53
 
53
54
  def test_request_transfer_user_to_organization(self):
54
55
  user = UserFactory()
55
- dataset = VisibleDatasetFactory(owner=user)
56
+ dataset = DatasetFactory(owner=user)
56
57
  recipient = OrganizationFactory()
57
58
  comment = faker.sentence()
58
59
 
@@ -61,7 +62,7 @@ class TransferStartTest:
61
62
 
62
63
  def test_request_transfer_not_authorized_not_owner(self):
63
64
  user = UserFactory()
64
- dataset = VisibleDatasetFactory(owner=UserFactory())
65
+ dataset = DatasetFactory(owner=UserFactory())
65
66
  recipient = UserFactory()
66
67
  comment = faker.sentence()
67
68
 
@@ -73,7 +74,7 @@ class TransferStartTest:
73
74
  user = UserFactory()
74
75
  member = Member(user=user, role='editor')
75
76
  org = OrganizationFactory(members=[member])
76
- dataset = VisibleDatasetFactory(organization=org)
77
+ dataset = DatasetFactory(organization=org)
77
78
  recipient = UserFactory()
78
79
  comment = faker.sentence()
79
80
 
@@ -83,7 +84,7 @@ class TransferStartTest:
83
84
 
84
85
  def test_request_transfer_to_self(self):
85
86
  user = UserFactory()
86
- dataset = VisibleDatasetFactory(owner=user)
87
+ dataset = DatasetFactory(owner=user)
87
88
  comment = faker.sentence()
88
89
 
89
90
  login_user(user)
@@ -94,7 +95,7 @@ class TransferStartTest:
94
95
  user = UserFactory()
95
96
  member = Member(user=user, role='admin')
96
97
  org = OrganizationFactory(members=[member])
97
- dataset = VisibleDatasetFactory(owner=user, organization=org)
98
+ dataset = DatasetFactory(owner=user, organization=org)
98
99
  comment = faker.sentence()
99
100
 
100
101
  login_user(user)
@@ -107,7 +108,7 @@ class TransferAcceptTest:
107
108
  def test_recipient_user_can_accept_transfer(self):
108
109
  owner = UserFactory()
109
110
  recipient = UserFactory()
110
- subject = VisibleDatasetFactory(owner=owner)
111
+ subject = DatasetFactory(owner=owner)
111
112
  transfer = TransferFactory(owner=owner,
112
113
  recipient=recipient,
113
114
  subject=subject)
@@ -136,7 +137,7 @@ class TransferAcceptTest:
136
137
  owner = UserFactory()
137
138
  admin = UserFactory()
138
139
  org = OrganizationFactory(members=[Member(user=admin, role='admin')])
139
- subject = VisibleDatasetFactory(owner=owner)
140
+ subject = DatasetFactory(owner=owner)
140
141
  transfer = TransferFactory(owner=owner,
141
142
  recipient=org,
142
143
  subject=subject)
@@ -172,7 +173,7 @@ class TransferAcceptTest:
172
173
  owner = UserFactory()
173
174
  editor = UserFactory()
174
175
  org = OrganizationFactory(members=[Member(user=editor, role='editor')])
175
- subject = VisibleDatasetFactory(organization=org)
176
+ subject = DatasetFactory(organization=org)
176
177
  transfer = TransferFactory(owner=owner,
177
178
  recipient=org,
178
179
  subject=subject)
@@ -185,7 +186,7 @@ class TransferAcceptTest:
185
186
  class TransferNotificationsTest:
186
187
  def test_pending_transfer_request_for_user(self):
187
188
  user = UserFactory()
188
- datasets = VisibleDatasetFactory.create_batch(2, owner=user)
189
+ datasets = DatasetFactory.create_batch(2, owner=user)
189
190
  recipient = UserFactory()
190
191
  comment = faker.sentence()
191
192
  transfers = {}
@@ -206,7 +207,7 @@ class TransferNotificationsTest:
206
207
 
207
208
  def test_pending_transfer_request_for_org(self):
208
209
  user = UserFactory()
209
- datasets = VisibleDatasetFactory.create_batch(2, owner=user)
210
+ datasets = DatasetFactory.create_batch(2, owner=user)
210
211
  recipient = UserFactory()
211
212
  member = Member(user=recipient, role='editor')
212
213
  org = OrganizationFactory(members=[member])
Binary file