udata 10.0.5.dev32957__py2.py3-none-any.whl → 10.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.

udata/__init__.py CHANGED
@@ -4,5 +4,5 @@
4
4
  udata
5
5
  """
6
6
 
7
- __version__ = "10.0.5.dev"
7
+ __version__ = "10.0.6"
8
8
  __description__ = "Open data portal"
udata/commands/dcat.py CHANGED
@@ -2,7 +2,8 @@ import logging
2
2
 
3
3
  import click
4
4
  import mongoengine
5
- from rdflib import Graph
5
+ from rdflib import Graph, URIRef
6
+ from rdflib.namespace import RDF
6
7
 
7
8
  from udata.commands import cli, cyan, echo, green, magenta, yellow
8
9
  from udata.core.dataset.factories import DatasetFactory
@@ -12,7 +13,8 @@ from udata.harvest.backends.dcat import (
12
13
  CswIso19139DcatBackend,
13
14
  DcatBackend,
14
15
  )
15
- from udata.rdf import namespace_manager
16
+ from udata.harvest.models import HarvestItem
17
+ from udata.rdf import DCAT, DCT, namespace_manager
16
18
 
17
19
  log = logging.getLogger(__name__)
18
20
 
@@ -61,15 +63,22 @@ def parse_url(url, csw, iso, quiet=False, rid=""):
61
63
  backend.job = MockJob()
62
64
  format = backend.get_format()
63
65
  echo(yellow("Detected format: {}".format(format)))
64
- graphs = backend.parse_graph(url, format)
66
+ graphs = backend.walk_graph(url, format)
65
67
 
66
68
  # serialize/unserialize graph like in the job mechanism
67
69
  graph = Graph(namespace_manager=namespace_manager)
68
- for subgraph in graphs:
70
+ for page_number, subgraph in graphs:
69
71
  serialized = subgraph.serialize(format=format, indent=None)
70
72
  _subgraph = Graph(namespace_manager=namespace_manager)
71
73
  graph += _subgraph.parse(data=serialized, format=format)
72
74
 
75
+ for node in subgraph.subjects(RDF.type, DCAT.Dataset):
76
+ identifier = subgraph.value(node, DCT.identifier)
77
+ kwargs = {"nid": str(node), "page": page_number}
78
+ kwargs["type"] = "uriref" if isinstance(node, URIRef) else "blank"
79
+ item = HarvestItem(remote_id=str(identifier), kwargs=kwargs)
80
+ backend.job.items.append(item)
81
+
73
82
  for item in backend.job.items:
74
83
  if not rid or rid in item.remote_id:
75
84
  echo(magenta("Processing item {}".format(item.remote_id)))
@@ -156,12 +156,10 @@ def dataservice_to_rdf(dataservice: Dataservice, graph=None):
156
156
 
157
157
  if is_hvd:
158
158
  # We also want to automatically add any HVD category tags of the dataservice's datasets.
159
- for dataset in dataservice.datasets:
160
- if "hvd" not in dataset.tags: # Only check HVD datasets for their categories.
161
- continue
162
- for tag in dataset.tags:
163
- if tag in TAG_TO_EU_HVD_CATEGORIES:
164
- hvd_category_tags.add(tag)
159
+ dataset_ids = [dat.id for dat in dataservice.datasets]
160
+ for tag in TAG_TO_EU_HVD_CATEGORIES:
161
+ if Dataset.objects(id__in=dataset_ids, tags="hvd").filter(tags=tag).first():
162
+ hvd_category_tags.add(tag)
165
163
  for tag in hvd_category_tags:
166
164
  d.add(DCATAP.hvdCategory, URIRef(TAG_TO_EU_HVD_CATEGORIES[tag]))
167
165
 
@@ -1,8 +1,7 @@
1
1
  from celery.utils.log import get_task_logger
2
2
 
3
3
  from udata.core.dataservices.models import Dataservice
4
-
5
- # from udata.harvest.models import HarvestJob
4
+ from udata.harvest.models import HarvestJob
6
5
  from udata.models import Discussion, Follow, Transfer
7
6
  from udata.tasks import job
8
7
 
@@ -18,8 +17,7 @@ def purge_dataservices(self):
18
17
  # Remove discussions
19
18
  Discussion.objects(subject=dataservice).delete()
20
19
  # Remove HarvestItem references
21
- # TODO: uncomment when adding dataservice harvest
22
- # HarvestJob.objects(items__dataservice=dataservice).update(set__items__S__dataservice=None)
20
+ HarvestJob.objects(items__dataservice=dataservice).update(set__items__S__dataservice=None)
23
21
  # Remove associated Transfers
24
22
  Transfer.objects(subject=dataservice).delete()
25
23
  # Remove dataservice
@@ -48,6 +48,11 @@ def purge_datasets(self):
48
48
  datasets = topic.datasets
49
49
  datasets.remove(dataset)
50
50
  topic.update(datasets=datasets)
51
+ # Remove dataservices related dataset
52
+ for dataservice in Dataservice.objects(datasets=dataset):
53
+ datasets = dataservice.datasets
54
+ datasets.remove(dataset)
55
+ dataservice.update(datasets=datasets)
51
56
  # Remove HarvestItem references
52
57
  HarvestJob.objects(items__dataset=dataset).update(set__items__S__dataset=None)
53
58
  # Remove associated Transfers
@@ -123,7 +128,11 @@ def send_frequency_reminder(self):
123
128
  def update_datasets_reuses_metrics(self):
124
129
  all_datasets = Dataset.objects.visible().timeout(False)
125
130
  for dataset in all_datasets:
126
- dataset.count_reuses()
131
+ try:
132
+ dataset.count_reuses()
133
+ except Exception as e:
134
+ log.error(f"Error for dataset {dataset} during reuses metrics update: {e}")
135
+ continue
127
136
 
128
137
 
129
138
  def get_queryset(model_cls):
@@ -117,7 +117,7 @@ class Organization(WithMetrics, OrganizationBadgeMixin, db.Datetimed, db.Documen
117
117
  max_length=255, required=True, populate_from="name", update=True, follow=True
118
118
  )
119
119
  description = db.StringField(required=True)
120
- url = db.StringField()
120
+ url = db.URLField()
121
121
  image_url = db.StringField()
122
122
  logo = db.ImageField(
123
123
  fs=avatars, basename=default_image_basename, max_size=LOGO_MAX_SIZE, thumbnails=LOGO_SIZES
udata/core/post/api.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from datetime import datetime
2
2
 
3
3
  from udata.api import API, api, fields
4
+ from udata.auth import Permission as AdminPermission
4
5
  from udata.auth import admin_permission
5
6
  from udata.core.dataset.api_fields import dataset_fields
6
7
  from udata.core.reuse.models import Reuse
@@ -60,6 +61,13 @@ parser = api.page_parser()
60
61
  parser.add_argument(
61
62
  "sort", type=str, default="-created_at", location="args", help="The sorting attribute"
62
63
  )
64
+ parser.add_argument(
65
+ "with_drafts",
66
+ type=bool,
67
+ default=False,
68
+ location="args",
69
+ help="`True` also returns the unpublished posts (only for super-admins)",
70
+ )
63
71
 
64
72
 
65
73
  @ns.route("/", endpoint="posts")
@@ -70,11 +78,13 @@ class PostsAPI(API):
70
78
  def get(self):
71
79
  """List all posts"""
72
80
  args = parser.parse_args()
73
- return (
74
- Post.objects.published()
75
- .order_by(args["sort"])
76
- .paginate(args["page"], args["page_size"])
77
- )
81
+
82
+ posts = Post.objects()
83
+
84
+ if not (AdminPermission().can() and args["with_drafts"]):
85
+ posts = posts.published()
86
+
87
+ return posts.order_by(args["sort"]).paginate(args["page"], args["page_size"])
78
88
 
79
89
  @api.doc("create_post")
80
90
  @api.secure(admin_permission)
@@ -15,14 +15,28 @@ class PostsAPITest:
15
15
 
16
16
  def test_post_api_list(self, api):
17
17
  """It should fetch a post list from the API"""
18
- posts = PostFactory.create_batch(3)
19
- posts.append(PostFactory(published=None))
18
+ PostFactory.create_batch(3)
19
+ draft = PostFactory(published=None)
20
20
 
21
21
  response = api.get(url_for("api.posts"))
22
22
  assert200(response)
23
23
  # Response should not contain the unpublished post
24
24
  assert len(response.json["data"]) == 3
25
25
 
26
+ api.login(AdminFactory())
27
+
28
+ response = api.get(url_for("api.posts"))
29
+ assert200(response)
30
+
31
+ assert len(response.json["data"]) == 3
32
+ assert str(draft.id) not in [post["id"] for post in response.json["data"]]
33
+
34
+ response = api.get(url_for("api.posts", with_drafts=True))
35
+ assert200(response)
36
+
37
+ assert len(response.json["data"]) == 4
38
+ assert str(draft.id) in [post["id"] for post in response.json["data"]]
39
+
26
40
  def test_post_api_get(self, api):
27
41
  """It should fetch a post from the API"""
28
42
  post = PostFactory()
udata/harvest/tasks.py CHANGED
@@ -13,8 +13,9 @@ def harvest(self, ident):
13
13
  log.info('Launching harvest job for source "%s"', ident)
14
14
 
15
15
  source = HarvestSource.get(ident)
16
- if source.deleted:
17
- return # Ignore deleted sources
16
+ if source.deleted or not source.active:
17
+ log.info('Ignoring inactive or deleted source "%s"', ident)
18
+ return # Ignore deleted and inactive sources
18
19
  Backend = backends.get(current_app, source.backend)
19
20
  backend = Backend(source)
20
21
 
@@ -3,6 +3,8 @@ import pytest
3
3
  from udata.core.dataservices import tasks
4
4
  from udata.core.dataservices.models import Dataservice
5
5
  from udata.core.user.factories import UserFactory
6
+ from udata.harvest.models import HarvestItem, HarvestJob
7
+ from udata.harvest.tests.factories import HarvestJobFactory
6
8
  from udata.models import Discussion, Follow, Message, Transfer
7
9
  from udata.utils import faker
8
10
 
@@ -34,9 +36,12 @@ def test_purge_dataservices():
34
36
 
35
37
  follower = Follow.objects.create(follower=user, following=dataservices[0])
36
38
 
39
+ HarvestJobFactory(items=[HarvestItem(dataservice=dataservices[0])])
40
+
37
41
  tasks.purge_dataservices()
38
42
 
39
43
  assert Dataservice.objects.count() == 1
40
44
  assert Transfer.objects.filter(id=transfer.id).count() == 0
41
45
  assert Discussion.objects.filter(id=discussion.id).count() == 0
42
46
  assert Follow.objects.filter(id=follower.id).count() == 0
47
+ assert HarvestJob.objects.filter(items__dataservice=dataservices[0].id).count() == 0
@@ -1,17 +1,20 @@
1
1
  import pytest
2
2
 
3
- from udata.core.dataset import tasks
4
-
5
3
  # Those imports seem mandatory for the csv adapters to be registered.
6
4
  # This might be because of the decorator mechanism.
5
+ from udata.core.dataservices.models import Dataservice
6
+ from udata.core.dataset import tasks
7
7
  from udata.core.dataset.csv import DatasetCsvAdapter, ResourcesCsvAdapter # noqa
8
8
  from udata.core.dataset.factories import CommunityResourceFactory, DatasetFactory
9
+ from udata.core.discussions.factories import DiscussionFactory
9
10
  from udata.core.organization.csv import OrganizationCsvAdapter # noqa
10
11
  from udata.core.reuse.csv import ReuseCsvAdapter # noqa
11
12
  from udata.core.tags.csv import TagCsvAdapter # noqa
12
13
  from udata.core.user.factories import UserFactory
13
14
  from udata.harvest.csv import HarvestSourceCsvAdapter # noqa
14
- from udata.models import CommunityResource, Dataset, Topic, Transfer
15
+ from udata.harvest.models import HarvestItem, HarvestJob
16
+ from udata.harvest.tests.factories import HarvestJobFactory
17
+ from udata.models import CommunityResource, Dataset, Discussion, Follow, Topic, Transfer
15
18
 
16
19
  pytestmark = pytest.mark.usefixtures("clean_db")
17
20
 
@@ -32,6 +35,14 @@ def test_purge_datasets():
32
35
  comment="comment",
33
36
  )
34
37
 
38
+ discussion = DiscussionFactory(subject=datasets[0])
39
+
40
+ follower = Follow.objects.create(follower=user, following=datasets[0])
41
+
42
+ HarvestJobFactory(items=[HarvestItem(dataset=datasets[0])])
43
+
44
+ Dataservice.objects.create(title="test", datasets=datasets)
45
+
35
46
  tasks.purge_datasets()
36
47
 
37
48
  assert Transfer.objects.filter(id=transfer.id).count() == 0
@@ -39,6 +50,11 @@ def test_purge_datasets():
39
50
  topic = Topic.objects(name="test topic").first()
40
51
  assert topic.datasets[0] == datasets[1]
41
52
 
53
+ assert Discussion.objects.filter(id=discussion.id).count() == 0
54
+ assert Follow.objects.filter(id=follower.id).count() == 0
55
+ assert HarvestJob.objects.filter(items__dataset=datasets[0].id).count() == 0
56
+ assert Dataservice.objects.filter(datasets=datasets[0].id).count() == 0
57
+
42
58
 
43
59
  def test_purge_datasets_community():
44
60
  dataset = Dataset.objects.create(title="delete me", deleted="2016-01-01")
@@ -1,5 +1,7 @@
1
1
  from datetime import datetime
2
2
 
3
+ import pytest
4
+
3
5
  import udata.core.organization.constants as org_constants
4
6
  from udata.core.dataservices.factories import DataserviceFactory
5
7
  from udata.core.dataservices.models import Dataservice
@@ -81,6 +83,10 @@ class OrganizationModelTest(TestCase, DBTestMixin):
81
83
  assert len(associations) == 1
82
84
  assert org_certified_association in associations
83
85
 
86
+ def test_organization__url(self):
87
+ with pytest.raises(db.ValidationError):
88
+ OrganizationFactory(url="not-an-url")
89
+
84
90
 
85
91
  class OrganizationBadgeTest(DBTestMixin, TestCase):
86
92
  # Model badges can be extended in plugins, for example in udata-front
@@ -0,0 +1,26 @@
1
+ import pytest
2
+
3
+
4
+ @pytest.mark.usefixtures("clean_db")
5
+ class ParseUrlCommandTest:
6
+ def test_parse_url(self, cli, requests_mock, caplog) -> None:
7
+ logs = []
8
+
9
+ def mock_echo(message: str) -> None:
10
+ logs.append(message)
11
+
12
+ local_file: str = "./udata/harvest/tests/dcat/sig.oreme.rdf"
13
+ # This mock_url is to make requests' url parsing happy, but the mock will return the local file content.
14
+ mock_url = "https://example.com/sig.oreme.rdf"
15
+ with open(local_file, "r") as test_rdf_file:
16
+ requests_mock.get(mock_url, text=test_rdf_file.read())
17
+ requests_mock.head(mock_url, text="sig.oreme.rdf")
18
+ dataset_id = "0437a976-cff1-4fa6-807a-c23006df2f8f"
19
+ result = cli(
20
+ "dcat",
21
+ "parse-url",
22
+ mock_url,
23
+ "--rid",
24
+ dataset_id,
25
+ )
26
+ assert "Dataset is valid" in result.stdout
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: udata
3
- Version: 10.0.5.dev32957
3
+ Version: 10.0.6
4
4
  Summary: Open data portal
5
5
  Home-page: https://github.com/opendatateam/udata
6
6
  Author: Opendata Team
@@ -138,7 +138,18 @@ It is collectively taken care of by members of the
138
138
 
139
139
  # Changelog
140
140
 
141
- ## Current (in progress)
141
+ ## 10.0.6 (2024-12-19)
142
+
143
+ - Ignore inactive sources at harvest time [#3226](https://github.com/opendatateam/udata/pull/3226)
144
+ - If some harvest sources were marked inactive by mistake, they won't get executed anymore
145
+ - Organization url is now a URLField and should be a valid URL [#3227](https://github.com/opendatateam/udata/pull/3227)
146
+ - Fix the `parse-url` command [#3225](https://github.com/opendatateam/udata/pull/3225)
147
+ - Add `with_drafts` argument to posts API [#3229](https://github.com/opendatateam/udata/pull/3229)
148
+ - Fix failing dataset save in update reuses metrics [#3230](https://github.com/opendatateam/udata/pull/3230)
149
+ - Fix catalog RDF by preventing memory increase on getting dataservice hvd tags [#3231](https://github.com/opendatateam/udata/pull/3231)
150
+ - Update purge tasks [#3167](https://github.com/opendatateam/udata/pull/3167)
151
+
152
+ ## 10.0.5 (2024-12-09)
142
153
 
143
154
  - Add list transfers endpoint / Save user requesting the transfer [#3211](https://github.com/opendatateam/udata/pull/3211)
144
155
  - Add dataservice csv adapter [#3208](https://github.com/opendatateam/udata/pull/3208)
@@ -1,6 +1,6 @@
1
1
  tasks/__init__.py,sha256=nubUI6ljumym4uv6NvAJEkWHtsdurFpEGSq-AxDWYDM,8153
2
2
  tasks/helpers.py,sha256=70fS9tI_m0DTWmKx9Zl5-LG-nxdz_ZaPyvvsFkN2r48,1091
3
- udata/__init__.py,sha256=dQlIuY4HsCGPhegb7aSBzBmewDyiRw0c-CzoYEfRkjg,102
3
+ udata/__init__.py,sha256=SG6Muh9AMKYKLThQFTKdejdA5_nVI0AHEnolAR3JVLY,98
4
4
  udata/api_fields.py,sha256=jXnA1BMmkobTAHI0_d6Qlj3o7o58T7I-Vc5FNGrm8Ag,29943
5
5
  udata/app.py,sha256=xjk2D3EgboYBpTwBwdIxd2klt2yMoWMyCrkry5fz0LA,7292
6
6
  udata/assets.py,sha256=H5Hrc2vnKM0IFLyWfLXmJ2Kj35w1i8W1D8Cgy8_cUj4,657
@@ -41,7 +41,7 @@ udata/auth/views.py,sha256=PX4bRHATNzPHWu01_KC3mgcZpAEahdcDAJVBhy4oL4Y,6110
41
41
  udata/commands/__init__.py,sha256=Won_rW_hIU9TA3o4oNe6kI46l1fnDBM_oW0Hc1XS9F8,7711
42
42
  udata/commands/cache.py,sha256=bLdrf_fCWFYX9ULlL2ADsZRwijkI4pArsJxfx24OivM,341
43
43
  udata/commands/db.py,sha256=x5ui77hoT-JcECneBhhXZtpH4g65gaj7SyeM0bnORhA,14694
44
- udata/commands/dcat.py,sha256=L1J1AxQCmMDmwdxzugQNfy4VZQYf1rI1wPhSdUaMB5E,3419
44
+ udata/commands/dcat.py,sha256=f6jT2AGZem-w1CaRH_ahfWB9A4oCDvjG13tPmBpeCqw,3910
45
45
  udata/commands/fixtures.py,sha256=oZkZPqpBNTjYQwNwODfi-bZyRZIjBIG-gBhpNaaAiNc,9221
46
46
  udata/commands/images.py,sha256=0rVojLik5DYgJ6W4uNEfMP2g2QUU2V761tj3z6lo8no,2050
47
47
  udata/commands/info.py,sha256=A5WMo3_N_rlt3cySVJrZqKWrbIowX97ZLKMIFQE5178,1545
@@ -86,9 +86,9 @@ udata/core/dataservices/csv.py,sha256=pL3j8-_KZWJaX1xFyILXt9wBtXn9Cmov5FUQgd0lNh
86
86
  udata/core/dataservices/factories.py,sha256=LDk8vvG0zhW8J-ZX5LoJQDU13pqeIyjQ05muuMro_eA,876
87
87
  udata/core/dataservices/models.py,sha256=lTcC0BqnF7bbFi1S2CZ8Qnk1Fk3TjWoHrvheFB5qSg4,9474
88
88
  udata/core/dataservices/permissions.py,sha256=98zM_R4v2ZtRubflB7ajaVQz-DVc-pZBMgtKUYy34oI,169
89
- udata/core/dataservices/rdf.py,sha256=9dWSqONCD5m9HmAU_ndmEmG3F1IuRUOW6MWTmk2GEEI,6792
89
+ udata/core/dataservices/rdf.py,sha256=mYJc7qH2f8nb9k-mF-A1sIP9rwgUyfQn4RIAO9sxtOE,6735
90
90
  udata/core/dataservices/search.py,sha256=htjh3sq3tDuD2qwgRgZsW6ClrHLF6hMwYO4nfBO0Hr4,4171
91
- udata/core/dataservices/tasks.py,sha256=a43x1oKNF-EYmzM3O-8GQPJvZsgJmQiXOZx8Qti3M4E,960
91
+ udata/core/dataservices/tasks.py,sha256=d2tG1l6u8-eUKUYBOgnCsQLbLmLgJXU-DOzZWhhL6Qg,897
92
92
  udata/core/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
93
  udata/core/dataset/actions.py,sha256=mX6xox0PiMrbcAPZ3VZsI26rfM-ciYfEXxN6sqqImKA,1222
94
94
  udata/core/dataset/activities.py,sha256=v8k1jwhdx62Z2ARZq8Q-x86OWSsBK99hRloPl74OCgA,1502
@@ -108,7 +108,7 @@ udata/core/dataset/preview.py,sha256=IwCqiNTjjXbtA_SSKF52pwnzKKEz0GyYM95QNn2Dkog
108
108
  udata/core/dataset/rdf.py,sha256=TGpwjsFF9hpiC3fxcF7Rej97bJjlzRy2vXbisn-a90A,28271
109
109
  udata/core/dataset/search.py,sha256=E7LqHBnq3sMefvmLwTpiw-Ovem2a3NJswHesRjctboE,5627
110
110
  udata/core/dataset/signals.py,sha256=WN4sV-lJlNsRkhcnhoy0SYJvCoYmK_5QFYZd1u-h4gs,161
111
- udata/core/dataset/tasks.py,sha256=F31TDKaawtOx6oxmWh9Vu24m0R4KVMouxFyAbaXVG6E,9609
111
+ udata/core/dataset/tasks.py,sha256=jG6U7cwGywhLK-MqUrvbZ1WLl_NLApiThtxmsckGzP8,10009
112
112
  udata/core/discussions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
113
  udata/core/discussions/actions.py,sha256=kjdBLDIeu0yWTSxQGgOpN1WoxUqbMygn4SiBk_S9T5I,1051
114
114
  udata/core/discussions/api.py,sha256=5yMdKeWp0c9H2ipy5bXoMf82r3ULMIARhvuIdM-XJp0,9446
@@ -150,7 +150,7 @@ udata/core/organization/csv.py,sha256=j6BJvXE8_6c-IWOPOg0C-j9KiCushoG1FQxzKVBDj2
150
150
  udata/core/organization/factories.py,sha256=g8ubBcz79xbjvpunZ02IDOakFg1KE6cXjNkE9vFyFAc,624
151
151
  udata/core/organization/forms.py,sha256=tscDb1_yOpbTx3ahl8ttA7oDkX9jIyzLc4gOf6WbN3s,3552
152
152
  udata/core/organization/metrics.py,sha256=90romzr-FhnPKh-6UHBJ1Af2loDa4-8I1iZEgztA160,1062
153
- udata/core/organization/models.py,sha256=N6WJmH3DDVwm7kXq9Q2PbLzc_BGf1sH5zOnCCYinhms,9365
153
+ udata/core/organization/models.py,sha256=Nu7koTyCjdOtrPczI-UXw0OdKDaduSXYOYqYSIUPrHs,9362
154
154
  udata/core/organization/notifications.py,sha256=i_36-l2y7fOGmnBmr5NDWmGGmrGRaCWbU-6XS4c2wQs,917
155
155
  udata/core/organization/permissions.py,sha256=GD-9TMtRppVCPaC1ysXYrONvGJV-ArzAOXm2XMKf9yo,1256
156
156
  udata/core/organization/rdf.py,sha256=TF2c85MHAu-TRiHNLxqV_Pw5z6sCgZrNszF9SYspQpk,1936
@@ -158,14 +158,14 @@ udata/core/organization/search.py,sha256=5XMZn7xehkTV4X9NvGys_1WyHDGlUVpCQ_uJ3oy
158
158
  udata/core/organization/signals.py,sha256=Ft1MBU9S41uxFN-rUrKHhiwedR1OYGv-ncuroKg8orY,488
159
159
  udata/core/organization/tasks.py,sha256=2Pd9ixeKNd7BGxBHrHYbR9AelhqkflX3ocnGgtoa8Uc,5641
160
160
  udata/core/post/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
161
- udata/core/post/api.py,sha256=q3gBOvA0EYKuJc5kAGE2JCanuOqsAP3eJhmtMPJI4xI,5464
161
+ udata/core/post/api.py,sha256=Zz-CehNj0_OCOabu2pD8eg0gILdtykIjYhik9rDCbE4,5761
162
162
  udata/core/post/constants.py,sha256=W-xjOTv0lorD-RCV0YGtK0cT_RwgYmfrC8Ff6ywH7bM,215
163
163
  udata/core/post/factories.py,sha256=lcFe3zIadG7bc1jsydkOT7GfQX53V0x09Flpclyl6gI,619
164
164
  udata/core/post/forms.py,sha256=gY4HhteFkZr3u4EoQ5QNEHMOTtNNiEKHyehVXKYcm3Y,963
165
165
  udata/core/post/models.py,sha256=Bd3Xr4r4LXEGXKgA1hZCueg_rBHgvQuusaZjatZzH-s,2062
166
166
  udata/core/post/permissions.py,sha256=uofU0TehhOGYyUoRXf3wuy816_D3xwMmaJbDvV336sw,83
167
167
  udata/core/post/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
- udata/core/post/tests/test_api.py,sha256=y4fXgjC0y9tqR4iOWHin9rADSPdo1BJjXJGilnqL23c,3946
168
+ udata/core/post/tests/test_api.py,sha256=T6kyMByLSP7eOZLYJM3Rkz8hMJPM5MeUK4ApICADx3E,4399
169
169
  udata/core/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
170
  udata/core/reports/api.py,sha256=qbU78bzNcGcxkrWsbeU9kdyFKbU9dz_8AIo6h2IJLCg,1690
171
171
  udata/core/reports/constants.py,sha256=LRZSX3unyqZeB4yQjK3ws_hGbJcXYk4bu1Rhnhi5DEs,1235
@@ -289,7 +289,7 @@ udata/harvest/forms.py,sha256=eDDyrK0VuYgCsYo0HY0P6--RDVpWBCuTwktjFiwPQhw,4252
289
289
  udata/harvest/models.py,sha256=QBDcdu3N5QILolmiisx9RN5xzfD9tPC06cXO8z5XF4A,6113
290
290
  udata/harvest/notifications.py,sha256=8WkHtD68v6rfZC6jCmAuuuRp4NN6q71ZkksZU5m9oJc,867
291
291
  udata/harvest/signals.py,sha256=3AhFHMPIFH5vz01NX5ycR_RWH14MXFWnCT6__LSa-QI,1338
292
- udata/harvest/tasks.py,sha256=uu2bbsZyrh1iya-ar9M5QNGUzDm9loYhaAypdj41_F4,1616
292
+ udata/harvest/tasks.py,sha256=ddJtvE0s-kAYt27-rKH6n8U8vKD8qKczlJtdBJzMUns,1718
293
293
  udata/harvest/backends/__init__.py,sha256=QjoFfBJfpw_xgk5YYWI1SgKJOMEmTMlxSfW79GNkSTI,459
294
294
  udata/harvest/backends/base.py,sha256=gq39-0SN3DSXfXIv4qjhIkEmPkV-2g6z53V0FikooSs,16413
295
295
  udata/harvest/backends/dcat.py,sha256=wbznPWCS9UJzpCWPAnmeUhUCREJg-yoQAHtEfr88RqU,15963
@@ -590,6 +590,7 @@ udata/tests/schemas.json,sha256=szM1jDpkogfOG4xWbjIGjLgG8l9-ZyE3JKQtecJyD1E,4990
590
590
  udata/tests/test_activity.py,sha256=x-pDK6VW9wAG0uxYRZQ3DWTRjfCU729iaMGMJb1rWYU,3195
591
591
  udata/tests/test_api_fields.py,sha256=4sDs40CtdarVQHzAdNIeRCOYughYsTlPehTY18jaq58,11293
592
592
  udata/tests/test_cors.py,sha256=b_pyxKeIyqhnsXxXryPf4d0V0QxaLQ1P_VjY89Q_j3g,3233
593
+ udata/tests/test_dcat_commands.py,sha256=fDAnAjkja8AXw_qzaAWnVTgglkBAvK2mjPMHUCtqrrU,919
593
594
  udata/tests/test_discussions.py,sha256=Qo7nhIUY7YAATZfWl5Mgo0XhngGwFULgqEoMhsHZtFE,33587
594
595
  udata/tests/test_i18n.py,sha256=u60344JNRG_8s0t89ghXtQ1FbF4TayEHBzuBFxqnQ_Y,3152
595
596
  udata/tests/test_linkchecker.py,sha256=W8jrwKYXM8wWXZFjiaBwpWGRBhZ8bsSHGHzL9voDN7U,10218
@@ -636,7 +637,7 @@ udata/tests/data/image.jpg,sha256=hdmpaCjOhmAAfNGuTqWKEjv7IC4GXJx-nP_rT274hc8,33
636
637
  udata/tests/data/image.png,sha256=GAqXz7w_u7CapODIUF45UpVddmqelnGQkcrwKZq3448,266488
637
638
  udata/tests/dataservice/test_csv_adapter.py,sha256=HSnw7HTtzSj0UItKzSvKp3PbwGEni4LGpQ5T63w50MQ,1867
638
639
  udata/tests/dataservice/test_dataservice_rdf.py,sha256=VLFgdclFoIhmctfMEgTxvuNlRxcI1yDkZWE-lbEYGdQ,2984
639
- udata/tests/dataservice/test_dataservice_tasks.py,sha256=n1yTRpyv5DTkX1H0WaxC-T2xxDyN-Sk3bjUiv0C0Bww,1335
640
+ udata/tests/dataservice/test_dataservice_tasks.py,sha256=9XUoYLb_p3dzmgLfswaXjMG2civP0i1kzzP4VdJWE0k,1614
640
641
  udata/tests/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
641
642
  udata/tests/dataset/test_csv_adapter.py,sha256=CSAHEur5-183fRsD_cBgsHnLuohn0DOb9zkVT1q0PNo,3866
642
643
  udata/tests/dataset/test_dataset_actions.py,sha256=bgDjVYjOvu3sX_FCTCzf2snZYSprsqor2nAhIVuokSs,722
@@ -644,7 +645,7 @@ udata/tests/dataset/test_dataset_commands.py,sha256=zMPJG2wYwKBee2zI65kmboxf59Zq
644
645
  udata/tests/dataset/test_dataset_events.py,sha256=hlrpoOiBbnX_COUI9Pzdqlp45GZZDqu5piwupbnPiTI,3601
645
646
  udata/tests/dataset/test_dataset_model.py,sha256=VPF17L5sMpKcFo7JNKmgXnKGAgzy1Ejo470avn3bdcQ,30874
646
647
  udata/tests/dataset/test_dataset_rdf.py,sha256=TuKomK0SWqO8R1hQkV8iA3w4YvReO0vVHPfBqKP_oaU,36750
647
- udata/tests/dataset/test_dataset_tasks.py,sha256=rSafDjCiOyEb2_tVUDN4wqGylF6Yf9VNB769SLmxlwI,2283
648
+ udata/tests/dataset/test_dataset_tasks.py,sha256=n1W2Pg0ez02d66zQG3N93kh7dpR2yLMRDqUI6PnPaI0,3088
648
649
  udata/tests/dataset/test_resource_preview.py,sha256=fp9mSL7unhyM66GR0gwhgX3OGQ4TJt7G9xU-CjsL3HI,3908
649
650
  udata/tests/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
650
651
  udata/tests/features/territories/__init__.py,sha256=gMD73RL-ymcWvGPDPM0aPxz7WAfd1VEDL8YHRI7HT0Q,956
@@ -672,7 +673,7 @@ udata/tests/frontend/test_markdown.py,sha256=8E0XjByzmsY-RGdF2ESoL9Rklkfz3vcdJWK
672
673
  udata/tests/organization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
673
674
  udata/tests/organization/test_csv_adapter.py,sha256=vgTVbPMqKipcdg7wi99pHk9ZNhqtuU-yneEaVW3pZmU,1564
674
675
  udata/tests/organization/test_notifications.py,sha256=PGmME5BbYVtcPffeSE1sx47J6iAfm4RDAZIRv_MXDFE,1366
675
- udata/tests/organization/test_organization_model.py,sha256=R290hX8vQZ0ccA_cAfrSlEojeFZnnf25uFLya7lJTJc,4159
676
+ udata/tests/organization/test_organization_model.py,sha256=ZEUHX7lvGMYMlHDpPiVUPeZeJeDDTp5owLEpFDSihjc,4311
676
677
  udata/tests/organization/test_organization_rdf.py,sha256=Uf-OgXV615wLUHfcBTmp9QFuV8VCFmjI4wgvShve-mc,8074
677
678
  udata/tests/organization/test_organization_tasks.py,sha256=ehPirwfLqaEcnJ9TLk3jGw3Xh-CVx1WXhvIDFYrT2iQ,2845
678
679
  udata/tests/reuse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -709,9 +710,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=18Y5YtzVKInDejw-R-45HNzsB3OVwJ
709
710
  udata/translations/pt/LC_MESSAGES/udata.po,sha256=6IQvFk0NTDV5Jq-kLkkzpioWfrMaLDa1oQSevKFbxKQ,44943
710
711
  udata/translations/sr/LC_MESSAGES/udata.mo,sha256=LWzCNS68hS2lbeo1bncZw4ZKqV2Dk_JUC-4SiF3o994,28163
711
712
  udata/translations/sr/LC_MESSAGES/udata.po,sha256=X1ieIsJDmk_A_YiblpmUBzWWrVHta9F8yzCZLrjeW-Y,51435
712
- udata-10.0.5.dev32957.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
713
- udata-10.0.5.dev32957.dist-info/METADATA,sha256=uLcuACrRIoC2mY-kI5cMmsZr_QjSlnPdnEH9n7_1jKk,137205
714
- udata-10.0.5.dev32957.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
715
- udata-10.0.5.dev32957.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
716
- udata-10.0.5.dev32957.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
717
- udata-10.0.5.dev32957.dist-info/RECORD,,
713
+ udata-10.0.6.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
714
+ udata-10.0.6.dist-info/METADATA,sha256=50KbgNuJlK--N7mg1lFtWjrS4MEGFiogb3WpeMcLCA8,138043
715
+ udata-10.0.6.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
716
+ udata-10.0.6.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
717
+ udata-10.0.6.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
718
+ udata-10.0.6.dist-info/RECORD,,