udata 7.0.6.dev28263__py2.py3-none-any.whl → 7.0.6.dev28345__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 (33) hide show
  1. udata/commands/dcat.py +7 -4
  2. udata/core/dataset/factories.py +2 -4
  3. udata/core/dataset/models.py +2 -5
  4. udata/core/dataset/search.py +0 -1
  5. udata/core/spatial/tests/test_api.py +7 -10
  6. udata/core/topic/factories.py +2 -2
  7. udata/harvest/backends/dcat.py +128 -24
  8. udata/harvest/tests/csw_dcat/XSLT.xml +4298 -0
  9. udata/harvest/tests/csw_dcat/geonetwork-iso-page-1.xml +1291 -0
  10. udata/harvest/tests/csw_dcat/geonetwork-iso-page-3.xml +1139 -0
  11. udata/harvest/tests/csw_dcat/geonetwork-iso-page-5.xml +1266 -0
  12. udata/harvest/tests/test_dcat_backend.py +63 -5
  13. udata/rdf.py +1 -0
  14. udata/search/__init__.py +2 -2
  15. udata/tests/api/test_datasets_api.py +43 -44
  16. udata/tests/api/test_me_api.py +13 -14
  17. udata/tests/dataset/test_dataset_actions.py +2 -2
  18. udata/tests/dataset/test_dataset_commands.py +3 -3
  19. udata/tests/organization/test_organization_model.py +3 -3
  20. udata/tests/organization/test_organization_rdf.py +3 -3
  21. udata/tests/reuse/test_reuse_model.py +2 -2
  22. udata/tests/search/test_adapter.py +12 -12
  23. udata/tests/search/test_results.py +4 -4
  24. udata/tests/site/test_site_api.py +3 -3
  25. udata/tests/site/test_site_metrics.py +3 -3
  26. udata/tests/site/test_site_rdf.py +6 -6
  27. udata/tests/test_transfer.py +18 -17
  28. {udata-7.0.6.dev28263.dist-info → udata-7.0.6.dev28345.dist-info}/METADATA +3 -1
  29. {udata-7.0.6.dev28263.dist-info → udata-7.0.6.dev28345.dist-info}/RECORD +33 -29
  30. {udata-7.0.6.dev28263.dist-info → udata-7.0.6.dev28345.dist-info}/entry_points.txt +1 -0
  31. {udata-7.0.6.dev28263.dist-info → udata-7.0.6.dev28345.dist-info}/LICENSE +0 -0
  32. {udata-7.0.6.dev28263.dist-info → udata-7.0.6.dev28345.dist-info}/WHEEL +0 -0
  33. {udata-7.0.6.dev28263.dist-info → udata-7.0.6.dev28345.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)
@@ -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])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: udata
3
- Version: 7.0.6.dev28263
3
+ Version: 7.0.6.dev28345
4
4
  Summary: Open data portal
5
5
  Home-page: https://github.com/opendatateam/udata
6
6
  Author: Opendata Team
@@ -138,10 +138,12 @@ It is collectively taken care of by members of the
138
138
 
139
139
  ## Current (in progress)
140
140
 
