udata 10.3.0__py2.py3-none-any.whl → 10.3.1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of udata might be problematic. Click here for more details.

Files changed (42) hide show
  1. udata/__init__.py +1 -1
  2. udata/api/fields.py +8 -0
  3. udata/commands/fixtures.py +7 -1
  4. udata/core/activity/api.py +1 -1
  5. udata/core/dataset/api.py +44 -2
  6. udata/core/dataset/tasks.py +1 -1
  7. udata/core/discussions/api.py +113 -10
  8. udata/core/discussions/csv.py +2 -0
  9. udata/core/discussions/forms.py +14 -1
  10. udata/core/discussions/models.py +57 -3
  11. udata/core/discussions/permissions.py +31 -9
  12. udata/core/discussions/tasks.py +3 -3
  13. udata/core/followers/api.py +8 -0
  14. udata/core/spam/models.py +4 -0
  15. udata/forms/fields.py +10 -8
  16. udata/harvest/backends/maaf.py +234 -0
  17. udata/harvest/backends/maaf.xsd +362 -0
  18. udata/harvest/tests/person.jsonld +72 -0
  19. udata/static/chunks/{11.83535504cd650ea08f65.js → 11.51d706fb9521c16976bc.js} +3 -3
  20. udata/static/chunks/{11.83535504cd650ea08f65.js.map → 11.51d706fb9521c16976bc.js.map} +1 -1
  21. udata/static/chunks/{13.d9c1735d14038b94c17e.js → 13.f29411b06be1883356a3.js} +2 -2
  22. udata/static/chunks/{13.d9c1735d14038b94c17e.js.map → 13.f29411b06be1883356a3.js.map} +1 -1
  23. udata/static/chunks/{17.81c57c0dedf812e43013.js → 17.3bd0340930d4a314ce9c.js} +2 -2
  24. udata/static/chunks/{17.81c57c0dedf812e43013.js.map → 17.3bd0340930d4a314ce9c.js.map} +1 -1
  25. udata/static/chunks/{19.df16abde17a42033a7f8.js → 19.8da42e8359d72afc2618.js} +3 -3
  26. udata/static/chunks/{19.df16abde17a42033a7f8.js.map → 19.8da42e8359d72afc2618.js.map} +1 -1
  27. udata/static/chunks/{8.462bb3029de008497675.js → 8.54e44b102164ae5e7a67.js} +2 -2
  28. udata/static/chunks/{8.462bb3029de008497675.js.map → 8.54e44b102164ae5e7a67.js.map} +1 -1
  29. udata/static/common.js +1 -1
  30. udata/static/common.js.map +1 -1
  31. udata/templates/mail/discussion_closed.html +4 -3
  32. udata/templates/mail/discussion_closed.txt +1 -1
  33. udata/templates/mail/new_discussion_comment.html +2 -2
  34. udata/tests/api/test_datasets_api.py +95 -1
  35. udata/tests/api/test_follow_api.py +46 -0
  36. udata/tests/test_discussions.py +281 -3
  37. {udata-10.3.0.dist-info → udata-10.3.1.dist-info}/METADATA +10 -1
  38. {udata-10.3.0.dist-info → udata-10.3.1.dist-info}/RECORD +42 -39
  39. {udata-10.3.0.dist-info → udata-10.3.1.dist-info}/entry_points.txt +1 -0
  40. {udata-10.3.0.dist-info → udata-10.3.1.dist-info}/LICENSE +0 -0
  41. {udata-10.3.0.dist-info → udata-10.3.1.dist-info}/WHEEL +0 -0
  42. {udata-10.3.0.dist-info → udata-10.3.1.dist-info}/top_level.txt +0 -0
@@ -66,6 +66,7 @@ class DiscussionsTest(APITestCase):
66
66
 
67
67
  discussion = discussions[0]
68
68
  self.assertEqual(discussion.user, user)
69
+ self.assertIsNone(discussion.organization)
69
70
  self.assertEqual(len(discussion.discussion), 1)
70
71
  self.assertIsNotNone(discussion.created)
71
72
  self.assertIsNone(discussion.closed)
@@ -79,6 +80,63 @@ class DiscussionsTest(APITestCase):
79
80
  self.assertIsNotNone(message.posted_on)
80
81
  self.assertFalse(message.is_spam())
81
82
 
83
+ def test_new_discussion_on_behalf_of_org(self):
84
+ user = self.login()
85
+ org1 = OrganizationFactory(editors=[user])
86
+ org2 = OrganizationFactory(editors=[user])
87
+ other_org = OrganizationFactory()
88
+ dataset = DatasetFactory()
89
+
90
+ response = self.post(
91
+ url_for("api.discussions"),
92
+ {
93
+ "organization": other_org.id,
94
+ "title": "not allowed",
95
+ "comment": "bla bla",
96
+ "subject": {
97
+ "class": "Dataset",
98
+ "id": dataset.id,
99
+ },
100
+ },
101
+ )
102
+ self.assert400(response)
103
+
104
+ response = self.post(
105
+ url_for("api.discussions"),
106
+ {
107
+ "organization": org1.id,
108
+ "title": "test title",
109
+ "comment": "bla bla",
110
+ "subject": {
111
+ "class": "Dataset",
112
+ "id": dataset.id,
113
+ },
114
+ },
115
+ )
116
+ self.assert201(response)
117
+ assert response.json["organization"]["id"] == str(org1.id)
118
+ assert response.json["user"]["id"] == str(user.id)
119
+ assert response.json["discussion"][0]["posted_by_organization"]["id"] == str(org1.id)
120
+ assert response.json["discussion"][0]["posted_by"]["id"] == str(user.id)
121
+
122
+ response = self.post(
123
+ url_for("api.discussion", id=response.json["id"]),
124
+ {"organization": org2.id, "comment": "A comment"},
125
+ )
126
+ self.assert200(response)
127
+ assert response.json["organization"]["id"] == str(org1.id)
128
+ assert response.json["user"]["id"] == str(user.id)
129
+ assert response.json["discussion"][0]["posted_by_organization"]["id"] == str(org1.id)
130
+ assert response.json["discussion"][0]["posted_by"]["id"] == str(user.id)
131
+ assert response.json["discussion"][1]["posted_by_organization"]["id"] == str(org2.id)
132
+ assert response.json["discussion"][1]["posted_by"]["id"] == str(user.id)
133
+
134
+ response = self.post(
135
+ url_for("api.discussion", id=response.json["id"]),
136
+ {"organization": other_org.id, "comment": "A comment"},
137
+ )
138
+ self.assert400(response)
139
+
82
140
  @pytest.mark.options(SPAM_WORDS=["spam"])
83
141
  def test_spam_in_new_discussion_title(self):
84
142
  self.login()
@@ -574,7 +632,7 @@ class DiscussionsTest(APITestCase):
574
632
  url_for("api.discussion", id=discussion.id),
575
633
  {"comment": "close bla bla", "close": True},
576
634
  )
577
- self.assert200(response)
635
+ self.assert200(response)
578
636
 
579
637
  dataset.reload()
580
638
  self.assertEqual(dataset.get_metrics()["discussions"], 0)
