udata 12.0.2.dev14__py3-none-any.whl → 12.0.2.dev16__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/core/dataservices/api.py +2 -4
- udata/core/dataset/api.py +4 -4
- udata/core/dataset/forms.py +2 -0
- udata/core/reuse/api.py +2 -2
- udata/settings.py +2 -0
- udata/tests/api/test_dataservices_api.py +8 -4
- udata/tests/api/test_datasets_api.py +37 -7
- udata/tests/api/test_reuses_api.py +7 -4
- udata/utils.py +52 -2
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev16.dist-info}/METADATA +1 -1
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev16.dist-info}/RECORD +15 -15
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev16.dist-info}/WHEEL +0 -0
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev16.dist-info}/entry_points.txt +0 -0
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev16.dist-info}/licenses/LICENSE +0 -0
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev16.dist-info}/top_level.txt +0 -0
udata/core/dataservices/api.py
CHANGED
|
@@ -12,10 +12,10 @@ from udata.auth import admin_permission
|
|
|
12
12
|
from udata.core.dataservices.constants import DATASERVICE_ACCESS_TYPE_RESTRICTED
|
|
13
13
|
from udata.core.dataset.models import Dataset
|
|
14
14
|
from udata.core.followers.api import FollowAPI
|
|
15
|
-
from udata.core.site.models import current_site
|
|
16
15
|
from udata.frontend.markdown import md
|
|
17
16
|
from udata.i18n import gettext as _
|
|
18
17
|
from udata.rdf import RDF_EXTENSIONS, graph_response, negociate_content
|
|
18
|
+
from udata.utils import get_rss_feed_list
|
|
19
19
|
|
|
20
20
|
from .models import Dataservice
|
|
21
21
|
from .rdf import dataservice_to_rdf
|
|
@@ -62,9 +62,7 @@ class DataservicesAtomFeedAPI(API):
|
|
|
62
62
|
_("Latest APIs"), description=None, feed_url=request.url, link=request.url_root
|
|
63
63
|
)
|
|
64
64
|
|
|
65
|
-
dataservices
|
|
66
|
-
Dataservice.objects.visible().order_by("-created_at").limit(current_site.feed_size)
|
|
67
|
-
)
|
|
65
|
+
dataservices = get_rss_feed_list(Dataservice.objects.visible(), "created_at")
|
|
68
66
|
for dataservice in dataservices:
|
|
69
67
|
author_name = None
|
|
70
68
|
author_uri = None
|
udata/core/dataset/api.py
CHANGED
|
@@ -41,13 +41,12 @@ from udata.core.followers.api import FollowAPI
|
|
|
41
41
|
from udata.core.followers.models import Follow
|
|
42
42
|
from udata.core.organization.models import Organization
|
|
43
43
|
from udata.core.reuse.models import Reuse
|
|
44
|
-
from udata.core.site.models import current_site
|
|
45
44
|
from udata.core.storages.api import handle_upload, upload_parser
|
|
46
45
|
from udata.core.topic.models import Topic
|
|
47
46
|
from udata.frontend.markdown import md
|
|
48
47
|
from udata.i18n import gettext as _
|
|
49
48
|
from udata.rdf import RDF_EXTENSIONS, graph_response, negociate_content
|
|
50
|
-
from udata.utils import get_by
|
|
49
|
+
from udata.utils import get_by, get_rss_feed_list
|
|
51
50
|
|
|
52
51
|
from .api_fields import (
|
|
53
52
|
catalog_schema_fields,
|
|
@@ -336,9 +335,10 @@ class DatasetsAtomFeedAPI(API):
|
|
|
336
335
|
link=request.url_root,
|
|
337
336
|
)
|
|
338
337
|
|
|
339
|
-
datasets: list[Dataset] = (
|
|
340
|
-
Dataset.objects.visible()
|
|
338
|
+
datasets: list[Dataset] = get_rss_feed_list(
|
|
339
|
+
Dataset.objects.visible(), "created_at_internal"
|
|
341
340
|
)
|
|
341
|
+
|
|
342
342
|
for dataset in datasets:
|
|
343
343
|
author_name = None
|
|
344
344
|
author_uri = None
|
udata/core/dataset/forms.py
CHANGED
|
@@ -116,6 +116,8 @@ class CommunityResourceForm(BaseResourceForm):
|
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
def unmarshal_frequency(form, field):
|
|
119
|
+
if field.data is None:
|
|
120
|
+
return
|
|
119
121
|
# We don't need to worry about invalid field.data being fed to UpdateFrequency here,
|
|
120
122
|
# since the API will already have ensured incoming data matches the field definition,
|
|
121
123
|
# which in our case is an enum of valid UpdateFrequency values.
|
udata/core/reuse/api.py
CHANGED
|
@@ -24,7 +24,7 @@ from udata.core.storages.api import (
|
|
|
24
24
|
from udata.frontend.markdown import md
|
|
25
25
|
from udata.i18n import gettext as _
|
|
26
26
|
from udata.models import Dataset
|
|
27
|
-
from udata.utils import id_or_404
|
|
27
|
+
from udata.utils import get_rss_feed_list, id_or_404
|
|
28
28
|
|
|
29
29
|
from .api_fields import (
|
|
30
30
|
reuse_suggestion_fields,
|
|
@@ -143,7 +143,7 @@ class ReusesAtomFeedAPI(API):
|
|
|
143
143
|
link=request.url_root,
|
|
144
144
|
)
|
|
145
145
|
|
|
146
|
-
reuses
|
|
146
|
+
reuses = get_rss_feed_list(Reuse.objects.visible(), "created_at")
|
|
147
147
|
for reuse in reuses:
|
|
148
148
|
author_name = None
|
|
149
149
|
author_uri = None
|
udata/settings.py
CHANGED
|
@@ -288,6 +288,8 @@ class Defaults(object):
|
|
|
288
288
|
|
|
289
289
|
DELAY_BEFORE_REMINDER_NOTIFICATION = 30 # Days
|
|
290
290
|
|
|
291
|
+
DELAY_BEFORE_APPEARING_IN_RSS_FEED = 10 # Hours
|
|
292
|
+
|
|
291
293
|
# Harvest settings
|
|
292
294
|
###########################################################################
|
|
293
295
|
HARVEST_ENABLE_MANUAL_RUN = False
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from datetime import datetime, timedelta
|
|
2
2
|
|
|
3
3
|
import feedparser
|
|
4
|
+
import pytest
|
|
4
5
|
from flask import url_for
|
|
5
6
|
from werkzeug.test import TestResponse
|
|
6
7
|
|
|
@@ -663,7 +664,9 @@ class DataserviceAPITest(APITestCase):
|
|
|
663
664
|
|
|
664
665
|
|
|
665
666
|
class DataservicesFeedAPItest(APITestCase):
|
|
667
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=10)
|
|
666
668
|
def test_recent_feed(self):
|
|
669
|
+
# We have a 10 hours delay for a new object to appear in feed. A newly created one shouldn't appear.
|
|
667
670
|
DataserviceFactory(title="A", created_at=datetime.utcnow())
|
|
668
671
|
DataserviceFactory(title="B", created_at=datetime.utcnow() - timedelta(days=2))
|
|
669
672
|
DataserviceFactory(title="C", created_at=datetime.utcnow() - timedelta(days=1))
|
|
@@ -673,11 +676,11 @@ class DataservicesFeedAPItest(APITestCase):
|
|
|
673
676
|
|
|
674
677
|
feed = feedparser.parse(response.data)
|
|
675
678
|
|
|
676
|
-
self.assertEqual(len(feed.entries),
|
|
677
|
-
self.assertEqual(feed.entries[0].title, "
|
|
678
|
-
self.assertEqual(feed.entries[1].title, "
|
|
679
|
-
self.assertEqual(feed.entries[2].title, "B")
|
|
679
|
+
self.assertEqual(len(feed.entries), 2)
|
|
680
|
+
self.assertEqual(feed.entries[0].title, "C")
|
|
681
|
+
self.assertEqual(feed.entries[1].title, "B")
|
|
680
682
|
|
|
683
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=0)
|
|
681
684
|
def test_recent_feed_owner(self):
|
|
682
685
|
owner = UserFactory()
|
|
683
686
|
DataserviceFactory(owner=owner)
|
|
@@ -695,6 +698,7 @@ class DataservicesFeedAPItest(APITestCase):
|
|
|
695
698
|
self.assertEqual(author.name, owner.fullname)
|
|
696
699
|
self.assertEqual(author.href, owner.url_for())
|
|
697
700
|
|
|
701
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=0)
|
|
698
702
|
def test_recent_feed_org(self):
|
|
699
703
|
owner = UserFactory()
|
|
700
704
|
org = OrganizationFactory()
|
|
@@ -36,6 +36,7 @@ from udata.core.dataset.models import (
|
|
|
36
36
|
ResourceMixin,
|
|
37
37
|
)
|
|
38
38
|
from udata.core.organization.factories import OrganizationFactory
|
|
39
|
+
from udata.core.organization.models import OrganizationBadge
|
|
39
40
|
from udata.core.spatial.factories import GeoLevelFactory, SpatialCoverageFactory
|
|
40
41
|
from udata.core.topic.factories import TopicElementDatasetFactory, TopicFactory
|
|
41
42
|
from udata.core.user.factories import AdminFactory, UserFactory
|
|
@@ -740,6 +741,18 @@ class DatasetAPITest(APITestCase):
|
|
|
740
741
|
self.assertEqual(Dataset.objects.count(), 1)
|
|
741
742
|
self.assertEqual(Dataset.objects.first().description, "new description")
|
|
742
743
|
|
|
744
|
+
def test_dataset_api_update_with_null_frequency(self):
|
|
745
|
+
"""It should update the item even though internal frequency is null"""
|
|
746
|
+
user = self.login()
|
|
747
|
+
dataset = DatasetFactory(owner=user, frequency=None)
|
|
748
|
+
data = dataset.to_dict()
|
|
749
|
+
# Update doesn't matter as long as we don't touch `frequency`
|
|
750
|
+
data["tags"] = ["test"]
|
|
751
|
+
response = self.put(url_for("api.dataset", dataset=dataset), data)
|
|
752
|
+
self.assert200(response)
|
|
753
|
+
self.assertEqual(Dataset.objects.count(), 1)
|
|
754
|
+
self.assertEqual(Dataset.objects.first().frequency, None)
|
|
755
|
+
|
|
743
756
|
def test_dataset_api_update_valid_frequency(self):
|
|
744
757
|
"""It should update a dataset from the API"""
|
|
745
758
|
user = self.login()
|
|
@@ -1322,31 +1335,47 @@ class DatasetAPITest(APITestCase):
|
|
|
1322
1335
|
|
|
1323
1336
|
|
|
1324
1337
|
class DatasetsFeedAPItest(APITestCase):
|
|
1338
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=10)
|
|
1325
1339
|
def test_recent_feed(self):
|
|
1340
|
+
certified_org = OrganizationFactory(badges=[OrganizationBadge(kind="certified")])
|
|
1341
|
+
# We have a 10 hours delay for a new object to appear in feed. A newly created one shouldn't appear.
|
|
1326
1342
|
DatasetFactory(
|
|
1327
1343
|
title="A", resources=[ResourceFactory()], created_at_internal=datetime.utcnow()
|
|
1328
1344
|
)
|
|
1345
|
+
# Except in the case of a new dataset published by a certified organization
|
|
1329
1346
|
DatasetFactory(
|
|
1330
1347
|
title="B",
|
|
1331
|
-
|
|
1332
|
-
|
|
1348
|
+
created_at_internal=datetime.utcnow(),
|
|
1349
|
+
organization=certified_org,
|
|
1333
1350
|
)
|
|
1334
1351
|
DatasetFactory(
|
|
1335
1352
|
title="C",
|
|
1336
|
-
|
|
1353
|
+
created_at_internal=datetime.utcnow() - timedelta(days=2),
|
|
1354
|
+
)
|
|
1355
|
+
DatasetFactory(
|
|
1356
|
+
title="D",
|
|
1337
1357
|
created_at_internal=datetime.utcnow() - timedelta(days=1),
|
|
1338
1358
|
)
|
|
1359
|
+
# Even if dataset E is created more recently than D, it should appear after in the feed, since it doesn't have a delay
|
|
1360
|
+
# before appearing in the field because it is published by a certified organization
|
|
1361
|
+
DatasetFactory(
|
|
1362
|
+
title="E",
|
|
1363
|
+
created_at_internal=datetime.utcnow() - timedelta(hours=23),
|
|
1364
|
+
organization=certified_org,
|
|
1365
|
+
)
|
|
1339
1366
|
|
|
1340
1367
|
response = self.get(url_for("api.recent_datasets_atom_feed"))
|
|
1341
1368
|
self.assert200(response)
|
|
1342
1369
|
|
|
1343
1370
|
feed = feedparser.parse(response.data)
|
|
1344
1371
|
|
|
1345
|
-
self.assertEqual(len(feed.entries),
|
|
1346
|
-
self.assertEqual(feed.entries[0].title, "
|
|
1347
|
-
self.assertEqual(feed.entries[1].title, "
|
|
1348
|
-
self.assertEqual(feed.entries[2].title, "
|
|
1372
|
+
self.assertEqual(len(feed.entries), 4)
|
|
1373
|
+
self.assertEqual(feed.entries[0].title, "B")
|
|
1374
|
+
self.assertEqual(feed.entries[1].title, "D")
|
|
1375
|
+
self.assertEqual(feed.entries[2].title, "E")
|
|
1376
|
+
self.assertEqual(feed.entries[3].title, "C")
|
|
1349
1377
|
|
|
1378
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=0)
|
|
1350
1379
|
def test_recent_feed_owner(self):
|
|
1351
1380
|
owner = UserFactory()
|
|
1352
1381
|
DatasetFactory(owner=owner, resources=[ResourceFactory()])
|
|
@@ -1364,6 +1393,7 @@ class DatasetsFeedAPItest(APITestCase):
|
|
|
1364
1393
|
self.assertEqual(author.name, owner.fullname)
|
|
1365
1394
|
self.assertEqual(author.href, owner.url_for())
|
|
1366
1395
|
|
|
1396
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=0)
|
|
1367
1397
|
def test_recent_feed_org(self):
|
|
1368
1398
|
owner = UserFactory()
|
|
1369
1399
|
org = OrganizationFactory()
|
|
@@ -572,7 +572,9 @@ class ReuseAPITest:
|
|
|
572
572
|
|
|
573
573
|
|
|
574
574
|
class ReusesFeedAPItest(APITestCase):
|
|
575
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=10)
|
|
575
576
|
def test_recent_feed(self):
|
|
577
|
+
# We have a 10 hours delay for a new object to appear in feed. A newly created one shouldn't appear.
|
|
576
578
|
ReuseFactory(title="A", datasets=[DatasetFactory()], created_at=datetime.utcnow())
|
|
577
579
|
ReuseFactory(
|
|
578
580
|
title="B", datasets=[DatasetFactory()], created_at=datetime.utcnow() - timedelta(days=2)
|
|
@@ -586,11 +588,11 @@ class ReusesFeedAPItest(APITestCase):
|
|
|
586
588
|
|
|
587
589
|
feed = feedparser.parse(response.data)
|
|
588
590
|
|
|
589
|
-
self.assertEqual(len(feed.entries),
|
|
590
|
-
self.assertEqual(feed.entries[0].title, "
|
|
591
|
-
self.assertEqual(feed.entries[1].title, "
|
|
592
|
-
self.assertEqual(feed.entries[2].title, "B")
|
|
591
|
+
self.assertEqual(len(feed.entries), 2)
|
|
592
|
+
self.assertEqual(feed.entries[0].title, "C")
|
|
593
|
+
self.assertEqual(feed.entries[1].title, "B")
|
|
593
594
|
|
|
595
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=0)
|
|
594
596
|
def test_recent_feed_owner(self):
|
|
595
597
|
owner = UserFactory()
|
|
596
598
|
ReuseFactory(owner=owner, datasets=[DatasetFactory()])
|
|
@@ -608,6 +610,7 @@ class ReusesFeedAPItest(APITestCase):
|
|
|
608
610
|
self.assertEqual(author.name, owner.fullname)
|
|
609
611
|
self.assertEqual(author.href, owner.url_for())
|
|
610
612
|
|
|
613
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=0)
|
|
611
614
|
def test_recent_feed_org(self):
|
|
612
615
|
owner = UserFactory()
|
|
613
616
|
org = OrganizationFactory()
|
udata/utils.py
CHANGED
|
@@ -3,7 +3,7 @@ import itertools
|
|
|
3
3
|
import math
|
|
4
4
|
import re
|
|
5
5
|
from collections import Counter
|
|
6
|
-
from datetime import date, datetime
|
|
6
|
+
from datetime import date, datetime, timedelta
|
|
7
7
|
from math import ceil
|
|
8
8
|
from typing import Any, Hashable
|
|
9
9
|
from uuid import UUID, uuid4
|
|
@@ -18,7 +18,8 @@ from faker import Faker
|
|
|
18
18
|
from faker.config import PROVIDERS
|
|
19
19
|
from faker.providers import BaseProvider
|
|
20
20
|
from faker.providers.lorem.la import Provider as LoremProvider
|
|
21
|
-
from flask import abort, request
|
|
21
|
+
from flask import abort, current_app, request
|
|
22
|
+
from mongoengine.fields import BaseQuerySet
|
|
22
23
|
|
|
23
24
|
from udata import tags
|
|
24
25
|
|
|
@@ -382,6 +383,55 @@ def id_or_404(object_id):
|
|
|
382
383
|
abort(404)
|
|
383
384
|
|
|
384
385
|
|
|
386
|
+
def get_rss_feed_list(queryset: BaseQuerySet, created_at_field: str) -> list[Any]:
|
|
387
|
+
"""
|
|
388
|
+
Return a list of recent elements for a RSS field.
|
|
389
|
+
|
|
390
|
+
We add a delay before a new element appears in feed in order to allow for post-publication moderation.
|
|
391
|
+
The delay is not taken into account if the element is published by a certified organization.
|
|
392
|
+
"""
|
|
393
|
+
from udata.core.organization.constants import CERTIFIED
|
|
394
|
+
from udata.core.site.models import current_site
|
|
395
|
+
from udata.models import Organization
|
|
396
|
+
|
|
397
|
+
certifed_orgs = Organization.objects(badges__kind=CERTIFIED).only("id")
|
|
398
|
+
|
|
399
|
+
created_delay = datetime.utcnow() - timedelta(
|
|
400
|
+
hours=current_app.config["DELAY_BEFORE_APPEARING_IN_RSS_FEED"]
|
|
401
|
+
)
|
|
402
|
+
elements_with_delay = list(
|
|
403
|
+
queryset.filter(
|
|
404
|
+
**{
|
|
405
|
+
f"{created_at_field}__lte": created_delay,
|
|
406
|
+
"organization__nin": certifed_orgs,
|
|
407
|
+
}
|
|
408
|
+
)
|
|
409
|
+
.order_by(f"-{created_at_field}")
|
|
410
|
+
.limit(current_site.feed_size)
|
|
411
|
+
)
|
|
412
|
+
elements_without_delay = list(
|
|
413
|
+
queryset.filter(organization__in=certifed_orgs)
|
|
414
|
+
.order_by(f"-{created_at_field}")
|
|
415
|
+
.limit(current_site.feed_size)
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
# We need to merge the two lists manually, compensating for the delay, else elements with delay may not show
|
|
419
|
+
# if new elements have been published by certified organization in the meantime
|
|
420
|
+
def get_sort_key(element):
|
|
421
|
+
has_delay = not element.organization or not element.organization.certified
|
|
422
|
+
if has_delay:
|
|
423
|
+
return getattr(element, created_at_field) + timedelta(
|
|
424
|
+
hours=current_app.config["DELAY_BEFORE_APPEARING_IN_RSS_FEED"]
|
|
425
|
+
)
|
|
426
|
+
return getattr(element, created_at_field)
|
|
427
|
+
|
|
428
|
+
elements = sorted(
|
|
429
|
+
[*elements_with_delay, *elements_without_delay], reverse=True, key=get_sort_key
|
|
430
|
+
)[: current_site.feed_size]
|
|
431
|
+
|
|
432
|
+
return elements
|
|
433
|
+
|
|
434
|
+
|
|
385
435
|
def wants_json() -> bool:
|
|
386
436
|
if request.is_json:
|
|
387
437
|
return True
|
|
@@ -10,14 +10,14 @@ udata/mail.py,sha256=Huhx_1QthJkLvuRUuP6jqb5Qq5R4iSmqeEpLVO9ZkQ4,2671
|
|
|
10
10
|
udata/rdf.py,sha256=dQSYVS2NrMRE6fsrbGwXl_roM0k6jtt1JPtMhHxeVGg,20970
|
|
11
11
|
udata/routing.py,sha256=Hnc1ktmKVS-RUHNKw2zYTft2HJ903FhjtlcenQ9igwI,8044
|
|
12
12
|
udata/sentry.py,sha256=ekcxqUSqxfM98TtvCsPaOoX5i2l6PEcYt7kb4l3od-Q,3223
|
|
13
|
-
udata/settings.py,sha256=
|
|
13
|
+
udata/settings.py,sha256=A6CRPN99_EMK7bXTf4bdZI7NZEuAHECUkxChz7FWUkw,21904
|
|
14
14
|
udata/sitemap.py,sha256=oRRWoPI7ZsFFnUAOqGT1YuXFFKHBe8EcRnUCNHD7xjM,979
|
|
15
15
|
udata/tags.py,sha256=ydq4uokd6bzdeGVSpEXASVtGvDfO2LfQs9mptvvKJCM,631
|
|
16
16
|
udata/tasks.py,sha256=Sv01dhvATtq_oHOBp3J1j1VT1HQe0Pab7zxwIeIdKoo,5122
|
|
17
17
|
udata/terms.md,sha256=nFx978tUQ3vTEv6POykXaZvcQ5e_gcvmO4ZgcfbSWXo,187
|
|
18
18
|
udata/tracking.py,sha256=WOcqA1RlHN8EPFuEc2kNau54mec4-pvi-wUFrMXevzg,345
|
|
19
19
|
udata/uris.py,sha256=u05ltyLv4ZolaNMbq58kcLizMXWC10mRpJFYzChUHJU,4440
|
|
20
|
-
udata/utils.py,sha256=
|
|
20
|
+
udata/utils.py,sha256=43-q1yZ8Phd6VTCNn7a4sIx1qs_oqVvIFg-RQb0qvgQ,13243
|
|
21
21
|
udata/worker.py,sha256=K-Wafye5-uXP4kQlffRKws2J9YbJ6m6n2QjcVsY8Nsg,118
|
|
22
22
|
udata/wsgi.py,sha256=MY8en9K9eDluvJYUxTdzqSDoYaDgCVZ69ZcUvxAvgqA,77
|
|
23
23
|
udata/api/__init__.py,sha256=Rs1V6KqWUcZliZnoIrVKtq15Bfb8ZaOVOFuGhcv0SK8,11948
|
|
@@ -79,7 +79,7 @@ udata/core/contact_point/forms.py,sha256=oBe1agSJFyx2QRgYzPRg2A7qVscaBTaKG4V-AyI
|
|
|
79
79
|
udata/core/contact_point/models.py,sha256=Xqmqg7S13gcaKxiQT52WHeQEHTaUDDGIXInXyqNh4Po,854
|
|
80
80
|
udata/core/dataservices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
81
|
udata/core/dataservices/activities.py,sha256=wcYQCyYpKciCz99VqQqKti72a5Fyhc-AvDZBWdF0KUc,1763
|
|
82
|
-
udata/core/dataservices/api.py,sha256=
|
|
82
|
+
udata/core/dataservices/api.py,sha256=FhPF-oq0rgLo_trkttrz5TsFSLLNVGX5KH5Jzid1sDA,9988
|
|
83
83
|
udata/core/dataservices/apiv2.py,sha256=pd4UWF6m7pQ5nmBRFmeiDyedhZSngz211to6qTscVsA,1205
|
|
84
84
|
udata/core/dataservices/constants.py,sha256=SxetyqvbWQlb-T9Bqn7mdfzV3vS-is7s56rzmGzTXY0,1029
|
|
85
85
|
udata/core/dataservices/csv.py,sha256=HWI2JrN_Vuw0te9FHlJ6eyqcRcKHOKXuzg45D4Ti6F0,1106
|
|
@@ -92,7 +92,7 @@ udata/core/dataservices/tasks.py,sha256=fHG1r5ymfJRXJ_Lug6je3VKZoK30XKXE2rQ8x0R-
|
|
|
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=eGxMUnC47YHxTgcls6igQ3qP7cYgwFtPfj0asCylGsI,3315
|
|
95
|
-
udata/core/dataset/api.py,sha256=
|
|
95
|
+
udata/core/dataset/api.py,sha256=o8Q7zrtR3ESbGO9aMa8FPGw3qBHujvV8Kt38axv5rsc,35534
|
|
96
96
|
udata/core/dataset/api_fields.py,sha256=p7ZnmGNImZ4sgZTpoyHpI0CgOukpEIx8QdGnxlmgl2I,18032
|
|
97
97
|
udata/core/dataset/apiv2.py,sha256=1H4557ZMi6rwEyrwB1Ha20m0bf3Avhg_vDLiDQt5Fi0,21030
|
|
98
98
|
udata/core/dataset/commands.py,sha256=3mKSdJ-M7ggdG29AVn77C4ouZanbYoqkTaGQoBKOp3s,3471
|
|
@@ -101,7 +101,7 @@ udata/core/dataset/csv.py,sha256=mNU5cuuNzrMgFF7Z0AKN8clsv458tpJHX1_pzAjpd-4,365
|
|
|
101
101
|
udata/core/dataset/events.py,sha256=bSM0nFEX14r4JHc-bAM-7OOuD3JAxUIpw9GgXbOsUyw,4078
|
|
102
102
|
udata/core/dataset/exceptions.py,sha256=uKiayLSpSzsnLvClObS6hOO0qXEqvURKN7_w8eimQNU,498
|
|
103
103
|
udata/core/dataset/factories.py,sha256=tb18axsk8Tx5iUIqWM9IELdt-2Ryp2UN0-iY4fdea4U,9059
|
|
104
|
-
udata/core/dataset/forms.py,sha256=
|
|
104
|
+
udata/core/dataset/forms.py,sha256=rd4M86QtRFa9laxJGAszgzzrcg4EBGrf-p3HwrxO80I,7126
|
|
105
105
|
udata/core/dataset/metrics.py,sha256=s8Xs_rqRXfNWsErkiJTuRMG5o_cU5iSK8mUJFKVSc7w,1204
|
|
106
106
|
udata/core/dataset/models.py,sha256=1iXf6l0wjNv04if6gAq-NXSPLub2Mx2KOyCg2RQtids,41617
|
|
107
107
|
udata/core/dataset/permissions.py,sha256=zXQ6kU-Ni3Pl5tDtat-ZPupug9InsNeCN7xRLc2Vcrc,1097
|
|
@@ -181,7 +181,7 @@ udata/core/reports/constants.py,sha256=LRZSX3unyqZeB4yQjK3ws_hGbJcXYk4bu1Rhnhi5D
|
|
|
181
181
|
udata/core/reports/models.py,sha256=xT6zSXJx8vG0c8cu4VWUQvENUwajusFlPQmenslR3lQ,2662
|
|
182
182
|
udata/core/reuse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
183
183
|
udata/core/reuse/activities.py,sha256=5D7cV-hGZnzHsp8hohZqqgK3RSGQpfAqJ_Wfq_AYfM8,1420
|
|
184
|
-
udata/core/reuse/api.py,sha256=
|
|
184
|
+
udata/core/reuse/api.py,sha256=myUQiuXffXAZK6tAL48N-kuri2uK0aiqlyiSTSp7N-w,12447
|
|
185
185
|
udata/core/reuse/api_fields.py,sha256=ccym6v9Ap68PlHZmIMMtHQFnEyV7Gbxrfdw0b6rj51A,1232
|
|
186
186
|
udata/core/reuse/apiv2.py,sha256=mgvL1ZBts872zNSo0Wh3AkNAh2ldzP9yQkRY3WfzGPM,944
|
|
187
187
|
udata/core/reuse/constants.py,sha256=JgDBrjOKSt9q0auv9rjzbGsch83H-Oi8YXAKeI5hO4o,1215
|
|
@@ -516,14 +516,14 @@ udata/tests/api/test_activities_api.py,sha256=GzyznB1rHrWfPH-te5RKmA3Ezlo5jlP3z7
|
|
|
516
516
|
udata/tests/api/test_auth_api.py,sha256=Mue5EneRp3MbD-ahcXI3YaRNYPcxzHMw-hYpY0RtGVU,25569
|
|
517
517
|
udata/tests/api/test_base_api.py,sha256=2w_vz0eEuq3P3aN-ByvxGc3VZAo7XtgatFfcrzf2uEU,2244
|
|
518
518
|
udata/tests/api/test_contact_points.py,sha256=Sbb486RTN7HVycna_XB60OnURPSNc7xUity26XsYA4k,8766
|
|
519
|
-
udata/tests/api/test_dataservices_api.py,sha256=
|
|
520
|
-
udata/tests/api/test_datasets_api.py,sha256=
|
|
519
|
+
udata/tests/api/test_dataservices_api.py,sha256=pB7Kpf0qLhsX4z5hYj3BykYKauEMpESWmrlLlxTOmWw,29221
|
|
520
|
+
udata/tests/api/test_datasets_api.py,sha256=ue-7E5nDg4y4votl8O4xXuIuXGDgu35uwhvD5f_6fJI,106539
|
|
521
521
|
udata/tests/api/test_fields.py,sha256=OW85Z5MES5HeWOpapeem8OvR1cIcrqW-xMWpdZO4LZ8,1033
|
|
522
522
|
udata/tests/api/test_follow_api.py,sha256=4nFXG5pZ_Hf2PJ4KEdHJX_uggjc9RpB8v0fidkAcw9I,5792
|
|
523
523
|
udata/tests/api/test_me_api.py,sha256=YPd8zmR3zwJKtpSqz8nY1nOOMyXs66INeBwyhg5D0Us,13846
|
|
524
524
|
udata/tests/api/test_organizations_api.py,sha256=tI6OiLlEZ0ydn1TZxcb6k3__PQwomfX8nBHfAj7Vf90,44126
|
|
525
525
|
udata/tests/api/test_reports_api.py,sha256=fCSz9NwMXBs6cxdXBVVI6y564AtovmZYw3xkgxQ9KE8,6217
|
|
526
|
-
udata/tests/api/test_reuses_api.py,sha256=
|
|
526
|
+
udata/tests/api/test_reuses_api.py,sha256=B7_LA8Cuq_MqkE3C_hdvmugFXwzPJ9yKDckaZGpFQvU,27471
|
|
527
527
|
udata/tests/api/test_swagger.py,sha256=eE6La9qdTYTIUFevRVPJgtj17Jq_8uOlsDwzCNR0LL8,760
|
|
528
528
|
udata/tests/api/test_tags_api.py,sha256=36zEBgthVEn6pctJ0kDgPmEaUr-iqRAHeZRcRG2LEXQ,2425
|
|
529
529
|
udata/tests/api/test_transfer_api.py,sha256=-OLv-KjyLZL14J8UHl-ak_sYUj6wFiZWyoXC2SMXmEQ,7503
|
|
@@ -625,9 +625,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=nv80xZLfIfUsSOMBcr29L268FDc_Gt
|
|
|
625
625
|
udata/translations/pt/LC_MESSAGES/udata.po,sha256=bUp-7Ray8t8ALgJk3Icw1jmiGIc9_pEJQHiGw_2EU2o,50989
|
|
626
626
|
udata/translations/sr/LC_MESSAGES/udata.mo,sha256=Y_XpUxD074wXc63oJTnoVOyOQ2lmBxl-MrgluZ0Qdw4,27961
|
|
627
627
|
udata/translations/sr/LC_MESSAGES/udata.po,sha256=qh8mrz9AFuVQtXYSSP4QWsXLM_Lv3EHVifHT1NflWXY,57529
|
|
628
|
-
udata-12.0.2.
|
|
629
|
-
udata-12.0.2.
|
|
630
|
-
udata-12.0.2.
|
|
631
|
-
udata-12.0.2.
|
|
632
|
-
udata-12.0.2.
|
|
633
|
-
udata-12.0.2.
|
|
628
|
+
udata-12.0.2.dev16.dist-info/licenses/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
|
|
629
|
+
udata-12.0.2.dev16.dist-info/METADATA,sha256=8PetONVaBJc2GS-m_tYC4dMuGlLomj19Dw_BRlGOCxs,5174
|
|
630
|
+
udata-12.0.2.dev16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
631
|
+
udata-12.0.2.dev16.dist-info/entry_points.txt,sha256=v2u12qO11i2lyLNIp136WmLJ-NHT-Kew3Duu8J-AXPM,614
|
|
632
|
+
udata-12.0.2.dev16.dist-info/top_level.txt,sha256=EF6CE6YSHd_og-8LCEA4q25ALUpWVe8D0okOLdMAE3A,6
|
|
633
|
+
udata-12.0.2.dev16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|