invenio-vocabularies 4.3.0__py2.py3-none-any.whl → 4.5.0__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 invenio-vocabularies might be problematic. Click here for more details.
- invenio_vocabularies/__init__.py +1 -1
- invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +0 -6
- invenio_vocabularies/config.py +7 -1
- invenio_vocabularies/contrib/affiliations/affiliations.py +10 -0
- invenio_vocabularies/contrib/common/ror/datastreams.py +34 -32
- invenio_vocabularies/contrib/names/names.py +10 -0
- invenio_vocabularies/contrib/subjects/config.py +10 -4
- invenio_vocabularies/contrib/subjects/datastreams.py +55 -0
- invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +12 -0
- invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +18 -0
- invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +18 -0
- invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +18 -0
- invenio_vocabularies/contrib/subjects/mesh/datastreams.py +43 -0
- invenio_vocabularies/contrib/subjects/schema.py +21 -3
- invenio_vocabularies/contrib/subjects/subjects.py +10 -0
- invenio_vocabularies/factories.py +13 -0
- invenio_vocabularies/services/config.py +1 -1
- invenio_vocabularies/services/service.py +1 -1
- invenio_vocabularies/translations/messages.pot +95 -48
- invenio_vocabularies/webpack.py +1 -1
- {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/METADATA +11 -1
- {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/RECORD +27 -25
- {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/AUTHORS.rst +0 -0
- {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/LICENSE +0 -0
- {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/WHEEL +0 -0
- {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/entry_points.txt +0 -0
- {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/top_level.txt +0 -0
invenio_vocabularies/__init__.py
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
"coveralls": "^3.0.0",
|
|
14
14
|
"enzyme": "^3.10.0",
|
|
15
15
|
"enzyme-adapter-react-16": "^1.15.0",
|
|
16
|
-
"enzyme-to-json": "^3.4.0",
|
|
17
16
|
"expect": "^26.0.0",
|
|
18
17
|
"lodash": "^4.17.0",
|
|
19
18
|
"luxon": "^1.23.0",
|
|
@@ -22,10 +21,5 @@
|
|
|
22
21
|
"react-scripts": "^5.0.1",
|
|
23
22
|
"semantic-ui-react": "^2.1.0",
|
|
24
23
|
"react-overridable": "^0.0.3"
|
|
25
|
-
},
|
|
26
|
-
"jest": {
|
|
27
|
-
"snapshotSerializers": [
|
|
28
|
-
"enzyme-to-json/serializer"
|
|
29
|
-
]
|
|
30
24
|
}
|
|
31
25
|
}
|
invenio_vocabularies/config.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# Copyright (C) 2020-2024 CERN.
|
|
4
4
|
# Copyright (C) 2021 Northwestern University.
|
|
5
|
+
# Copyright (C) 2024 University of Münster.
|
|
5
6
|
#
|
|
6
7
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
7
8
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -104,7 +105,11 @@ VOCABULARIES_NAMES_SCHEMES = {
|
|
|
104
105
|
}
|
|
105
106
|
"""Names allowed identifier schemes."""
|
|
106
107
|
|
|
107
|
-
|
|
108
|
+
VOCABULARIES_SUBJECTS_SCHEMES = {
|
|
109
|
+
"gnd": {"label": _("GND"), "validator": idutils.is_gnd, "datacite": "GND"},
|
|
110
|
+
}
|
|
111
|
+
"""Subjects allowed identifier schemes."""
|
|
112
|
+
|
|
108
113
|
VOCABULARIES_CUSTOM_VOCABULARY_TYPES = [
|
|
109
114
|
"names",
|
|
110
115
|
"affiliations",
|
|
@@ -112,6 +117,7 @@ VOCABULARIES_CUSTOM_VOCABULARY_TYPES = [
|
|
|
112
117
|
"funders",
|
|
113
118
|
"subjects",
|
|
114
119
|
]
|
|
120
|
+
"""List of custom vocabulary types."""
|
|
115
121
|
|
|
116
122
|
VOCABULARIES_DATASTREAM_READERS = {
|
|
117
123
|
"csv": CSVReader,
|
|
@@ -8,11 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
"""Vocabulary affiliations."""
|
|
10
10
|
|
|
11
|
+
from flask_resources import JSONSerializer, ResponseHandler
|
|
11
12
|
from invenio_db import db
|
|
12
13
|
from invenio_records.dumpers import SearchDumper
|
|
13
14
|
from invenio_records.dumpers.indexedat import IndexedAtDumperExt
|
|
14
15
|
from invenio_records_resources.factories.factory import RecordTypeFactory
|
|
15
16
|
from invenio_records_resources.records.systemfields import ModelPIDField
|
|
17
|
+
from invenio_records_resources.resources.records.headers import etag_headers
|
|
16
18
|
|
|
17
19
|
from ...services.permissions import PermissionPolicy
|
|
18
20
|
from .config import AffiliationsSearchOptions, service_components
|
|
@@ -46,4 +48,12 @@ record_type = RecordTypeFactory(
|
|
|
46
48
|
permission_policy_cls=PermissionPolicy,
|
|
47
49
|
# Resource layer
|
|
48
50
|
endpoint_route="/affiliations",
|
|
51
|
+
resource_cls_attrs={
|
|
52
|
+
"response_handlers": {
|
|
53
|
+
"application/json": ResponseHandler(JSONSerializer(), headers=etag_headers),
|
|
54
|
+
"application/vnd.inveniordm.v1+json": ResponseHandler(
|
|
55
|
+
JSONSerializer(), headers=etag_headers
|
|
56
|
+
),
|
|
57
|
+
}
|
|
58
|
+
},
|
|
49
59
|
)
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"""ROR-related Datastreams Readers/Writers/Transformers module."""
|
|
11
11
|
|
|
12
12
|
import io
|
|
13
|
-
from datetime import datetime
|
|
14
13
|
|
|
14
|
+
import arrow
|
|
15
15
|
import requests
|
|
16
16
|
from idutils import normalize_ror
|
|
17
17
|
|
|
@@ -33,6 +33,26 @@ class RORHTTPReader(BaseReader):
|
|
|
33
33
|
"RORHTTPReader downloads one file and therefore does not iterate through items"
|
|
34
34
|
)
|
|
35
35
|
|
|
36
|
+
def _get_last_dump_date(self, linksets):
|
|
37
|
+
"""Get the last dump date."""
|
|
38
|
+
for linkset in linksets:
|
|
39
|
+
metadata_formats = linkset.get("describedby", [])
|
|
40
|
+
for format_link in metadata_formats:
|
|
41
|
+
if format_link.get("type") == "application/ld+json":
|
|
42
|
+
json_ld_reponse = requests.get(
|
|
43
|
+
format_link["href"],
|
|
44
|
+
headers={"Accept": format_link["type"]},
|
|
45
|
+
)
|
|
46
|
+
json_ld_reponse.raise_for_status()
|
|
47
|
+
json_ld_data = json_ld_reponse.json()
|
|
48
|
+
|
|
49
|
+
last_dump_date = arrow.get(json_ld_data["dateCreated"])
|
|
50
|
+
return last_dump_date
|
|
51
|
+
else:
|
|
52
|
+
raise ReaderError(
|
|
53
|
+
"Couldn't find JSON-LD in publisher's linkset to determine last dump date."
|
|
54
|
+
)
|
|
55
|
+
|
|
36
56
|
def read(self, item=None, *args, **kwargs):
|
|
37
57
|
"""Reads the latest ROR data dump ZIP file from Zenodo and yields an in-memory binary stream of it."""
|
|
38
58
|
if item:
|
|
@@ -54,39 +74,21 @@ class RORHTTPReader(BaseReader):
|
|
|
54
74
|
headers={"Accept": "application/linkset+json"},
|
|
55
75
|
)
|
|
56
76
|
linkset_response.raise_for_status()
|
|
77
|
+
linksets = linkset_response.json()["linkset"]
|
|
57
78
|
|
|
58
79
|
if self._since:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return
|
|
72
|
-
break
|
|
73
|
-
else:
|
|
74
|
-
raise ReaderError("Couldn't find json-ld in publisher's linkset.")
|
|
75
|
-
|
|
76
|
-
# Extract the Landing page Link Set Object located as the first (index 0) item.
|
|
77
|
-
landing_page_linkset = linkset_response.json()["linkset"][0]
|
|
78
|
-
|
|
79
|
-
# Extract the URL of the only ZIP file linked to the record.
|
|
80
|
-
landing_page_zip_items = [
|
|
81
|
-
item
|
|
82
|
-
for item in landing_page_linkset["item"]
|
|
83
|
-
if item["type"] == "application/zip"
|
|
84
|
-
]
|
|
85
|
-
if len(landing_page_zip_items) != 1:
|
|
86
|
-
raise ReaderError(
|
|
87
|
-
f"Expected 1 ZIP item but got {len(landing_page_zip_items)}"
|
|
88
|
-
)
|
|
89
|
-
file_url = landing_page_zip_items[0]["href"]
|
|
80
|
+
last_dump_date = self._get_last_dump_date(linksets)
|
|
81
|
+
if last_dump_date < arrow.get(self._since):
|
|
82
|
+
return
|
|
83
|
+
|
|
84
|
+
for linkset in linksets:
|
|
85
|
+
items = linkset.get("item", [])
|
|
86
|
+
zip_files = [item for item in items if item["type"] == "application/zip"]
|
|
87
|
+
if len(zip_files) == 1:
|
|
88
|
+
file_url = zip_files[0]["href"]
|
|
89
|
+
break
|
|
90
|
+
if len(zip_files) > 1:
|
|
91
|
+
raise ReaderError(f"Expected 1 ZIP item but got {len(zip_files)}")
|
|
90
92
|
|
|
91
93
|
# Download the ZIP file and fully load the response bytes content in memory.
|
|
92
94
|
# The bytes content are then wrapped by a BytesIO to be file-like object (as required by `zipfile.ZipFile`).
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
"""Vocabulary names."""
|
|
10
10
|
|
|
11
|
+
from flask_resources import JSONSerializer, ResponseHandler
|
|
11
12
|
from invenio_db import db
|
|
12
13
|
from invenio_records.dumpers import SearchDumper
|
|
13
14
|
from invenio_records.dumpers.indexedat import IndexedAtDumperExt
|
|
@@ -18,6 +19,7 @@ from invenio_records_resources.records.systemfields import (
|
|
|
18
19
|
ModelPIDField,
|
|
19
20
|
PIDListRelation,
|
|
20
21
|
)
|
|
22
|
+
from invenio_records_resources.resources.records.headers import etag_headers
|
|
21
23
|
|
|
22
24
|
from ...services.permissions import PermissionPolicy
|
|
23
25
|
from ..affiliations.api import Affiliation
|
|
@@ -63,4 +65,12 @@ record_type = RecordTypeFactory(
|
|
|
63
65
|
permission_policy_cls=PermissionPolicy,
|
|
64
66
|
# Resource layer
|
|
65
67
|
endpoint_route="/names",
|
|
68
|
+
resource_cls_attrs={
|
|
69
|
+
"response_handlers": {
|
|
70
|
+
"application/json": ResponseHandler(JSONSerializer(), headers=etag_headers),
|
|
71
|
+
"application/vnd.inveniordm.v1+json": ResponseHandler(
|
|
72
|
+
JSONSerializer(), headers=etag_headers
|
|
73
|
+
),
|
|
74
|
+
}
|
|
75
|
+
},
|
|
66
76
|
)
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2021 CERN.
|
|
3
|
+
# Copyright (C) 2021-2024 CERN.
|
|
4
4
|
# Copyright (C) 2021 Northwestern University.
|
|
5
|
+
# Copyright (C) 2024 University of Münster.
|
|
5
6
|
#
|
|
6
7
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
7
8
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -9,13 +10,19 @@
|
|
|
9
10
|
|
|
10
11
|
"""Subjects configuration."""
|
|
11
12
|
|
|
13
|
+
from flask import current_app
|
|
12
14
|
from invenio_i18n import lazy_gettext as _
|
|
13
15
|
from invenio_records_resources.services import SearchOptions
|
|
14
16
|
from invenio_records_resources.services.records.components import DataComponent
|
|
17
|
+
from werkzeug.local import LocalProxy
|
|
15
18
|
|
|
16
19
|
from ...services.components import PIDComponent
|
|
17
20
|
from ...services.querystr import FilteredSuggestQueryParser
|
|
18
21
|
|
|
22
|
+
subject_schemes = LocalProxy(
|
|
23
|
+
lambda: current_app.config["VOCABULARIES_SUBJECTS_SCHEMES"]
|
|
24
|
+
)
|
|
25
|
+
|
|
19
26
|
|
|
20
27
|
class SubjectsSearchOptions(SearchOptions):
|
|
21
28
|
"""Search options."""
|
|
@@ -23,9 +30,8 @@ class SubjectsSearchOptions(SearchOptions):
|
|
|
23
30
|
suggest_parser_cls = FilteredSuggestQueryParser.factory(
|
|
24
31
|
filter_field="scheme",
|
|
25
32
|
fields=[ # suggest fields
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"subject._3gram",
|
|
33
|
+
"title.*^100",
|
|
34
|
+
"synonyms^20",
|
|
29
35
|
],
|
|
30
36
|
)
|
|
31
37
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2024 University of Münster.
|
|
4
|
+
#
|
|
5
|
+
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
|
+
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
7
|
+
# details.
|
|
8
|
+
|
|
9
|
+
"""Names datastreams, transformers, writers and readers."""
|
|
10
|
+
|
|
11
|
+
from invenio_access.permissions import system_identity
|
|
12
|
+
from invenio_i18n import lazy_gettext as _
|
|
13
|
+
|
|
14
|
+
from ...datastreams.writers import ServiceWriter
|
|
15
|
+
from .mesh.datastreams import VOCABULARIES_DATASTREAM_READERS as mesh_readers
|
|
16
|
+
from .mesh.datastreams import VOCABULARIES_DATASTREAM_TRANSFORMERS as mesh_transformers
|
|
17
|
+
from .mesh.datastreams import VOCABULARIES_DATASTREAM_WRITERS as mesh_writers
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class SubjectsServiceWriter(ServiceWriter):
|
|
21
|
+
"""Subjects Service Writer."""
|
|
22
|
+
|
|
23
|
+
def __init__(self, *args, **kwargs):
|
|
24
|
+
"""Constructor."""
|
|
25
|
+
service_or_name = kwargs.pop("service_or_name", "subjects")
|
|
26
|
+
super().__init__(service_or_name=service_or_name, *args, **kwargs)
|
|
27
|
+
|
|
28
|
+
def _entry_id(self, entry):
|
|
29
|
+
"""Get the id from an entry."""
|
|
30
|
+
return entry["id"]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
VOCABULARIES_DATASTREAM_READERS = {**mesh_readers}
|
|
34
|
+
"""Subjects Data Streams readers."""
|
|
35
|
+
|
|
36
|
+
VOCABULARIES_DATASTREAM_TRANSFORMERS = {**mesh_transformers}
|
|
37
|
+
"""Subjects Data Streams transformers."""
|
|
38
|
+
|
|
39
|
+
VOCABULARIES_DATASTREAM_WRITERS = {
|
|
40
|
+
"subjects-service": SubjectsServiceWriter,
|
|
41
|
+
**mesh_writers,
|
|
42
|
+
}
|
|
43
|
+
"""Subjects Data Streams writers."""
|
|
44
|
+
|
|
45
|
+
DATASTREAM_CONFIG = {
|
|
46
|
+
"readers": [
|
|
47
|
+
{"type": "yaml"},
|
|
48
|
+
],
|
|
49
|
+
"writers": [
|
|
50
|
+
{
|
|
51
|
+
"type": "subjects-service",
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
}
|
|
55
|
+
"""Data Stream configuration."""
|
|
@@ -25,6 +25,18 @@
|
|
|
25
25
|
"subject": {
|
|
26
26
|
"description": "Human readable label.",
|
|
27
27
|
"type": "string"
|
|
28
|
+
},
|
|
29
|
+
"title": {
|
|
30
|
+
"description": "Human readable label in different languages.",
|
|
31
|
+
"$ref": "local://vocabularies/definitions-v1.0.0.json#/title"
|
|
32
|
+
},
|
|
33
|
+
"synonyms": {
|
|
34
|
+
"description": "Synonyms of the subject label.",
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": {
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
"uniqueItems": true
|
|
28
40
|
}
|
|
29
41
|
}
|
|
30
42
|
}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mappings": {
|
|
3
|
+
"dynamic_templates": [
|
|
4
|
+
{
|
|
5
|
+
"i18n_title": {
|
|
6
|
+
"path_match": "title.*",
|
|
7
|
+
"match_mapping_type": "string",
|
|
8
|
+
"mapping": {
|
|
9
|
+
"type": "search_as_you_type"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
],
|
|
3
14
|
"dynamic": "strict",
|
|
4
15
|
"properties": {
|
|
5
16
|
"$schema": {
|
|
@@ -56,6 +67,13 @@
|
|
|
56
67
|
}
|
|
57
68
|
}
|
|
58
69
|
},
|
|
70
|
+
"title": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"dynamic": "true"
|
|
73
|
+
},
|
|
74
|
+
"synonyms": {
|
|
75
|
+
"type": "text"
|
|
76
|
+
},
|
|
59
77
|
"tags": {
|
|
60
78
|
"type": "keyword"
|
|
61
79
|
}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mappings": {
|
|
3
|
+
"dynamic_templates": [
|
|
4
|
+
{
|
|
5
|
+
"i18n_title": {
|
|
6
|
+
"path_match": "title.*",
|
|
7
|
+
"match_mapping_type": "string",
|
|
8
|
+
"mapping": {
|
|
9
|
+
"type": "search_as_you_type"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
],
|
|
3
14
|
"dynamic": "strict",
|
|
4
15
|
"properties": {
|
|
5
16
|
"$schema": {
|
|
@@ -56,6 +67,13 @@
|
|
|
56
67
|
}
|
|
57
68
|
}
|
|
58
69
|
},
|
|
70
|
+
"title": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"dynamic": "true"
|
|
73
|
+
},
|
|
74
|
+
"synonyms": {
|
|
75
|
+
"type": "text"
|
|
76
|
+
},
|
|
59
77
|
"tags": {
|
|
60
78
|
"type": "keyword"
|
|
61
79
|
}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mappings": {
|
|
3
|
+
"dynamic_templates": [
|
|
4
|
+
{
|
|
5
|
+
"i18n_title": {
|
|
6
|
+
"path_match": "title.*",
|
|
7
|
+
"match_mapping_type": "string",
|
|
8
|
+
"mapping": {
|
|
9
|
+
"type": "search_as_you_type"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
],
|
|
3
14
|
"dynamic": "strict",
|
|
4
15
|
"properties": {
|
|
5
16
|
"$schema": {
|
|
@@ -56,6 +67,13 @@
|
|
|
56
67
|
}
|
|
57
68
|
}
|
|
58
69
|
},
|
|
70
|
+
"title": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"dynamic": "true"
|
|
73
|
+
},
|
|
74
|
+
"synonyms": {
|
|
75
|
+
"type": "text"
|
|
76
|
+
},
|
|
59
77
|
"tags": {
|
|
60
78
|
"type": "keyword"
|
|
61
79
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2022-2024 CERN.
|
|
4
|
+
# Copyright (C) 2024 California Institute of Technology.
|
|
5
|
+
#
|
|
6
|
+
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
8
|
+
# details.
|
|
9
|
+
|
|
10
|
+
"""MeSH subjects datastreams, transformers, writers and readers."""
|
|
11
|
+
|
|
12
|
+
from invenio_vocabularies.datastreams.transformers import (
|
|
13
|
+
BaseTransformer,
|
|
14
|
+
TransformerError,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class MeshSubjectsTransformer(BaseTransformer):
|
|
19
|
+
"""MeSH subjects Transformer."""
|
|
20
|
+
|
|
21
|
+
def apply(self, stream_entry, *args, **kwargs):
|
|
22
|
+
"""Apply transformation on steam entry."""
|
|
23
|
+
entry_data = stream_entry.entry
|
|
24
|
+
|
|
25
|
+
# ID in MeSH data is the URL, ex. https://id.nlm.nih.gov/mesh/D000001
|
|
26
|
+
# We just want to use the ID prefixed by "mesh:""
|
|
27
|
+
try:
|
|
28
|
+
mesh_id = entry_data["id"].split("/")[-1]
|
|
29
|
+
except Exception:
|
|
30
|
+
raise TransformerError("Not a valid MeSH ID.")
|
|
31
|
+
|
|
32
|
+
entry_data["id"] = "mesh:" + mesh_id
|
|
33
|
+
return stream_entry
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
VOCABULARIES_DATASTREAM_READERS = {}
|
|
37
|
+
"""MeSH datastream readers."""
|
|
38
|
+
|
|
39
|
+
VOCABULARIES_DATASTREAM_WRITERS = {}
|
|
40
|
+
"""MeSH subject datastream writers."""
|
|
41
|
+
|
|
42
|
+
VOCABULARIES_DATASTREAM_TRANSFORMERS = {"mesh-subjects": MeshSubjectsTransformer}
|
|
43
|
+
"""MeSH subjects datastream transformers."""
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
3
|
# Copyright (C) 2021 Northwestern University.
|
|
4
|
-
# Copyright (C) 2021-
|
|
4
|
+
# Copyright (C) 2021-2024 CERN.
|
|
5
|
+
# Copyright (C) 2024 University of Münster.
|
|
5
6
|
#
|
|
6
7
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
7
8
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -9,10 +10,15 @@
|
|
|
9
10
|
|
|
10
11
|
"""Subjects schema."""
|
|
11
12
|
|
|
12
|
-
from invenio_i18n import
|
|
13
|
+
from invenio_i18n import get_locale
|
|
14
|
+
from marshmallow import fields, pre_load
|
|
13
15
|
from marshmallow_utils.fields import SanitizedUnicode
|
|
14
16
|
|
|
15
|
-
from ...services.schema import
|
|
17
|
+
from ...services.schema import (
|
|
18
|
+
BaseVocabularySchema,
|
|
19
|
+
ContribVocabularyRelationSchema,
|
|
20
|
+
i18n_strings,
|
|
21
|
+
)
|
|
16
22
|
|
|
17
23
|
|
|
18
24
|
class SubjectSchema(BaseVocabularySchema):
|
|
@@ -24,6 +30,16 @@ class SubjectSchema(BaseVocabularySchema):
|
|
|
24
30
|
id = SanitizedUnicode(required=True)
|
|
25
31
|
scheme = SanitizedUnicode(required=True)
|
|
26
32
|
subject = SanitizedUnicode(required=True)
|
|
33
|
+
title = i18n_strings
|
|
34
|
+
synonyms = fields.List(SanitizedUnicode())
|
|
35
|
+
|
|
36
|
+
@pre_load
|
|
37
|
+
def add_subject_from_title(self, data, **kwargs):
|
|
38
|
+
"""Add subject from title if not present."""
|
|
39
|
+
locale = get_locale().language
|
|
40
|
+
if "subject" not in data:
|
|
41
|
+
data["subject"] = data["title"].get(locale) or data["title"].values()[0]
|
|
42
|
+
return data
|
|
27
43
|
|
|
28
44
|
|
|
29
45
|
class SubjectRelationSchema(ContribVocabularyRelationSchema):
|
|
@@ -33,3 +49,5 @@ class SubjectRelationSchema(ContribVocabularyRelationSchema):
|
|
|
33
49
|
parent_field_name = "subjects"
|
|
34
50
|
subject = SanitizedUnicode()
|
|
35
51
|
scheme = SanitizedUnicode()
|
|
52
|
+
title = i18n_strings
|
|
53
|
+
synonyms = fields.List(SanitizedUnicode())
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
"""Vocabulary subjects."""
|
|
11
11
|
|
|
12
|
+
from flask_resources import JSONSerializer, ResponseHandler
|
|
12
13
|
from invenio_records.dumpers import SearchDumper
|
|
13
14
|
from invenio_records.dumpers.indexedat import IndexedAtDumperExt
|
|
14
15
|
from invenio_records_resources.factories.factory import RecordTypeFactory
|
|
16
|
+
from invenio_records_resources.resources.records.headers import etag_headers
|
|
15
17
|
|
|
16
18
|
from ...records.pidprovider import PIDProviderFactory
|
|
17
19
|
from ...records.systemfields import BaseVocabularyPIDFieldContext
|
|
@@ -42,4 +44,12 @@ record_type = RecordTypeFactory(
|
|
|
42
44
|
permission_policy_cls=PermissionPolicy,
|
|
43
45
|
# Resource layer
|
|
44
46
|
endpoint_route="/subjects",
|
|
47
|
+
resource_cls_attrs={
|
|
48
|
+
"response_handlers": {
|
|
49
|
+
"application/json": ResponseHandler(JSONSerializer(), headers=etag_headers),
|
|
50
|
+
"application/vnd.inveniordm.v1+json": ResponseHandler(
|
|
51
|
+
JSONSerializer(), headers=etag_headers
|
|
52
|
+
),
|
|
53
|
+
}
|
|
54
|
+
},
|
|
45
55
|
)
|
|
@@ -19,6 +19,7 @@ from .contrib.affiliations.datastreams import (
|
|
|
19
19
|
from .contrib.awards.datastreams import DATASTREAM_CONFIG as awards_ds_config
|
|
20
20
|
from .contrib.funders.datastreams import DATASTREAM_CONFIG as funders_ds_config
|
|
21
21
|
from .contrib.names.datastreams import DATASTREAM_CONFIG as names_ds_config
|
|
22
|
+
from .contrib.subjects.datastreams import DATASTREAM_CONFIG as subjects_ds_config
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class VocabularyConfig:
|
|
@@ -61,6 +62,17 @@ class FundersVocabularyConfig(VocabularyConfig):
|
|
|
61
62
|
raise NotImplementedError("Service not implemented for Funders")
|
|
62
63
|
|
|
63
64
|
|
|
65
|
+
class SubjectsVocabularyConfig(VocabularyConfig):
|
|
66
|
+
"""Subjects Vocabulary Config."""
|
|
67
|
+
|
|
68
|
+
config = subjects_ds_config
|
|
69
|
+
vocabulary_name = "subjects"
|
|
70
|
+
|
|
71
|
+
def get_service(self):
|
|
72
|
+
"""Get the service for the vocabulary."""
|
|
73
|
+
raise NotImplementedError("Service not implemented for Subjects")
|
|
74
|
+
|
|
75
|
+
|
|
64
76
|
class AwardsVocabularyConfig(VocabularyConfig):
|
|
65
77
|
"""Awards Vocabulary Config."""
|
|
66
78
|
|
|
@@ -90,5 +102,6 @@ def get_vocabulary_config(vocabulary):
|
|
|
90
102
|
"funders": FundersVocabularyConfig,
|
|
91
103
|
"awards": AwardsVocabularyConfig,
|
|
92
104
|
"affiliations": AffiliationsVocabularyConfig,
|
|
105
|
+
"subjects": SubjectsVocabularyConfig,
|
|
93
106
|
}
|
|
94
107
|
return vocab_config.get(vocabulary, VocabularyConfig)()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
3
|
# Copyright (C) 2024 CERN.
|
|
4
|
-
# Copyright (C) 2024
|
|
4
|
+
# Copyright (C) 2024 University of Münster.
|
|
5
5
|
#
|
|
6
6
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
7
7
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# Copyright (C) 2024 CERN.
|
|
4
4
|
# Copyright (C) 2021 Northwestern University.
|
|
5
|
-
# Copyright (C) 2024
|
|
5
|
+
# Copyright (C) 2024 University of Münster.
|
|
6
6
|
#
|
|
7
7
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
8
8
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -1,138 +1,185 @@
|
|
|
1
1
|
# Translations template for invenio-vocabularies.
|
|
2
|
-
# Copyright (C)
|
|
2
|
+
# Copyright (C) 2024 CERN
|
|
3
3
|
# This file is distributed under the same license as the
|
|
4
4
|
# invenio-vocabularies project.
|
|
5
|
-
# FIRST AUTHOR <EMAIL@ADDRESS>,
|
|
5
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
|
6
6
|
#
|
|
7
7
|
#, fuzzy
|
|
8
8
|
msgid ""
|
|
9
9
|
msgstr ""
|
|
10
|
-
"Project-Id-Version: invenio-vocabularies
|
|
10
|
+
"Project-Id-Version: invenio-vocabularies 4.3.0\n"
|
|
11
11
|
"Report-Msgid-Bugs-To: info@inveniosoftware.org\n"
|
|
12
|
-
"POT-Creation-Date:
|
|
12
|
+
"POT-Creation-Date: 2024-08-06 08:57+0000\n"
|
|
13
13
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
14
14
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
15
15
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
16
16
|
"MIME-Version: 1.0\n"
|
|
17
17
|
"Content-Type: text/plain; charset=utf-8\n"
|
|
18
18
|
"Content-Transfer-Encoding: 8bit\n"
|
|
19
|
-
"Generated-By: Babel 2.
|
|
19
|
+
"Generated-By: Babel 2.15.0\n"
|
|
20
20
|
|
|
21
|
-
#: invenio_vocabularies/config.py:
|
|
21
|
+
#: invenio_vocabularies/config.py:38
|
|
22
22
|
msgid "GRID"
|
|
23
23
|
msgstr ""
|
|
24
24
|
|
|
25
|
-
#: invenio_vocabularies/config.py:
|
|
25
|
+
#: invenio_vocabularies/config.py:39 invenio_vocabularies/config.py:103
|
|
26
26
|
msgid "GND"
|
|
27
27
|
msgstr ""
|
|
28
28
|
|
|
29
|
-
#: invenio_vocabularies/config.py:
|
|
29
|
+
#: invenio_vocabularies/config.py:40 invenio_vocabularies/config.py:102
|
|
30
30
|
msgid "ISNI"
|
|
31
31
|
msgstr ""
|
|
32
32
|
|
|
33
|
-
#: invenio_vocabularies/config.py:
|
|
33
|
+
#: invenio_vocabularies/config.py:41
|
|
34
34
|
msgid "ROR"
|
|
35
35
|
msgstr ""
|
|
36
36
|
|
|
37
|
-
#: invenio_vocabularies/config.py:
|
|
37
|
+
#: invenio_vocabularies/config.py:52 invenio_vocabularies/config.py:61
|
|
38
38
|
msgid "DOI"
|
|
39
39
|
msgstr ""
|
|
40
40
|
|
|
41
|
-
#: invenio_vocabularies/config.py:
|
|
41
|
+
#: invenio_vocabularies/config.py:60
|
|
42
42
|
msgid "URL"
|
|
43
43
|
msgstr ""
|
|
44
44
|
|
|
45
|
-
#: invenio_vocabularies/config.py:
|
|
45
|
+
#: invenio_vocabularies/config.py:101
|
|
46
46
|
msgid "ORCID"
|
|
47
47
|
msgstr ""
|
|
48
48
|
|
|
49
|
-
#: invenio_vocabularies/
|
|
50
|
-
#: invenio_vocabularies/contrib/
|
|
51
|
-
#: invenio_vocabularies/contrib/names/config.py:45
|
|
52
|
-
#: invenio_vocabularies/contrib/subjects/config.py:38
|
|
53
|
-
#: invenio_vocabularies/services/service.py:64
|
|
54
|
-
msgid "Best match"
|
|
55
|
-
msgstr ""
|
|
56
|
-
|
|
57
|
-
#: invenio_vocabularies/contrib/affiliations/config.py:48
|
|
49
|
+
#: invenio_vocabularies/config.py:143
|
|
50
|
+
#: invenio_vocabularies/contrib/affiliations/config.py:42
|
|
58
51
|
#: invenio_vocabularies/contrib/funders/config.py:49
|
|
59
52
|
#: invenio_vocabularies/contrib/names/config.py:49
|
|
60
53
|
#: invenio_vocabularies/contrib/subjects/config.py:42
|
|
61
54
|
msgid "Name"
|
|
62
55
|
msgstr ""
|
|
63
56
|
|
|
64
|
-
#: invenio_vocabularies/
|
|
57
|
+
#: invenio_vocabularies/config.py:147
|
|
58
|
+
msgid "Number of entries"
|
|
59
|
+
msgstr ""
|
|
60
|
+
|
|
61
|
+
#: invenio_vocabularies/contrib/affiliations/config.py:38
|
|
62
|
+
#: invenio_vocabularies/contrib/funders/config.py:45
|
|
63
|
+
#: invenio_vocabularies/contrib/names/config.py:45
|
|
64
|
+
#: invenio_vocabularies/contrib/subjects/config.py:38
|
|
65
|
+
#: invenio_vocabularies/services/config.py:73
|
|
66
|
+
msgid "Best match"
|
|
67
|
+
msgstr ""
|
|
68
|
+
|
|
69
|
+
#: invenio_vocabularies/contrib/affiliations/config.py:46
|
|
65
70
|
#: invenio_vocabularies/contrib/funders/config.py:53
|
|
66
71
|
#: invenio_vocabularies/contrib/names/config.py:53
|
|
67
72
|
#: invenio_vocabularies/contrib/subjects/config.py:46
|
|
68
|
-
#: invenio_vocabularies/services/
|
|
73
|
+
#: invenio_vocabularies/services/config.py:81
|
|
69
74
|
msgid "Newest"
|
|
70
75
|
msgstr ""
|
|
71
76
|
|
|
72
|
-
#: invenio_vocabularies/contrib/affiliations/config.py:
|
|
77
|
+
#: invenio_vocabularies/contrib/affiliations/config.py:50
|
|
73
78
|
#: invenio_vocabularies/contrib/funders/config.py:57
|
|
74
79
|
#: invenio_vocabularies/contrib/names/config.py:57
|
|
75
80
|
#: invenio_vocabularies/contrib/subjects/config.py:50
|
|
76
|
-
#: invenio_vocabularies/services/
|
|
81
|
+
#: invenio_vocabularies/services/config.py:85
|
|
77
82
|
msgid "Oldest"
|
|
78
83
|
msgstr ""
|
|
79
84
|
|
|
80
|
-
#: invenio_vocabularies/contrib/
|
|
81
|
-
|
|
85
|
+
#: invenio_vocabularies/contrib/affiliations/schema.py:41
|
|
86
|
+
#: invenio_vocabularies/contrib/funders/schema.py:36
|
|
87
|
+
#: invenio_vocabularies/contrib/funders/schema.py:44
|
|
88
|
+
msgid "Name cannot be blank."
|
|
82
89
|
msgstr ""
|
|
83
90
|
|
|
84
|
-
#: invenio_vocabularies/contrib/
|
|
85
|
-
|
|
91
|
+
#: invenio_vocabularies/contrib/affiliations/schema.py:47
|
|
92
|
+
#: invenio_vocabularies/contrib/awards/schema.py:50
|
|
93
|
+
#: invenio_vocabularies/contrib/funders/schema.py:60
|
|
94
|
+
msgid "PID cannot be blank."
|
|
86
95
|
msgstr ""
|
|
87
96
|
|
|
88
|
-
#: invenio_vocabularies/contrib/awards/
|
|
89
|
-
msgid "
|
|
97
|
+
#: invenio_vocabularies/contrib/awards/config.py:49
|
|
98
|
+
msgid "Funders"
|
|
90
99
|
msgstr ""
|
|
91
100
|
|
|
92
|
-
#: invenio_vocabularies/contrib/awards/
|
|
93
|
-
|
|
94
|
-
msgid "PID cannot be blank."
|
|
101
|
+
#: invenio_vocabularies/contrib/awards/datastreams.py:118
|
|
102
|
+
msgid "Unknown OpenAIRE funder prefix {openaire_funder_prefix}"
|
|
95
103
|
msgstr ""
|
|
96
104
|
|
|
97
|
-
#: invenio_vocabularies/contrib/awards/
|
|
98
|
-
|
|
99
|
-
|
|
105
|
+
#: invenio_vocabularies/contrib/awards/datastreams.py:159
|
|
106
|
+
msgid "Missing title attribute for award {award_id}"
|
|
107
|
+
msgstr ""
|
|
108
|
+
|
|
109
|
+
#: invenio_vocabularies/contrib/awards/schema.py:41
|
|
110
|
+
msgid "Number cannot be blank."
|
|
100
111
|
msgstr ""
|
|
101
112
|
|
|
102
|
-
#: invenio_vocabularies/contrib/awards/schema.py:
|
|
113
|
+
#: invenio_vocabularies/contrib/awards/schema.py:80
|
|
103
114
|
msgid "An existing id or number/title must be present."
|
|
104
115
|
msgstr ""
|
|
105
116
|
|
|
106
|
-
#: invenio_vocabularies/contrib/awards/schema.py:
|
|
117
|
+
#: invenio_vocabularies/contrib/awards/schema.py:97
|
|
107
118
|
msgid "At least award or funder should be present."
|
|
108
119
|
msgstr ""
|
|
109
120
|
|
|
110
|
-
#: invenio_vocabularies/contrib/
|
|
121
|
+
#: invenio_vocabularies/contrib/common/ror/datastreams.py:123
|
|
111
122
|
msgid "Id not found in ROR entry."
|
|
112
123
|
msgstr ""
|
|
113
124
|
|
|
114
|
-
#: invenio_vocabularies/contrib/
|
|
115
|
-
msgid "Name not found in ROR entry."
|
|
125
|
+
#: invenio_vocabularies/contrib/common/ror/datastreams.py:153
|
|
126
|
+
msgid "Name with type ror_display not found in ROR entry."
|
|
116
127
|
msgstr ""
|
|
117
128
|
|
|
118
|
-
#: invenio_vocabularies/contrib/funders/schema.py:
|
|
119
|
-
#: invenio_vocabularies/
|
|
120
|
-
msgid "
|
|
129
|
+
#: invenio_vocabularies/contrib/funders/schema.py:73
|
|
130
|
+
#: invenio_vocabularies/services/schema.py:120
|
|
131
|
+
msgid "Missing PID."
|
|
121
132
|
msgstr ""
|
|
122
133
|
|
|
123
134
|
#: invenio_vocabularies/contrib/names/schema.py:53
|
|
124
135
|
msgid "A name or the family name together with the given name must be present."
|
|
125
136
|
msgstr ""
|
|
126
137
|
|
|
138
|
+
#: invenio_vocabularies/contrib/names/schema.py:68
|
|
139
|
+
msgid "Duplicated affiliations."
|
|
140
|
+
msgstr ""
|
|
141
|
+
|
|
127
142
|
#: invenio_vocabularies/services/components.py:29
|
|
128
143
|
msgid "The vocabulary type does not exists."
|
|
129
144
|
msgstr ""
|
|
130
145
|
|
|
131
|
-
#: invenio_vocabularies/services/
|
|
146
|
+
#: invenio_vocabularies/services/config.py:77
|
|
147
|
+
msgid "Title"
|
|
148
|
+
msgstr ""
|
|
149
|
+
|
|
150
|
+
#: invenio_vocabularies/services/config.py:96
|
|
151
|
+
msgid "ID"
|
|
152
|
+
msgstr ""
|
|
153
|
+
|
|
154
|
+
#: invenio_vocabularies/services/config.py:106
|
|
155
|
+
msgid "Ascending"
|
|
156
|
+
msgstr ""
|
|
157
|
+
|
|
158
|
+
#: invenio_vocabularies/services/config.py:107
|
|
159
|
+
msgid "Descending"
|
|
160
|
+
msgstr ""
|
|
161
|
+
|
|
162
|
+
#: invenio_vocabularies/services/schema.py:85
|
|
132
163
|
msgid "An existing id or a free text {ftf_name} must be present."
|
|
133
164
|
msgstr ""
|
|
134
165
|
|
|
135
|
-
#: invenio_vocabularies/services/
|
|
136
|
-
msgid "
|
|
166
|
+
#: invenio_vocabularies/services/custom_fields/subject.py:50
|
|
167
|
+
msgid "Subjects"
|
|
168
|
+
msgstr ""
|
|
169
|
+
|
|
170
|
+
#: invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html:16
|
|
171
|
+
msgid "Search results for "
|
|
172
|
+
msgstr ""
|
|
173
|
+
|
|
174
|
+
#: invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html:26
|
|
175
|
+
msgid "Settings"
|
|
176
|
+
msgstr ""
|
|
177
|
+
|
|
178
|
+
#: invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html:31
|
|
179
|
+
msgid "Schedule"
|
|
180
|
+
msgstr ""
|
|
181
|
+
|
|
182
|
+
#: invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html:36
|
|
183
|
+
msgid "Run now"
|
|
137
184
|
msgstr ""
|
|
138
185
|
|
invenio_vocabularies/webpack.py
CHANGED
|
@@ -34,7 +34,7 @@ theme = WebpackThemeBundle(
|
|
|
34
34
|
"react-dnd-html5-backend": "^11.1.0",
|
|
35
35
|
"react-dropzone": "^11.0.0",
|
|
36
36
|
"react-i18next": "^11.11.0",
|
|
37
|
-
"react-invenio-forms": "^
|
|
37
|
+
"react-invenio-forms": "^4.0.0",
|
|
38
38
|
"react-searchkit": "^2.0.0",
|
|
39
39
|
"yup": "^0.32.0",
|
|
40
40
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: invenio-vocabularies
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.5.0
|
|
4
4
|
Summary: "Invenio module for managing vocabularies."
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-vocabularies
|
|
6
6
|
Author: CERN
|
|
@@ -81,6 +81,16 @@ https://invenio-vocabularies.readthedocs.io/
|
|
|
81
81
|
Changes
|
|
82
82
|
=======
|
|
83
83
|
|
|
84
|
+
Version v4.5.0 (released 2024-08-21)
|
|
85
|
+
|
|
86
|
+
- ror: fix dump modified date comparison
|
|
87
|
+
- subjects: mesh: add mesh subject datastreams
|
|
88
|
+
- change schema of subject: add text and synonyms switch to datastreams
|
|
89
|
+
|
|
90
|
+
Version v4.4.0 (released 2024-08-09)
|
|
91
|
+
|
|
92
|
+
- services: use and adjust vnd.inveniordm.v1+json http accept header
|
|
93
|
+
|
|
84
94
|
Version v4.3.0 (released 2024-08-05)
|
|
85
95
|
|
|
86
96
|
- names: make names_exclude_regex configurable
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
invenio_vocabularies/__init__.py,sha256=
|
|
1
|
+
invenio_vocabularies/__init__.py,sha256=afA3FAvbcl61ZjrLOtueUBN8mCZwrAeqltFDJDjCDDY,377
|
|
2
2
|
invenio_vocabularies/cli.py,sha256=ToGc5dcGarDwNUgUXGqHIRT-3Uv1rleyFLKenwZdyBw,5719
|
|
3
|
-
invenio_vocabularies/config.py,sha256=
|
|
3
|
+
invenio_vocabularies/config.py,sha256=sOkJdmnfoSftfpH7msZEC6Eyo61Q3RQ7V2mMeE5LPAM,5157
|
|
4
4
|
invenio_vocabularies/ext.py,sha256=GujJ4UARd4Fxf4z7zznRk9JAgHamZuYCOdrKU5czg00,5987
|
|
5
|
-
invenio_vocabularies/factories.py,sha256=
|
|
5
|
+
invenio_vocabularies/factories.py,sha256=VLMoWUZ8DKoJWnKA-HoWE1NlTewrB0GvRg3ej56pVYc,3339
|
|
6
6
|
invenio_vocabularies/fixtures.py,sha256=nNWwH04HFASjfj1oy5kMdcQGKmVjzUuA5wSw-ER1QAg,1585
|
|
7
7
|
invenio_vocabularies/proxies.py,sha256=k7cTUgWfnCoYIuNqAj_VFi1zBN33KNNclRSVnBkObEM,711
|
|
8
8
|
invenio_vocabularies/views.py,sha256=PNJ5nvc3O7ASwNe56xmqy5YaU9n3UYF3W2JwvtE_kYs,1561
|
|
9
|
-
invenio_vocabularies/webpack.py,sha256=
|
|
9
|
+
invenio_vocabularies/webpack.py,sha256=bp2vz3O8QdZwrznsV-SjAmS0g1nV9WGWqc-7ZJQY5PQ,1891
|
|
10
10
|
invenio_vocabularies/administration/__init__.py,sha256=0bDp2Aw8aZth7C-q9Xn9rxeCUQQRoIUxoWWWwPvKbXA,308
|
|
11
11
|
invenio_vocabularies/administration/views/__init__.py,sha256=31DP4jLG6q4HQlzSRiGLPxUjHPUCCl4N34y4XMuPP6g,313
|
|
12
12
|
invenio_vocabularies/administration/views/vocabularies.py,sha256=JyKr1OYF9DO89zvWCNOtNfClO_QptdHdjvgY1kkImnw,1290
|
|
@@ -22,7 +22,7 @@ invenio_vocabularies/alembic/e1146238edd3_create_awards_table.py,sha256=XDAON1kb
|
|
|
22
22
|
invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.eslintrc.yml,sha256=aERX8bU_YWne3S8Ai0FlI705MwJ1AXNb-V9W6FsAc6I,338
|
|
23
23
|
invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.prettierrc,sha256=67zvnPdNPnqAfVYrzQJZAVa2T-lyfzJnwrDu5lo10jQ,59
|
|
24
24
|
invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/index.js,sha256=-tppDUbPuRJHQi_m1KbuUZxQEYRZZmhLru2T80fQgAA,243
|
|
25
|
-
invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json,sha256=
|
|
25
|
+
invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json,sha256=DEFygHSb-Fy1_Z9OxXuqZzR3i4-0L1LXDGftUh7q1Ys,650
|
|
26
26
|
invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/index.js,sha256=NcHTRzFeT8iq-KTYR2ierbOCNPBB4cj9KnHsX55ag_U,247
|
|
27
27
|
invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/index.js,sha256=iSx-bdQkKj6XA9NAam31bdcQmFygljQnjLcFjjK3lwU,245
|
|
28
28
|
invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/index.js,sha256=7sSg482yJODQHU4jkP-hWJjpBOw7ubFr5nPZl5D_1gQ,262
|
|
@@ -43,7 +43,7 @@ invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/script
|
|
|
43
43
|
invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/initCatalog.js,sha256=ghTi5iOIhT8AJoFGlxnBrHWiw2ts21dKwY_vWxmkiCE,682
|
|
44
44
|
invenio_vocabularies/contrib/__init__.py,sha256=C5eDia6tAVBCrbb5hd_KnxmczyBoF87NIBUCLID-Tzc,240
|
|
45
45
|
invenio_vocabularies/contrib/affiliations/__init__.py,sha256=rV8YAzBRoSKsBYcVjCNJh6j7ITuPRfurwj9HJHRjkN8,565
|
|
46
|
-
invenio_vocabularies/contrib/affiliations/affiliations.py,sha256=
|
|
46
|
+
invenio_vocabularies/contrib/affiliations/affiliations.py,sha256=PCWBF9O7ba2yU3LftEt5pxJf14S-HymqnN4GqKhp-Mc,2027
|
|
47
47
|
invenio_vocabularies/contrib/affiliations/api.py,sha256=5nIOvpfcseuAAg2XgblHc8jb7TAdfU79XOBRpL-p398,326
|
|
48
48
|
invenio_vocabularies/contrib/affiliations/config.py,sha256=u1sHeihy0B0e6w5e3HsbrC9e8A4WTLKCYPXUdcX-ZTs,1605
|
|
49
49
|
invenio_vocabularies/contrib/affiliations/datastreams.py,sha256=Mn62EBBkGwO09qjrXY71qDIrS2mNgarb89ez69Vw4Yk,2384
|
|
@@ -82,7 +82,7 @@ invenio_vocabularies/contrib/awards/mappings/v7/__init__.py,sha256=fERdPp7K7ajao
|
|
|
82
82
|
invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json,sha256=QJT2gS7SE47YTP2HdU4ESjMwHJBTzAH70JEhWWg9SXM,1528
|
|
83
83
|
invenio_vocabularies/contrib/common/__init__.py,sha256=DdbGYRthEpQtObhY_YK4vOT9Zf7FFagQ6qtUjJOYw-M,247
|
|
84
84
|
invenio_vocabularies/contrib/common/ror/__init__.py,sha256=3u2-fre1SQ-4nz3Ay0nxj3ntmMZ8Ujh_4eV-fyxfmtc,239
|
|
85
|
-
invenio_vocabularies/contrib/common/ror/datastreams.py,sha256=
|
|
85
|
+
invenio_vocabularies/contrib/common/ror/datastreams.py,sha256=4eRS_Z-dibN-t0alT98rfZuOAUOCrZo6462NnjUVQEM,7830
|
|
86
86
|
invenio_vocabularies/contrib/funders/__init__.py,sha256=YxFXBDnT7NM8rFwxT_Ge3xXR2n17EM0alknQq7r_Bt8,478
|
|
87
87
|
invenio_vocabularies/contrib/funders/api.py,sha256=QKGGeSnPHSoBfucvpaVruXT_txYidofZ080G3IxFkIo,306
|
|
88
88
|
invenio_vocabularies/contrib/funders/config.py,sha256=BbzCRIcPxSwDllhjnGmdec5A126Zs1I4ZyVUCGi3jRA,1756
|
|
@@ -108,7 +108,7 @@ invenio_vocabularies/contrib/names/api.py,sha256=sEPn_jFX3gyoxgbdEUSIvOoPCUI8poc
|
|
|
108
108
|
invenio_vocabularies/contrib/names/config.py,sha256=hKDTEEBYGYOY6sMOArZjjkq2HJ6MJtRZp1geGLAFgRg,1735
|
|
109
109
|
invenio_vocabularies/contrib/names/datastreams.py,sha256=PgCUwK0qpw_r0NTA17w7eqCDhgL2xd0tIXZ9-GjOT2M,9301
|
|
110
110
|
invenio_vocabularies/contrib/names/models.py,sha256=SYdtDDG-y5Wq_d06YhiVO5n8gfxPW_mx-tECsIcv5H8,308
|
|
111
|
-
invenio_vocabularies/contrib/names/names.py,sha256=
|
|
111
|
+
invenio_vocabularies/contrib/names/names.py,sha256=NlCyc2n7vUSGN8vA5PmgkNk8GpSF9v7OjBSBhRSQjYI,2423
|
|
112
112
|
invenio_vocabularies/contrib/names/resources.py,sha256=Z8XqLKfFKE69zdTTvcTDmpEZ6wqiqjIH5tp0LzXTSwQ,1588
|
|
113
113
|
invenio_vocabularies/contrib/names/s3client.py,sha256=c7B9_NbnXCfE4pE_yMTsT6uQ2hgbcRU-KY6nbWFuFzU,1063
|
|
114
114
|
invenio_vocabularies/contrib/names/schema.py,sha256=eKhpNwBaACMEY0JWNrSUhr-40lXhkiHDRmM42KsLrYg,3354
|
|
@@ -124,22 +124,24 @@ invenio_vocabularies/contrib/names/mappings/v7/__init__.py,sha256=qLGB8C0kPI3xub
|
|
|
124
124
|
invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json,sha256=5Ybcq3fUMYx3u1MNKmHh-CWBtATS9MYpdEcwAM8EQ80,1943
|
|
125
125
|
invenio_vocabularies/contrib/subjects/__init__.py,sha256=GtXZKA6VWG1oA1fUX2Wh92nd-1i7RnnQF6RprGhxkD4,591
|
|
126
126
|
invenio_vocabularies/contrib/subjects/api.py,sha256=QH8mxoLsa8qjJT1i1Tj6rRnpbH23plo2IMOJ56rnvbU,347
|
|
127
|
-
invenio_vocabularies/contrib/subjects/config.py,sha256=
|
|
127
|
+
invenio_vocabularies/contrib/subjects/config.py,sha256=nPlOskorKid_W2Qqi2wQgyjtyzoFB8z56G8ko7lTE-8,1717
|
|
128
|
+
invenio_vocabularies/contrib/subjects/datastreams.py,sha256=SwhqoIjQn-6A0wm61HJ2TOFDDhCRG2EZwzeMJw_37ec,1606
|
|
128
129
|
invenio_vocabularies/contrib/subjects/facets.py,sha256=qQ7_rppFBzsmrlZu4-MvOIdUcjeOmDA9gOHAcs0lWwI,695
|
|
129
130
|
invenio_vocabularies/contrib/subjects/models.py,sha256=8XgbVRxDDvhWPjMWsoCriNlOKdmV_113a14yLRtlvM4,363
|
|
130
131
|
invenio_vocabularies/contrib/subjects/resources.py,sha256=0KRfUMizwgIziZybk4HnIjiSsXbrCv_XmguNPwnxoo8,506
|
|
131
|
-
invenio_vocabularies/contrib/subjects/schema.py,sha256=
|
|
132
|
+
invenio_vocabularies/contrib/subjects/schema.py,sha256=fClbEWE5kfh7xDy2whds9wmx4BxyfexwzfnLWEG3uvk,1674
|
|
132
133
|
invenio_vocabularies/contrib/subjects/services.py,sha256=s1U6HMmpjuz7rrgR0DtT9C28TC6sZEeDTsa4Jh1TXQk,864
|
|
133
|
-
invenio_vocabularies/contrib/subjects/subjects.py,sha256=
|
|
134
|
+
invenio_vocabularies/contrib/subjects/subjects.py,sha256=NwZycExLyV8l7ikGStH4GOecVuDSxFT70KoNv6qC78I,1877
|
|
134
135
|
invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py,sha256=WowVUST1JoEDS3-xeHhCJvIgC9nzMkFs8XRks9zgzaM,292
|
|
135
|
-
invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json,sha256=
|
|
136
|
+
invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json,sha256=cspw-pYIwiKpEO8zx7GFFqhWb7PZkAeQCRNLWoY8Uyk,1253
|
|
136
137
|
invenio_vocabularies/contrib/subjects/mappings/__init__.py,sha256=Qk-yj1ENsTmijO8ImWuDYGzXi6QQ2VjP4DbjrpRfDk8,243
|
|
137
138
|
invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py,sha256=rv2-AasC_WJFp2t9Nrhzivmw9RovRI2_msin4oHTZuk,250
|
|
138
|
-
invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json,sha256=
|
|
139
|
+
invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json,sha256=iZ8BByd4nOsTQ8Go5prQQ-puZOWzYIYHVjVYD39kNXo,1533
|
|
139
140
|
invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py,sha256=rQnrw1tMKR0yzlPiXBbCVHnxy_aAhwrKghrSuhhZYAc,250
|
|
140
|
-
invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json,sha256=
|
|
141
|
+
invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json,sha256=iZ8BByd4nOsTQ8Go5prQQ-puZOWzYIYHVjVYD39kNXo,1533
|
|
141
142
|
invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py,sha256=QK__a1749g2UN3fBqOr9jx8ccZHWAuvd6DSN4B1jJW4,258
|
|
142
|
-
invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json,sha256=
|
|
143
|
+
invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json,sha256=iZ8BByd4nOsTQ8Go5prQQ-puZOWzYIYHVjVYD39kNXo,1533
|
|
144
|
+
invenio_vocabularies/contrib/subjects/mesh/datastreams.py,sha256=qsi2fu-TzpI2aC9qIOkXGpNcLFkClJ5Dw5rC9ffEdjc,1318
|
|
143
145
|
invenio_vocabularies/datastreams/__init__.py,sha256=VPefh6k4Q3eYxKIW8I5zXUGucntp7VHxaOR5Vhgkfmg,412
|
|
144
146
|
invenio_vocabularies/datastreams/datastreams.py,sha256=SpI6ivmf2LIDS2JSkxoM2v5kRmrPoRDtAG5fuzZO4oQ,6078
|
|
145
147
|
invenio_vocabularies/datastreams/errors.py,sha256=IDUZ3gNtYGrhcOgApHCms1gNNJTyJzoMPmG5JtIeYNU,678
|
|
@@ -173,13 +175,13 @@ invenio_vocabularies/resources/schema.py,sha256=6stpU9qgLGoeGib3DWnyrHj6XLPxJKbE
|
|
|
173
175
|
invenio_vocabularies/resources/serializer.py,sha256=pwfckLdkMu1MNDkocyMg1XeX6RhbfeuV4fjDO5xKDxo,1190
|
|
174
176
|
invenio_vocabularies/services/__init__.py,sha256=6mi62EG21Id6x23nx0X193I6sVTakK6jOdYNEKPxXUk,522
|
|
175
177
|
invenio_vocabularies/services/components.py,sha256=d9C-24dEDM63gFm75nU-dXrrjS2zZi7Nfkv40BGnHwM,1941
|
|
176
|
-
invenio_vocabularies/services/config.py,sha256=
|
|
178
|
+
invenio_vocabularies/services/config.py,sha256=H5l1PQ-72-LyLXPiouvU9_7lqWZcdKOrGVSTlyldIdE,4787
|
|
177
179
|
invenio_vocabularies/services/facets.py,sha256=qvdHoGSJJr90dZHSVe0-hlO1r0LtTnFVSjrt9PNuNAg,3872
|
|
178
180
|
invenio_vocabularies/services/permissions.py,sha256=nU1t_aW-RimFTWHbg9SivfzoP3P2Z5CqZ16U4jX5wN8,821
|
|
179
181
|
invenio_vocabularies/services/querystr.py,sha256=X3JHVF9B0O0iLWrnW3ok_bf_8jA-Cs_oAcYYkGOm3Uw,1829
|
|
180
182
|
invenio_vocabularies/services/results.py,sha256=6LZIpzWSbt9wpRNWgjA1uIM4RFooOYTkHcp5-PnIJdU,3767
|
|
181
183
|
invenio_vocabularies/services/schema.py,sha256=mwIBFylpQlWw1M6h_axc-z4Yd7X3Z1S0PxJOlZGpfrQ,4634
|
|
182
|
-
invenio_vocabularies/services/service.py,sha256=
|
|
184
|
+
invenio_vocabularies/services/service.py,sha256=cF2FV4QTyCUQwaokeqoppqeYJZeRrtbvXYdi9T4U6uQ,6397
|
|
183
185
|
invenio_vocabularies/services/tasks.py,sha256=AH0XifkOypsEdh8LyjmlHnPLQK5qqUJC8cNVWGkbqks,788
|
|
184
186
|
invenio_vocabularies/services/custom_fields/__init__.py,sha256=QgvSsn-S1xLzbZ57pjjGTt5oI3HqzXHVjwGTtuPgzN8,421
|
|
185
187
|
invenio_vocabularies/services/custom_fields/subject.py,sha256=ZM-ZkaxoouF9lL62smOtLxsjQQZwiQs0jG3qGruP6nY,2231
|
|
@@ -187,7 +189,7 @@ invenio_vocabularies/services/custom_fields/vocabulary.py,sha256=oQwI8Aoi2Nr9k3e
|
|
|
187
189
|
invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html,sha256=Fr8xRfKYiytuTfbtH7gfasNXwFIcjPFnXV4F5oGNUkM,681
|
|
188
190
|
invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabularies-list.html,sha256=-gDwRctqIkSzh9ial8zfbA4o41ARM-Mq-THkcJ87U00,359
|
|
189
191
|
invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html,sha256=2dfQzRFl5RwUwle245sxWGnObwJQXr-e_bBzpe_PkkA,2684
|
|
190
|
-
invenio_vocabularies/translations/messages.pot,sha256=
|
|
192
|
+
invenio_vocabularies/translations/messages.pot,sha256=kyRQs0jzNzypK2rKpCCDyPbuTbMcblPCZzKr6xdnRiQ,5173
|
|
191
193
|
invenio_vocabularies/translations/af/LC_MESSAGES/messages.mo,sha256=HokSco2JpukLl_j07yQ2wjKmUf8_Zzru6KQtYdyLtEo,523
|
|
192
194
|
invenio_vocabularies/translations/af/LC_MESSAGES/messages.po,sha256=XXoiqCtGELaxl6hxRj31D3DCdgBUrz0oD3MYJUpcklM,3976
|
|
193
195
|
invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo,sha256=Y9h5ziLiSs431qRw0iFCBhKmgVNiqgw7T244iOTqyxs,2470
|
|
@@ -282,10 +284,10 @@ invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo,sha256=g1I5aNO8r
|
|
|
282
284
|
invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po,sha256=vg8qC8ofpAdJ3mQz7mWM1ylKDpiNWXFs7rlMdSPkgKk,4629
|
|
283
285
|
invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo,sha256=cqSm8NtMAwrP9O6qbmtkDtRT1e9D93qpsJN5X9_PPVw,600
|
|
284
286
|
invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po,sha256=9ACePz_EpB-LfcIJajZ2kp8Q04tcdrQLOtug162ZUss,4115
|
|
285
|
-
invenio_vocabularies-4.
|
|
286
|
-
invenio_vocabularies-4.
|
|
287
|
-
invenio_vocabularies-4.
|
|
288
|
-
invenio_vocabularies-4.
|
|
289
|
-
invenio_vocabularies-4.
|
|
290
|
-
invenio_vocabularies-4.
|
|
291
|
-
invenio_vocabularies-4.
|
|
287
|
+
invenio_vocabularies-4.5.0.dist-info/AUTHORS.rst,sha256=8d0p_WWE1r9DavvzMDi2D4YIGBHiMYcN3LYxqQOj8sY,291
|
|
288
|
+
invenio_vocabularies-4.5.0.dist-info/LICENSE,sha256=UvI8pR8jGWqe0sTkb_hRG6eIrozzWwWzyCGEpuXX4KE,1062
|
|
289
|
+
invenio_vocabularies-4.5.0.dist-info/METADATA,sha256=9lZtHbE5IjUC7mlSR-ly90SRyu7A1Y886IxljlcjLvs,8734
|
|
290
|
+
invenio_vocabularies-4.5.0.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
|
|
291
|
+
invenio_vocabularies-4.5.0.dist-info/entry_points.txt,sha256=qHHFkyU3r0COsKm5gCYuhP8tfsioBggxKAiEXNAbbjM,2803
|
|
292
|
+
invenio_vocabularies-4.5.0.dist-info/top_level.txt,sha256=x1gRNbaODF_bCD0SBLM3nVOFPGi06cmGX5X94WKrFKk,21
|
|
293
|
+
invenio_vocabularies-4.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|