udata 14.0.0__py3-none-any.whl → 14.5.1.dev6__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 (152) hide show
  1. udata/api/__init__.py +2 -0
  2. udata/api_fields.py +35 -4
  3. udata/app.py +18 -20
  4. udata/auth/__init__.py +29 -6
  5. udata/auth/forms.py +2 -2
  6. udata/auth/views.py +13 -6
  7. udata/commands/dcat.py +1 -1
  8. udata/commands/serve.py +3 -11
  9. udata/commands/tests/test_fixtures.py +9 -9
  10. udata/core/access_type/api.py +1 -1
  11. udata/core/access_type/constants.py +12 -8
  12. udata/core/activity/api.py +5 -6
  13. udata/core/badges/tests/test_commands.py +6 -6
  14. udata/core/csv.py +5 -0
  15. udata/core/dataservices/api.py +8 -1
  16. udata/core/dataservices/apiv2.py +2 -5
  17. udata/core/dataservices/models.py +5 -2
  18. udata/core/dataservices/rdf.py +2 -1
  19. udata/core/dataservices/tasks.py +13 -2
  20. udata/core/dataset/api.py +10 -0
  21. udata/core/dataset/models.py +6 -6
  22. udata/core/dataset/permissions.py +31 -0
  23. udata/core/dataset/rdf.py +8 -2
  24. udata/core/dataset/tasks.py +23 -7
  25. udata/core/discussions/api.py +15 -1
  26. udata/core/discussions/models.py +6 -0
  27. udata/core/legal/__init__.py +0 -0
  28. udata/core/legal/mails.py +128 -0
  29. udata/core/organization/api.py +16 -5
  30. udata/core/organization/apiv2.py +2 -3
  31. udata/core/organization/mails.py +1 -1
  32. udata/core/organization/models.py +15 -2
  33. udata/core/organization/notifications.py +84 -0
  34. udata/core/organization/permissions.py +1 -1
  35. udata/core/organization/tasks.py +3 -0
  36. udata/core/pages/tests/test_api.py +32 -0
  37. udata/core/post/api.py +24 -69
  38. udata/core/post/models.py +84 -16
  39. udata/core/post/tests/test_api.py +24 -1
  40. udata/core/reports/api.py +18 -0
  41. udata/core/reports/models.py +42 -2
  42. udata/core/reuse/api.py +8 -0
  43. udata/core/reuse/apiv2.py +2 -5
  44. udata/core/reuse/models.py +1 -1
  45. udata/core/reuse/tasks.py +7 -0
  46. udata/core/spatial/forms.py +2 -2
  47. udata/core/topic/models.py +8 -2
  48. udata/core/user/api.py +10 -3
  49. udata/core/user/models.py +12 -2
  50. udata/features/notifications/api.py +7 -18
  51. udata/features/notifications/models.py +56 -0
  52. udata/features/notifications/tasks.py +25 -0
  53. udata/flask_mongoengine/engine.py +0 -4
  54. udata/flask_mongoengine/pagination.py +1 -1
  55. udata/frontend/markdown.py +2 -1
  56. udata/harvest/actions.py +21 -1
  57. udata/harvest/api.py +25 -8
  58. udata/harvest/backends/base.py +27 -1
  59. udata/harvest/backends/ckan/harvesters.py +11 -2
  60. udata/harvest/backends/dcat.py +4 -1
  61. udata/harvest/commands.py +33 -0
  62. udata/harvest/filters.py +17 -6
  63. udata/harvest/models.py +16 -0
  64. udata/harvest/permissions.py +27 -0
  65. udata/harvest/tests/ckan/test_ckan_backend.py +33 -0
  66. udata/harvest/tests/test_actions.py +58 -5
  67. udata/harvest/tests/test_api.py +276 -122
  68. udata/harvest/tests/test_base_backend.py +86 -1
  69. udata/harvest/tests/test_dcat_backend.py +81 -10
  70. udata/harvest/tests/test_filters.py +6 -0
  71. udata/i18n.py +1 -4
  72. udata/mail.py +19 -1
  73. udata/migrations/2025-10-31-create-membership-request-notifications.py +55 -0
  74. udata/migrations/2025-12-04-add-uuid-to-discussion-messages.py +28 -0
  75. udata/mongo/slug_fields.py +1 -1
  76. udata/rdf.py +58 -10
  77. udata/routing.py +2 -2
  78. udata/settings.py +11 -0
  79. udata/tasks.py +1 -0
  80. udata/templates/mail/message.html +5 -31
  81. udata/tests/__init__.py +27 -2
  82. udata/tests/api/__init__.py +108 -21
  83. udata/tests/api/test_activities_api.py +36 -0
  84. udata/tests/api/test_auth_api.py +121 -95
  85. udata/tests/api/test_base_api.py +7 -4
  86. udata/tests/api/test_datasets_api.py +50 -19
  87. udata/tests/api/test_organizations_api.py +192 -197
  88. udata/tests/api/test_reports_api.py +157 -0
  89. udata/tests/api/test_reuses_api.py +147 -147
  90. udata/tests/api/test_security_api.py +12 -12
  91. udata/tests/api/test_swagger.py +4 -4
  92. udata/tests/api/test_tags_api.py +8 -8
  93. udata/tests/api/test_user_api.py +1 -1
  94. udata/tests/apiv2/test_search.py +30 -0
  95. udata/tests/apiv2/test_swagger.py +4 -4
  96. udata/tests/cli/test_cli_base.py +8 -9
  97. udata/tests/dataservice/test_dataservice_tasks.py +29 -0
  98. udata/tests/dataset/test_dataset_commands.py +4 -4
  99. udata/tests/dataset/test_dataset_model.py +66 -26
  100. udata/tests/dataset/test_dataset_rdf.py +99 -5
  101. udata/tests/dataset/test_dataset_tasks.py +25 -0
  102. udata/tests/frontend/test_auth.py +58 -1
  103. udata/tests/frontend/test_csv.py +0 -3
  104. udata/tests/helpers.py +31 -27
  105. udata/tests/organization/test_notifications.py +67 -2
  106. udata/tests/plugin.py +6 -261
  107. udata/tests/search/test_search_integration.py +33 -0
  108. udata/tests/site/test_site_csv_exports.py +22 -10
  109. udata/tests/test_activity.py +9 -9
  110. udata/tests/test_api_fields.py +10 -0
  111. udata/tests/test_dcat_commands.py +2 -2
  112. udata/tests/test_discussions.py +5 -5
  113. udata/tests/test_legal_mails.py +359 -0
  114. udata/tests/test_migrations.py +21 -21
  115. udata/tests/test_notifications.py +15 -57
  116. udata/tests/test_notifications_task.py +43 -0
  117. udata/tests/test_owned.py +81 -1
  118. udata/tests/test_storages.py +25 -19
  119. udata/tests/test_topics.py +77 -61
  120. udata/tests/test_uris.py +33 -0
  121. udata/tests/workers/test_jobs_commands.py +23 -23
  122. udata/translations/ar/LC_MESSAGES/udata.mo +0 -0
  123. udata/translations/ar/LC_MESSAGES/udata.po +187 -108
  124. udata/translations/de/LC_MESSAGES/udata.mo +0 -0
  125. udata/translations/de/LC_MESSAGES/udata.po +187 -108
  126. udata/translations/es/LC_MESSAGES/udata.mo +0 -0
  127. udata/translations/es/LC_MESSAGES/udata.po +187 -108
  128. udata/translations/fr/LC_MESSAGES/udata.mo +0 -0
  129. udata/translations/fr/LC_MESSAGES/udata.po +188 -109
  130. udata/translations/it/LC_MESSAGES/udata.mo +0 -0
  131. udata/translations/it/LC_MESSAGES/udata.po +187 -108
  132. udata/translations/pt/LC_MESSAGES/udata.mo +0 -0
  133. udata/translations/pt/LC_MESSAGES/udata.po +187 -108
  134. udata/translations/sr/LC_MESSAGES/udata.mo +0 -0
  135. udata/translations/sr/LC_MESSAGES/udata.po +187 -108
  136. udata/translations/udata.pot +215 -106
  137. udata/uris.py +0 -2
  138. udata-14.5.1.dev6.dist-info/METADATA +109 -0
  139. {udata-14.0.0.dist-info → udata-14.5.1.dev6.dist-info}/RECORD +143 -140
  140. udata/core/post/forms.py +0 -30
  141. udata/flask_mongoengine/json.py +0 -38
  142. udata/templates/mail/base.html +0 -105
  143. udata/templates/mail/base.txt +0 -6
  144. udata/templates/mail/button.html +0 -3
  145. udata/templates/mail/layouts/1-column.html +0 -19
  146. udata/templates/mail/layouts/2-columns.html +0 -20
  147. udata/templates/mail/layouts/center-panel.html +0 -16
  148. udata-14.0.0.dist-info/METADATA +0 -132
  149. {udata-14.0.0.dist-info → udata-14.5.1.dev6.dist-info}/WHEEL +0 -0
  150. {udata-14.0.0.dist-info → udata-14.5.1.dev6.dist-info}/entry_points.txt +0 -0
  151. {udata-14.0.0.dist-info → udata-14.5.1.dev6.dist-info}/licenses/LICENSE +0 -0
  152. {udata-14.0.0.dist-info → udata-14.5.1.dev6.dist-info}/top_level.txt +0 -0