@@ -599,6 +657,22 @@ class DiscussionsTest(APITestCase):
599
657
  )
600
658
  self.assert403(response)
601
659
 
660
+ def test_close_discussion_without_message(self):
661
+ owner = self.login()
662
+ user = UserFactory()
663
+ dataset = Dataset.objects.create(title="Test dataset", owner=owner)
664
+ message = Message(content="bla bla", posted_by=user)
665
+ discussion = Discussion.objects.create(
666
+ subject=dataset, user=user, title="test discussion", discussion=[message]
667
+ )
668
+
669
+ with assert_emit(on_discussion_closed):
670
+ response = self.post(
671
+ url_for("api.discussion", id=discussion.id),
672
+ {"close": True},
673
+ )
674
+ self.assert200(response)
675
+
602
676
  def test_close_discussion_permissions(self):
603
677
  dataset = Dataset.objects.create(title="Test dataset")
604
678
  user = UserFactory()
@@ -637,6 +711,207 @@ class DiscussionsTest(APITestCase):
637
711
  self.assertEqual(dataset.get_metrics()["discussions"], 0)
638
712
  self.assertEqual(Discussion.objects(subject=dataset).count(), 0)
639
713
 
714
+ def test_discussion_permissions(self):
715
+ admin = AdminFactory()
716
+ subject_owner = UserFactory()
717
+ user1 = UserFactory()
718
+ user2 = UserFactory()
719
+ user3 = UserFactory()
720
+ org = OrganizationFactory(
721
+ members=[Member(user=user1, role="editor"), Member(user=user2, role="editor")]
722
+ )
723
+ dataset = Dataset.objects.create(title="Test dataset", owner=subject_owner)
724
+ message = Message(content="bla bla", posted_by=user1)
725
+ message2 = Message(content="bla bla bla", posted_by=user2)
726
+ message3 = Message(content="bla bla bla", posted_by=user2, posted_by_organization=org)
727
+ discussion = Discussion.objects.create(
728
+ subject=dataset,
729
+ user=user1,
730
+ title="test discussion",
731
+ discussion=[message, message2, message3],
732
+ )
733
+
734
+ self.login(admin)
735
+ response = self.get(url_for("api.discussion", id=discussion.id))
736
+ assert response.json["permissions"]["edit"]
737
+ assert response.json["permissions"]["close"]
738
+ assert response.json["permissions"]["delete"]
739
+ assert response.json["discussion"][0]["permissions"]["edit"]
740
+ assert response.json["discussion"][0]["permissions"]["delete"]
741
+ assert response.json["discussion"][1]["permissions"]["edit"]
742
+ assert response.json["discussion"][1]["permissions"]["delete"]
743
+ assert response.json["discussion"][2]["permissions"]["edit"]
744
+ assert response.json["discussion"][2]["permissions"]["delete"]
745
+
746
+ self.login(subject_owner)
747
+ response = self.get(url_for("api.discussion", id=discussion.id))
748
+ assert not response.json["permissions"]["edit"]
749
+ assert response.json["permissions"]["close"]
750
+ assert not response.json["permissions"]["delete"]
751
+ assert not response.json["discussion"][0]["permissions"]["edit"]
752
+ assert not response.json["discussion"][0]["permissions"]["delete"]
753
+ assert not response.json["discussion"][1]["permissions"]["edit"]
754
+ assert not response.json["discussion"][1]["permissions"]["delete"]
755
+ assert not response.json["discussion"][2]["permissions"]["edit"]
756
+ assert not response.json["discussion"][2]["permissions"]["delete"]
757
+
758
+ self.login(user1)
759
+ response = self.get(url_for("api.discussion", id=discussion.id))
760
+ assert response.json["permissions"]["edit"]
761
+ assert response.json["permissions"]["close"]
762
+ assert response.json["permissions"]["delete"]
763
+ assert response.json["discussion"][0]["permissions"]["edit"]
764
+ assert response.json["discussion"][0]["permissions"]["delete"]
765
+ assert not response.json["discussion"][1]["permissions"]["edit"]
766
+ assert not response.json["discussion"][1]["permissions"]["delete"]
767
+ assert response.json["discussion"][2]["permissions"]["edit"]
768
+ assert response.json["discussion"][2]["permissions"]["delete"]
769
+
770
+ self.login(user2)
771
+ response = self.get(url_for("api.discussion", id=discussion.id))
772
+ assert not response.json["permissions"]["edit"]
773
+ assert not response.json["permissions"]["close"]
774
+ assert not response.json["permissions"]["delete"]
775
+ assert not response.json["discussion"][0]["permissions"]["edit"]
776
+ assert not response.json["discussion"][0]["permissions"]["delete"]
777
+ assert response.json["discussion"][1]["permissions"]["edit"]
778
+ assert response.json["discussion"][1]["permissions"]["delete"]
779
+ assert response.json["discussion"][2]["permissions"]["edit"]
780
+ assert response.json["discussion"][2]["permissions"]["delete"]
781
+
782
+ self.login(user3)
783
+ response = self.get(url_for("api.discussion", id=discussion.id))
784
+ assert not response.json["permissions"]["edit"]
785
+ assert not response.json["permissions"]["close"]
786
+ assert not response.json["permissions"]["delete"]
787
+ assert not response.json["discussion"][0]["permissions"]["edit"]
788
+ assert not response.json["discussion"][0]["permissions"]["delete"]
789
+ assert not response.json["discussion"][1]["permissions"]["edit"]
790
+ assert not response.json["discussion"][1]["permissions"]["delete"]
791
+ assert not response.json["discussion"][2]["permissions"]["edit"]
792
+ assert not response.json["discussion"][2]["permissions"]["delete"]
793
+
794
+ discussion_by_org = Discussion.objects.create(
795
+ subject=dataset,
796
+ user=user2,
797
+ organization=org,
798
+ title="test discussion",
799
+ discussion=[message3],
800
+ )
801
+
802
+ self.login(admin)
803
+ response = self.get(url_for("api.discussion", id=discussion_by_org.id))
804
+ assert response.json["permissions"]["edit"]
805
+ assert response.json["permissions"]["close"]
806
+ assert response.json["permissions"]["delete"]
807
+ assert response.json["discussion"][0]["permissions"]["edit"]
808
+ assert response.json["discussion"][0]["permissions"]["delete"]
809
+
810
+ self.login(subject_owner)
811
+ response = self.get(url_for("api.discussion", id=discussion_by_org.id))
812
+ assert not response.json["permissions"]["edit"]
813
+ assert response.json["permissions"]["close"]
814
+ assert not response.json["permissions"]["delete"]
815
+ assert not response.json["discussion"][0]["permissions"]["edit"]
816
+ assert not response.json["discussion"][0]["permissions"]["delete"]
817
+
818
+ self.login(user1)
819
+ response = self.get(url_for("api.discussion", id=discussion_by_org.id))
820
+ assert response.json["permissions"]["edit"]
821
+ assert response.json["permissions"]["close"]
822
+ assert response.json["permissions"]["delete"]
823
+ assert response.json["discussion"][0]["permissions"]["edit"]
824
+ assert response.json["discussion"][0]["permissions"]["delete"]
825
+
826
+ self.login(user2)
827
+ response = self.get(url_for("api.discussion", id=discussion_by_org.id))
828
+ assert response.json["permissions"]["edit"]
829
+ assert response.json["permissions"]["close"]
830
+ assert response.json["permissions"]["delete"]
831
+ assert response.json["discussion"][0]["permissions"]["edit"]
832
+ assert response.json["discussion"][0]["permissions"]["delete"]
833
+
834
+ self.login(user3)
835
+ response = self.get(url_for("api.discussion", id=discussion_by_org.id))
836
+ assert not response.json["permissions"]["edit"]
837
+ assert not response.json["permissions"]["close"]
838
+ assert not response.json["permissions"]["delete"]
839
+ assert not response.json["discussion"][0]["permissions"]["edit"]
840
+ assert not response.json["discussion"][0]["permissions"]["delete"]
841
+
842
+ def test_edit_discussion_title(self):
843
+ admin = self.login(AdminFactory())
844
+ user1 = UserFactory()
845
+ user2 = UserFactory()
846
+ dataset = Dataset.objects.create(title="Test dataset", owner=user1)
847
+ message = Message(content="bla bla", posted_by=user1)
848
+ message2 = Message(content="bla bla bla", posted_by=user2)
849
+ discussion = Discussion.objects.create(
850
+ subject=dataset, user=user1, title="test discussion", discussion=[message, message2]
851
+ )
852
+ self.assertEqual(len(discussion.discussion), 2)
853
+
854
+ response = self.put(url_for("api.discussion", id=discussion.id), {"title": "new title"})
855
+ self.assertStatus(response, 200)
856
+ discussion.reload()
857
+ assert discussion.title == "new title"
858
+
859
+ self.login(admin)
860
+ response = self.put(
861
+ url_for("api.discussion", id=discussion.id),
862
+ {"title": "edit by admin"},
863
+ )
864
+ self.assertStatus(response, 200)
865
+ discussion.reload()
866
+ assert discussion.title == "edit by admin"
867
+
868
+ self.login(user2)
869
+ response = self.put(
870
+ url_for("api.discussion", id=discussion.id),
871
+ {"title": "not allowed"},
872
+ )
873
+ self.assertStatus(response, 403)
874
+
875
+ def test_edit_discussion_comment(self):
876
+ admin = self.login(AdminFactory())
877
+ user = UserFactory()
878
+ dataset = Dataset.objects.create(title="Test dataset", owner=admin)
879
+ message = Message(content="bla bla", posted_by=user)
880
+ message2 = Message(content="bla bla bla", posted_by=user)
881
+ discussion = Discussion.objects.create(
882
+ subject=dataset, user=user, title="test discussion", discussion=[message, message2]
883
+ )
884
+ self.assertEqual(len(discussion.discussion), 2)
885
+
886
+ response = self.put(
887
+ url_for("api.discussion_comment", id=discussion.id, cidx=0), {"comment": "new body"}
888
+ )
889
+ self.assertStatus(response, 200)
890
+ discussion.reload()
891
+ assert discussion.discussion[0].content == "new body"
892
+
893
+ self.login(admin)
894
+ response = self.put(
895
+ url_for("api.discussion_comment", id=discussion.id, cidx=1),
896
+ {"comment": "edit by admin"},
897
+ )
898
+ self.assertStatus(response, 200)
899
+ discussion.reload()
900
+ assert discussion.discussion[1].content == "edit by admin"
901
+
902
+ response = self.put(
903
+ url_for("api.discussion_comment", id=discussion.id, cidx=3),
904
+ {"comment": "overflow edit"},
905
+ )
906
+ self.assertStatus(response, 404)
907
+
908
+ self.login(UserFactory())
909
+ response = self.put(
910
+ url_for("api.discussion_comment", id=discussion.id, cidx=0),
911
+ {"comment": "other user"},
912
+ )
913
+ self.assertStatus(response, 403)
914
+
640
915
  def test_delete_discussion_comment(self):
