udata 12.0.2.dev14__py3-none-any.whl → 12.0.2.dev15__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/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 +25 -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.dev15.dist-info}/METADATA +1 -1
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev15.dist-info}/RECORD +14 -14
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev15.dist-info}/WHEEL +0 -0
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev15.dist-info}/entry_points.txt +0 -0
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev15.dist-info}/licenses/LICENSE +0 -0
- {udata-12.0.2.dev14.dist-info → udata-12.0.2.dev15.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/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
|
|
@@ -1322,31 +1323,47 @@ class DatasetAPITest(APITestCase):
|
|
|
1322
1323
|
|
|
1323
1324
|
|
|
1324
1325
|
class DatasetsFeedAPItest(APITestCase):
|
|
1326
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=10)
|
|
1325
1327
|
def test_recent_feed(self):
|
|
1328
|
+
certified_org = OrganizationFactory(badges=[OrganizationBadge(kind="certified")])
|
|
1329
|
+
# We have a 10 hours delay for a new object to appear in feed. A newly created one shouldn't appear.
|
|
1326
1330
|
DatasetFactory(
|
|
1327
1331
|
title="A", resources=[ResourceFactory()], created_at_internal=datetime.utcnow()
|
|
1328
1332
|
)
|
|
1333
|
+
# Except in the case of a new dataset published by a certified organization
|
|
1329
1334
|
DatasetFactory(
|
|
1330
1335
|
title="B",
|
|
1331
|
-
|
|
1332
|
-
|
|
1336
|
+
created_at_internal=datetime.utcnow(),
|
|
1337
|
+
organization=certified_org,
|
|
1333
1338
|
)
|
|
1334
1339
|
DatasetFactory(
|
|
1335
1340
|
title="C",
|
|
1336
|
-
|
|
1341
|
+
created_at_internal=datetime.utcnow() - timedelta(days=2),
|
|
1342
|
+
)
|
|
1343
|
+
DatasetFactory(
|
|
1344
|
+
title="D",
|
|
1337
1345
|
created_at_internal=datetime.utcnow() - timedelta(days=1),
|
|
1338
1346
|
)
|
|
1347
|
+
# Even if dataset E is created more recently than D, it should appear after in the feed, since it doesn't have a delay
|
|
1348
|
+
# before appearing in the field because it is published by a certified organization
|
|
1349
|
+
DatasetFactory(
|
|
1350
|
+
title="E",
|
|
1351
|
+
created_at_internal=datetime.utcnow() - timedelta(hours=23),
|
|
1352
|
+
organization=certified_org,
|
|
1353
|
+
)
|
|
1339
1354
|
|
|
1340
1355
|
response = self.get(url_for("api.recent_datasets_atom_feed"))
|
|
1341
1356
|
self.assert200(response)
|
|
1342
1357
|
|
|
1343
1358
|
feed = feedparser.parse(response.data)
|
|
1344
1359
|
|
|
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, "
|
|
1360
|
+
self.assertEqual(len(feed.entries), 4)
|
|
1361
|
+
self.assertEqual(feed.entries[0].title, "B")
|
|
1362
|
+
self.assertEqual(feed.entries[1].title, "D")
|
|
1363
|
+
self.assertEqual(feed.entries[2].title, "E")
|
|
1364
|
+
self.assertEqual(feed.entries[3].title, "C")
|
|
1349
1365
|
|
|
1366
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=0)
|
|
1350
1367
|
def test_recent_feed_owner(self):
|
|
1351
1368
|
owner = UserFactory()
|
|
1352
1369
|
DatasetFactory(owner=owner, resources=[ResourceFactory()])
|
|
@@ -1364,6 +1381,7 @@ class DatasetsFeedAPItest(APITestCase):
|
|
|
1364
1381
|
self.assertEqual(author.name, owner.fullname)
|
|
1365
1382
|
self.assertEqual(author.href, owner.url_for())
|
|
1366
1383
|
|
|
1384
|
+
@pytest.mark.options(DELAY_BEFORE_APPEARING_IN_RSS_FEED=0)
|
|
1367
1385
|
def test_recent_feed_org(self):
|
|
1368
1386
|
owner = UserFactory()
|
|
1369
1387
|
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
|
|
@@ -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=Qlnitk2WmLDJJ7m7ULfV0UX8ml9VXev8Bd1PMv7v6_A,105949
|
|
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.dev15.dist-info/licenses/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
|
|
629
|
+
udata-12.0.2.dev15.dist-info/METADATA,sha256=FbfUH9JcbjqFCQjt6f5RbgVob95aMfPdRE7L6jSSCTU,5174
|
|
630
|
+
udata-12.0.2.dev15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
631
|
+
udata-12.0.2.dev15.dist-info/entry_points.txt,sha256=v2u12qO11i2lyLNIp136WmLJ-NHT-Kew3Duu8J-AXPM,614
|
|
632
|
+
udata-12.0.2.dev15.dist-info/top_level.txt,sha256=EF6CE6YSHd_og-8LCEA4q25ALUpWVe8D0okOLdMAE3A,6
|
|
633
|
+
udata-12.0.2.dev15.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|