udata/uris.py CHANGED
@@ -91,8 +91,6 @@ def cdata_url(uri: str, **kwargs) -> str | None:
91
91
  uri += f"/{append.lstrip('/')}"
92
92
 
93
93
  url = urljoin(base_url, uri)
94
- if not url.endswith("/"):
95
- url += "/"
96
94
 
97
95
  url_parts = list(urlparse(url))
98
96
  url_parts[4] = urlencode(
@@ -0,0 +1,109 @@
1
+ Metadata-Version: 2.4
2
+ Name: udata
3
+ Version: 14.5.1.dev6
4
+ Summary: Open data portal
5
+ Author-email: Opendata Team <opendatateam@data.gouv.fr>
6
+ Maintainer-email: Opendata Team <opendatateam@data.gouv.fr>
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/opendatateam/udata
9
+ Project-URL: Repository, https://github.com/opendatateam/udata
10
+ Project-URL: Documentation, https://udata.readthedocs.io/
11
+ Project-URL: Bug Tracker, https://github.com/opendatateam/udata/issues
12
+ Keywords: udata,open data,portal,data
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Environment :: Web Environment
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: Topic :: System :: Software Distribution
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
25
+ Requires-Python: <3.14,>=3.11
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: authlib<2.0.0,>=1.5.1
29
+ Requires-Dist: awesome-slugify<2.0.0,>=1.6.5
30
+ Requires-Dist: babel<3.0.0,>=2.17.0
31
+ Requires-Dist: bcrypt<5.0.0,>=4.0.0
32
+ Requires-Dist: bleach[css]<7.0.0,>=6.2.0
33
+ Requires-Dist: blinker<2.0,>=1.5
34
+ Requires-Dist: boto3<2.0.0,>=1.26.102
35
+ Requires-Dist: botocore<2.0.0,>=1.29.165
36
+ Requires-Dist: celery<6.0.0,>=5.4.0
37
+ Requires-Dist: celerybeat-mongo<1.0.0,>=0.2.0
38
+ Requires-Dist: click<9.0.0,>=8.1.8
39
+ Requires-Dist: email-validator<3.0.0,>=2.2.0
40
+ Requires-Dist: factory-boy<4.0.0,>=3.3.3
41
+ Requires-Dist: feedgenerator<3.0.0,>=2.1.0
42
+ Requires-Dist: flask<4.0.0,>=3.0.0
43
+ Requires-Dist: flask-babel<5.0.0,>=4.0.0
44
+ Requires-Dist: flask-caching<3.0.0,>=2.3.1
45
+ Requires-Dist: flask-cdn<2.0.0,>=1.5.3
46
+ Requires-Dist: flask-gravatar<1.0.0,>=0.5.0
47
+ Requires-Dist: flask-login<1.0.0,>=0.6.3
48
+ Requires-Dist: flask-mail<1.0.0,>=0.10.0
49
+ Requires-Dist: flask-principal<1.0.0,>=0.4.0
50
+ Requires-Dist: flask-restx<2.0.0,>=1.3.0
51
+ Requires-Dist: flask-security-too<6.0.0,>=5.1.2
52
+ Requires-Dist: flask-sitemap<1.0.0,>=0.4.0
53
+ Requires-Dist: flask-storage<2.0.0,>=1.4.0
54
+ Requires-Dist: flask-wtf<2.0.0,>=1.2.2
55
+ Requires-Dist: geojson<4.0.0,>=3.2.0
56
+ Requires-Dist: geomet<2.0.0,>=1.1.0
57
+ Requires-Dist: html2text==2025.4.15
58
+ Requires-Dist: humanfriendly<11.0.0,>=10.0
59
+ Requires-Dist: importlib-resources<7.0.0,>=6.5.2
60
+ Requires-Dist: itsdangerous<3.0.0,>=2.2.0
61
+ Requires-Dist: jinja2<4.0.0,>=3.1.6
62
+ Requires-Dist: jsonschema<5.0.0,>=4.23.0
63
+ Requires-Dist: kombu[redis]<6.0.0,>=5.5.0
64
+ Requires-Dist: langdetect<2.0.0,>=1.0.9
65
+ Requires-Dist: levenshtein<1.0.0,>=0.27.1
66
+ Requires-Dist: lxml<7.0.0,>=6.0.0
67
+ Requires-Dist: markupsafe<4.0.0,>=3.0.3
68
+ Requires-Dist: mistune<4.0.0,>=3.1.3
69
+ Requires-Dist: mongoengine<1.0.0,>=0.29.1
70
+ Requires-Dist: netaddr<2.0.0,>=1.3.0
71
+ Requires-Dist: pillow<13.0.0,>=11.0.0
72
+ Requires-Dist: pydenticon<1.0.0,>=0.3.1
73
+ Requires-Dist: pymongo<5.0.0,>=4.11.3
74
+ Requires-Dist: python-dateutil<3.0.0,>=2.9.0.post0
75
+ Requires-Dist: pytz
76
+ Requires-Dist: rdflib<8.0.0,>=7.1.3
77
+ Requires-Dist: redis<8.0.0,>=5.0.0
78
+ Requires-Dist: requests<3.0.0,>=2.32.4
79
+ Requires-Dist: saxonche<13.0.0,>=12.8.0
80
+ Requires-Dist: sentry-sdk[flask]<3.0.0,>=2.23.1
81
+ Requires-Dist: speaklater<2.0.0,>=1.3
82
+ Requires-Dist: tlds>=2025022800
83
+ Requires-Dist: typing-extensions<5.0.0,>=4.12.2
84
+ Requires-Dist: tzdata
85
+ Requires-Dist: urlextract<2.0.0,>=1.9.0
86
+ Requires-Dist: urllib3<3.0.0,>=2.0.0
87
+ Requires-Dist: voluptuous<1.0.0,>=0.15.2
88
+ Requires-Dist: werkzeug<3.1.4,>=3.0.0
89
+ Requires-Dist: wtforms[email]<4.0.0,>=3.2.1
90
+ Requires-Dist: wtforms-json<1.0.0,>=0.3.5
91
+ Dynamic: license-file
92
+
93
+ <p align="center"><img src="https://i.imgur.com/rlRox1c.png"></p>
94
+
95
+ udata
96
+ =====
97
+
98
+ Customizable and skinnable social platform dedicated to (open) data.
99
+
100
+ The [full documentation][readthedocs-url] is hosted on Read the Docs.
101
+
102
+ udata is maintained by [data.gouv.fr](https://data.gouv.fr/), the
103
+ French public agency in charge of open data. data.gouv.fr is responsible
104
+ for publishing udata's roadmap and for building consensus around it.
105
+
106
+ It is collectively taken care of by members of the
107
+ [OpenDataTeam](https://github.com/opendatateam).
108
+
109
+ [readthedocs-url]: https://udata.readthedocs.io/en/stable/