udata 11.1.2.dev4__py3-none-any.whl → 11.1.2.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.
- udata/app.py +50 -1
- udata/core/dataset/api.py +1 -1
- udata/core/topic/activities.py +7 -4
- udata/templates/404.html +43 -0
- udata/tests/api/test_datasets_api.py +11 -0
- udata/tests/apiv2/test_topics.py +13 -0
- udata/tests/frontend/test_error_handlers.py +77 -0
- udata/translations/udata.pot +133 -77
- udata/uris.py +7 -1
- {udata-11.1.2.dev4.dist-info → udata-11.1.2.dev6.dist-info}/METADATA +1 -1
- {udata-11.1.2.dev4.dist-info → udata-11.1.2.dev6.dist-info}/RECORD +15 -13
- {udata-11.1.2.dev4.dist-info → udata-11.1.2.dev6.dist-info}/WHEEL +0 -0
- {udata-11.1.2.dev4.dist-info → udata-11.1.2.dev6.dist-info}/entry_points.txt +0 -0
- {udata-11.1.2.dev4.dist-info → udata-11.1.2.dev6.dist-info}/licenses/LICENSE +0 -0
- {udata-11.1.2.dev4.dist-info → udata-11.1.2.dev6.dist-info}/top_level.txt +0 -0
udata/app.py
CHANGED
|
@@ -7,10 +7,21 @@ from os.path import abspath, dirname, exists, isfile, join
|
|
|
7
7
|
|
|
8
8
|
import bson
|
|
9
9
|
from flask import Blueprint as BaseBlueprint
|
|
10
|
-
from flask import
|
|
10
|
+
from flask import (
|
|
11
|
+
Flask,
|
|
12
|
+
abort,
|
|
13
|
+
g,
|
|
14
|
+
json,
|
|
15
|
+
jsonify,
|
|
16
|
+
make_response,
|
|
17
|
+
render_template,
|
|
18
|
+
request,
|
|
19
|
+
send_from_directory,
|
|
20
|
+
)
|
|
11
21
|
from flask_caching import Cache
|
|
12
22
|
from flask_wtf.csrf import CSRFProtect
|
|
13
23
|
from speaklater import is_lazy_string
|
|
24
|
+
from werkzeug.exceptions import NotFound
|
|
14
25
|
from werkzeug.middleware.proxy_fix import ProxyFix
|
|
15
26
|
|
|
16
27
|
from udata import cors, entrypoints
|
|
@@ -225,9 +236,47 @@ def register_extensions(app):
|
|
|
225
236
|
mail.init_app(app)
|
|
226
237
|
search.init_app(app)
|
|
227
238
|
sentry.init_app(app)
|
|
239
|
+
app.after_request(return_404_html_if_requested)
|
|
240
|
+
app.register_error_handler(NotFound, page_not_found)
|
|
228
241
|
return app
|
|
229
242
|
|
|
230
243
|
|
|
244
|
+
def return_404_html_if_requested(response):
|
|
245
|
+
# It's impossible to return an HTML page from an error handler of
|
|
246
|
+
# the API with Fask-RestX because the error handler is expected to
|
|
247
|
+
# return a JSON `dict` and not an HTML string.
|
|
248
|
+
# The only way to return the correct HTML response from a client
|
|
249
|
+
# that require HTML (for exemple by requesting /api/1/datasets/r/some-uuid with
|
|
250
|
+
# a non-existant resource) is to hook an `after_request` middleware.
|
|
251
|
+
|
|
252
|
+
if response.status_code != 404:
|
|
253
|
+
return response
|
|
254
|
+
|
|
255
|
+
# Return an HTML response if the user prefers HTML over JSON
|
|
256
|
+
if request.accept_mimetypes.best_match(["application/json", "text/html"]) == "text/html":
|
|
257
|
+
from udata.uris import homepage_url
|
|
258
|
+
|
|
259
|
+
html_content = render_template("404.html", homepage_url=homepage_url())
|
|
260
|
+
response = make_response(html_content, 404)
|
|
261
|
+
response.headers["Content-Type"] = "text/html; charset=utf-8"
|
|
262
|
+
|
|
263
|
+
return response
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
def page_not_found(e: NotFound):
|
|
267
|
+
"""
|
|
268
|
+
This handler is only called for non existing pages,
|
|
269
|
+
for example "/api/1/oups", see `return_404_html_if_requested`
|
|
270
|
+
for calling `abort(404)` inside the API.
|
|
271
|
+
"""
|
|
272
|
+
from udata.uris import homepage_url
|
|
273
|
+
|
|
274
|
+
if request.accept_mimetypes.best_match(["application/json", "text/html"]) == "text/html":
|
|
275
|
+
return render_template("404.html", homepage_url=homepage_url()), 404
|
|
276
|
+
|
|
277
|
+
return jsonify({"error": e.description, "status": 404}), 404
|
|
278
|
+
|
|
279
|
+
|
|
231
280
|
def register_features(app):
|
|
232
281
|
from udata.features import notifications
|
|
233
282
|
|
udata/core/dataset/api.py
CHANGED
|
@@ -492,7 +492,7 @@ class ResourceRedirectAPI(API):
|
|
|
492
492
|
Redirect to the latest version of a resource given its identifier.
|
|
493
493
|
"""
|
|
494
494
|
resource = get_resource(id)
|
|
495
|
-
return redirect(resource.url.strip()) if resource else abort(404)
|
|
495
|
+
return redirect(resource.url.strip()) if resource else abort(404, "Resource not found")
|
|
496
496
|
|
|
497
497
|
|
|
498
498
|
@ns.route("/<dataset:dataset>/resources/", endpoint="resources")
|
udata/core/topic/activities.py
CHANGED
|
@@ -85,8 +85,11 @@ def on_user_updated_topic_element(topic_element, **kwargs):
|
|
|
85
85
|
|
|
86
86
|
@TopicElement.on_delete.connect
|
|
87
87
|
def on_user_deleted_topic_element(topic_element):
|
|
88
|
-
|
|
88
|
+
try:
|
|
89
|
+
topic = topic_element.topic
|
|
90
|
+
except db.DoesNotExist:
|
|
91
|
+
# Topic was already deleted, skip activity creation
|
|
92
|
+
return
|
|
93
|
+
if current_user and current_user.is_authenticated and topic:
|
|
89
94
|
extras = {"element_id": str(topic_element.id)}
|
|
90
|
-
UserDeletedTopicElement.emit(
|
|
91
|
-
topic_element.topic, topic_element.topic.organization, extras=extras
|
|
92
|
-
)
|
|
95
|
+
UserDeletedTopicElement.emit(topic, topic.organization, extras=extras)
|
udata/templates/404.html
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="fr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>404 - {{ _('Page not found') }}</title>
|
|
7
|
+
<style>
|
|
8
|
+
body {
|
|
9
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
10
|
+
margin: 0;
|
|
11
|
+
padding: 2rem;
|
|
12
|
+
min-height: 100vh;
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
}
|
|
17
|
+
.container {
|
|
18
|
+
max-width: 600px;
|
|
19
|
+
}
|
|
20
|
+
h1 {
|
|
21
|
+
font-size: 3rem;
|
|
22
|
+
font-weight: 600;
|
|
23
|
+
margin: 0 0 0.5rem 0;
|
|
24
|
+
}
|
|
25
|
+
p {
|
|
26
|
+
color: #666;
|
|
27
|
+
line-height: 1.5;
|
|
28
|
+
margin: 0 0 1.5rem 0;
|
|
29
|
+
}
|
|
30
|
+
a {
|
|
31
|
+
color: #000;
|
|
32
|
+
text-decoration: underline;
|
|
33
|
+
}
|
|
34
|
+
</style>
|
|
35
|
+
</head>
|
|
36
|
+
<body>
|
|
37
|
+
<div class="container">
|
|
38
|
+
<h1>404</h1>
|
|
39
|
+
<p>{{ _('The page you are looking for does not exist.') }}</p>
|
|
40
|
+
<a href="{{ homepage_url }}">{{ _('Back to home') }}</a>
|
|
41
|
+
</div>
|
|
42
|
+
</body>
|
|
43
|
+
</html>
|
|
@@ -1822,6 +1822,17 @@ class DatasetResourceAPITest(APITestCase):
|
|
|
1822
1822
|
)
|
|
1823
1823
|
self.assert404(response)
|
|
1824
1824
|
|
|
1825
|
+
def test_resource_redirect_success(self):
|
|
1826
|
+
"""It should redirect to the resource URL"""
|
|
1827
|
+
resource = ResourceFactory(url="https://example.com/data.csv")
|
|
1828
|
+
DatasetFactory(resources=[resource])
|
|
1829
|
+
|
|
1830
|
+
response = self.get(
|
|
1831
|
+
url_for("api.resource_redirect", id=resource.id), follow_redirects=False
|
|
1832
|
+
)
|
|
1833
|
+
self.assertEqual(response.status_code, 302)
|
|
1834
|
+
self.assertEqual(response.location, "https://example.com/data.csv")
|
|
1835
|
+
|
|
1825
1836
|
def test_follow_dataset(self):
|
|
1826
1837
|
"""It should follow a dataset on POST"""
|
|
1827
1838
|
user = self.login()
|
udata/tests/apiv2/test_topics.py
CHANGED
|
@@ -437,6 +437,19 @@ class TopicAPITest(APITestCase):
|
|
|
437
437
|
self.assertEqual(Topic.objects.count(), 0)
|
|
438
438
|
self.assertEqual(Discussion.objects.count(), 0)
|
|
439
439
|
|
|
440
|
+
def test_topic_api_delete_with_elements(self):
|
|
441
|
+
"""It should delete a topic with elements without raising DoesNotExist error"""
|
|
442
|
+
owner = self.login()
|
|
443
|
+
topic = TopicWithElementsFactory(owner=owner)
|
|
444
|
+
|
|
445
|
+
with self.api_user():
|
|
446
|
+
response = self.delete(url_for("apiv2.topic", topic=topic))
|
|
447
|
+
self.assertStatus(response, 204)
|
|
448
|
+
|
|
449
|
+
# Verify both topic and elements are deleted
|
|
450
|
+
self.assertEqual(Topic.objects.count(), 0)
|
|
451
|
+
self.assertEqual(TopicElement.objects.count(), 0)
|
|
452
|
+
|
|
440
453
|
def test_topic_api_delete_perm(self):
|
|
441
454
|
"""It should not delete a topic from the API"""
|
|
442
455
|
owner = UserFactory()
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from uuid import uuid4
|
|
2
|
+
|
|
3
|
+
from flask import url_for
|
|
4
|
+
|
|
5
|
+
from . import FrontTestCase
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ErrorHandlersTest(FrontTestCase):
|
|
9
|
+
def test_404_in_flask_routing_requesting_html(self):
|
|
10
|
+
"""Test that a 404 error displays the custom 404 HTML page"""
|
|
11
|
+
# Request a non-existent page
|
|
12
|
+
response = self.get("/this-page-does-not-exist", headers={"Accept": "text/html"})
|
|
13
|
+
|
|
14
|
+
# Check that we get a 404 status code
|
|
15
|
+
assert response.status_code == 404
|
|
16
|
+
|
|
17
|
+
# Check that the custom 404 template is rendered
|
|
18
|
+
html = response.data.decode("utf-8")
|
|
19
|
+
assert "404" in html
|
|
20
|
+
assert "Page not found" in html or "page you are looking for does not exist" in html.lower()
|
|
21
|
+
|
|
22
|
+
# Check that there's a link back to the homepage
|
|
23
|
+
assert "Back to home" in html or "home" in html.lower()
|
|
24
|
+
|
|
25
|
+
def test_404_with_abort_function_requesting_html(self):
|
|
26
|
+
"""Test that resource redirect returns HTML 404 when HTML is requested"""
|
|
27
|
+
# Use a UUID that doesn't exist
|
|
28
|
+
non_existent_uuid = uuid4()
|
|
29
|
+
|
|
30
|
+
# Request the resource redirect endpoint with HTML accept header
|
|
31
|
+
response = self.get(
|
|
32
|
+
url_for("api.resource_redirect", id=non_existent_uuid), headers={"Accept": "text/html"}
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Check that we get a 404 status code
|
|
36
|
+
assert response.status_code == 404
|
|
37
|
+
|
|
38
|
+
# Check that the response is HTML (not JSON)
|
|
39
|
+
assert "text/html" in response.content_type
|
|
40
|
+
|
|
41
|
+
# Check that the custom 404 template is rendered
|
|
42
|
+
html = response.data.decode("utf-8")
|
|
43
|
+
assert "404" in html
|
|
44
|
+
assert "Page not found" in html or "page you are looking for does not exist" in html.lower()
|
|
45
|
+
|
|
46
|
+
def test_404_in_flask_routing(self):
|
|
47
|
+
"""Test that a 404 error returns JSON when requested"""
|
|
48
|
+
# Request a non-existent page with JSON accept header
|
|
49
|
+
response = self.get("/this-page-does-not-exist")
|
|
50
|
+
|
|
51
|
+
# Check that we get a 404 status code
|
|
52
|
+
assert response.status_code == 404
|
|
53
|
+
|
|
54
|
+
# Check that the response is JSON
|
|
55
|
+
assert response.content_type == "application/json"
|
|
56
|
+
|
|
57
|
+
# Check the JSON response content
|
|
58
|
+
data = response.json
|
|
59
|
+
assert (
|
|
60
|
+
data["error"]
|
|
61
|
+
== "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again."
|
|
62
|
+
)
|
|
63
|
+
assert data["status"] == 404
|
|
64
|
+
|
|
65
|
+
def test_404_with_abort_function_and_custom_message(self):
|
|
66
|
+
"""Test that API resource redirect returns 404 JSON when resource doesn't exist"""
|
|
67
|
+
# Use a UUID that doesn't exist
|
|
68
|
+
non_existent_uuid = uuid4()
|
|
69
|
+
|
|
70
|
+
response = self.get(url_for("api.resource_redirect", id=non_existent_uuid))
|
|
71
|
+
assert response.status_code == 404
|
|
72
|
+
|
|
73
|
+
# Check that the response is JSON (Flask-RESTX returns JSON by default for API routes)
|
|
74
|
+
assert response.content_type == "application/json"
|
|
75
|
+
|
|
76
|
+
# Custom message
|
|
77
|
+
assert response.json["message"] == "Resource not found"
|
udata/translations/udata.pot
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
# English translations for
|
|
1
|
+
# English translations for PROJECT.
|
|
2
2
|
# Copyright (C) 2025 Open Data Team
|
|
3
|
-
# This file is distributed under the same license as the
|
|
3
|
+
# This file is distributed under the same license as the PROJECT project.
|
|
4
4
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
|
5
5
|
#
|
|
6
6
|
#, fuzzy
|
|
7
7
|
msgid ""
|
|
8
8
|
msgstr ""
|
|
9
|
-
"Project-Id-Version:
|
|
9
|
+
"Project-Id-Version: PROJECT VERSION\n"
|
|
10
10
|
"Report-Msgid-Bugs-To: i18n@opendata.team\n"
|
|
11
|
-
"POT-Creation-Date: 2025-
|
|
12
|
-
"PO-Revision-Date: 2025-
|
|
11
|
+
"POT-Creation-Date: 2025-10-06 17:05+0200\n"
|
|
12
|
+
"PO-Revision-Date: 2025-10-06 17:05+0200\n"
|
|
13
13
|
"Last-Translator: Open Data Team <i18n@opendata.team>\n"
|
|
14
14
|
"Language: en\n"
|
|
15
15
|
"Language-Team: Open Data Team <i18n@opendata.team>\n"
|
|
@@ -43,7 +43,7 @@ msgstr ""
|
|
|
43
43
|
msgid "Password reset instructions"
|
|
44
44
|
msgstr ""
|
|
45
45
|
|
|
46
|
-
#: udata/settings.py:
|
|
46
|
+
#: udata/settings.py:520
|
|
47
47
|
msgid "This dataset has been archived"
|
|
48
48
|
msgstr ""
|
|
49
49
|
|
|
@@ -52,41 +52,41 @@ msgstr ""
|
|
|
52
52
|
msgid "Invalid URL \"{url}\": {reason}"
|
|
53
53
|
msgstr ""
|
|
54
54
|
|
|
55
|
-
#: udata/tests/api/test_datasets_api.py:
|
|
55
|
+
#: udata/tests/api/test_datasets_api.py:1126 udata/tests/test_model.py:403
|
|
56
56
|
#: udata/uris.py:57
|
|
57
57
|
#, python-brace-format
|
|
58
58
|
msgid "Invalid URL \"{url}\""
|
|
59
59
|
msgstr ""
|
|
60
60
|
|
|
61
|
-
#: udata/uris.py:
|
|
61
|
+
#: udata/uris.py:131
|
|
62
62
|
#, python-brace-format
|
|
63
63
|
msgid "Invalid scheme {0}, allowed schemes: {1}"
|
|
64
64
|
msgstr ""
|
|
65
65
|
|
|
66
|
-
#: udata/uris.py:
|
|
66
|
+
#: udata/uris.py:134
|
|
67
67
|
msgid "Credentials in URL are not allowed"
|
|
68
68
|
msgstr ""
|
|
69
69
|
|
|
70
|
-
#: udata/uris.py:
|
|
70
|
+
#: udata/uris.py:138
|
|
71
71
|
#, python-brace-format
|
|
72
72
|
msgid "Invalid TLD {0}"
|
|
73
73
|
msgstr ""
|
|
74
74
|
|
|
75
|
-
#: udata/uris.py:
|
|
75
|
+
#: udata/uris.py:147
|
|
76
76
|
#, python-brace-format
|
|
77
77
|
msgid "{0} is a multicast IP"
|
|
78
78
|
msgstr ""
|
|
79
79
|
|
|
80
|
-
#: udata/uris.py:
|
|
80
|
+
#: udata/uris.py:149
|
|
81
81
|
#, python-brace-format
|
|
82
82
|
msgid "{0} is a mask IP"
|
|
83
83
|
msgstr ""
|
|
84
84
|
|
|
85
|
-
#: udata/uris.py:
|
|
85
|
+
#: udata/uris.py:153
|
|
86
86
|
msgid "is a local URL"
|
|
87
87
|
msgstr ""
|
|
88
88
|
|
|
89
|
-
#: udata/tests/test_model.py:421 udata/uris.py:
|
|
89
|
+
#: udata/tests/test_model.py:421 udata/uris.py:160
|
|
90
90
|
msgid "is a private URL"
|
|
91
91
|
msgstr ""
|
|
92
92
|
|
|
@@ -196,8 +196,8 @@ msgstr ""
|
|
|
196
196
|
msgid "Your udata instance is ready!"
|
|
197
197
|
msgstr ""
|
|
198
198
|
|
|
199
|
-
#: udata/core/owned.py:64 udata/forms/fields.py:
|
|
200
|
-
#: udata/tests/api/test_dataservices_api.py:
|
|
199
|
+
#: udata/core/owned.py:64 udata/forms/fields.py:759
|
|
200
|
+
#: udata/tests/api/test_dataservices_api.py:550
|
|
201
201
|
msgid "You can only set yourself as owner"
|
|
202
202
|
msgstr ""
|
|
203
203
|
|
|
@@ -205,8 +205,8 @@ msgstr ""
|
|
|
205
205
|
msgid "Unknown organization"
|
|
206
206
|
msgstr ""
|
|
207
207
|
|
|
208
|
-
#: udata/core/owned.py:77 udata/forms/fields.py:
|
|
209
|
-
#: udata/tests/api/test_dataservices_api.py:
|
|
208
|
+
#: udata/core/owned.py:77 udata/forms/fields.py:791
|
|
209
|
+
#: udata/tests/api/test_dataservices_api.py:563
|
|
210
210
|
msgid "Permission denied for this organization"
|
|
211
211
|
msgstr ""
|
|
212
212
|
|
|
@@ -224,7 +224,7 @@ msgstr ""
|
|
|
224
224
|
|
|
225
225
|
#: udata/core/contact_point/forms.py:12 udata/core/jobs/forms.py:27
|
|
226
226
|
#: udata/core/organization/forms.py:46 udata/core/post/forms.py:15
|
|
227
|
-
#: udata/core/topic/forms.py:
|
|
227
|
+
#: udata/core/topic/forms.py:37 udata/harvest/forms.py:78
|
|
228
228
|
#: udata/templates/api/admin.html:10
|
|
229
229
|
msgid "Name"
|
|
230
230
|
msgstr ""
|
|
@@ -243,7 +243,7 @@ msgstr ""
|
|
|
243
243
|
|
|
244
244
|
#: udata/core/contact_point/forms.py:20 udata/core/dataset/forms.py:117
|
|
245
245
|
#: udata/core/dataset/forms.py:185 udata/core/discussions/forms.py:13
|
|
246
|
-
#: udata/core/discussions/forms.py:29 udata/core/topic/forms.py:
|
|
246
|
+
#: udata/core/discussions/forms.py:29 udata/core/topic/forms.py:35
|
|
247
247
|
#: udata/harvest/forms.py:87
|
|
248
248
|
msgid "Publish as"
|
|
249
249
|
msgstr ""
|
|
@@ -268,65 +268,65 @@ msgstr ""
|
|
|
268
268
|
msgid "At least an email or a contact form is required for a contact point"
|
|
269
269
|
msgstr ""
|
|
270
270
|
|
|
271
|
-
#: udata/core/dataservices/activities.py:
|
|
271
|
+
#: udata/core/dataservices/activities.py:23
|
|
272
272
|
msgid "created a dataservice"
|
|
273
273
|
msgstr ""
|
|
274
274
|
|
|
275
|
-
#: udata/core/dataservices/activities.py:
|
|
275
|
+
#: udata/core/dataservices/activities.py:29
|
|
276
276
|
msgid "updated a dataservice"
|
|
277
277
|
msgstr ""
|
|
278
278
|
|
|
279
|
-
#: udata/core/dataservices/activities.py:
|
|
279
|
+
#: udata/core/dataservices/activities.py:36
|
|
280
280
|
msgid "deleted a dataservice"
|
|
281
281
|
msgstr ""
|
|
282
282
|
|
|
283
|
-
#: udata/core/dataservices/api.py:
|
|
283
|
+
#: udata/core/dataservices/api.py:63
|
|
284
284
|
msgid "Latest APIs"
|
|
285
285
|
msgstr ""
|
|
286
286
|
|
|
287
|
-
#: udata/core/dataservices/models.py:
|
|
287
|
+
#: udata/core/dataservices/models.py:132
|
|
288
288
|
msgid "You can only set one condition for a given access audience role"
|
|
289
289
|
msgstr ""
|
|
290
290
|
|
|
291
|
-
#: udata/core/dataservices/models.py:
|
|
291
|
+
#: udata/core/dataservices/models.py:182
|
|
292
292
|
msgid "dataservice"
|
|
293
293
|
msgstr ""
|
|
294
294
|
|
|
295
|
-
#: udata/core/dataservices/models.py:
|
|
295
|
+
#: udata/core/dataservices/models.py:271 udata/core/dataset/models.py:605
|
|
296
296
|
#: udata/mongo/datetime_fields.py:60
|
|
297
297
|
msgid "Creation date"
|
|
298
298
|
msgstr ""
|
|
299
299
|
|
|
300
|
-
#: udata/core/dataservices/models.py:
|
|
300
|
+
#: udata/core/dataservices/models.py:277 udata/core/dataset/models.py:610
|
|
301
301
|
#: udata/mongo/datetime_fields.py:66
|
|
302
302
|
msgid "Last modification date"
|
|
303
303
|
msgstr ""
|
|
304
304
|
|
|
305
|
-
#: udata/core/dataset/activities.py:
|
|
305
|
+
#: udata/core/dataset/activities.py:24
|
|
306
306
|
msgid "created a dataset"
|
|
307
307
|
msgstr ""
|
|
308
308
|
|
|
309
|
-
#: udata/core/dataset/activities.py:
|
|
309
|
+
#: udata/core/dataset/activities.py:30
|
|
310
310
|
msgid "updated a dataset"
|
|
311
311
|
msgstr ""
|
|
312
312
|
|
|
313
|
-
#: udata/core/dataset/activities.py:
|
|
313
|
+
#: udata/core/dataset/activities.py:37
|
|
314
314
|
msgid "deleted a dataset"
|
|
315
315
|
msgstr ""
|
|
316
316
|
|
|
317
|
-
#: udata/core/dataset/activities.py:
|
|
317
|
+
#: udata/core/dataset/activities.py:43
|
|
318
318
|
msgid "added a resource to a dataset"
|
|
319
319
|
msgstr ""
|
|
320
320
|
|
|
321
|
-
#: udata/core/dataset/activities.py:
|
|
321
|
+
#: udata/core/dataset/activities.py:49
|
|
322
322
|
msgid "updated a resource"
|
|
323
323
|
msgstr ""
|
|
324
324
|
|
|
325
|
-
#: udata/core/dataset/activities.py:
|
|
325
|
+
#: udata/core/dataset/activities.py:55
|
|
326
326
|
msgid "removed a resource from a dataset"
|
|
327
327
|
msgstr ""
|
|
328
328
|
|
|
329
|
-
#: udata/core/dataset/api.py:
|
|
329
|
+
#: udata/core/dataset/api.py:329
|
|
330
330
|
msgid "Latest datasets"
|
|
331
331
|
msgstr ""
|
|
332
332
|
|
|
@@ -480,7 +480,8 @@ msgstr ""
|
|
|
480
480
|
|
|
481
481
|
#: udata/core/dataset/forms.py:66 udata/core/dataset/forms.py:147
|
|
482
482
|
#: udata/core/discussions/forms.py:14 udata/core/discussions/forms.py:25
|
|
483
|
-
#: udata/core/site/forms.py:12 udata/
|
|
483
|
+
#: udata/core/site/forms.py:12 udata/core/topic/forms.py:13
|
|
484
|
+
#: udata/templates/mail/discussion_closed.html:26
|
|
484
485
|
#: udata/templates/mail/new_discussion.html:25
|
|
485
486
|
#: udata/templates/mail/new_discussion_comment.html:26
|
|
486
487
|
msgid "Title"
|
|
@@ -488,7 +489,8 @@ msgstr ""
|
|
|
488
489
|
|
|
489
490
|
#: udata/core/dataset/forms.py:69 udata/core/dataset/forms.py:151
|
|
490
491
|
#: udata/core/jobs/forms.py:28 udata/core/organization/forms.py:50
|
|
491
|
-
#: udata/core/topic/forms.py:
|
|
492
|
+
#: udata/core/topic/forms.py:14 udata/core/topic/forms.py:38
|
|
493
|
+
#: udata/harvest/forms.py:80
|
|
492
494
|
msgid "Description"
|
|
493
495
|
msgstr ""
|
|
494
496
|
|
|
@@ -536,7 +538,7 @@ msgstr ""
|
|
|
536
538
|
msgid "Related dataset"
|
|
537
539
|
msgstr ""
|
|
538
540
|
|
|
539
|
-
#: udata/core/dataset/forms.py:139 udata/tests/api/test_datasets_api.py:
|
|
541
|
+
#: udata/core/dataset/forms.py:139 udata/tests/api/test_datasets_api.py:1038
|
|
540
542
|
msgid "Wrong contact point id or contact point ownership mismatch"
|
|
541
543
|
msgstr ""
|
|
542
544
|
|
|
@@ -585,16 +587,17 @@ msgid "The period covered by the data"
|
|
|
585
587
|
msgstr ""
|
|
586
588
|
|
|
587
589
|
#: udata/core/dataset/forms.py:176 udata/core/spatial/forms.py:85
|
|
588
|
-
#: udata/core/topic/forms.py:
|
|
590
|
+
#: udata/core/topic/forms.py:86
|
|
589
591
|
msgid "Spatial coverage"
|
|
590
592
|
msgstr ""
|
|
591
593
|
|
|
592
|
-
#: udata/core/dataset/forms.py:176 udata/core/topic/forms.py:
|
|
594
|
+
#: udata/core/dataset/forms.py:176 udata/core/topic/forms.py:86
|
|
593
595
|
msgid "The geographical area covered by the data."
|
|
594
596
|
msgstr ""
|
|
595
597
|
|
|
596
598
|
#: udata/core/dataset/forms.py:178 udata/core/post/forms.py:26
|
|
597
|
-
#: udata/core/site/forms.py:13 udata/core/topic/forms.py:
|
|
599
|
+
#: udata/core/site/forms.py:13 udata/core/topic/forms.py:15
|
|
600
|
+
#: udata/core/topic/forms.py:89
|
|
598
601
|
msgid "Tags"
|
|
599
602
|
msgstr ""
|
|
600
603
|
|
|
@@ -602,7 +605,7 @@ msgstr ""
|
|
|
602
605
|
msgid "Some taxonomy keywords"
|
|
603
606
|
msgstr ""
|
|
604
607
|
|
|
605
|
-
#: udata/core/dataset/forms.py:180 udata/core/topic/forms.py:
|
|
608
|
+
#: udata/core/dataset/forms.py:180 udata/core/topic/forms.py:90
|
|
606
609
|
msgid "Private"
|
|
607
610
|
msgstr ""
|
|
608
611
|
|
|
@@ -610,52 +613,72 @@ msgstr ""
|
|
|
610
613
|
msgid "Restrict the dataset visibility to you or your organization only."
|
|
611
614
|
msgstr ""
|
|
612
615
|
|
|
613
|
-
#: udata/core/dataset/models.py:
|
|
616
|
+
#: udata/core/dataset/models.py:68
|
|
614
617
|
msgid "Pivotal data"
|
|
615
618
|
msgstr ""
|
|
616
619
|
|
|
617
|
-
#: udata/core/dataset/models.py:
|
|
620
|
+
#: udata/core/dataset/models.py:69
|
|
621
|
+
msgid "Reference data public service"
|
|
622
|
+
msgstr ""
|
|
623
|
+
|
|
624
|
+
#: udata/core/dataset/models.py:70
|
|
625
|
+
msgid "Inspire"
|
|
626
|
+
msgstr ""
|
|
627
|
+
|
|
628
|
+
#: udata/core/dataset/models.py:71
|
|
629
|
+
msgid "High value datasets"
|
|
630
|
+
msgstr ""
|
|
631
|
+
|
|
632
|
+
#: udata/core/dataset/models.py:72
|
|
633
|
+
msgid "Certified statistic series"
|
|
634
|
+
msgstr ""
|
|
635
|
+
|
|
636
|
+
#: udata/core/dataset/models.py:73
|
|
637
|
+
msgid "Statistical series of general interest"
|
|
638
|
+
msgstr ""
|
|
639
|
+
|
|
640
|
+
#: udata/core/dataset/models.py:153
|
|
618
641
|
msgid "A schema must contains a name or an URL when a version is provided."
|
|
619
642
|
msgstr ""
|
|
620
643
|
|
|
621
|
-
#: udata/core/dataset/models.py:
|
|
622
|
-
#: udata/tests/api/test_datasets_api.py:
|
|
644
|
+
#: udata/core/dataset/models.py:185 udata/tests/api/test_datasets_api.py:1134
|
|
645
|
+
#: udata/tests/api/test_datasets_api.py:1145
|
|
623
646
|
#, python-brace-format
|
|
624
647
|
msgid "Schema name \"{schema}\" is not an allowed value. Allowed values: {values}"
|
|
625
648
|
msgstr ""
|
|
626
649
|
|
|
627
|
-
#: udata/core/dataset/models.py:
|
|
650
|
+
#: udata/core/dataset/models.py:204 udata/tests/api/test_datasets_api.py:1157
|
|
628
651
|
#, python-brace-format
|
|
629
652
|
msgid ""
|
|
630
653
|
"Version \"{version}\" is not an allowed value for the schema \"{name}\". "
|
|
631
654
|
"Allowed versions: {values}"
|
|
632
655
|
msgstr ""
|
|
633
656
|
|
|
634
|
-
#: udata/core/dataset/models.py:
|
|
635
|
-
#: udata/tests/dataset/test_dataset_rdf.py:
|
|
636
|
-
#: udata/tests/dataset/test_dataset_rdf.py:
|
|
657
|
+
#: udata/core/dataset/models.py:482 udata/core/dataset/rdf.py:576
|
|
658
|
+
#: udata/tests/dataset/test_dataset_rdf.py:723
|
|
659
|
+
#: udata/tests/dataset/test_dataset_rdf.py:736
|
|
637
660
|
msgid "Nameless resource"
|
|
638
661
|
msgstr ""
|
|
639
662
|
|
|
640
|
-
#: udata/core/dataset/models.py:
|
|
663
|
+
#: udata/core/dataset/models.py:584
|
|
641
664
|
msgid "Future date of update"
|
|
642
665
|
msgstr ""
|
|
643
666
|
|
|
644
|
-
#: udata/core/dataset/models.py:
|
|
667
|
+
#: udata/core/dataset/models.py:616
|
|
645
668
|
msgid "Last update of the dataset resources"
|
|
646
669
|
msgstr ""
|
|
647
670
|
|
|
648
|
-
#: udata/core/dataset/models.py:
|
|
671
|
+
#: udata/core/dataset/models.py:671
|
|
649
672
|
msgid "dataset"
|
|
650
673
|
msgstr ""
|
|
651
674
|
|
|
652
|
-
#: udata/core/dataset/rdf.py:
|
|
653
|
-
#: udata/tests/dataset/test_dataset_rdf.py:
|
|
675
|
+
#: udata/core/dataset/rdf.py:574 udata/tests/dataset/test_dataset_rdf.py:693
|
|
676
|
+
#: udata/tests/dataset/test_dataset_rdf.py:710
|
|
654
677
|
#, python-brace-format
|
|
655
678
|
msgid "{format} resource"
|
|
656
679
|
msgstr ""
|
|
657
680
|
|
|
658
|
-
#: udata/core/dataset/tasks.py:
|
|
681
|
+
#: udata/core/dataset/tasks.py:109
|
|
659
682
|
msgid "You need to update some frequency-based datasets"
|
|
660
683
|
msgstr ""
|
|
661
684
|
|
|
@@ -853,11 +876,11 @@ msgstr ""
|
|
|
853
876
|
msgid "Content"
|
|
854
877
|
msgstr ""
|
|
855
878
|
|
|
856
|
-
#: udata/core/post/forms.py:19
|
|
879
|
+
#: udata/core/post/forms.py:19
|
|
857
880
|
msgid "Associated datasets"
|
|
858
881
|
msgstr ""
|
|
859
882
|
|
|
860
|
-
#: udata/core/post/forms.py:20
|
|
883
|
+
#: udata/core/post/forms.py:20
|
|
861
884
|
msgid "Associated reuses"
|
|
862
885
|
msgstr ""
|
|
863
886
|
|
|
@@ -1017,7 +1040,7 @@ msgstr ""
|
|
|
1017
1040
|
msgid "reuse"
|
|
1018
1041
|
msgstr ""
|
|
1019
1042
|
|
|
1020
|
-
#: udata/core/reuse/tasks.py:
|
|
1043
|
+
#: udata/core/reuse/tasks.py:48
|
|
1021
1044
|
msgid "New reuse"
|
|
1022
1045
|
msgstr ""
|
|
1023
1046
|
|
|
@@ -1122,15 +1145,35 @@ msgstr ""
|
|
|
1122
1145
|
msgid "French arrondissement"
|
|
1123
1146
|
msgstr ""
|
|
1124
1147
|
|
|
1125
|
-
#: udata/core/topic/activities.py:
|
|
1148
|
+
#: udata/core/topic/activities.py:25
|
|
1126
1149
|
msgid "created a topic"
|
|
1127
1150
|
msgstr ""
|
|
1128
1151
|
|
|
1129
|
-
#: udata/core/topic/activities.py:
|
|
1152
|
+
#: udata/core/topic/activities.py:31
|
|
1130
1153
|
msgid "updated a topic"
|
|
1131
1154
|
msgstr ""
|
|
1132
1155
|
|
|
1133
|
-
#: udata/core/topic/
|
|
1156
|
+
#: udata/core/topic/activities.py:38
|
|
1157
|
+
msgid "added an element to a topic"
|
|
1158
|
+
msgstr ""
|
|
1159
|
+
|
|
1160
|
+
#: udata/core/topic/activities.py:44
|
|
1161
|
+
msgid "updated an element in a topic"
|
|
1162
|
+
msgstr ""
|
|
1163
|
+
|
|
1164
|
+
#: udata/core/topic/activities.py:51
|
|
1165
|
+
msgid "removed an element from a topic"
|
|
1166
|
+
msgstr ""
|
|
1167
|
+
|
|
1168
|
+
#: udata/core/topic/forms.py:17
|
|
1169
|
+
msgid "Element"
|
|
1170
|
+
msgstr ""
|
|
1171
|
+
|
|
1172
|
+
#: udata/core/topic/forms.py:26
|
|
1173
|
+
msgid "A topic element must have a title or an element."
|
|
1174
|
+
msgstr ""
|
|
1175
|
+
|
|
1176
|
+
#: udata/core/topic/forms.py:91
|
|
1134
1177
|
msgid "Featured"
|
|
1135
1178
|
msgstr ""
|
|
1136
1179
|
|
|
@@ -1230,46 +1273,46 @@ msgstr ""
|
|
|
1230
1273
|
msgid "Tag \"%(tag)s\" must be between %(min)d and %(max)d characters long."
|
|
1231
1274
|
msgstr ""
|
|
1232
1275
|
|
|
1233
|
-
#: udata/forms/fields.py:461 udata/forms/fields.py:
|
|
1276
|
+
#: udata/forms/fields.py:461 udata/forms/fields.py:520
|
|
1234
1277
|
#, python-brace-format
|
|
1235
1278
|
msgid "{0} does not exists"
|
|
1236
1279
|
msgstr ""
|
|
1237
1280
|
|
|
1238
|
-
#: udata/forms/fields.py:
|
|
1281
|
+
#: udata/forms/fields.py:494 udata/tests/forms/test_model_field.py:333
|
|
1239
1282
|
#: udata/tests/forms/test_model_field.py:349
|
|
1240
1283
|
msgid "Missing \"id\" field"
|
|
1241
1284
|
msgstr ""
|
|
1242
1285
|
|
|
1243
|
-
#: udata/forms/fields.py:
|
|
1286
|
+
#: udata/forms/fields.py:501
|
|
1244
1287
|
#, python-brace-format
|
|
1245
1288
|
msgid "Expect a \"{0}\" class but \"{1}\" was found"
|
|
1246
1289
|
msgstr ""
|
|
1247
1290
|
|
|
1248
|
-
#: udata/forms/fields.py:
|
|
1291
|
+
#: udata/forms/fields.py:507 udata/tests/forms/test_model_field.py:41
|
|
1249
1292
|
#: udata/tests/forms/test_model_field.py:56
|
|
1250
1293
|
msgid "Expect both class and identifier"
|
|
1251
1294
|
msgstr ""
|
|
1252
1295
|
|
|
1253
|
-
#: udata/forms/fields.py:
|
|
1296
|
+
#: udata/forms/fields.py:552
|
|
1254
1297
|
#, python-brace-format
|
|
1255
1298
|
msgid "Model for {0} not found"
|
|
1256
1299
|
msgstr ""
|
|
1257
1300
|
|
|
1258
|
-
#: udata/forms/fields.py:
|
|
1301
|
+
#: udata/forms/fields.py:586
|
|
1259
1302
|
#, python-brace-format
|
|
1260
1303
|
msgid "Unknown identifiers: {identifiers}"
|
|
1261
1304
|
msgstr ""
|
|
1262
1305
|
|
|
1263
|
-
#: udata/forms/fields.py:
|
|
1306
|
+
#: udata/forms/fields.py:720
|
|
1264
1307
|
msgid "Unable to parse date range"
|
|
1265
1308
|
msgstr ""
|
|
1266
1309
|
|
|
1267
|
-
#: udata/forms/fields.py:
|
|
1310
|
+
#: udata/forms/fields.py:752 udata/forms/fields.py:784
|
|
1268
1311
|
#: udata/tests/forms/test_publish_as_field.py:214
|
|
1269
1312
|
msgid "Cannot change owner after creation. Please use transfer feature."
|
|
1270
1313
|
msgstr ""
|
|
1271
1314
|
|
|
1272
|
-
#: udata/forms/fields.py:
|
|
1315
|
+
#: udata/forms/fields.py:757 udata/forms/fields.py:789
|
|
1273
1316
|
msgid "You must be authenticated"
|
|
1274
1317
|
msgstr ""
|
|
1275
1318
|
|
|
@@ -1330,11 +1373,11 @@ msgstr ""
|
|
|
1330
1373
|
msgid "Archived"
|
|
1331
1374
|
msgstr ""
|
|
1332
1375
|
|
|
1333
|
-
#: udata/harvest/backends/dcat.py:
|
|
1376
|
+
#: udata/harvest/backends/dcat.py:431
|
|
1334
1377
|
msgid "Remote URL prefix"
|
|
1335
1378
|
msgstr ""
|
|
1336
1379
|
|
|
1337
|
-
#: udata/harvest/backends/dcat.py:
|
|
1380
|
+
#: udata/harvest/backends/dcat.py:434
|
|
1338
1381
|
msgid "A prefix used to build the remote URL of the harvested items."
|
|
1339
1382
|
msgstr ""
|
|
1340
1383
|
|
|
@@ -1354,6 +1397,18 @@ msgstr ""
|
|
|
1354
1397
|
msgid "A CKAN tag name"
|
|
1355
1398
|
msgstr ""
|
|
1356
1399
|
|
|
1400
|
+
#: udata/templates/404.html:6
|
|
1401
|
+
msgid "Page not found"
|
|
1402
|
+
msgstr ""
|
|
1403
|
+
|
|
1404
|
+
#: udata/templates/404.html:39
|
|
1405
|
+
msgid "The page you are looking for does not exist."
|
|
1406
|
+
msgstr ""
|
|
1407
|
+
|
|
1408
|
+
#: udata/templates/404.html:40
|
|
1409
|
+
msgid "Back to home"
|
|
1410
|
+
msgstr ""
|
|
1411
|
+
|
|
1357
1412
|
#: udata/templates/admin.html:7
|
|
1358
1413
|
msgid "Admin"
|
|
1359
1414
|
msgstr ""
|
|
@@ -1777,18 +1832,19 @@ msgstr ""
|
|
|
1777
1832
|
msgid "Expect a \"Target\" class but \"Wrong\" was found"
|
|
1778
1833
|
msgstr ""
|
|
1779
1834
|
|
|
1780
|
-
#: udata/tests/search/test_adapter.py:
|
|
1835
|
+
#: udata/tests/search/test_adapter.py:31
|
|
1781
1836
|
msgid "Never reused"
|
|
1782
1837
|
msgstr ""
|
|
1783
1838
|
|
|
1784
|
-
#: udata/tests/search/test_adapter.py:
|
|
1839
|
+
#: udata/tests/search/test_adapter.py:32
|
|
1785
1840
|
msgid "Little reused"
|
|
1786
1841
|
msgstr ""
|
|
1787
1842
|
|
|
1788
|
-
#: udata/tests/search/test_adapter.py:
|
|
1843
|
+
#: udata/tests/search/test_adapter.py:33
|
|
1789
1844
|
msgid "Quite reused"
|
|
1790
1845
|
msgstr ""
|
|
1791
1846
|
|
|
1792
|
-
#: udata/tests/search/test_adapter.py:
|
|
1847
|
+
#: udata/tests/search/test_adapter.py:34
|
|
1793
1848
|
msgid "Heavily reused"
|
|
1794
1849
|
msgstr ""
|
|
1850
|
+
|
udata/uris.py
CHANGED
|
@@ -69,7 +69,13 @@ def config_for(value, key):
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
def homepage_url(**kwargs) -> str:
|
|
72
|
-
|
|
72
|
+
# Some tests were crashing not finding the route for api.site
|
|
73
|
+
# while rendering a 404… Not sure why but try/except seems to fix
|
|
74
|
+
# this :-(
|
|
75
|
+
try:
|
|
76
|
+
return cdata_url("/", **kwargs) or url_for("api.site", **kwargs)
|
|
77
|
+
except Exception:
|
|
78
|
+
return "/"
|
|
73
79
|
|
|
74
80
|
|
|
75
81
|
def cdata_url(uri: str, **kwargs) -> Optional[str]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
udata/__init__.py,sha256=U0HEYqKCLOY43O1UCVeuAb3b3SSX1pPhsJGpHJmK67k,75
|
|
2
2
|
udata/api_fields.py,sha256=XI0XoM1fxO4DEzxGptOAB5SL_fJr-u58-bfQVAvzgBg,36549
|
|
3
|
-
udata/app.py,sha256=
|
|
3
|
+
udata/app.py,sha256=YSIzBCfgtqu0Ttde10rtMvavjE9qqSJhL_jy5jAdDFs,8924
|
|
4
4
|
udata/assets.py,sha256=H5Hrc2vnKM0IFLyWfLXmJ2Kj35w1i8W1D8Cgy8_cUj4,657
|
|
5
5
|
udata/cors.py,sha256=gPTIXnO5nWziCKAHqU9GNuBKaIzr7RRtbjZBd2RdE2k,3155
|
|
6
6
|
udata/entrypoints.py,sha256=mbAAUVT8ZenzSYdang2PbAwZcK1pENtA3axBmPRiWCw,2717
|
|
@@ -17,7 +17,7 @@ udata/tags.py,sha256=ydq4uokd6bzdeGVSpEXASVtGvDfO2LfQs9mptvvKJCM,631
|
|
|
17
17
|
udata/tasks.py,sha256=Sv01dhvATtq_oHOBp3J1j1VT1HQe0Pab7zxwIeIdKoo,5122
|
|
18
18
|
udata/terms.md,sha256=nFx978tUQ3vTEv6POykXaZvcQ5e_gcvmO4ZgcfbSWXo,187
|
|
19
19
|
udata/tracking.py,sha256=WOcqA1RlHN8EPFuEc2kNau54mec4-pvi-wUFrMXevzg,345
|
|
20
|
-
udata/uris.py,sha256=
|
|
20
|
+
udata/uris.py,sha256=eIu41ZvHg124fL2aBZ49ye4gMmBSChrLBDZMdz-MbLg,4471
|
|
21
21
|
udata/utils.py,sha256=mtosjF91SPuSM-63EyxjLLnxs5DT0iSBdz-ECNeTYGU,11128
|
|
22
22
|
udata/worker.py,sha256=K-Wafye5-uXP4kQlffRKws2J9YbJ6m6n2QjcVsY8Nsg,118
|
|
23
23
|
udata/wsgi.py,sha256=MY8en9K9eDluvJYUxTdzqSDoYaDgCVZ69ZcUvxAvgqA,77
|
|
@@ -94,7 +94,7 @@ udata/core/dataservices/tasks.py,sha256=fHG1r5ymfJRXJ_Lug6je3VKZoK30XKXE2rQ8x0R-
|
|
|
94
94
|
udata/core/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
95
95
|
udata/core/dataset/actions.py,sha256=mX6xox0PiMrbcAPZ3VZsI26rfM-ciYfEXxN6sqqImKA,1222
|
|
96
96
|
udata/core/dataset/activities.py,sha256=eGxMUnC47YHxTgcls6igQ3qP7cYgwFtPfj0asCylGsI,3315
|
|
97
|
-
udata/core/dataset/api.py,sha256=
|
|
97
|
+
udata/core/dataset/api.py,sha256=jnMaDcFTmm0Wod0ff7qlichwAf87tmUXK02I5H7ai_E,35880
|
|
98
98
|
udata/core/dataset/api_fields.py,sha256=FaLANuLCtD5Q8-QXs-r7kG5iDTDL7UA4ZFML-e9rCk4,18055
|
|
99
99
|
udata/core/dataset/apiv2.py,sha256=ZRKYnF9QCv2cHEHea6JYbbwwCzvzA8csrFOMHNN4PAk,21019
|
|
100
100
|
udata/core/dataset/commands.py,sha256=__hPAk_6iHtgMnEG51ux0vbNWJHxUjXhi1ukH4hF5jY,3714
|
|
@@ -236,7 +236,7 @@ udata/core/tags/csv.py,sha256=lfFGt596-f_rdBedhVqZLZHdW69pDfcU2_YTFcXjmWM,290
|
|
|
236
236
|
udata/core/tags/models.py,sha256=xzBoNwqBG5A5Ou83DWT858ccbTCkNnim_xBWgy1oyz4,550
|
|
237
237
|
udata/core/tags/tasks.py,sha256=QBIhdubFxTzYgKxR2BdpD7yAEvaemOpt_G19OuzQvZE,952
|
|
238
238
|
udata/core/topic/__init__.py,sha256=ukZuuCjuQNEPxiw1jkphohAVJtdDqWGDi-cAb2QdpRo,23
|
|
239
|
-
udata/core/topic/activities.py,sha256=
|
|
239
|
+
udata/core/topic/activities.py,sha256=jMGm8ke0y0bbis3sQWhfqVLgxmTL9A2EpHDie8VQ_oU,2950
|
|
240
240
|
udata/core/topic/api_fields.py,sha256=zMjoTSoe7-Q8F-i7Ry5EAUv-ds4Lzao3jfETZq-Vg00,3343
|
|
241
241
|
udata/core/topic/apiv2.py,sha256=WVyZDNew8m0qVFn9RLKW0SeLQHuUwWIcGAfomzua7sw,6449
|
|
242
242
|
udata/core/topic/factories.py,sha256=Rhx12aTrYFZScu53IhYNP0zJKfiVZPba34ybZ7gGSwo,3010
|
|
@@ -551,6 +551,7 @@ udata/static/chunks/9.033d7e190ca9e226a5d0.js,sha256=NmyhScUINZKQbc3A-zIZr9vEGy5
|
|
|
551
551
|
udata/static/chunks/9.033d7e190ca9e226a5d0.js.map,sha256=n08Lnx4NZFACwgehhaZfstLOnqDam_IUQhNLlUjMEVo,2746303
|
|
552
552
|
udata/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
553
553
|
udata/storage/s3.py,sha256=enxbTm1IZksiKLkbafASrO2bqO44OTCn4F7_FeMjhgg,1557
|
|
554
|
+
udata/templates/404.html,sha256=1N3gFGvwhUgBzwx4_e946T0aAsBwtg3cvbClViuFuVI,1140
|
|
554
555
|
udata/templates/admin.html,sha256=RfX03rUOW7NIlgMYNhFfx0pL-p2j8BtAKvEFUadaIIs,787
|
|
555
556
|
udata/templates/base.html,sha256=koUdFLRXLhjBZEfjkotrgmoz_L5tJm1KXBwPPaYlmMs,570
|
|
556
557
|
udata/templates/raw.html,sha256=DJZUq9CP_8ky20fialo5w_-zjfEwczLbkcrfQdlqb9E,560
|
|
@@ -657,7 +658,7 @@ udata/tests/api/test_auth_api.py,sha256=OMRlY0OQt60j5N4A-N3HdWTuffOjRlFHkz5a3jJF
|
|
|
657
658
|
udata/tests/api/test_base_api.py,sha256=2w_vz0eEuq3P3aN-ByvxGc3VZAo7XtgatFfcrzf2uEU,2244
|
|
658
659
|
udata/tests/api/test_contact_points.py,sha256=Sbb486RTN7HVycna_XB60OnURPSNc7xUity26XsYA4k,8766
|
|
659
660
|
udata/tests/api/test_dataservices_api.py,sha256=vQZc8gey1zTckaWuqodXHJ95jp0O5ksVLllE1n3iqoE,31496
|
|
660
|
-
udata/tests/api/test_datasets_api.py,sha256=
|
|
661
|
+
udata/tests/api/test_datasets_api.py,sha256=K4X2jXmmCF2BLz9oQmJE1PtQkpghFfzx2cb67MA5cn0,102546
|
|
661
662
|
udata/tests/api/test_fields.py,sha256=OW85Z5MES5HeWOpapeem8OvR1cIcrqW-xMWpdZO4LZ8,1033
|
|
662
663
|
udata/tests/api/test_follow_api.py,sha256=4nFXG5pZ_Hf2PJ4KEdHJX_uggjc9RpB8v0fidkAcw9I,5792
|
|
663
664
|
udata/tests/api/test_me_api.py,sha256=YPd8zmR3zwJKtpSqz8nY1nOOMyXs66INeBwyhg5D0Us,13846
|
|
@@ -673,7 +674,7 @@ udata/tests/apiv2/test_datasets.py,sha256=-DhQUE895P0YS3zNgsSSmA-fcfeKJIxxHmQFS4
|
|
|
673
674
|
udata/tests/apiv2/test_me_api.py,sha256=WgUjujSnIlISUkM5t-lfg-D0mmz-eX1hSsSwjuxqbJg,1417
|
|
674
675
|
udata/tests/apiv2/test_organizations.py,sha256=os_43s-coSRqjgY-5fAjSiRlB3g2685u7d-Es0aOhks,6390
|
|
675
676
|
udata/tests/apiv2/test_swagger.py,sha256=RKedaq-2UeyEuxlmUaAN7pmEe-lQYYmpDUVc8HF3CH4,785
|
|
676
|
-
udata/tests/apiv2/test_topics.py,sha256=
|
|
677
|
+
udata/tests/apiv2/test_topics.py,sha256=xp_PMDecuTDDDOHVjX--GrnTNr76VFcZg_3sYdZlXuI,37987
|
|
677
678
|
udata/tests/cli/test_cli_base.py,sha256=0a3U_5ROp1lCTG8d6TpCjF4nbKVNerAeLO0VxU-NTUk,321
|
|
678
679
|
udata/tests/cli/test_db_cli.py,sha256=xFVHQAk2bmQQzFr31TK2JThOP6p0wvxzexMhM_IcdME,2219
|
|
679
680
|
udata/tests/contact_point/test_contact_point_models.py,sha256=b8vraZPPrs9LeQMWLnOCrpI02sXMEM_BcMJXKTeAuAw,923
|
|
@@ -714,6 +715,7 @@ udata/tests/forms/test_uuid_field.py,sha256=256hFDZSWBeoRQuKIAF5RBt4hAKssSHFVAqM
|
|
|
714
715
|
udata/tests/frontend/__init__.py,sha256=mFRcaFV6kFGorzrBzfm5Idx9l94XWY41r6j8r4AkmWA,787
|
|
715
716
|
udata/tests/frontend/test_auth.py,sha256=zFnzTKtE0LJ4I4al7TTvlroDe2P7rgWisRE-LNAA9O0,785
|
|
716
717
|
udata/tests/frontend/test_csv.py,sha256=GK893EnLXtRJr8h8L-50ZxkpvOfLXcrUyHHj3mMMnQk,11769
|
|
718
|
+
udata/tests/frontend/test_error_handlers.py,sha256=OkbMEPv9uyR9MYVHs86Qqom6uY-7L7yAOeamdwsV3XE,3003
|
|
717
719
|
udata/tests/frontend/test_hooks.py,sha256=rPDzxWDz6Ryv3RkRLm37F4Zp9xdcbgq0OyzCCInaG2I,4077
|
|
718
720
|
udata/tests/frontend/test_markdown.py,sha256=RKbSdQxQBgzxmG6KUXc1KcEo5aybp4uQQn1oDr-zKWU,13823
|
|
719
721
|
udata/tests/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -749,7 +751,7 @@ udata/tests/workers/test_jobs_commands.py,sha256=tGJp9zRxKaGszNhKAVe-xY86v6NhLmF
|
|
|
749
751
|
udata/tests/workers/test_tasks_routing.py,sha256=m7Zu9X7GW3oKkSDcHM-dC20Vba3Fruui44bMBVU1dcc,2228
|
|
750
752
|
udata/tests/workers/test_workers_api.py,sha256=x8EkULR9G5TKl5WwjdVwfFEttbudpiWIYN2umETrCzY,8805
|
|
751
753
|
udata/tests/workers/test_workers_helpers.py,sha256=_983ChRxas3gsjykaEpXWQUbk2qTMJgeFZpIAHTuhLk,647
|
|
752
|
-
udata/translations/udata.pot,sha256=
|
|
754
|
+
udata/translations/udata.pot,sha256=mdcYOb4Rfhc9QmrTdag-or1Jhku-RSu69LgY9KLCyY8,41843
|
|
753
755
|
udata/translations/ar/LC_MESSAGES/udata.mo,sha256=FVeIEIB96zq7LinTAM6pic31XgYQxYystYohOEz3Wk0,12512
|
|
754
756
|
udata/translations/ar/LC_MESSAGES/udata.po,sha256=KP-dbL_etPy22mRF3NPBZ86NJxERiL0a6IbHvy3a2cE,46091
|
|
755
757
|
udata/translations/de/LC_MESSAGES/udata.mo,sha256=JR1CmYE46yXQcp3EoETqSZe4ut59-u_KgkBr24PBhAw,15180
|
|
@@ -764,9 +766,9 @@ udata/translations/pt/LC_MESSAGES/udata.mo,sha256=U0abG-nBwCIoYxRZNsc4KOLeIRSqTV
|
|
|
764
766
|
udata/translations/pt/LC_MESSAGES/udata.po,sha256=eCG35rMzYLHXyLbsnLSexS1g0N_K-WpNHqrt_8y6I4E,48590
|
|
765
767
|
udata/translations/sr/LC_MESSAGES/udata.mo,sha256=IBcCAdmcvkeK7ZeRBNRI-wJ0jzWNM0eXM5VXAc1frWI,28692
|
|
766
768
|
udata/translations/sr/LC_MESSAGES/udata.po,sha256=yFxHEEB4behNwQ7JnyoYheiCKLNnMS_NV4guzgyzWcE,55332
|
|
767
|
-
udata-11.1.2.
|
|
768
|
-
udata-11.1.2.
|
|
769
|
-
udata-11.1.2.
|
|
770
|
-
udata-11.1.2.
|
|
771
|
-
udata-11.1.2.
|
|
772
|
-
udata-11.1.2.
|
|
769
|
+
udata-11.1.2.dev6.dist-info/licenses/LICENSE,sha256=V8j_M8nAz8PvAOZQocyRDX7keai8UJ9skgmnwqETmdY,34520
|
|
770
|
+
udata-11.1.2.dev6.dist-info/METADATA,sha256=Qdq5oqIISLFUZBclFMsKdj01YyJrSy6vZ_38OfOhjJQ,6723
|
|
771
|
+
udata-11.1.2.dev6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
772
|
+
udata-11.1.2.dev6.dist-info/entry_points.txt,sha256=v2u12qO11i2lyLNIp136WmLJ-NHT-Kew3Duu8J-AXPM,614
|
|
773
|
+
udata-11.1.2.dev6.dist-info/top_level.txt,sha256=EF6CE6YSHd_og-8LCEA4q25ALUpWVe8D0okOLdMAE3A,6
|
|
774
|
+
udata-11.1.2.dev6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|