udata 14.0.3.dev1__py3-none-any.whl → 14.7.3.dev4__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.
- udata/api/__init__.py +2 -0
- udata/api_fields.py +120 -19
- udata/app.py +18 -20
- udata/auth/__init__.py +4 -7
- udata/auth/forms.py +3 -3
- udata/auth/views.py +13 -6
- udata/commands/dcat.py +1 -1
- udata/commands/serve.py +3 -11
- udata/core/activity/api.py +5 -6
- udata/core/badges/tests/test_tasks.py +0 -2
- udata/core/csv.py +5 -0
- udata/core/dataservices/api.py +8 -1
- udata/core/dataservices/apiv2.py +3 -6
- udata/core/dataservices/models.py +5 -2
- udata/core/dataservices/rdf.py +2 -1
- udata/core/dataservices/tasks.py +6 -2
- udata/core/dataset/api.py +30 -4
- udata/core/dataset/api_fields.py +1 -1
- udata/core/dataset/apiv2.py +1 -1
- udata/core/dataset/constants.py +2 -9
- udata/core/dataset/models.py +21 -9
- udata/core/dataset/permissions.py +31 -0
- udata/core/dataset/rdf.py +18 -16
- udata/core/dataset/tasks.py +16 -7
- udata/core/discussions/api.py +15 -1
- udata/core/discussions/models.py +6 -0
- udata/core/legal/__init__.py +0 -0
- udata/core/legal/mails.py +128 -0
- udata/core/organization/api.py +16 -5
- udata/core/organization/api_fields.py +3 -3
- udata/core/organization/apiv2.py +3 -4
- udata/core/organization/mails.py +1 -1
- udata/core/organization/models.py +40 -7
- udata/core/organization/notifications.py +84 -0
- udata/core/organization/permissions.py +1 -1
- udata/core/organization/tasks.py +3 -0
- udata/core/pages/models.py +49 -0
- udata/core/pages/tests/test_api.py +165 -1
- udata/core/post/api.py +25 -70
- udata/core/post/constants.py +8 -0
- udata/core/post/models.py +109 -17
- udata/core/post/tests/test_api.py +140 -3
- udata/core/post/tests/test_models.py +24 -0
- udata/core/reports/api.py +18 -0
- udata/core/reports/models.py +42 -2
- udata/core/reuse/api.py +8 -0
- udata/core/reuse/apiv2.py +3 -6
- udata/core/reuse/models.py +1 -1
- udata/core/spatial/forms.py +2 -2
- udata/core/topic/models.py +8 -2
- udata/core/user/api.py +10 -3
- udata/core/user/api_fields.py +3 -3
- udata/core/user/models.py +33 -8
- udata/features/notifications/api.py +7 -18
- udata/features/notifications/models.py +59 -0
- udata/features/notifications/tasks.py +25 -0
- udata/features/transfer/actions.py +2 -0
- udata/features/transfer/models.py +17 -0
- udata/features/transfer/notifications.py +96 -0
- udata/flask_mongoengine/engine.py +0 -4
- udata/flask_mongoengine/pagination.py +1 -1
- udata/frontend/markdown.py +2 -1
- udata/harvest/actions.py +20 -0
- udata/harvest/api.py +24 -7
- udata/harvest/backends/base.py +27 -1
- udata/harvest/backends/ckan/harvesters.py +21 -4
- udata/harvest/backends/dcat.py +4 -1
- udata/harvest/commands.py +33 -0
- udata/harvest/filters.py +17 -6
- udata/harvest/models.py +16 -0
- udata/harvest/permissions.py +27 -0
- udata/harvest/tests/ckan/test_ckan_backend.py +33 -0
- udata/harvest/tests/test_actions.py +46 -2
- udata/harvest/tests/test_api.py +161 -6
- udata/harvest/tests/test_base_backend.py +86 -1
- udata/harvest/tests/test_dcat_backend.py +68 -3
- udata/harvest/tests/test_filters.py +6 -0
- udata/i18n.py +1 -4
- udata/mail.py +14 -0
- udata/migrations/2021-08-17-harvest-integrity.py +23 -16
- udata/migrations/2025-10-31-create-membership-request-notifications.py +55 -0
- udata/migrations/2025-12-04-add-uuid-to-discussion-messages.py +28 -0
- udata/migrations/2025-12-16-create-transfer-request-notifications.py +69 -0
- udata/migrations/2026-01-14-add-default-kind-to-posts.py +17 -0
- udata/mongo/slug_fields.py +1 -1
- udata/rdf.py +65 -11
- udata/routing.py +2 -2
- udata/settings.py +11 -0
- udata/tasks.py +2 -0
- udata/templates/mail/message.html +3 -1
- udata/tests/api/__init__.py +7 -17
- udata/tests/api/test_activities_api.py +36 -0
- udata/tests/api/test_datasets_api.py +69 -0
- udata/tests/api/test_organizations_api.py +0 -3
- udata/tests/api/test_reports_api.py +157 -0
- udata/tests/api/test_user_api.py +1 -1
- udata/tests/apiv2/test_dataservices.py +14 -0
- udata/tests/apiv2/test_organizations.py +9 -0
- udata/tests/apiv2/test_reuses.py +11 -0
- udata/tests/cli/test_cli_base.py +0 -1
- udata/tests/dataservice/test_dataservice_tasks.py +29 -0
- udata/tests/dataset/test_dataset_model.py +13 -1
- udata/tests/dataset/test_dataset_rdf.py +164 -5
- udata/tests/dataset/test_dataset_tasks.py +25 -0
- udata/tests/frontend/test_auth.py +58 -1
- udata/tests/frontend/test_csv.py +0 -3
- udata/tests/helpers.py +31 -27
- udata/tests/organization/test_notifications.py +67 -2
- udata/tests/search/test_search_integration.py +70 -0
- udata/tests/site/test_site_csv_exports.py +22 -10
- udata/tests/test_activity.py +9 -9
- udata/tests/test_api_fields.py +10 -0
- udata/tests/test_discussions.py +5 -5
- udata/tests/test_legal_mails.py +359 -0
- udata/tests/test_notifications.py +15 -57
- udata/tests/test_notifications_task.py +43 -0
- udata/tests/test_owned.py +81 -1
- udata/tests/test_transfer.py +181 -2
- udata/tests/test_uris.py +33 -0
- udata/translations/ar/LC_MESSAGES/udata.mo +0 -0
- udata/translations/ar/LC_MESSAGES/udata.po +309 -158
- udata/translations/de/LC_MESSAGES/udata.mo +0 -0
- udata/translations/de/LC_MESSAGES/udata.po +313 -160
- udata/translations/es/LC_MESSAGES/udata.mo +0 -0
- udata/translations/es/LC_MESSAGES/udata.po +312 -160
- udata/translations/fr/LC_MESSAGES/udata.mo +0 -0
- udata/translations/fr/LC_MESSAGES/udata.po +475 -202
- udata/translations/it/LC_MESSAGES/udata.mo +0 -0
- udata/translations/it/LC_MESSAGES/udata.po +317 -162
- udata/translations/pt/LC_MESSAGES/udata.mo +0 -0
- udata/translations/pt/LC_MESSAGES/udata.po +315 -161
- udata/translations/sr/LC_MESSAGES/udata.mo +0 -0
- udata/translations/sr/LC_MESSAGES/udata.po +323 -164
- udata/translations/udata.pot +169 -124
- udata/uris.py +0 -2
- udata/utils.py +23 -0
- udata-14.7.3.dev4.dist-info/METADATA +109 -0
- {udata-14.0.3.dev1.dist-info → udata-14.7.3.dev4.dist-info}/RECORD +142 -135
- udata/core/post/forms.py +0 -30
- udata/flask_mongoengine/json.py +0 -38
- udata/templates/mail/base.html +0 -105
- udata/templates/mail/base.txt +0 -6
- udata/templates/mail/button.html +0 -3
- udata/templates/mail/layouts/1-column.html +0 -19
- udata/templates/mail/layouts/2-columns.html +0 -20
- udata/templates/mail/layouts/center-panel.html +0 -16
- udata-14.0.3.dev1.dist-info/METADATA +0 -132
- {udata-14.0.3.dev1.dist-info → udata-14.7.3.dev4.dist-info}/WHEEL +0 -0
- {udata-14.0.3.dev1.dist-info → udata-14.7.3.dev4.dist-info}/entry_points.txt +0 -0
- {udata-14.0.3.dev1.dist-info → udata-14.7.3.dev4.dist-info}/licenses/LICENSE +0 -0
- {udata-14.0.3.dev1.dist-info → udata-14.7.3.dev4.dist-info}/top_level.txt +0 -0
udata/core/post/forms.py
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
from udata.forms import ModelForm, fields, validators, widgets
|
|
2
|
-
from udata.i18n import lazy_gettext as _
|
|
3
|
-
|
|
4
|
-
from .constants import IMAGE_SIZES
|
|
5
|
-
from .models import Post
|
|
6
|
-
|
|
7
|
-
__all__ = ("PostForm",)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class PostForm(ModelForm):
|
|
11
|
-
model_class = Post
|
|
12
|
-
|
|
13
|
-
owner = fields.CurrentUserField()
|
|
14
|
-
|
|
15
|
-
name = fields.StringField(_("Name"), [validators.DataRequired()])
|
|
16
|
-
headline = fields.StringField(_("Headline"), widget=widgets.TextArea())
|
|
17
|
-
content = fields.MarkdownField(_("Content"), [validators.DataRequired()])
|
|
18
|
-
|
|
19
|
-
datasets = fields.DatasetListField(_("Associated datasets"))
|
|
20
|
-
reuses = fields.ReuseListField(_("Associated reuses"))
|
|
21
|
-
|
|
22
|
-
image = fields.ImageField(_("Image"), sizes=IMAGE_SIZES)
|
|
23
|
-
credit_to = fields.StringField(_("Image credits"))
|
|
24
|
-
credit_url = fields.URLField(_("Credit URL"))
|
|
25
|
-
|
|
26
|
-
tags = fields.TagField(_("Tags"))
|
|
27
|
-
|
|
28
|
-
body_type = fields.StringField(
|
|
29
|
-
_("body type"), description=_("Specify your body type (HTML or markdown)")
|
|
30
|
-
)
|
udata/flask_mongoengine/json.py
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
from bson import json_util
|
|
2
|
-
from flask.json import JSONEncoder
|
|
3
|
-
from mongoengine.base import BaseDocument
|
|
4
|
-
from mongoengine.queryset import QuerySet
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def _make_encoder(superclass):
|
|
8
|
-
class MongoEngineJSONEncoder(superclass):
|
|
9
|
-
"""
|
|
10
|
-
A JSONEncoder which provides serialization of MongoEngine
|
|
11
|
-
documents and queryset objects.
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
def default(self, obj):
|
|
15
|
-
if isinstance(obj, BaseDocument):
|
|
16
|
-
return json_util._json_convert(obj.to_mongo())
|
|
17
|
-
elif isinstance(obj, QuerySet):
|
|
18
|
-
return json_util._json_convert(obj.as_pymongo())
|
|
19
|
-
return superclass.default(self, obj)
|
|
20
|
-
|
|
21
|
-
return MongoEngineJSONEncoder
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
MongoEngineJSONEncoder = _make_encoder(JSONEncoder)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def override_json_encoder(app):
|
|
28
|
-
"""
|
|
29
|
-
A function to dynamically create a new MongoEngineJSONEncoder class
|
|
30
|
-
based upon a custom base class.
|
|
31
|
-
This function allows us to combine MongoEngine serialization with
|
|
32
|
-
any changes to Flask's JSONEncoder which a user may have made
|
|
33
|
-
prior to calling init_app.
|
|
34
|
-
|
|
35
|
-
NOTE: This does not cover situations where users override
|
|
36
|
-
an instance's json_encoder after calling init_app.
|
|
37
|
-
"""
|
|
38
|
-
app.json_encoder = _make_encoder(app.json_encoder)
|
udata/templates/mail/base.html
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
-
<html xmlns="http://www.w3.org/1999/xhtml" style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;">
|
|
3
|
-
<head>
|
|
4
|
-
<!-- If you delete this meta tag, Half Life 3 will never be released. -->
|
|
5
|
-
<meta name="viewport" content="width=device-width">
|
|
6
|
-
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
7
|
-
<title>{{config.SITE_TITLE}} - {{subject}}</title>
|
|
8
|
-
<style>
|
|
9
|
-
/* -------------------------------------------
|
|
10
|
-
PHONE
|
|
11
|
-
For clients that support media queries.
|
|
12
|
-
Nothing fancy.
|
|
13
|
-
-------------------------------------------- */
|
|
14
|
-
@media only screen and (max-width: 600px) {
|
|
15
|
-
|
|
16
|
-
a[class="btn"] { display:block!important; margin-bottom:10px!important; background-image:none!important; margin-right:0!important;}
|
|
17
|
-
|
|
18
|
-
div[class="column"] { width: auto!important; float:none!important;}
|
|
19
|
-
|
|
20
|
-
table.social div[class="column"] {
|
|
21
|
-
width:auto!important;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
</style>
|
|
25
|
-
{% block head %}{% endblock %}
|
|
26
|
-
</head>
|
|
27
|
-
|
|
28
|
-
<body bgcolor="#efefef" style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-webkit-text-size-adjust: none;height: 100%;color: #373737;width: 100%!important;background-color: #efefef;">
|
|
29
|
-
|
|
30
|
-
<!-- HEADER -->
|
|
31
|
-
<table class="head-wrap" cellpadding="0" cellspacing="0" style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;width: 100%;">
|
|
32
|
-
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;">
|
|
33
|
-
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;"></td>
|
|
34
|
-
<td class="header container" style="margin: 0 auto!important;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;display: block!important;max-width: 628px!important;clear: both!important;">
|
|
35
|
-
|
|
36
|
-
<div style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;">
|
|
37
|
-
<table cellpadding="0" cellspacing="0" style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;">
|
|
38
|
-
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;">
|
|
39
|
-
<td align="center" class="head-message" style="margin: 0;padding: 16px;font-family: arial,helvetica,sans-serif;color: #888888;font-size: 11px;">
|
|
40
|
-
{% if browser_url %}
|
|
41
|
-
{% set link =
|
|
42
|
-
'<a href="'|safe
|
|
43
|
-
+ browser_link
|
|
44
|
-
+ '"Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;color: #2081c5;text-decoration: none;"> '|safe
|
|
45
|
-
+ _('on your browser.')
|
|
46
|
-
+ '</a>'|safe
|
|
47
|
-
%}
|
|
48
|
-
{{ _('View this email %(link)s', link=link) }}
|
|
49
|
-
{% else %}
|
|
50
|
-
|
|
51
|
-
{% endif %}
|
|
52
|
-
</td>
|
|
53
|
-
</tr>
|
|
54
|
-
</table>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
</td>
|
|
58
|
-
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;"></td>
|
|
59
|
-
</tr>
|
|
60
|
-
</table><!-- /HEADER -->
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
<!-- BODY -->
|
|
64
|
-
<table class="body-wrap" cellpadding="0" cellspacing="0" style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;width: 100%;">
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;">
|
|
69
|
-
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;"></td>
|
|
70
|
-
<td class="container" bgcolor="#FFFFFF" style="margin: 0 auto!important;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;display: block!important;max-width: 628px!important;clear: both!important;">
|
|
71
|
-
|
|
72
|
-
<div class="content" style="margin: 0 auto;padding: 35px 47px;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;max-width: 628px;display: block;">
|
|
73
|
-
<table style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;width: 100%;">
|
|
74
|
-
<tr style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;">
|
|
75
|
-
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;">
|
|
76
|
-
<h3 style="margin: 0;padding: 0;font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;line-height: 1.1;margin-bottom: 15px;color: #000;font-weight: 500;font-size: 24px;">{{ _('Hi %(user)s', user=recipient.first_name) }}</h3>
|
|
77
|
-
</td>
|
|
78
|
-
</tr>
|
|
79
|
-
<tr style="margin: 0;padding: 0;">
|
|
80
|
-
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;margin-bottom: 20px;font-weight: normal;font-size: 14px;line-height: 1.5;">
|
|
81
|
-
{% block body %}{% endblock %}
|
|
82
|
-
</td>
|
|
83
|
-
</tr>
|
|
84
|
-
|
|
85
|
-
<tr style="margin: 0;padding: 0;">
|
|
86
|
-
<td style="margin: 0;padding: 0;">
|
|
87
|
-
<p style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;margin-top: 20px;margin-bottom: 20px;font-weight: normal;font-size: 14px;line-height: 1.5;">{{ _('See you soon on the platform') }}<br/>
|
|
88
|
-
<i>{{ _('The %(site)s team', site=config.SITE_TITLE) }}</i></p>
|
|
89
|
-
</td>
|
|
90
|
-
</tr>
|
|
91
|
-
|
|
92
|
-
</table>
|
|
93
|
-
|
|
94
|
-
</div></td>
|
|
95
|
-
</tr>
|
|
96
|
-
</table>
|
|
97
|
-
<!-- /content -->
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
<td style="margin: 0;padding: 0;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;"></td>
|
|
101
|
-
|
|
102
|
-
<!-- /BODY -->
|
|
103
|
-
|
|
104
|
-
</body>
|
|
105
|
-
</html>
|
udata/templates/mail/base.txt
DELETED
udata/templates/mail/button.html
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
{% macro mail_button(label, url) %}
|
|
2
|
-
<a class="btn" href="{{ url }}" style="margin: 30px 15px;padding: 8px 20px;font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;color: #ffffff;text-decoration: none;background-color: #438fc5;font-weight: bold;text-align: center;cursor: pointer;display: inline-block;font-size: 11px;text-transform: uppercase;">{{ label }}</a>
|
|
3
|
-
{% endmacro %}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{% extends 'base.html' %}
|
|
2
|
-
{% from 'macros/breadcrumb.html' import breadcrumb with context %}
|
|
3
|
-
{% set section_class = section_class|default('default') %}
|
|
4
|
-
{% set toolbar_class = toolbar_class|default('') %}
|
|
5
|
-
|
|
6
|
-
{% block content %}
|
|
7
|
-
{{ breadcrumb(self,
|
|
8
|
-
breadcrum_class=breadcrum_class,
|
|
9
|
-
toolbar_class=toolbar_class
|
|
10
|
-
) }}
|
|
11
|
-
|
|
12
|
-
<section class="{{ section_class }}">
|
|
13
|
-
<div class="{{ container_class }}">
|
|
14
|
-
{% block main_content %}{% endblock %}
|
|
15
|
-
</div>
|
|
16
|
-
</section>
|
|
17
|
-
|
|
18
|
-
{% block extra_sections %}{% endblock %}
|
|
19
|
-
{% endblock %}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{% extends 'base.html' %}
|
|
2
|
-
{% from 'macros/breadcrumb.html' import breadcrumb with context %}
|
|
3
|
-
{% set section_class = section_class|default('default') %}
|
|
4
|
-
|
|
5
|
-
{% block content %}
|
|
6
|
-
{{ breadcrumb(self) }}
|
|
7
|
-
|
|
8
|
-
<section class="{{ section_class }}">
|
|
9
|
-
<div class="container {{ container_class }}">
|
|
10
|
-
<div class="row">
|
|
11
|
-
<div class="col-lg-8">
|
|
12
|
-
{% block main_content %}{% endblock %}
|
|
13
|
-
</div>
|
|
14
|
-
<aside class="col-lg-4">
|
|
15
|
-
{% block sidebar %}{% endblock %}
|
|
16
|
-
</aside>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
</section>
|
|
20
|
-
{% endblock %}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{% extends 'raw.html' %}
|
|
2
|
-
|
|
3
|
-
{% set body_class = 'panel-center' %}
|
|
4
|
-
|
|
5
|
-
{% block body %}
|
|
6
|
-
<div class="container">
|
|
7
|
-
<div class="row">
|
|
8
|
-
<div class="col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2">
|
|
9
|
-
<div class="panel panel-default">
|
|
10
|
-
{% block panel_content %}
|
|
11
|
-
{% endblock %}
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
</div>
|
|
15
|
-
</div>
|
|
16
|
-
{% endblock %}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: udata
|
|
3
|
-
Version: 14.0.3.dev1
|
|
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==1.5.1
|
|
29
|
-
Requires-Dist: awesome-slugify==1.6.5
|
|
30
|
-
Requires-Dist: babel==2.17.0
|
|
31
|
-
Requires-Dist: bcrypt==4.3.0
|
|
32
|
-
Requires-Dist: bleach[css]==6.2.0
|
|
33
|
-
Requires-Dist: blinker==1.5
|
|
34
|
-
Requires-Dist: boto3==1.26.102
|
|
35
|
-
Requires-Dist: botocore==1.29.165
|
|
36
|
-
Requires-Dist: celery==5.4.0
|
|
37
|
-
Requires-Dist: celerybeat-mongo==0.2.0
|
|
38
|
-
Requires-Dist: click==8.1.8
|
|
39
|
-
Requires-Dist: cryptography==44.0.2
|
|
40
|
-
Requires-Dist: email-validator==2.2.0
|
|
41
|
-
Requires-Dist: factory-boy==3.3.3
|
|
42
|
-
Requires-Dist: feedgenerator==2.1.0
|
|
43
|
-
Requires-Dist: flask==2.1.2
|
|
44
|
-
Requires-Dist: flask-babel==4.0.0
|
|
45
|
-
Requires-Dist: flask-caching==2.3.1
|
|
46
|
-
Requires-Dist: flask-cdn==1.5.3
|
|
47
|
-
Requires-Dist: flask-gravatar==0.5.0
|
|
48
|
-
Requires-Dist: flask-login==0.6.3
|
|
49
|
-
Requires-Dist: flask-mail==0.10.0
|
|
50
|
-
Requires-Dist: flask-principal==0.4.0
|
|
51
|
-
Requires-Dist: flask-restx==1.3.0
|
|
52
|
-
Requires-Dist: flask-security-too==5.1.2
|
|
53
|
-
Requires-Dist: flask-sitemap==0.4.0
|
|
54
|
-
Requires-Dist: flask-storage~=1.4.0
|
|
55
|
-
Requires-Dist: flask-wtf==1.2.2
|
|
56
|
-
Requires-Dist: geojson==3.2.0
|
|
57
|
-
Requires-Dist: geomet==1.1.0
|
|
58
|
-
Requires-Dist: html2text==2024.2.26
|
|
59
|
-
Requires-Dist: humanfriendly==10.0
|
|
60
|
-
Requires-Dist: importlib-resources==6.5.2
|
|
61
|
-
Requires-Dist: itsdangerous==2.2.0
|
|
62
|
-
Requires-Dist: jinja2==3.1.6
|
|
63
|
-
Requires-Dist: jsonschema==4.23.0
|
|
64
|
-
Requires-Dist: kombu[redis]==5.5.0
|
|
65
|
-
Requires-Dist: langdetect==1.0.9
|
|
66
|
-
Requires-Dist: levenshtein==0.27.1
|
|
67
|
-
Requires-Dist: lxml==5.3.1
|
|
68
|
-
Requires-Dist: mistune==3.1.3
|
|
69
|
-
Requires-Dist: mongoengine==0.29.1
|
|
70
|
-
Requires-Dist: netaddr==1.3.0
|
|
71
|
-
Requires-Dist: pillow==9.2.0
|
|
72
|
-
Requires-Dist: pydenticon==0.3.1
|
|
73
|
-
Requires-Dist: pymongo==4.11.3
|
|
74
|
-
Requires-Dist: python-dateutil==2.9.0.post0
|
|
75
|
-
Requires-Dist: pytz==2025.1
|
|
76
|
-
Requires-Dist: rdflib==7.1.3
|
|
77
|
-
Requires-Dist: redis==5.2.1
|
|
78
|
-
Requires-Dist: requests==2.32.4
|
|
79
|
-
Requires-Dist: saxonche==12.8.0
|
|
80
|
-
Requires-Dist: sentry-sdk[flask]==2.23.1
|
|
81
|
-
Requires-Dist: speaklater==1.3
|
|
82
|
-
Requires-Dist: tlds==2025022800
|
|
83
|
-
Requires-Dist: typing-extensions==4.12.2
|
|
84
|
-
Requires-Dist: tzdata==2025.1
|
|
85
|
-
Requires-Dist: urlextract==1.9.0
|
|
86
|
-
Requires-Dist: urllib3==1.26.20
|
|
87
|
-
Requires-Dist: voluptuous==0.15.2
|
|
88
|
-
Requires-Dist: werkzeug==2.2.3
|
|
89
|
-
Requires-Dist: wtforms[email]==3.2.1
|
|
90
|
-
Requires-Dist: wtforms-json==0.3.5
|
|
91
|
-
Provides-Extra: dev
|
|
92
|
-
Requires-Dist: flask-shell-ipython<1.0,>=0.5.3; extra == "dev"
|
|
93
|
-
Requires-Dist: invoke<3.0,>=2.2.0; extra == "dev"
|
|
94
|
-
Requires-Dist: pip-tools<8.0,>=7.4.1; extra == "dev"
|
|
95
|
-
Requires-Dist: pre-commit<5.0,>=4.2.0; extra == "dev"
|
|
96
|
-
Requires-Dist: ruff<1.0,>=0.11.0; extra == "dev"
|
|
97
|
-
Provides-Extra: test
|
|
98
|
-
Requires-Dist: faker<38.0,>=37.0.2; extra == "test"
|
|
99
|
-
Requires-Dist: feedparser<7.0,>=6.0.11; extra == "test"
|
|
100
|
-
Requires-Dist: httpretty<2.0,>=1.1.4; extra == "test"
|
|
101
|
-
Requires-Dist: mock<6.0,>=5.2.0; extra == "test"
|
|
102
|
-
Requires-Dist: pytest<9.0,>=8.3.5; extra == "test"
|
|
103
|
-
Requires-Dist: pytest-env<2.0,>=1.1.5; extra == "test"
|
|
104
|
-
Requires-Dist: pytest-flask<2.0,>=1.3.0; extra == "test"
|
|
105
|
-
Requires-Dist: pytest-mock<4.0,>=3.14.0; extra == "test"
|
|
106
|
-
Requires-Dist: pytest-sugar<2.0,>=1.0.0; extra == "test"
|
|
107
|
-
Requires-Dist: requests-mock<2.0,>=1.12.1; extra == "test"
|
|
108
|
-
Provides-Extra: doc
|
|
109
|
-
Requires-Dist: mkdocs<2.0,>=1.6.1; extra == "doc"
|
|
110
|
-
Provides-Extra: report
|
|
111
|
-
Requires-Dist: coverage[toml]<8.0,>=7.7.0; extra == "report"
|
|
112
|
-
Requires-Dist: flake8<8.0,>=7.1.2; extra == "report"
|
|
113
|
-
Requires-Dist: pytest-cov<8.0,>=7.0.0; extra == "report"
|
|
114
|
-
Dynamic: license-file
|
|
115
|
-
|
|
116
|
-
<p align="center"><img src="https://i.imgur.com/rlRox1c.png"></p>
|
|
117
|
-
|
|
118
|
-
udata
|
|
119
|
-
=====
|
|
120
|
-
|
|
121
|
-
Customizable and skinnable social platform dedicated to (open) data.
|
|
122
|
-
|
|
123
|
-
The [full documentation][readthedocs-url] is hosted on Read the Docs.
|
|
124
|
-
|
|
125
|
-
udata is maintained by [data.gouv.fr](https://data.gouv.fr/), the
|
|
126
|
-
French public agency in charge of open data. data.gouv.fr is responsible
|
|
127
|
-
for publishing udata's roadmap and for building consensus around it.
|
|
128
|
-
|
|
129
|
-
It is collectively taken care of by members of the
|
|
130
|
-
[OpenDataTeam](https://github.com/opendatateam).
|
|
131
|
-
|
|
132
|
-
[readthedocs-url]: https://udata.readthedocs.io/en/stable/
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|