141
+ - Add new harvester for ISO DCAT with XSLT transform [#2982](https://github.com/opendatateam/udata/pull/2982)
141
142
  - Fix, do not fail on spatial coverage harvesting exception and allow literal spatial BBOX from Arcgis [2998](https://github.com/opendatateam/udata/pull/2998)
142
143
  - Mock calls to example.com [#3000](https://github.com/opendatateam/udata/pull/3000)
143
144
  - Fix duplicate logs in console commands [#2996](https://github.com/opendatateam/udata/pull/2996)
144
145
  - Refactor `Activity.kwargs` into `Activity.extras` to facilitate its usage [#2999](https://github.com/opendatateam/udata/pull/2999)
146
+ - :warning: Datasets without resources are now visible and indexable [#2997](https://github.com/opendatateam/udata/pull/2997)
145
147
 
146
148
  ## 7.0.5 (2024-03-20)
147
149
 
@@ -8,7 +8,7 @@ udata/errors.py,sha256=chc1880TPGteIL-Rfb9hdeAyZI4vdWZQU3JQ_5VF5t0,116
8
8
  udata/factories.py,sha256=KKPQeYzMdCxwGVLu9_Y-LxMx14cIgXA0jG2pHZ7uvFY,496
9
9
  udata/i18n.py,sha256=E-JoY57Cv4vgPvChkWjpwZAbuYVI8e6BO6raeu_3_Pw,8352
10
10
  udata/mail.py,sha256=dAMcbEtk5e54alpQezvF5adDrRPgdaT36QEdHD_5v50,2145
11
- udata/rdf.py,sha256=ClFUcb_jqQCkTme7LUD_yTACkjz97Q_5Oa5BNOxI7SE,9896
11
+ udata/rdf.py,sha256=eu_tKOGQ9Bs8yyf5QGQNE9yyXGiUxevDYAIIun_KqqI,9919
12
12
  udata/routing.py,sha256=ztmFx4YzqlEqa-HG9a43WfGYfULC95ZxTlkr4iHkzVQ,7045
13
13
  udata/sentry.py,sha256=KiZz0PpmYpZMvykH9UAbHpF4xBY0Q-8DeiEbXEHDUdw,2683
14
14
  udata/settings.py,sha256=nnFcD1DBt3IbO2a10kE5ux9Q2KyeyOvXYLSOLWlF7nw,17142
@@ -39,7 +39,7 @@ udata/auth/views.py,sha256=wxk2GEBHHqgyUk81RdeZMBWPjDn69crmtb_blkhXsNs,6164
39
39
  udata/commands/__init__.py,sha256=mTRAsySo7lH4BlLs_IP0obyhU_hUMxLNB7N8Vh1HkMY,7756
40
40
  udata/commands/cache.py,sha256=uVpb3WQdqg8NZRSiWEa7cYdcx3QyFF53UAI_f2pXtV8,341
41
41
  udata/commands/db.py,sha256=1gQwffdopW2l6BMfj0MiJ7cKLN8zfi3WLFRaIrPxQn8,11131
42
- udata/commands/dcat.py,sha256=lbID57nogPsQ1EHbZ_sysRNokNE2D8H8B33BhgIGSHw,3136
42
+ udata/commands/dcat.py,sha256=F8GVCT_arz5R_xwIygxbiis6cUSPM89C79Wlu46fR6g,3354
43
43
  udata/commands/fixtures.py,sha256=RrzRdUBJ2FbS-iDsEMPu5Nfp0WJXzU2rk3GB9t6JlRc,5852
44
44
  udata/commands/images.py,sha256=bzVvLj9LZ_nkyTdPlPe4g5U26k53VTH5ADCWmOfM8e4,2037
45
45
  udata/commands/info.py,sha256=Gf0AT8yP1tScbKLz8aXurlro55ot19sefrbOhELi034,1548
@@ -85,13 +85,13 @@ udata/core/dataset/commands.py,sha256=UO769j5PBjLNRDgy5pBEZVRgwuTBBhbwkhwmx4CEgd
85
85
  udata/core/dataset/csv.py,sha256=d6JMuvlov_vR7EN10rJa6Q03Il0PfbzMTHQIud5H8qg,3240
86
86
  udata/core/dataset/events.py,sha256=DI71VfRc1eDTtgWQ3TJx5gtUw2MO0O_CVLCKLq0OIF0,3207
87
87
  udata/core/dataset/exceptions.py,sha256=uI_NvZRZMr_MtYQBYdLD8tk-BIUeDDfMMcrWwqV7mi8,494
88
- udata/core/dataset/factories.py,sha256=yWW6pb-fcLxUvAVTn7hNJ4ZIcihiaclWu5TDfeCJWTE,2807
88
+ udata/core/dataset/factories.py,sha256=_sAW0FeEPC5bIKVCnjxnWmKBNU5jRss1AjVaQaMi8Lo,2737
89
89
  udata/core/dataset/forms.py,sha256=auVYxLrPMdtvf2uhgEpJviHiQOSfLpBJdpZ3dXwcjNs,6154
90
- udata/core/dataset/models.py,sha256=SK16LJP_vlSkeGrLJTFbHFNc9iHWwM6_A6DOT0SX5D4,39609
90
+ udata/core/dataset/models.py,sha256=T9dBPoeex6ohQqPcDKxwAb6GhqGN0rED7Vjw6MLDz2s,39461
91
91
  udata/core/dataset/permissions.py,sha256=3F2J7le3_rEYNhh88o3hSRWHAAt01_yHJM6RPmvCrRo,1090
92
92
  udata/core/dataset/preview.py,sha256=puPKT3fBD7ezAcT6owh0JK1_rGNDFZOqgT223qGn3LY,2597
93
93
  udata/core/dataset/rdf.py,sha256=pwYQLzpWXAZWThOMVx70pusTb7SzLgk7wh_9-ldPFAY,22808
94
- udata/core/dataset/search.py,sha256=LOHtOJYZJDPJ5S_Ch7QmmvInpw8aysmNlzbAWbMq9d0,5329
94
+ udata/core/dataset/search.py,sha256=GAdXBI8RhBXPUxd9Mp-44QB-Evwk5Be5XZZJ64T8bQQ,5282
95
95
  udata/core/dataset/signals.py,sha256=TK6dfrOUitZZkGGOh6XmhYqYvIjzZpI70JTLV4k-JRM,161
96
96
  udata/core/dataset/tasks.py,sha256=VB1sQ6Fwbax46IRLGyZUDPGgGOWBYrzAlKzV3npDCyM,8412
97
97
  udata/core/discussions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -185,7 +185,7 @@ udata/core/spatial/geoids.py,sha256=UqCto4dtQYPXOxyG7sx_0npzM6yvId40ngw3eAlmioQ,
185
185
  udata/core/spatial/models.py,sha256=WA1jXgw6LYU_5uRrB8WXDIYYFZl4mzbRnJ5_VMkobRA,5105
186
186
  udata/core/spatial/translations.py,sha256=7BjZAMPObm1fwM5U_wnrlpcG-1FtMoS6Z5E3h3Y3sog,533
187
187
  udata/core/spatial/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
- udata/core/spatial/tests/test_api.py,sha256=o1iPED3Vz9uw_g25LAi4KIvVMpXy_fp5icLX3JlT3-Q,10302
188
+ udata/core/spatial/tests/test_api.py,sha256=BySPgLpHvWs3vBIX2_7vJkuqfrFBIsTHtdg6PXOsE_U,10171
189
189
  udata/core/spatial/tests/test_fields.py,sha256=MjMsx-2ejsXDvo2iaGewZsOEbSuKwudmA5nKLOdPdTc,9745
190
190
  udata/core/spatial/tests/test_geoid.py,sha256=ovVphCxHb5a-iWl7eoLASRAFUY0CGfNEq-MuqHqTPgE,1533
191
191
  udata/core/spatial/tests/test_models.py,sha256=SZx3NhngXWgVon5BKtP0pPPEdvxGTvHQlYFE-fewzTU,951
@@ -203,7 +203,7 @@ udata/core/tags/views.py,sha256=BoBktrbx0tqkIu3yYLj_XJjB7ZHu_tq5vfEBrh0MUwI,384
203
203
  udata/core/topic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
204
204
  udata/core/topic/api.py,sha256=G3hN4e9rK5mIYvDLvPpAOo_DN2SySAGykVVvXGx4uMY,5105
205
205
  udata/core/topic/apiv2.py,sha256=cf-WUSZ7P6Tss3S8utS-uhreLgGI5XR3nn_1UWiZ_Xs,9846
206
- udata/core/topic/factories.py,sha256=BEk6YZdaHK-XzCNyD5v_HIKahMe7Lp8aKOlCZLuivtk,711
206
+ udata/core/topic/factories.py,sha256=Vy9dMVSI6XMeAWhxLH1OFJ0vbmEoOtStPDE6HF_nIc4,697
207
207
  udata/core/topic/forms.py,sha256=XqGI4nANdsm2UkIiGAuVqEdZkN5N9sqJ4VaM_PhTaVQ,987
208
208
  udata/core/topic/models.py,sha256=PZsYfiuEU86iL1x-qvDevn4Io8lKGahAbqky03j1N2k,2071
209
209
  udata/core/topic/parsers.py,sha256=oe_4ehnlgPKre2GG1LA6hcQa6H5V5q1adUsQIzVqb_Q,876
@@ -263,17 +263,21 @@ udata/harvest/signals.py,sha256=wlXTi1E7rIVyNvxw0yUqyN5gF3thg276LAOmAF9vDJY,1338
263
263
  udata/harvest/tasks.py,sha256=0VhefKCQJSU_puTpdKOpvt3WORXHAFWGEB-R_MhB12M,1981
264
264
  udata/harvest/backends/__init__.py,sha256=qcLhHKWO97TeWd93ZwymG_Cc9FO7sMM7h4fs6XYdtS8,447
265
265
  udata/harvest/backends/base.py,sha256=oaPQcQ0onIXH5ofUtWH5sM6_5_wSBLawHSOjeeoG6jQ,12258
266
- udata/harvest/backends/dcat.py,sha256=U7PjYfpBTYEEmk-lQdkXfMcaCa39gSlL5Gy4ywqhAQo,10504
266
+ udata/harvest/backends/dcat.py,sha256=SCbWorkuNzM7OvzFzBh1Is4QTWquOcnCLa_yd3HbgW0,14846
267
267
  udata/harvest/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
268
268
  udata/harvest/tests/factories.py,sha256=CbQORC1OJ1_Agtv_3LjCXysNumjMYlROwZPSEAHo8sM,2005
269
269
  udata/harvest/tests/test_actions.py,sha256=7xSpouCAcf5p_bd38zHCyPN7sKWUUZXA7IlpI-yNVrQ,27603
270
270
  udata/harvest/tests/test_api.py,sha256=QXhseHfnkBEmMbIJzroMdDYGLDj6Njal1s-2sn0xhEM,14888
271
271
  udata/harvest/tests/test_base_backend.py,sha256=JA8Df1Eu-lEPLZfxyK81bsmT6exOjV_3PtKHJekAp5g,12092
272
- udata/harvest/tests/test_dcat_backend.py,sha256=T0cz5jPHr7h4dxxeq7-aJe53hRwNY_HGMiKVWwZeuMI,29379
272
+ udata/harvest/tests/test_dcat_backend.py,sha256=zZea9e2awtFiLrdREeaHcp9d6tSHhAHEuXr_fc5fKjk,32462
273
273
  udata/harvest/tests/test_filters.py,sha256=V2HFZlexIJa6r1DX6g2ktvIgjg4gSY11QPfPOd3_Oug,2370
274
274
  udata/harvest/tests/test_models.py,sha256=p2VazyrPXSArBuf8Kf19TGPcQ86SnOGCGmvjcMOw0s0,924
275
275
  udata/harvest/tests/test_notifications.py,sha256=ZwtwioittW3XcZc0x6zbHjs1dVaAxPytlVymnJa5w0E,817
276
276
  udata/harvest/tests/test_tasks.py,sha256=OfUnsg6x3DtbS2s3ToRDZY46aqqmbowN1sqASmsLaN4,680
277
+ udata/harvest/tests/csw_dcat/XSLT.xml,sha256=vnJF2rom7oPVpzI9jwzwG6ek1TDXTY8GfbuQq_3vFxs,180475
278
+ udata/harvest/tests/csw_dcat/geonetwork-iso-page-1.xml,sha256=cANO-kr4NEDgq7n6pG_9hnOcPrYPinG6GuKoZWuPV3g,82058
279
+ udata/harvest/tests/csw_dcat/geonetwork-iso-page-3.xml,sha256=sLzItw0Pxl68qn-XB64IqZGHJGcdVPJvCNliYK9GFV4,67901
280
+ udata/harvest/tests/csw_dcat/geonetwork-iso-page-5.xml,sha256=uzCyMx0HsoVJhTFvh8hyFxWDdOUuiRzPYiDXv_zVmfY,81713
277
281
  udata/harvest/tests/csw_dcat/geonetworkv4-page-1.xml,sha256=k2pKidlQvJpoltGFm9HNh6KHai7nrPcpinDSQS4dGkQ,17040
278
282
  udata/harvest/tests/csw_dcat/geonetworkv4-page-3.xml,sha256=fsN0E4TVd_ts-sYA612yBP-gRAwpyQWqJdNm7ohczbs,20945
279
283
  udata/harvest/tests/csw_dcat/geonetworkv4-page-5.xml,sha256=0VmPp1kspik7YAmOFyr-3yJLzWGA6kuQp_x_w-W385o,21213
@@ -330,7 +334,7 @@ udata/models/url_field.py,sha256=a7FEaDpZKbox8OVfLl4dYno1DFmvxUvHmhzUK2ekSfM,136
330
334
  udata/models/uuid_fields.py,sha256=6OUr6yFtoFK5lUZPTjQPF5qSsiP7D79z3DNOffGPCo4,481
331
335
  udata/notifications/__init__.py,sha256=cM-wpmzBESXhdac_SNjRIHcexJK8eknmB4MR8L7K3v0,51
332
336
  udata/notifications/mattermost.py,sha256=WAmhG86u2ppQyQ8LPGpWyjPmnhrIrJm-kf_bD-8IjwM,782
333
- udata/search/__init__.py,sha256=lAvKjArQiS0rt7MBhgnFN7XuPxk_tuPbQwZIf_ai5Bk,3977
337
+ udata/search/__init__.py,sha256=Nq4S30860SR3YtCycuA1JEUOEzLGyTAcSAd0lS7Z7u4,3975
334
338
  udata/search/adapter.py,sha256=ggtr-_BaO1M40CGKnkAgy2XFNPX57ONusoC4UqJa8bE,2264
335
339
  udata/search/commands.py,sha256=UvxfSTmWj1Je72dE25TpmBhn6KPpDm-PlQlsfi0cc10,5577
336
340
  udata/search/fields.py,sha256=_bT_AcIOmuJEhnnatScRsPYNWsK_ZWpl2yT8ZnK7-dc,1843
@@ -560,17 +564,17 @@ udata/tests/test_routing.py,sha256=iulqXvEWo7ykprUTY0BTAt_gTeHi4cs_dLAPokQ3Iv8,1
560
564
  udata/tests/test_storages.py,sha256=V1yaaa2z_cJuy5tIP9uBPeUZxYXqccpYZ_bMVOUQ0c0,9329
561
565
  udata/tests/test_tags.py,sha256=zd-w9rZ_Iaj6Z2S1diCWzNrEtOSuBGakTHhD_pIUE1o,3754
562
566
  udata/tests/test_topics.py,sha256=r7Y0BW0Z5obld9ASs2Ck9AhykgBtmMedZmL2Bfz_rDw,1323
563
- udata/tests/test_transfer.py,sha256=gQteI1b8qPEpaZfVsMPxkUxAskxsLhenJgUTtpNyluk,8003
567
+ udata/tests/test_transfer.py,sha256=Y0adyR3CswK2Vvao7DgpP_19b8K6XwNO2dvbKlmnlD0,8036
564
568
  udata/tests/test_uris.py,sha256=FQJvz7RXkr21tZ7rZp2uwgZUHk88PxhYId-jXSAl9GM,8519
565
569
  udata/tests/test_utils.py,sha256=5awzhJlbnLga0mRXNR2mBGW_kGuAIoQLEZEMQRKuaIM,7944
566
570
  udata/tests/api/__init__.py,sha256=Tz_WigHLDlnJNKOKzEAnJswkKiLtHlIpCE54-wgocgM,957
567
571
  udata/tests/api/test_auth_api.py,sha256=3Zhn2A29poZIcCJ_R9_-LkR3xOFUTw1aTquiZVXQ2F0,20306
568
572
  udata/tests/api/test_base_api.py,sha256=DRX5nuFIj51GFmMIAxUzoW1yiq1apNgr1vS4U4agzeg,2319
569
573
  udata/tests/api/test_contact_points.py,sha256=MJm8B06iaUqIZCqxll3NViFwUCxwqZZ4u9e9s1h8MgU,1056
570
- udata/tests/api/test_datasets_api.py,sha256=HI4roeYTM9uO6OWv7y8nlHZnM5An4PHkFvqhFSmEBLY,81446
574
+ udata/tests/api/test_datasets_api.py,sha256=Wdy0HfWKVtMBhMA9OJVs3WXOpmVi_dKlx1-OoekKNw0,81204
571
575
  udata/tests/api/test_fields.py,sha256=OW85Z5MES5HeWOpapeem8OvR1cIcrqW-xMWpdZO4LZ8,1033
572
576
  udata/tests/api/test_follow_api.py,sha256=0h54P_Dfbo07u6tg0Rbai1WWgWb19ZLN2HGv4oLCWfg,3383
573
- udata/tests/api/test_me_api.py,sha256=-JskdyxcbREceC1PxMj9NUs6QBE3YzKa5TXhHIaPy-o,14275
577
+ udata/tests/api/test_me_api.py,sha256=8OthqVYQKZrFoGuJ7zAvoLJx1IclPNzPdD5Tnzmh3rM,14163
574
578
  udata/tests/api/test_organizations_api.py,sha256=HxeTqP14wlWGaQt4fpQljuRy98HWnmL1QelcxbJDmV0,32704
575
579
  udata/tests/api/test_reuses_api.py,sha256=gQ-o4JXK2S6z2yW13-i8e81pCdr9j2yyM1KinPbkc5g,16971
576
580
  udata/tests/api/test_swagger.py,sha256=tLg452rCD5Q0AgFXOVZKMM6jGiWwC5diX5PxbdYni0o,760
@@ -589,8 +593,8 @@ udata/tests/data/image.jpg,sha256=hdmpaCjOhmAAfNGuTqWKEjv7IC4GXJx-nP_rT274hc8,33
589
593
  udata/tests/data/image.png,sha256=GAqXz7w_u7CapODIUF45UpVddmqelnGQkcrwKZq3448,266488
590
594
  udata/tests/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
591
595
  udata/tests/dataset/test_csv_adapter.py,sha256=2r5z4FuqG9pWgUyfDUw8afQYK5nIKE8XXOCuDHmEcZA,3207
592
- udata/tests/dataset/test_dataset_actions.py,sha256=Xi2TmNtq9g3imP-FcVXSwSFrylS7kkCad39yt14ONiY,737
593
- udata/tests/dataset/test_dataset_commands.py,sha256=gZGMOR0cz8paY2mbdrtqMAdoYK-ZBaBSvzHGMyso4zM,823
596
+ udata/tests/dataset/test_dataset_actions.py,sha256=4_0F_TCSCfHpzqDt659c8hG4GpkWjVtmT4bAPgmE4B8,723
597
+ udata/tests/dataset/test_dataset_commands.py,sha256=TAgVdimIcBVmcSNKXKXbhmCGYRo8Keh_InBNiS6UlkM,802
594
598
  udata/tests/dataset/test_dataset_events.py,sha256=zt6F4j_vOBfMxDW6vBVQ5PGwr0d4s6LGw0cGkt9BlvI,2835
595
599
  udata/tests/dataset/test_dataset_model.py,sha256=m-LtxaxNlXwNxtG_yoBYZ3lu6DdOR82ms4TDlK1a5KY,29776
596
600
  udata/tests/dataset/test_dataset_rdf.py,sha256=0lyHiP9eZdIHUkvgQQ6Dw_LMaXX2SHTxiJdLIorizaw,29389
@@ -623,21 +627,21 @@ udata/tests/frontend/test_markdown.py,sha256=KHh0rFfWHqzes0qvLPPFc7uV_IPSS7ymVsQ
623
627
  udata/tests/organization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
624
628
  udata/tests/organization/test_csv_adapter.py,sha256=u2w5EOvkz6BH3ACdzW4MdzjOpbHRn-nq67HTmC_8hYA,1568
625
629
  udata/tests/organization/test_notifications.py,sha256=rR1iGtMSmP9htrDJTIVZdvvgO3YNtfoADySGsMzzWdE,1410
626
- udata/tests/organization/test_organization_model.py,sha256=3VdpRPPnhPkRN0yj-hTYIclXWUUCuU1oMQG_gMl22wA,2046
627
- udata/tests/organization/test_organization_rdf.py,sha256=XPk__wiDeF8E02ORR0v9LIyUK2QJ6hJB_lqjxesCApQ,6354
630
+ udata/tests/organization/test_organization_model.py,sha256=0Rx7913-4NFFrcPKMTxMAnEanHR1tu6tuhg6ysbcDLg,2044
631
+ udata/tests/organization/test_organization_rdf.py,sha256=KtZTSCafe67bodyxeXtguydHOZgYrB131ByctS7uje4,6333
628
632
  udata/tests/organization/test_organization_tasks.py,sha256=GZMqwJa8gZj1EiQjm6z-OtFgCTNviG40yZo-Es_-7Yo,2859
629
633
  udata/tests/reuse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
630
- udata/tests/reuse/test_reuse_model.py,sha256=XrAToYSnf8LNAv5Xj99C7-5PEo1WbnBSDs63OWrbPBo,3723
634
+ udata/tests/reuse/test_reuse_model.py,sha256=HWa4_8c3zI-7BMJ3dH_x9Yj7p2sSRCVyT1uyYD0_9Qo,3709
631
635
  udata/tests/reuse/test_reuse_task.py,sha256=_aGLPhvFunsNv7_tV8UmLT0obxDegxurchiZ0N_trbs,1396
632
636
  udata/tests/search/__init__.py,sha256=tSM40xpdgP9bj3299GEDJVCIaxvNj-hklCS50SuTQL0,1495
633
- udata/tests/search/test_adapter.py,sha256=_d804VkbmY6MMb8w40bc-t_ERNr1D00jS3y83NxMUL4,7136
637
+ udata/tests/search/test_adapter.py,sha256=RpQo3tjaV3G2tnLw1vxRWhSZzOqIb-RM0s4U0oN9fEI,7091
634
638
  udata/tests/search/test_query.py,sha256=wtgC4rkaxe8vIaWOcANZ1yFFkEKTdNHj2yiTaYI-R-M,1406
635
- udata/tests/search/test_results.py,sha256=Lnmulp9U3eGNDdiN6TqVg7fIuLiK8UDZdkcv7tiNCEI,2026
639
+ udata/tests/search/test_results.py,sha256=yjeqxNKVbjMxxvUsZb7csfU3wsV_YNjBDnfYRw5QN-s,1998
636
640
  udata/tests/site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
637
- udata/tests/site/test_site_api.py,sha256=KK13ihX77O7Ou3kv-jK49qVhTFiMyfdJvQdjmxWxIrY,2297
638
- udata/tests/site/test_site_metrics.py,sha256=YpTG59SKXYWeA2YWCoonAOLBDak-oM3Nf54RwlaRDVQ,2220
641
+ udata/tests/site/test_site_api.py,sha256=XIjRH-iiwKdwmX145bQflxOatfIChi5RLikIMwJSbjQ,2276
642
+ udata/tests/site/test_site_metrics.py,sha256=z0_kLpV5SNUBgvR5y3T_uv1m2xD9aBDdQc6tjI6ARXw,2218
639
643
  udata/tests/site/test_site_model.py,sha256=nAx9JjEKdfjdw1Kj5Rs7P5FEePoATtCuOYPiSXEnVD0,1313
640
- udata/tests/site/test_site_rdf.py,sha256=0--1FuR1u2nIn0xUB7bnsEXDpxCYrONY6q5Z8Anlaqc,9729
644
+ udata/tests/site/test_site_rdf.py,sha256=M360uq2A6hl1WhmyRmRjvzuSqz_YFIUQNPR4vqWnYnE,9687
641
645
  udata/tests/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
642
646
  udata/tests/user/test_user_rdf.py,sha256=HrKirMURUXS9N3If_NMb8qnfJ4kE9IZymR1SPcNvlF0,1851
643
647
  udata/tests/workers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -660,9 +664,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=zCVMB-a4-mLM1jNyYMk58rgVRaVIwQ
660
664
  udata/translations/pt/LC_MESSAGES/udata.po,sha256=avfWczvlLBKSohyB55-4TLmUGMU_Rze4XmAo4OTk2v0,43513
661
665
  udata/translations/sr/LC_MESSAGES/udata.mo,sha256=ScuqdpaV4y1ZIpBAEfxeaKdzkyGZL0mJmKMoG6w0iRQ,28553
662
666
  udata/translations/sr/LC_MESSAGES/udata.po,sha256=QpgEXh1eHjztPa7oNLXd_sds1DC95A-STTtZyTE4m-E,50093
663
- udata-7.0.6.dev28263.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
664
- udata-7.0.6.dev28263.dist-info/METADATA,sha256=2zJTXq_j2szvACqYhZsB6GFJNzIZf1KQXM-EuVgcvvQ,119888
665
- udata-7.0.6.dev28263.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
666
- udata-7.0.6.dev28263.dist-info/entry_points.txt,sha256=ZqIUHhOth0MMQvMIeuhODbUCDwjR-Hvo7PaKrMwTKuQ,384
667
- udata-7.0.6.dev28263.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
668
- udata-7.0.6.dev28263.dist-info/RECORD,,
667
+ udata-7.0.6.dev28345.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
668
+ udata-7.0.6.dev28345.dist-info/METADATA,sha256=pbVHm_KkTEg4A4_cWu7KJfLClR59GQXjTX5zd2MJPzc,120125
669
+ udata-7.0.6.dev28345.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
670
+ udata-7.0.6.dev28345.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
671
+ udata-7.0.6.dev28345.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
672
+ udata-7.0.6.dev28345.dist-info/RECORD,,
@@ -11,4 +11,5 @@ robohash = udata.features.identicon.backends:robohash
11
11
 
12
12
  [udata.harvesters]
13
13
  csw-dcat = udata.harvest.backends.dcat:CswDcatBackend
14
+ csw-iso-19139 = udata.harvest.backends.dcat:CswIso19139DcatBackend
14
15
  dcat = udata.harvest.backends.dcat:DcatBackend