641
916
  owner = self.login(AdminFactory())
642
917
  user = UserFactory()
@@ -688,11 +963,12 @@ class DiscussionsTest(APITestCase):
688
963
  dataset = Dataset.objects.create(title="Test dataset")
689
964
  user = UserFactory()
690
965
  message = Message(content="bla bla", posted_by=user)
966
+ message2 = Message(content="bla bla bla", posted_by=user)
691
967
  discussion = Discussion.objects.create(
692
- subject=dataset, user=user, title="test discussion", discussion=[message]
968
+ subject=dataset, user=user, title="test discussion", discussion=[message, message2]
693
969
  )
694
970
  self.login()
695
- response = self.delete(url_for("api.discussion_comment", id=discussion.id, cidx=0))
971
+ response = self.delete(url_for("api.discussion_comment", id=discussion.id, cidx=1))
696
972
  self.assert403(response)
697
973
 
698
974
 
@@ -827,6 +1103,8 @@ class DiscussionsMailsTest(APITestCase):
827
1103
  user=poster,
828
1104
  title=faker.sentence(),
829
1105
  discussion=[message, second_message, closing_message],
1106
+ closed=datetime.utcnow(),
1107
+ closed_by=owner,
830
1108
  )
831
1109
 
832
1110
  with capture_mails() as mails:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: udata
3
- Version: 10.3.0
3
+ Version: 10.3.1
4
4
  Summary: Open data portal
5
5
  Home-page: https://github.com/opendatateam/udata
6
6
  Author: Opendata Team
@@ -139,6 +139,15 @@ It is collectively taken care of by members of the
139
139
 
140
140
  # Changelog
141
141
 
