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

@@ -1,7 +1,9 @@
1
1
  from datetime import datetime
2
2
 
3
+ from blinker import Signal
3
4
  from flask import url_for
4
5
  from mongoengine import Q
6
+ from mongoengine.signals import post_save
5
7
 
6
8
  import udata.core.contact_point.api_fields as contact_api_fields
7
9
  import udata.core.dataset.api_fields as datasets_api_fields
@@ -233,3 +235,21 @@ class Dataservice(WithMetrics, Owned, db.Document):
233
235
  def count_followers(self):
234
236
  self.metrics["followers"] = Follow.objects(until=None).followers(self).count()
235
237
  self.save()
238
+
239
+ on_create = Signal()
240
+ on_update = Signal()
241
+ on_delete = Signal()
242
+
243
+ @classmethod
244
+ def post_save(cls, sender, document, **kwargs):
245
+ if "post_save" in kwargs.get("ignores", []):
246
+ return
247
+ if kwargs.get("created"):
248
+ cls.on_create.send(document)
249
+ else:
250
+ cls.on_update.send(document)
251
+ if document.deleted_at:
252
+ cls.on_delete.send(document)
253
+
254
+
255
+ post_save.connect(Dataservice.post_save, sender=Dataservice)
@@ -46,6 +46,7 @@ def update(
46
46
  site.count_datasets()
47
47
  site.count_resources()
48
48
  site.count_reuses()
49
+ site.count_dataservices()
49
50
  site.count_followers()
50
51
  site.count_discussions()
51
52
  site.count_harvesters()
@@ -13,6 +13,7 @@ def compute_site_metrics(self):
13
13
  site.count_datasets()
14
14
  site.count_resources()
15
15
  site.count_reuses()
16
+ site.count_dataservices()
16
17
  site.count_followers()
17
18
  site.count_discussions()
18
19
  site.count_harvesters()
@@ -1,3 +1,4 @@
1
+ from udata.core.dataservices.models import Dataservice
1
2
  from udata.core.owned import Owned
2
3
  from udata.models import Dataset, Organization, Reuse
3
4
 
@@ -18,6 +19,14 @@ def update_reuses_metrics(document, **kwargs):
18
19
  document.organization.count_reuses()
19
20
 
20
21
 
22
+ @Dataservice.on_create.connect
23
+ @Dataservice.on_update.connect
24
+ @Dataservice.on_delete.connect
25
+ def update_dataservices_metrics(document, **kwargs):
26
+ if document.organization:
27
+ document.organization.count_dataservices()
28
+
29
+
21
30
  @Owned.on_owner_change.connect
22
31
  def update_org_metrics(document, previous):
23
32
  if not isinstance(previous, Organization):
@@ -157,6 +157,7 @@ class Organization(WithMetrics, OrganizationBadgeMixin, db.Datetimed, db.Documen
157
157
  "datasets",
158
158
  "members",
159
159
  "reuses",
160
+ "dataservices",
160
161
  "followers",
161
162
  "views",
162
163
  ]
@@ -309,6 +310,12 @@ class Organization(WithMetrics, OrganizationBadgeMixin, db.Datetimed, db.Documen
309
310
  self.metrics["reuses"] = Reuse.objects(organization=self).visible().count()
310
311
  self.save()
311
312
 
313
+ def count_dataservices(self):
314
+ from udata.models import Dataservice
315
+
316
+ self.metrics["dataservices"] = Dataservice.objects(organization=self).visible().count()
317
+ self.save()
318
+
312
319
  def count_followers(self):
313
320
  from udata.models import Follow
314
321
 
udata/core/site/models.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from flask import current_app, g
2
2
  from werkzeug.local import LocalProxy
3
3
 
4
+ from udata.core.dataservices.models import Dataservice
4
5
  from udata.core.dataset.models import Dataset
5
6
  from udata.core.organization.models import Organization
6
7
  from udata.core.reuse.models import Reuse
@@ -41,6 +42,7 @@ class Site(WithMetrics, db.Document):
41
42
  "public-service",
42
43
  "resources",
43
44
  "reuses",
45
+ "dataservices",
44
46
  "users",
45
47
  "harvesters",
46
48
  ]
@@ -87,6 +89,10 @@ class Site(WithMetrics, db.Document):
87
89
  self.metrics["reuses"] = Reuse.objects.visible().count()
88
90
  self.save()
89
91
 
92
+ def count_dataservices(self):
93
+ self.metrics["dataservices"] = Dataservice.objects.visible().count()
94
+ self.save()
95
+
90
96
  def count_followers(self):
91
97
  from udata.models import Follow
92
98
 
@@ -1,3 +1,4 @@
1
+ from udata.core.dataservices.models import Dataservice
1
2
  from udata.core.followers.signals import on_follow, on_unfollow
2
3
  from udata.core.owned import Owned
3
4
  from udata.models import Dataset, Reuse, User
@@ -19,6 +20,14 @@ def update_reuses_metrics(document, **kwargs):
19
20
  document.owner.count_reuses()
20
21
 
21
22
 
23
+ @Dataservice.on_create.connect
24
+ @Dataservice.on_update.connect
25
+ @Dataservice.on_delete.connect
26
+ def update_dataservices_metrics(document, **kwargs):
27
+ if document.owner:
28
+ document.owner.count_dataservices()
29
+
30
+
22
31
  @on_follow.connect
23
32
  @on_unfollow.connect
24
33
  def update_user_following_metric(follow):
udata/core/user/models.py CHANGED
@@ -99,6 +99,7 @@ class User(WithMetrics, UserMixin, db.Document):
99
99
  __metrics_keys__ = [
100
100
  "datasets",
101
101
  "reuses",
102
+ "dataservices",
102
103
  "following",
103
104
  "followers",
104
105
  ]
@@ -296,6 +297,12 @@ class User(WithMetrics, UserMixin, db.Document):
296
297
  self.metrics["reuses"] = Reuse.objects(owner=self).visible().count()
297
298
  self.save()
298
299
 
300
+ def count_dataservices(self):
301
+ from udata.core.dataservices.models import Dataservice
302
+
303
+ self.metrics["dataservices"] = Dataservice.objects(owner=self).visible().count()
304
+ self.save()
305
+
299
306
  def count_followers(self):
300
307
  from udata.models import Follow
301
308
 
@@ -208,7 +208,13 @@ class UserAPITest(APITestCase):
208
208
  about=faker.paragraph(),
209
209
  website=faker.url(),
210
210
  avatar_url=faker.url(),
211
- metrics={"datasets": 10, "followers": 1, "following": 0, "reuses": 2},
211
+ metrics={
212
+ "datasets": 10,
213
+ "followers": 1,
214
+ "following": 0,
215
+ "reuses": 2,
216
+ "dataservices": 0,
217
+ },
212
218
  )
