udata 14.0.0__py3-none-any.whl → 14.4.1.dev7__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 (130) hide show
  1. udata/api_fields.py +35 -4
  2. udata/app.py +18 -20
  3. udata/auth/__init__.py +29 -6
  4. udata/auth/forms.py +2 -2
  5. udata/auth/views.py +6 -3
  6. udata/commands/serve.py +3 -11
  7. udata/commands/tests/test_fixtures.py +9 -9
  8. udata/core/access_type/api.py +1 -1
  9. udata/core/access_type/constants.py +12 -8
  10. udata/core/activity/api.py +5 -6
  11. udata/core/badges/tests/test_commands.py +6 -6
  12. udata/core/csv.py +5 -0
  13. udata/core/dataservices/models.py +1 -1
  14. udata/core/dataservices/tasks.py +7 -0
  15. udata/core/dataset/api.py +2 -0
  16. udata/core/dataset/models.py +2 -2
  17. udata/core/dataset/permissions.py +31 -0
  18. udata/core/dataset/tasks.py +17 -5
  19. udata/core/discussions/models.py +1 -0
  20. udata/core/organization/api.py +8 -5
  21. udata/core/organization/mails.py +1 -1
  22. udata/core/organization/models.py +9 -1
  23. udata/core/organization/notifications.py +84 -0
  24. udata/core/organization/permissions.py +1 -1
  25. udata/core/organization/tasks.py +3 -0
  26. udata/core/pages/tests/test_api.py +32 -0
  27. udata/core/post/api.py +24 -69
  28. udata/core/post/models.py +84 -16
  29. udata/core/post/tests/test_api.py +24 -1
  30. udata/core/reports/api.py +18 -0
  31. udata/core/reports/models.py +42 -2
  32. udata/core/reuse/models.py +1 -1
  33. udata/core/reuse/tasks.py +7 -0
  34. udata/core/spatial/forms.py +2 -2
  35. udata/core/user/models.py +5 -1
  36. udata/features/notifications/api.py +7 -18
  37. udata/features/notifications/models.py +56 -0
  38. udata/features/notifications/tasks.py +25 -0
  39. udata/flask_mongoengine/engine.py +0 -4
  40. udata/frontend/markdown.py +2 -1
  41. udata/harvest/actions.py +21 -1
  42. udata/harvest/api.py +25 -8
  43. udata/harvest/backends/base.py +27 -1
  44. udata/harvest/backends/ckan/harvesters.py +11 -2
  45. udata/harvest/commands.py +33 -0
  46. udata/harvest/filters.py +17 -6
  47. udata/harvest/models.py +16 -0
  48. udata/harvest/permissions.py +27 -0
  49. udata/harvest/tests/ckan/test_ckan_backend.py +33 -0
  50. udata/harvest/tests/test_actions.py +58 -5
  51. udata/harvest/tests/test_api.py +276 -122
  52. udata/harvest/tests/test_base_backend.py +86 -1
  53. udata/harvest/tests/test_dcat_backend.py +57 -10
  54. udata/harvest/tests/test_filters.py +6 -0
  55. udata/i18n.py +1 -4
  56. udata/mail.py +5 -1
  57. udata/migrations/2025-10-31-create-membership-request-notifications.py +55 -0
  58. udata/migrations/2025-12-04-add-uuid-to-discussion-messages.py +28 -0
  59. udata/mongo/slug_fields.py +1 -1
  60. udata/rdf.py +45 -6
  61. udata/routing.py +2 -2
  62. udata/settings.py +7 -0
  63. udata/tasks.py +1 -0
  64. udata/templates/mail/message.html +5 -31
  65. udata/tests/__init__.py +27 -2
  66. udata/tests/api/__init__.py +108 -21
  67. udata/tests/api/test_activities_api.py +36 -0
  68. udata/tests/api/test_auth_api.py +121 -95
  69. udata/tests/api/test_base_api.py +7 -4
  70. udata/tests/api/test_datasets_api.py +44 -19
  71. udata/tests/api/test_organizations_api.py +192 -197
  72. udata/tests/api/test_reports_api.py +157 -0
  73. udata/tests/api/test_reuses_api.py +147 -147
  74. udata/tests/api/test_security_api.py +12 -12
  75. udata/tests/api/test_swagger.py +4 -4
  76. udata/tests/api/test_tags_api.py +8 -8
  77. udata/tests/api/test_user_api.py +1 -1
  78. udata/tests/apiv2/test_swagger.py +4 -4
  79. udata/tests/cli/test_cli_base.py +8 -9
  80. udata/tests/dataset/test_dataset_commands.py +4 -4
  81. udata/tests/dataset/test_dataset_model.py +66 -26
  82. udata/tests/dataset/test_dataset_rdf.py +99 -5
  83. udata/tests/frontend/test_auth.py +24 -1
  84. udata/tests/frontend/test_csv.py +0 -3
  85. udata/tests/helpers.py +25 -27
  86. udata/tests/organization/test_notifications.py +67 -2
  87. udata/tests/plugin.py +6 -261
  88. udata/tests/site/test_site_csv_exports.py +22 -10
  89. udata/tests/test_activity.py +9 -9
  90. udata/tests/test_dcat_commands.py +2 -2
  91. udata/tests/test_discussions.py +5 -5
  92. udata/tests/test_migrations.py +21 -21
  93. udata/tests/test_notifications.py +15 -57
  94. udata/tests/test_notifications_task.py +43 -0
  95. udata/tests/test_owned.py +81 -1
  96. udata/tests/test_storages.py +25 -19
  97. udata/tests/test_topics.py +77 -61
  98. udata/tests/test_uris.py +33 -0
  99. udata/tests/workers/test_jobs_commands.py +23 -23
  100. udata/translations/ar/LC_MESSAGES/udata.mo +0 -0
  101. udata/translations/ar/LC_MESSAGES/udata.po +187 -108
  102. udata/translations/de/LC_MESSAGES/udata.mo +0 -0
  103. udata/translations/de/LC_MESSAGES/udata.po +187 -108
  104. udata/translations/es/LC_MESSAGES/udata.mo +0 -0
  105. udata/translations/es/LC_MESSAGES/udata.po +187 -108
  106. udata/translations/fr/LC_MESSAGES/udata.mo +0 -0
  107. udata/translations/fr/LC_MESSAGES/udata.po +188 -109
  108. udata/translations/it/LC_MESSAGES/udata.mo +0 -0
  109. udata/translations/it/LC_MESSAGES/udata.po +187 -108
  110. udata/translations/pt/LC_MESSAGES/udata.mo +0 -0
  111. udata/translations/pt/LC_MESSAGES/udata.po +187 -108
  112. udata/translations/sr/LC_MESSAGES/udata.mo +0 -0
  113. udata/translations/sr/LC_MESSAGES/udata.po +187 -108
  114. udata/translations/udata.pot +215 -106
  115. udata/uris.py +0 -2
  116. udata-14.4.1.dev7.dist-info/METADATA +109 -0
  117. {udata-14.0.0.dist-info → udata-14.4.1.dev7.dist-info}/RECORD +121 -123
  118. udata/core/post/forms.py +0 -30
  119. udata/flask_mongoengine/json.py +0 -38
  120. udata/templates/mail/base.html +0 -105
  121. udata/templates/mail/base.txt +0 -6
  122. udata/templates/mail/button.html +0 -3
  123. udata/templates/mail/layouts/1-column.html +0 -19
  124. udata/templates/mail/layouts/2-columns.html +0 -20
  125. udata/templates/mail/layouts/center-panel.html +0 -16
  126. udata-14.0.0.dist-info/METADATA +0 -132
  127. {udata-14.0.0.dist-info → udata-14.4.1.dev7.dist-info}/WHEEL +0 -0
  128. {udata-14.0.0.dist-info → udata-14.4.1.dev7.dist-info}/entry_points.txt +0 -0
  129. {udata-14.0.0.dist-info → udata-14.4.1.dev7.dist-info}/licenses/LICENSE +0 -0
  130. {udata-14.0.0.dist-info → udata-14.4.1.dev7.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.4.1.dev7
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<4.0.0,>=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/