142
+ ## 10.3.1 (2025-04-29)
143
+
144
+ - Add archived, deleted and private filter in dataset list api [#3298](https://github.com/opendatateam/udata/pull/3298)
145
+ - Exclude deleted dataservices in csv queryset [#3297](https://github.com/opendatateam/udata/pull/3297)
146
+ - Publish comments on behalf of org, close without message and edit/delete discussions comments [#3295](https://github.com/opendatateam/udata/pull/3295)
147
+ - Migrate MAAF backend from udata-front [#3300](https://github.com/opendatateam/udata/pull/3300)
148
+ - Follow: add user parser argument [#3302](https://github.com/opendatateam/udata/pull/3302)
149
+ - Allow trailing slash to activity route [#3303](https://github.com/opendatateam/udata/pull/3303)
150
+
142
151
  ## 10.3.0 (2025-04-11)
143
152
 
144
153
  - Skip empty datasets nodes referenced in dataservices before creating an harvest job item [#3285](https://github.com/opendatateam/udata/pull/3285)
@@ -1,6 +1,6 @@
1
1
  tasks/__init__.py,sha256=nfgZ5nkcoluXMIk52P4-8Rj6xL0Qlm_xSUfWW2aHZfI,8161
2
2
  tasks/helpers.py,sha256=70fS9tI_m0DTWmKx9Zl5-LG-nxdz_ZaPyvvsFkN2r48,1091
3
- udata/__init__.py,sha256=d3oaxy0HMLlO3_Dm7-bCZINYst0n8ftF9frXsyPrY_4,98
3
+ udata/__init__.py,sha256=m13KuUbriD7uS66PEpMIXxY9gDtFVhcMwl2KV-WjuiU,98
4
4
  udata/api_fields.py,sha256=nv_Nl1Mi-XQ8V08fxmscer13jsNNJgSOOIQEh1itsLQ,30679
5
5
  udata/app.py,sha256=xjk2D3EgboYBpTwBwdIxd2klt2yMoWMyCrkry5fz0LA,7292
6
6
  udata/assets.py,sha256=H5Hrc2vnKM0IFLyWfLXmJ2Kj35w1i8W1D8Cgy8_cUj4,657
@@ -28,7 +28,7 @@ udata/admin/views.py,sha256=00fI1O55apOlwIc0li2BdvEEGMd5l5isd5A_eHvzu3Y,331
28
28
  udata/api/__init__.py,sha256=bJQSQYvFpe0eHzLigLlzFr9Huk4JSymV2VD3cByeeao,11899
29
29
  udata/api/commands.py,sha256=LJ4u-yhGij7QuH7OR92u3n7BEptqWMjDwMnG8pqdBxo,3523
30
30
  udata/api/errors.py,sha256=P_UigBf6HAL73LbXKULagmp5Cuw-H1Ms6LmXxOmFIeg,211
31
- udata/api/fields.py,sha256=BO2bHPWN6CT2bNpEkkosBGVUSV383nl8MUed_wlxLmw,4176
31
+ udata/api/fields.py,sha256=SecrPTc0-64vDAdWjAz_UIN-f2hX6ek2xyalFh45aRE,4360
32
32
  udata/api/oauth2.py,sha256=_sHQjcj67y601vXVhw6DAGJeZcj8itSx1myhsnFcNk4,12025
33
33
  udata/api/parsers.py,sha256=iQEwgMwdVz_gXlVZYaRCGrUFWvcf7_8uCIxw7Iw-hpw,1405
34
34
  udata/api/signals.py,sha256=t8s7tF1KYeAygqbR4GdA76_UYvthAsyRbJaqsMmFsK4,162
@@ -42,7 +42,7 @@ udata/commands/__init__.py,sha256=Won_rW_hIU9TA3o4oNe6kI46l1fnDBM_oW0Hc1XS9F8,77
42
42
  udata/commands/cache.py,sha256=bLdrf_fCWFYX9ULlL2ADsZRwijkI4pArsJxfx24OivM,341
43
43
  udata/commands/db.py,sha256=LKFKduP-OiO_Vtp7OalcIZmcUcDAESkLeg1guLliTvQ,19589
44
44
  udata/commands/dcat.py,sha256=f6jT2AGZem-w1CaRH_ahfWB9A4oCDvjG13tPmBpeCqw,3910
45
- udata/commands/fixtures.py,sha256=1gp6OoVaoPLpMUvFRMIJIAgNLe08NOQBMTi28FV3nsA,10953
45
+ udata/commands/fixtures.py,sha256=ezVeodPeyL4AtANea0GPlbEZgaSjsBkuy1pxIei_yJE,11239
46
46
  udata/commands/images.py,sha256=0rVojLik5DYgJ6W4uNEfMP2g2QUU2V761tj3z6lo8no,2050
47
47
  udata/commands/info.py,sha256=A5WMo3_N_rlt3cySVJrZqKWrbIowX97ZLKMIFQE5178,1545
48
48
  udata/commands/init.py,sha256=8CpH8MklzPkpxczs43lFM5ZNrHCJRbUtzHapgYNHs7M,1520
@@ -56,7 +56,7 @@ udata/commands/tests/test_fixtures.py,sha256=acFmE08S4B0GHJP4nN1dfRNcKjcsE88Xusy
56
56
  udata/core/__init__.py,sha256=O7C9WWCXiLWnWPnPbFRszWhOmvRQiI4gD-5qkWvPGRo,385
57
57
  udata/core/owned.py,sha256=LCnnKzx1h1oDc_YVbYudmcnIRwo7GKpOcRsZKxwZfUk,5561
58
58
  udata/core/activity/__init__.py,sha256=OaiFyq7HB4xL4SuMPD1N8IFNpntwx9ZayVzelciOieI,298
59
- udata/core/activity/api.py,sha256=QFSLSVf65f-jz0dyVuMqaXm6qB4m-YlGnjqK33suwI8,3854
59
+ udata/core/activity/api.py,sha256=uSWCFin5nBfrFyOZxbSulFiwWagnEWF996sy-rv-Dmw,3855
60
60
  udata/core/activity/models.py,sha256=Ln9YUsdCBMFmUlw5GA2gIJ50sMorMFzZGo8u8sy7pIE,2072
61
61
  udata/core/activity/signals.py,sha256=Io2A43as3yR-DZ5R3wzM_bTpn528pxWsZDUFZ9xtj2Y,191
62
62
  udata/core/activity/tasks.py,sha256=lEnISnHXPMeeErWIhJbSYOlxnrc6yAKC-T28qTEWQn0,1235
@@ -93,7 +93,7 @@ udata/core/dataservices/tasks.py,sha256=d2tG1l6u8-eUKUYBOgnCsQLbLmLgJXU-DOzZWhhL
93
93
  udata/core/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
94
  udata/core/dataset/actions.py,sha256=mX6xox0PiMrbcAPZ3VZsI26rfM-ciYfEXxN6sqqImKA,1222
95
95
  udata/core/dataset/activities.py,sha256=v8k1jwhdx62Z2ARZq8Q-x86OWSsBK99hRloPl74OCgA,1502
96
- udata/core/dataset/api.py,sha256=jsHxsnUNlLS3OfSxKSbYWLC_4kDkgxxBNQP76T99BCM,30662
96
+ udata/core/dataset/api.py,sha256=hPkjnNDlPxix4tSQZdSn0hq1-A6RNCaH44fcvDmHRnQ,32623
97
97
  udata/core/dataset/api_fields.py,sha256=ObM2ubDowxJZGxsyC8nDiLP7XGeT8JQbLN4YqApzxy8,17529
98
98
  udata/core/dataset/apiv2.py,sha256=TxF2ytRFi7ePlZggu_rLp_Kw6vz0Yi8eCD37MC66DOc,17783
99
99
  udata/core/dataset/commands.py,sha256=__hPAk_6iHtgMnEG51ux0vbNWJHxUjXhi1ukH4hF5jY,3714
@@ -109,22 +109,22 @@ udata/core/dataset/preview.py,sha256=IwCqiNTjjXbtA_SSKF52pwnzKKEz0GyYM95QNn2Dkog
109
109
  udata/core/dataset/rdf.py,sha256=HkjzcWgq9AfPvUGMRI7-ufRrgnlfBmP8crbgRhg6Lz4,31789
110
110
  udata/core/dataset/search.py,sha256=E7LqHBnq3sMefvmLwTpiw-Ovem2a3NJswHesRjctboE,5627
111
111
  udata/core/dataset/signals.py,sha256=WN4sV-lJlNsRkhcnhoy0SYJvCoYmK_5QFYZd1u-h4gs,161
112
- udata/core/dataset/tasks.py,sha256=jG6U7cwGywhLK-MqUrvbZ1WLl_NLApiThtxmsckGzP8,10009
112
+ udata/core/dataset/tasks.py,sha256=bILggOtDolm0XnpAD5U3E5JINbFd8Pfvdo3UFNZbGFA,10023
113
113
  udata/core/discussions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
114
  udata/core/discussions/actions.py,sha256=kjdBLDIeu0yWTSxQGgOpN1WoxUqbMygn4SiBk_S9T5I,1051
115
- udata/core/discussions/api.py,sha256=Na8ySZUKGoa6ZK5gPHxkKihNeS2wOGwYXcXt-PK53vM,9443
115
+ udata/core/discussions/api.py,sha256=u9atdyPVGpyLin4IRF1ZhMp6gRmtJvV0Y8ksic_nbJo,12807
116
116
  udata/core/discussions/constants.py,sha256=8crl2Lmkv9dmJe4KACM0JJcpoHePmGtmvI6ixfvukhc,277
117
- udata/core/discussions/csv.py,sha256=c7ZHMicIi8R0kvMjnsUooO0WlH0t90hJ9kO2mmFnUM0,672
117
+ udata/core/discussions/csv.py,sha256=Z3ImKFOpb3AlFne4hNojspgKdeFsE9Of_VAIiz5gSoU,776
118
118
  udata/core/discussions/factories.py,sha256=CgQaUmmyDu90XtyBsqXVa-TmZMrN7Dwuu1Cnr5wNrVc,350
119
- udata/core/discussions/forms.py,sha256=CalmOTslnfBY-SJatvqN2UjFJ-1S1rF57sbW8UbvmPE,838
119
+ udata/core/discussions/forms.py,sha256=sR8tFBIBh-Rbx9VPzFzG1N54QY1y7UrdeboQ_60gXXQ,1265
120
120
  udata/core/discussions/metrics.py,sha256=WMalLO9GEHXlqE2WbZX-HQUpvte6cRwuHuoL96QwWSg,354
121
- udata/core/discussions/models.py,sha256=UkeEdzRkSrx9t2UiWow0GmtWh6R6_1p8p1olxS_gNkI,4328
121
+ udata/core/discussions/models.py,sha256=8No0ndmy5Q9OphBedPCiwTpXKA4zTQxzdq9ScAOt8kA,5993
122
122
  udata/core/discussions/notifications.py,sha256=5MuoZDPmmvkloZ3i8I6TELgE1KXZ_cB9QiDerFBD9dM,1052
123
- udata/core/discussions/permissions.py,sha256=r8uB_w29R6fICr0TUHIX_7JkXUpFcVBWWZRYW-xC0rY,640
123
+ udata/core/discussions/permissions.py,sha256=VY2_PEsazz1fBgCX9-K-_spRgxUoNY4HuNDShqZjw6E,1583
124
124
  udata/core/discussions/signals.py,sha256=tJ83RJIsBAny08Q6IDwehE6lDDRf6ynIFCl0WqnayoU,543
125
- udata/core/discussions/tasks.py,sha256=QeLo1X6fNz2wl2rpZCu6NzAH83PgZqeMuwo4qBh7GXY,2741
125
+ udata/core/discussions/tasks.py,sha256=j78n9Pv04ftyt5KJHVZQwaxjgxDqyc9jbV49286A0wE,2761
126
126
  udata/core/followers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
- udata/core/followers/api.py,sha256=qeArJ-bqXlLHZWBZk2aVDX66FHS4TKH0ctpM9JRnIhU,2531
127
+ udata/core/followers/api.py,sha256=ShJ6DPjpAAQLM51gjMWf7d4TZjZA2VqP8I2YBHPCfhA,2777
128
128
  udata/core/followers/metrics.py,sha256=nKgoiM2Gu-XHrgEf9duW1My66zFSKbmw25BGqo5wWtY,190
129
129
  udata/core/followers/models.py,sha256=PvExrmKbdr0oFjoMYfg1ZUuFlPYGCKKwrE0_ouPaILs,1122
130
130
  udata/core/followers/signals.py,sha256=q0su1eArVO1pnCoNFDieG-kW3iL-hLuXTmnU1-NXNF0,528
@@ -195,7 +195,7 @@ udata/core/spam/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
195
  udata/core/spam/api.py,sha256=eqmDB4_VF5EM92675FqFmk4Be5TAnu87dmSVtgXKF4A,1740
196
196
  udata/core/spam/constants.py,sha256=dTj0GyPH2zdxhurxva2CGnL-3WwqZETyt5vYQhmVpow,144
197
197
  udata/core/spam/fields.py,sha256=UFb6rWpzWXdBgp1oag3WnB2vE3nTxyQDA_aYmS99LSM,348
198
- udata/core/spam/models.py,sha256=56WfE9F1Mt-KZZ7teTfkqeyjKub7Dce7jX9VTgAl6i8,8230
198
+ udata/core/spam/models.py,sha256=QlXgUViL6gsRcQo_9oY3S4q02a636tn8hgebkroovNA,8336
199
199
  udata/core/spam/signals.py,sha256=j6F0gjmSv1sb9xcJgMHO7qf-Zid2Vz2hDVgotz14zdE,159
200
200
  udata/core/spam/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
201
  udata/core/spam/tests/test_spam.py,sha256=Yu06Z3hU-XPX51mvdgH_nHQFeug_PXWy6P7QxNDaKEI,677
@@ -273,7 +273,7 @@ udata/features/transfer/models.py,sha256=sFmdbEHL7eUxYe2XdtjZ2zhrUWOW_ryP_5T_8N1
273
273
  udata/features/transfer/notifications.py,sha256=jeH5buqTuWcokgXfEj-EZ7C3YCrtw-NikfrH2bqFyHM,1121
274
274
  udata/features/transfer/permissions.py,sha256=0Iwt_I3S3QACpq4Ba6Ovb8RUBuozj2pbXDtFFp9jdLI,953
275
275
  udata/forms/__init__.py,sha256=OXNShgt05tADLYQ-cXPdB16qQtj2i48GxSsCVdR6cfI,843
276
- udata/forms/fields.py,sha256=TGkrAYFfop9JvgoAtp36W8V8nRPfAeqRR0gfLWrexB4,29623
276
+ udata/forms/fields.py,sha256=Wzf2FDLPkQcrUWvf8vqT0putvrFPu7kA3jREdSPPA_0,29689
277
277
  udata/forms/validators.py,sha256=CRgmB6oow5O8LDR45LajlJJ9HX3RBCI08fapoWMH1vo,2727
278
278
  udata/forms/widgets.py,sha256=XMVxBlQMGfb0nQvqwLMsAVcEdsBdaZGQZ82F81FdmlM,1332
279
279
  udata/frontend/__init__.py,sha256=Aa5BX19jTAcjGiGKszPabbOju5thvA7XFz4aYvxwXQw,3567
@@ -294,8 +294,11 @@ udata/harvest/tasks.py,sha256=ddJtvE0s-kAYt27-rKH6n8U8vKD8qKczlJtdBJzMUns,1718
294
294
  udata/harvest/backends/__init__.py,sha256=QjoFfBJfpw_xgk5YYWI1SgKJOMEmTMlxSfW79GNkSTI,459
295
295
  udata/harvest/backends/base.py,sha256=2wyfw83e3xGQcHnQI-z26g1dg-uVtWcDgzsBk7iGX3Y,17480
296
296
  udata/harvest/backends/dcat.py,sha256=PSM7p71T8I_onlOJlTPixIPYHWALKOSygczFrT2gvBI,18689
297
+ udata/harvest/backends/maaf.py,sha256=N7ty8ZWO9pfKPtZRk1wTaJ5pY6qi-0-GtF1p8jiYiY4,8102
298
+ udata/harvest/backends/maaf.xsd,sha256=vEyG8Vqw7Yn_acjRdXjqUJgxOj4pv8bibep-FX-f3BQ,18322
297
299
  udata/harvest/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
298
300
  udata/harvest/tests/factories.py,sha256=euEaDDXJzbctMOzgdiio7oq9AVVSLcvORNTi_fwQBpE,2283
301
+ udata/harvest/tests/person.jsonld,sha256=I7Ynh-PQlNeD51I1LrCgYOEjhL-WBeb65xzIE_sHuAA,3230
299
302
  udata/harvest/tests/test_actions.py,sha256=Hm5MpOEFXBvFzcNMu7hvrWIiP6fiOXLuDOyrykL-4tc,25224
300
303
  udata/harvest/tests/test_api.py,sha256=dyCXhKgOO0XmCPgH_36sob8WVhtMB2WX1johbfzJtDI,21553
301
304
  udata/harvest/tests/test_base_backend.py,sha256=ow8ecGtD836mUqyPWYjkS5nx0STyT5RMLgBdDyOhts4,19233
@@ -436,8 +439,8 @@ udata/static/admin.css,sha256=gPM7oSehylBXQXyv0-gQ1LuyJiI1STQ_swM4CHjq_cs,185748
436
439
  udata/static/admin.css.map,sha256=dzFd_AL3pQPFiww5oRwqnubDGJ9HNtYuAaiggLTjjB0,627543
437
440
  udata/static/admin.js,sha256=iQnNCFKqwiSIMyJIeDBAD_gEwv8fABrzK5CoK3PZZME,1330409
438
441
  udata/static/admin.js.map,sha256=09cK62bu_h0M4ajLf-Y2-sQCUFYPWKRw1PCQWQvfQyM,8518351
439
- udata/static/common.js,sha256=KqnA89abdRA8hFn69F9v1190Dh8sEHqzyiTZkUUi3tg,2252
440
- udata/static/common.js.map,sha256=vSH0k-YV7mB_6YBr9vRoPJDwvU5fLNf42eYL3YJVH18,14137
442
+ udata/static/common.js,sha256=cnMXiDt606cURiHYfT7hvv7AAhJy71Kjq-eplPpM--Q,2252
443
+ udata/static/common.js.map,sha256=HbKmyZs-_xKveOhoUhu_wuWRKcLcKQs5Az7-KDOeSaI,14137
441
444
  udata/static/fontawesome-webfont.eot,sha256=e_yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk,165742
442
445
  udata/static/fontawesome-webfont.svg,sha256=rWFXkmwWIrpOHQPUePFUE2hSS_xG9R5C_g2UX37zI-Q,444379
443
446
  udata/static/fontawesome-webfont.ttf,sha256=qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg,165548
@@ -456,24 +459,24 @@ udata/static/chunks/1.0a96f54313c89e541ccb.js,sha256=A-lYXUeTLFOd_al9J_EpYMsbJZR
456
459
  udata/static/chunks/1.0a96f54313c89e541ccb.js.map,sha256=Z4uWu-Bwj4JnQ49hqzkbRrfbtRUm65X93JQyDV6aLTM,1741737
457
460
  udata/static/chunks/10.471164b2a9fe15614797.js,sha256=sZ7HhLG8c-gdmtSlZHmjt7-vtu0AIGy89qZmAduSEyM,414740
458
461
  udata/static/chunks/10.471164b2a9fe15614797.js.map,sha256=qmVKIeXYE9_GW-vnDrt0oj0KbUXURInBUvc9i6mZRuo,2736059
459
- udata/static/chunks/11.83535504cd650ea08f65.js,sha256=vSpJJE2We77-D82aaW-_Zs2uUDSkULTSx9dw2AiTvQY,395562
460
- udata/static/chunks/11.83535504cd650ea08f65.js.map,sha256=yrThgJNF-fLKdEvzbwYA18pu7SYK6jMBxhhQrMU-XPE,2268951
462
+ udata/static/chunks/11.51d706fb9521c16976bc.js,sha256=7vyFwTUxeDitXti-Nm29VxQfCphUgO5i9cQwdbztJJg,395562
463
+ udata/static/chunks/11.51d706fb9521c16976bc.js.map,sha256=Bu6vERhr4jiQ6PRN53Ynh8wME5stIE1SC794VSsINrs,2268951
461
464
  udata/static/chunks/12.1be61e0201691821bff6.js,sha256=oveRcMtBsi97LUeAX86LjSAEVIpNxfWGHVovetKfPTw,421097
462
465
  udata/static/chunks/12.1be61e0201691821bff6.js.map,sha256=ikkgGwMdOXW4ZXyucmqrxLqJQHIcXJJoMMNt01QFrZM,2442221
463
- udata/static/chunks/13.d9c1735d14038b94c17e.js,sha256=QVscBipWMC9Md3G5mvxJ0Ttp2a_kq9CUrScayDf-DKQ,420590
464
- udata/static/chunks/13.d9c1735d14038b94c17e.js.map,sha256=h3Gf_NXW-92D3fAPWhWqreisjA81it3Cek_BR1gwpOY,2430624
466
+ udata/static/chunks/13.f29411b06be1883356a3.js,sha256=QbmoNI_MwccyLEaOLPe4KyWDA5mrQRrRaGd9Z72zQp0,420590
467
+ udata/static/chunks/13.f29411b06be1883356a3.js.map,sha256=dB1whN7IEM_S4baXdZTTOBnXTGuzdB3ZCT9xbQK5sao,2430624
465
468
  udata/static/chunks/14.bc3f6bc0a67517e7b30f.js,sha256=SLlPbF5r7gOcZKPibWUh5BmsKF1jN8FwOUbiZ8i76EU,290368
466
469
  udata/static/chunks/14.bc3f6bc0a67517e7b30f.js.map,sha256=3Lg42qlM8-ho4unygukS9WvltNoIDJkMuTP7erZmYEI,1636918
467
470
  udata/static/chunks/15.2f5d8e3d4aa4c46188d7.js,sha256=gcYH_y6xCl3LbMKg_epxR5IntnEk7X119Evs9up1i7Q,138967
468
471
  udata/static/chunks/15.2f5d8e3d4aa4c46188d7.js.map,sha256=RPoT4EwQaWz3-puzfSV9kx511PK7RYPmveQFImM2BgA,702620
469
472
  udata/static/chunks/16.aaa39ef2d7e82594efc8.js,sha256=1J9T7hgzq1culb_vcXcRvMwt59pJx5Yv-oTU8mUoQDs,228559
470
473
  udata/static/chunks/16.aaa39ef2d7e82594efc8.js.map,sha256=Oc67ghT4gTY2r8H_cfy3tS6o-WyjvXkVc4xXqq0yBcQ,1574395
471
- udata/static/chunks/17.81c57c0dedf812e43013.js,sha256=M1V_pkNZWVlgT1jGryWe5cOBp2r9LiIJEyHuKkQTPGA,236702
472
- udata/static/chunks/17.81c57c0dedf812e43013.js.map,sha256=xx4zs3EBZKfoouMTgh6Xb7q1OlEqzDyeeGtv5pWknFg,1289996
474
+ udata/static/chunks/17.3bd0340930d4a314ce9c.js,sha256=GWiultMJSKhkUkGbVAcSGUe1wg_AGWfgGmtb7HcH_eI,236702
475
+ udata/static/chunks/17.3bd0340930d4a314ce9c.js.map,sha256=2vbovBs6N5jhEwnxLB4jTyZYgvsdG_KS7p9_ILBJ46w,1289996
473
476
  udata/static/chunks/18.56444ebd2456a4ba2201.js,sha256=o78S_10_0k6kL0HbpDlbKZ5tZ-DCe6Y9XBex-SFS_s4,50384
474
477
  udata/static/chunks/18.56444ebd2456a4ba2201.js.map,sha256=Xdv5UJ1TG-LZIlUjZm-yv59KA1omSq2dr8Ukfec46UE,277805
475
- udata/static/chunks/19.df16abde17a42033a7f8.js,sha256=Y2360cWkRH8deDc0DBFeKAU703uhIKkbZ9TMZ6gewCo,203418
476
- udata/static/chunks/19.df16abde17a42033a7f8.js.map,sha256=10tH7yqG5g9KbFI4SPi35tNVoW60OZli4SsO9YpvI2w,1079969
478
+ udata/static/chunks/19.8da42e8359d72afc2618.js,sha256=_fLL-fYLi7nXZZg5-4hEU-tbR0K9auq21h2SAg-Jta8,203418
479
+ udata/static/chunks/19.8da42e8359d72afc2618.js.map,sha256=xHCkZGxv7IYB4gCYmwruU8lUdeBx-2stSwJYhG0u8Co,1079969
477
480
  udata/static/chunks/2.c67aa76cc078c193aed5.js,sha256=BjpQndwBdg9AT2lrY1TAgMfPbMvRytp33yI9YOgCOqc,276597
478
481
  udata/static/chunks/2.c67aa76cc078c193aed5.js.map,sha256=FnPh12lCwilnq1jRp-d7226H5kpaA4-raWEk1Q0p42M,1556097
479
482
  udata/static/chunks/20.3d4e02d1205a3c9e26c5.js,sha256=hRFQGBcks3lD-R4mNcNelqbr9kjz8jTtPee1lDWAVhY,36764
@@ -510,8 +513,8 @@ udata/static/chunks/6.d663709d877baa44a71e.js,sha256=hVRqq0dmyZJ8w6MdO9wUftY_doZ
510
513
  udata/static/chunks/6.d663709d877baa44a71e.js.map,sha256=WlChg1hCzjGyTO2mbICQpPhH5i7fjRC6ajr3g6unbtc,3783190
511
514
  udata/static/chunks/7.896bbffe39433bb598f7.js,sha256=C1NrGe6wrptQFYCCmITtx12dGqfaO7136-9BD6m05Ts,157150
512
515
  udata/static/chunks/7.896bbffe39433bb598f7.js.map,sha256=aZB8qYRkX4oqSugjG69tMlv64YIW5LPXF_8uACMHMTw,813014
513
- udata/static/chunks/8.462bb3029de008497675.js,sha256=ng7iZGz6EyJSj34lCruTC1QIOQdg653IaV9KkKO8BWU,222856
514
- udata/static/chunks/8.462bb3029de008497675.js.map,sha256=-0Hmllm-sFl9qAPCShzDyQKFU9zAi4-eOVQdmlCQ2qs,1205076
516
+ udata/static/chunks/8.54e44b102164ae5e7a67.js,sha256=YNXvol8wHKSc2w3M7BBe8jeYUBf-vgTHZuw7-f_zKK8,222856
517
+ udata/static/chunks/8.54e44b102164ae5e7a67.js.map,sha256=zUv1SoYViHggRYIzFTM_ZQLwQVBYimlX0j87s7aZn1U,1205076
515
518
  udata/static/chunks/9.07515e5187f475bce828.js,sha256=mJ8H3nJBaPXY1-hxWPdOD8-hQwP3k6prsfPwf_5wuas,416716
516
519
  udata/static/chunks/9.07515e5187f475bce828.js.map,sha256=7cfRtXVGvJwrNXWVE8xaLjvQQoy9xgR6fIOmlPDJSDA,2746303
517
520
  udata/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -542,8 +545,8 @@ udata/templates/mail/badge_added_public_service.txt,sha256=dIZKOrPllZc_torK9xCdJ
542
545
  udata/templates/mail/base.html,sha256=ZhMwp8gSJ7QtBYJXB8CY54wj6nb7lFYq7nASStFBM2s,7064
543
546
  udata/templates/mail/base.txt,sha256=epaSraWLlrXYEovdVROhxgOAsJmZI6RXxpNwtOX_UI4,176
544
547
  udata/templates/mail/button.html,sha256=FdCKFJYclhjDUh7CddHx8qcQjJF_7mF0s7mG_tb9cL8,417
545
- udata/templates/mail/discussion_closed.html,sha256=cBLo3DeMg_WDJOQMJK7iDVoZF8Cz2sbiozLVfabGhI8,1166
546
- udata/templates/mail/discussion_closed.txt,sha256=WKEqBKxgGtuuBB-Cm5-TavpYRUW9uh-aCM-AvWgTZSY,394
548
+ udata/templates/mail/discussion_closed.html,sha256=BRq06rUBZG0T54JkHWdwlsEvT5XetwOgziaKTJzT62Y,1208
549
+ udata/templates/mail/discussion_closed.txt,sha256=hFBSfMmYFZisWGCz3zuAtbHWTXRB3mSqhVHvePhvQpc,393
547
550
  udata/templates/mail/frequency_reminder.html,sha256=pP42w9H6UrL3kfYLqNbLFRMa-QHpdw4DoWLV8bsOPqQ,1192
548
551
  udata/templates/mail/frequency_reminder.txt,sha256=8F5RaIWsXRY74QjynEGxvVkIlRtRJpVr2rU-89hJi4c,734
549
552
  udata/templates/mail/inactive_account_deleted.html,sha256=W27Os2tZioe7Ip4ZxHswNq8TAls1U0emZEHK4Qo2Kpc,196
@@ -554,7 +557,7 @@ udata/templates/mail/membership_request.html,sha256=5eyw4wF9rHmZ2zw_i2_voqPlaKYh
554
557
  udata/templates/mail/membership_request.txt,sha256=ASTEwRbBXFwfL981IzEox7Z9-8sLyT9bH7--thn_4PE,472
555
558
  udata/templates/mail/new_discussion.html,sha256=RJzClR6PXC76odAVzUsdep_8-zlya3hzN9vHFRFVm4E,1103
556
559
  udata/templates/mail/new_discussion.txt,sha256=qegi6fjYyuVQ47BthJw7qrBotRzBj8uafZXJyJsZMnw,417
557
- udata/templates/mail/new_discussion_comment.html,sha256=mX36vGR-5bsfPmSSCY7yyeDPmfnpFL2MKuueqcQGwt0,1168
560
+ udata/templates/mail/new_discussion_comment.html,sha256=IBNRgiW6v7WOfbIV05HlEPFwzalxrJwlY3IoPvVU9Rc,1176
558
561
  udata/templates/mail/new_discussion_comment.txt,sha256=LfNI8kWtIkSyNlrgKwLdlGh1b0q6Dr87zgSE6Gs-ioU,397
559
562
  udata/templates/mail/new_member.html,sha256=zPKIDhEMarp-Zmc7pNkMeOA7Tbcj1gQzLvLiDYX-q14,746
560
563
  udata/templates/mail/new_member.txt,sha256=IMfbKEi-QUcnZolsxc-WT7RPpvY6QJWvx4X19qPT0y8,250
@@ -600,7 +603,7 @@ udata/tests/test_activity.py,sha256=x-pDK6VW9wAG0uxYRZQ3DWTRjfCU729iaMGMJb1rWYU,
600
603
  udata/tests/test_api_fields.py,sha256=k1NkSgHSPZd1YTfKwXKpoPQsA1lrR6FOogcePK_U5X0,11307
601
604
  udata/tests/test_cors.py,sha256=b_pyxKeIyqhnsXxXryPf4d0V0QxaLQ1P_VjY89Q_j3g,3233
602
605
  udata/tests/test_dcat_commands.py,sha256=fDAnAjkja8AXw_qzaAWnVTgglkBAvK2mjPMHUCtqrrU,919
603
- udata/tests/test_discussions.py,sha256=Qo7nhIUY7YAATZfWl5Mgo0XhngGwFULgqEoMhsHZtFE,33587
606
+ udata/tests/test_discussions.py,sha256=LO6ggxuiZqfPHNOGJ_xG5KeyKNBOFPcqKUaCEFgIrm0,46070
604
607
  udata/tests/test_i18n.py,sha256=u60344JNRG_8s0t89ghXtQ1FbF4TayEHBzuBFxqnQ_Y,3152
605
608
  udata/tests/test_linkchecker.py,sha256=W8jrwKYXM8wWXZFjiaBwpWGRBhZ8bsSHGHzL9voDN7U,10218
606
609
  udata/tests/test_mail.py,sha256=8IHklIeImYQn7GZVAmuvIeMnGU03X29z0gAfi9nR8vE,3816
@@ -622,9 +625,9 @@ udata/tests/api/test_auth_api.py,sha256=OMRlY0OQt60j5N4A-N3HdWTuffOjRlFHkz5a3jJF
622
625
  udata/tests/api/test_base_api.py,sha256=2w_vz0eEuq3P3aN-ByvxGc3VZAo7XtgatFfcrzf2uEU,2244
623
626
  udata/tests/api/test_contact_points.py,sha256=X_RWD_xCfR8WchhHfKEt5mxMHY77OmTyguNKCsZftdE,5337
624
627
  udata/tests/api/test_dataservices_api.py,sha256=jntjiLUWfAeFj-8VW3szcHLSNKSp8qFopUDAC5bxWuY,24102
625
- udata/tests/api/test_datasets_api.py,sha256=RjNwOj-TiD0SaXSmIttLLJLhyBbdoucfImqTA4tBnr8,90174
628
+ udata/tests/api/test_datasets_api.py,sha256=Cp0SeDjj_Yjf3aNcSStHbFm4kaxIAn8rOCIpX60I7aM,94261
626
629
  udata/tests/api/test_fields.py,sha256=OW85Z5MES5HeWOpapeem8OvR1cIcrqW-xMWpdZO4LZ8,1033
627
- udata/tests/api/test_follow_api.py,sha256=fccgVNfcqET221PPS3p7qzb9hpvbBBUGhV-l4UeOpyk,3352
630
+ udata/tests/api/test_follow_api.py,sha256=XP6I96JUNT6xjGcQOF7pug_T_i67HzCiOGLaPdpfpEQ,4912
628
631
  udata/tests/api/test_me_api.py,sha256=YPd8zmR3zwJKtpSqz8nY1nOOMyXs66INeBwyhg5D0Us,13846
629
632
  udata/tests/api/test_organizations_api.py,sha256=jDCGw5BZ2Ps6S1xxp5hRi8XsrmR8DE22tflRPGtUYcc,37527
630
633
  udata/tests/api/test_reports_api.py,sha256=fCSz9NwMXBs6cxdXBVVI6y564AtovmZYw3xkgxQ9KE8,6217
@@ -721,9 +724,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=xmSQ7RTl9XV24Vq3A7f_NIRDrOJwbs
721
724
  udata/translations/pt/LC_MESSAGES/udata.po,sha256=PXrrhfIjZxheUotQan9VVh1fvNHSzeMAitaouIHaR7U,46793
722
725
  udata/translations/sr/LC_MESSAGES/udata.mo,sha256=1pAf_rXvbOoO_jjZmH77GbzvdT_YtPTJKFumMnMto2g,29169
723
726
  udata/translations/sr/LC_MESSAGES/udata.po,sha256=AalMHaFLZobKmuAnZ4X1rQtk46NdW2rktMFQHD5DTcM,53768
724
- udata-10.3.0.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
725
- udata-10.3.0.dist-info/METADATA,sha256=3FlKqVVeXSAGauAXq07_PCOpSjOmeQI5hURV2yC-AGw,144183
726
- udata-10.3.0.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
727
- udata-10.3.0.dist-info/entry_points.txt,sha256=3SKiqVy4HUqxf6iWspgMqH8d88Htk6KoLbG1BU-UddQ,451
728
- udata-10.3.0.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
729
- udata-10.3.0.dist-info/RECORD,,
727
+ udata-10.3.1.dist-info/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
728
+ udata-10.3.1.dist-info/METADATA,sha256=GX128Q1LL-U_c4eKRP9tz-2Yt4qSVo-na2jFvYL-jkM,144872
729
+ udata-10.3.1.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
730
+ udata-10.3.1.dist-info/entry_points.txt,sha256=ETvkR4r6G1duBsh_V_fGWENQy17GTFuobi95MYBAl1A,498
731
+ udata-10.3.1.dist-info/top_level.txt,sha256=39OCg-VWFWOq4gCKnjKNu-s3OwFlZIu_dVH8Gl6ndHw,12
732
+ udata-10.3.1.dist-info/RECORD,,
@@ -13,3 +13,4 @@ robohash = udata.features.identicon.backends:robohash
13
13
  csw-dcat = udata.harvest.backends.dcat:CswDcatBackend
14
14
  csw-iso-19139 = udata.harvest.backends.dcat:CswIso19139DcatBackend
15
15
  dcat = udata.harvest.backends.dcat:DcatBackend
16
+ maaf = udata.harvest.backends.maaf:MaafBackend
File without changes