213
219
  response = self.get(url_for("api.users"))
214
220
  self.assert200(response)
@@ -1,6 +1,8 @@
1
1
  from datetime import datetime
2
2
 
3
3
  import udata.core.organization.constants as org_constants
4
+ from udata.core.dataservices.factories import DataserviceFactory
5
+ from udata.core.dataservices.models import Dataservice
4
6
  from udata.core.dataset.factories import DatasetFactory, HiddenDatasetFactory
5
7
  from udata.core.followers.signals import on_follow, on_unfollow
6
8
  from udata.core.organization.factories import OrganizationFactory
@@ -27,6 +29,8 @@ class OrganizationModelTest(TestCase, DBTestMixin):
27
29
  with assert_emit(Reuse.on_create):
28
30
  reuse = VisibleReuseFactory(organization=org)
29
31
  ReuseFactory(organization=org)
32
+ with assert_emit(Dataservice.on_create):
33
+ dataservice = DataserviceFactory(organization=org)
30
34
  with assert_emit(Dataset.on_create):
31
35
  dataset = DatasetFactory(organization=org)
32
36
  HiddenDatasetFactory(organization=org)
@@ -37,11 +41,15 @@ class OrganizationModelTest(TestCase, DBTestMixin):
37
41
 
38
42
  assert org.get_metrics()["datasets"] == 1
39
43
  assert org.get_metrics()["reuses"] == 1
44
+ assert org.get_metrics()["dataservices"] == 1
40
45
  assert org.get_metrics()["followers"] == 1
41
46
 
42
47
  with assert_emit(Reuse.on_delete):
43
48
  reuse.deleted = datetime.utcnow()
44
49
  reuse.save()
50
+ with assert_emit(Dataservice.on_delete):
51
+ dataservice.deleted_at = datetime.utcnow()
52
+ dataservice.save()
45
53
  with assert_emit(Dataset.on_delete):
46
54
  dataset.deleted = datetime.utcnow()
47
55
  dataset.save()
@@ -51,6 +59,7 @@ class OrganizationModelTest(TestCase, DBTestMixin):
51
59
 
52
60
  assert org.get_metrics()["datasets"] == 0
53
61
  assert org.get_metrics()["reuses"] == 0
62
+ assert org.get_metrics()["dataservices"] == 0
54
63
  assert org.get_metrics()["followers"] == 0
55
64
 
56
65
  def test_organization_queryset_with_badge(self):
@@ -1,5 +1,6 @@
1
1
  import pytest
2
2
 
3
+ from udata.core.dataservices.factories import DataserviceFactory
3
4
  from udata.core.dataset.factories import (
4
5
  DatasetFactory,
5
6
  HiddenDatasetFactory,
@@ -29,6 +30,14 @@ class SiteMetricTest:
29
30
 
30
31
  assert site.get_metrics()["reuses"] == 4
31
32
 
33
+ def test_dataservice_metric(self, app):
34
+ site = SiteFactory.create(id=app.config["SITE_ID"])
35
+ DataserviceFactory.create_batch(4)
36
+
37
+ site.count_dataservices()
38
+
39
+ assert site.get_metrics()["dataservices"] == 4
40
+
32
41
  def test_dataset_metric(self, app):
33
42
  site = SiteFactory.create(id=app.config["SITE_ID"])
34
43
  DatasetFactory.create_batch(2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: udata
3
- Version: 10.0.5.dev32808
3
+ Version: 10.0.5.dev32826
4
4
  Summary: Open data portal
5
5
  Home-page: https://github.com/opendatateam/udata
6
6
  Author: Opendata Team
@@ -142,6 +142,7 @@ It is collectively taken care of by members of the
142
142
 
143
143
  - Add dataservice csv adapter [#3208](https://github.com/opendatateam/udata/pull/3208)
144
144
  - Add url_for for dataservices and mail notifications [#3213](https://github.com/opendatateam/udata/pull/3213)
145
+ - Compute dataservices metrics on org, user and site [#3209](https://github.com/opendatateam/udata/pull/3209)
145
146
 
146
147
  ## 10.0.4 (2024-11-29)
147
148
 
@@ -84,7 +84,7 @@ udata/core/dataservices/api.py,sha256=LpRc1FNTA6jAOj1KsFme5TxVn4SgcUWlDBWi43H1eZ
84
84
  udata/core/dataservices/apiv2.py,sha256=XIqJq58uLtxtt52iKYo7Fl0ZXv9Sz72uA7JIGwP8Qos,995
85
85
  udata/core/dataservices/csv.py,sha256=pL3j8-_KZWJaX1xFyILXt9wBtXn9Cmov5FUQgd0lNh0,1040
86
86
  udata/core/dataservices/factories.py,sha256=LDk8vvG0zhW8J-ZX5LoJQDU13pqeIyjQ05muuMro_eA,876
87
- udata/core/dataservices/models.py,sha256=cDG5jBCieDwEy7nzKGwovJ9lutubPl-RYw9vwGiYh1E,8921
87
+ udata/core/dataservices/models.py,sha256=lTcC0BqnF7bbFi1S2CZ8Qnk1Fk3TjWoHrvheFB5qSg4,9474
88
88
  udata/core/dataservices/permissions.py,sha256=98zM_R4v2ZtRubflB7ajaVQz-DVc-pZBMgtKUYy34oI,169
89
89
  udata/core/dataservices/rdf.py,sha256=9dWSqONCD5m9HmAU_ndmEmG3F1IuRUOW6MWTmk2GEEI,6792
90
90
  udata/core/dataservices/search.py,sha256=htjh3sq3tDuD2qwgRgZsW6ClrHLF6hMwYO4nfBO0Hr4,4171
@@ -135,10 +135,10 @@ udata/core/jobs/commands.py,sha256=85P5hDPdKMJzV_xbobNT8nqEW71HchPjTUJ-1u5wddE,4
135
135
  udata/core/jobs/forms.py,sha256=B-B6jXHZsYV-PWAkD8DLoOlh6trv4l1hGZ4HOPm-PD4,1495
136
136
  udata/core/jobs/models.py,sha256=xK8T3FCmhtERNbZmh1Tq_ZTO6vojM172tTc0oplNoQ0,1358
137
137
  udata/core/metrics/__init__.py,sha256=CB0MhZqNe4gKLBO-6zoGisXK7FtavxWx_Kkkle-INrc,398
138
- udata/core/metrics/commands.py,sha256=p9KlEcQBpjCGuU733jtEMRPxwq0yt1FLdwIYeDgAjks,5132
138
+ udata/core/metrics/commands.py,sha256=hOaF4_kmfG_qJWnCnvEHBkhHwp5mIavVS3X5YfdF0rE,5170
139
139
  udata/core/metrics/models.py,sha256=17EDq6GnCI_splm0K_Y12vj5UKwsA6VglykjzQISp00,328
140
140
  udata/core/metrics/signals.py,sha256=9mdJW__gR2GJT3huBr6HN2SDhKYJRgNbW9dnh48cAnU,176
141
- udata/core/metrics/tasks.py,sha256=Z6821OgupmDCN7Hj3esdb_udZbc1Haw7YpM48ytMIs4,797
141
+ udata/core/metrics/tasks.py,sha256=_3L2g3blndBID66s_CauXEW2bDYathjd4HAAhYNVaOs,827
142
142
  udata/core/organization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
143
  udata/core/organization/activities.py,sha256=NY9pDzOVcdo2HZ-ax77lioiDGUZ8jpUguSLt_824saQ,1133
144
144
  udata/core/organization/api.py,sha256=Z8QHV8KE53nNv56qJhUq5OLo_F6dFyzxrTT9wJ3VAPo,17927
@@ -149,8 +149,8 @@ udata/core/organization/constants.py,sha256=fncNtA-vFrRM22K1Wo6iYu9DQZjzknYxH6TI
149
149
  udata/core/organization/csv.py,sha256=j6BJvXE8_6c-IWOPOg0C-j9KiCushoG1FQxzKVBDj2A,1625
150
150
  udata/core/organization/factories.py,sha256=g8ubBcz79xbjvpunZ02IDOakFg1KE6cXjNkE9vFyFAc,624
151
151
  udata/core/organization/forms.py,sha256=tscDb1_yOpbTx3ahl8ttA7oDkX9jIyzLc4gOf6WbN3s,3552
152
- udata/core/organization/metrics.py,sha256=UlHOBOph9s_QW-X7dkEivVITdyZ0ku9kLKl7BmSpGTI,778
153
- udata/core/organization/models.py,sha256=Efv-SKxNNLtfllpi7NfL8UkBE7KDCGxfla0nK9G6whs,9144
152
+ udata/core/organization/metrics.py,sha256=90romzr-FhnPKh-6UHBJ1Af2loDa4-8I1iZEgztA160,1062
153
+ udata/core/organization/models.py,sha256=N6WJmH3DDVwm7kXq9Q2PbLzc_BGf1sH5zOnCCYinhms,9365
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
@@ -188,7 +188,7 @@ udata/core/site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
188
  udata/core/site/api.py,sha256=OwlzjgwdrtEemw63cxc4HYEGe5n-oN0sEXCzjt22ebA,4545
189
189
  udata/core/site/factories.py,sha256=O0nLFmjrFyemzcs-YwNukq5nqd383KBGrgL5bOQsGbA,378
190
190
  udata/core/site/forms.py,sha256=avEZ4rJhibF7sKexqMlKt1qMFiUHNrmJGKjZqcAyjrc,459
191
- udata/core/site/models.py,sha256=PVB4I2dTQDr5p5md3faVDGZSgOcGKbloHzjzdOG96_I,6266
191
+ udata/core/site/models.py,sha256=5Cu2MJ7N6nr7RUc0DJIUujHU0lNUCoMXC8sDThnZxZg,6477
192
192
  udata/core/site/rdf.py,sha256=HIuFNA_cvPLmib171GlRAjFZWThbESoOTbK7aj26EMc,2073
193
193
  udata/core/spam/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
194
194
  udata/core/spam/api.py,sha256=eqmDB4_VF5EM92675FqFmk4Be5TAnu87dmSVtgXKF4A,1740
@@ -242,8 +242,8 @@ udata/core/user/commands.py,sha256=d33hjgUi8WLA8YFvoq__FJJ_E-fk8f4tWo1iuT8jJvM,3
242
242
  udata/core/user/constants.py,sha256=aTluhTR2RGZ_cdG7-mkEoT5Ndbg8BNUwwzCOld0aLMY,77
243
243
  udata/core/user/factories.py,sha256=kkwaojciLzfuAOeRnL1E7XCcGPo8waAal_G2eeuVc0k,825
244
244
  udata/core/user/forms.py,sha256=yotqZozH9ViKuNI8SwdKocDEi7NXVs_XUMpdr_bIe5s,966
245
- udata/core/user/metrics.py,sha256=-3KQU3jHyVhL3kDL-gVw0dtN-8WZk4QubTfH-L9PyyI,922
246
- udata/core/user/models.py,sha256=-MdGdfM1aUFh3wT0DTHdQCnAdYd2VD4RvL8bVFG27mE,9951
245
+ udata/core/user/metrics.py,sha256=ZuCxYHu-770IsO-KPMhh-ZDkl2hYSVCuHDRvp-H1NfA,1192
246
+ udata/core/user/models.py,sha256=zpP3omla4vTWiPqFUS3ndRT8uAjNwrl_DYh82ILjiHU,10183
247
247
  udata/core/user/permissions.py,sha256=Wbd8bLqSjqp9RHJ6ffLBj74L-LECcAhWazuw4Hq-2Gk,435
248
248
  udata/core/user/rdf.py,sha256=F6SDX65ECtVOjDtHXI9WMmq33pN7HWb5ntOqe3LQsbQ,834
249
249
  udata/core/user/tasks.py,sha256=OXy6bZnr7Mld_VzhMWlNyrkhC4K57IR7H0eSjFDZucU,317
@@ -623,7 +623,7 @@ udata/tests/api/test_swagger.py,sha256=eE6La9qdTYTIUFevRVPJgtj17Jq_8uOlsDwzCNR0L
623
623
  udata/tests/api/test_tags_api.py,sha256=36zEBgthVEn6pctJ0kDgPmEaUr-iqRAHeZRcRG2LEXQ,2425
624
624
  udata/tests/api/test_topics_api.py,sha256=DfdYQ5ba3H_MKYRe4qjCYN6vaw61GccHJ4usGRIdL-4,9812
625
625
  udata/tests/api/test_transfer_api.py,sha256=5cp4-O-nxkxDibsVbsG2lZ2qAsTBX2BpoMPTm8bvT8k,3085
626
- udata/tests/api/test_user_api.py,sha256=hRzxFg9Y9GwFaXMZd2IZTUzK0Dk_7a4YmPsJzm2l4QM,14891
626
+ udata/tests/api/test_user_api.py,sha256=ltJkmHPbqOSNexIWDPfJhTVZAQSafWvJtbUB9vnNdCQ,15005
627
627
  udata/tests/apiv2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
628
628
  udata/tests/apiv2/test_datasets.py,sha256=c6Keni4GWujVseem-wbvlq92yL4XHY6C1_tD7TlqXWI,20799
629
629
  udata/tests/apiv2/test_me_api.py,sha256=RAgu5iKGB3Pp8cDN-427ovly-VOz5MTL4GpPZ1NcVXI,1418
@@ -672,7 +672,7 @@ udata/tests/frontend/test_markdown.py,sha256=8E0XjByzmsY-RGdF2ESoL9Rklkfz3vcdJWK
672
672
  udata/tests/organization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
673
673
  udata/tests/organization/test_csv_adapter.py,sha256=vgTVbPMqKipcdg7wi99pHk9ZNhqtuU-yneEaVW3pZmU,1564
674
674
  udata/tests/organization/test_notifications.py,sha256=PGmME5BbYVtcPffeSE1sx47J6iAfm4RDAZIRv_MXDFE,1366
675
- udata/tests/organization/test_organization_model.py,sha256=clRck_ZNSIBI0VaugrInK6dUkw3yBaly6TtVqmLzfEY,3684
675
+ udata/tests/organization/test_organization_model.py,sha256=R290hX8vQZ0ccA_cAfrSlEojeFZnnf25uFLya7lJTJc,4159
676
676
  udata/tests/organization/test_organization_rdf.py,sha256=Uf-OgXV615wLUHfcBTmp9QFuV8VCFmjI4wgvShve-mc,8074
677
677
  udata/tests/organization/test_organization_tasks.py,sha256=ehPirwfLqaEcnJ9TLk3jGw3Xh-CVx1WXhvIDFYrT2iQ,2845
678
678
  udata/tests/reuse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -684,7 +684,7 @@ udata/tests/search/test_query.py,sha256=aFZKFTJjlih5csy3eNp4MxL5hg13NqiIsrS5bCTO
684
684
  udata/tests/search/test_results.py,sha256=vHMkywoW6SQKGy5OtCriYpSo-KbVEdjVzOf8un2mjZE,2043
685
685
  udata/tests/site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
686
686
  udata/tests/site/test_site_api.py,sha256=rVvaGFAXVy_HilxpFrifJp-ESjPd-oAfvLd5eq9kwyA,2190
687
- udata/tests/site/test_site_metrics.py,sha256=d0gohm0sHin5LrjBx6I9Byii-P_WDBSnkx2Bc5jjIr8,2058
687
+ udata/tests/site/test_site_metrics.py,sha256=KxlilOUeAbBta7HwD4mB4ybDWBmRB-3UVrLunvRGoGg,2362
688
688
  udata/tests/site/test_site_model.py,sha256=zpRg5jrFPUwhGsljlO5lpCrhJLHiHYoNl28AOw5mI4c,1312
689
689
  udata/tests/site/test_site_rdf.py,sha256=zlw7leYc7azfrC6JwDjKiy3wixQzTpo-lDOm-Dg_kXw,13092
690
690
  udata/tests/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -709,9 +709,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=nGPoTSbeRlpCQGuxoJ7Oa650flpeeh
709
709
  udata/translations/pt/LC_MESSAGES/udata.po,sha256=f-tilnngNNBEIQdXmm3GbdaLlvbwG9YLLwhqyRD5Lh4,44871
710
710
  udata/translations/sr/LC_MESSAGES/udata.mo,sha256=8RL_aEe-0QJdgY-TNMy7bS4z8X9IOK8-C076dxcp3As,28163
711
711
  udata/translations/sr/LC_MESSAGES/udata.po,sha256=Cp0bKPeIbuAqvFeoey_9ItQbAHIeiFZPnZLa6A6JNbI,51363
712
- udata-10.0.5.dev32808.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
713
- udata-10.0.5.dev32808.dist-info/METADATA,sha256=RuoqpyAib_uJCVEasPzIGVckpLcTrU8upXi41O_LBUo,136348
714
- udata-10.0.5.dev32808.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
715
- udata-10.0.5.dev32808.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
716
- udata-10.0.5.dev32808.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
717
- udata-10.0.5.dev32808.dist-info/RECORD,,
712
+ udata-10.0.5.dev32826.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
713
+ udata-10.0.5.dev32826.dist-info/METADATA,sha256=2288e8kvmpwyY4VeW4xjJJGF8KbIBr-V1FqJVpakkxI,136458
714
+ udata-10.0.5.dev32826.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
715
+ udata-10.0.5.dev32826.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
716
+ udata-10.0.5.dev32826.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
717
+ udata-10.0.5.dev32826.dist-info/RECORD,,