invenio-vocabularies 4.1.1__py2.py3-none-any.whl → 4.2.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/administration/views/vocabularies.py +1 -0
- invenio_vocabularies/cli.py +5 -3
- invenio_vocabularies/config.py +2 -1
- invenio_vocabularies/contrib/affiliations/api.py +1 -2
- invenio_vocabularies/contrib/affiliations/datastreams.py +33 -8
- invenio_vocabularies/contrib/affiliations/services.py +1 -2
- invenio_vocabularies/contrib/awards/awards.py +2 -1
- invenio_vocabularies/contrib/awards/datastreams.py +1 -0
- invenio_vocabularies/contrib/awards/services.py +1 -2
- invenio_vocabularies/contrib/common/ror/datastreams.py +39 -5
- invenio_vocabularies/contrib/funders/datastreams.py +38 -11
- invenio_vocabularies/contrib/funders/funders.py +2 -1
- invenio_vocabularies/datastreams/readers.py +32 -13
- invenio_vocabularies/datastreams/tasks.py +25 -0
- invenio_vocabularies/datastreams/writers.py +19 -0
- invenio_vocabularies/factories.py +1 -0
- invenio_vocabularies/records/models.py +2 -4
- invenio_vocabularies/records/pidprovider.py +1 -2
- invenio_vocabularies/resources/__init__.py +1 -0
- invenio_vocabularies/resources/schema.py +2 -1
- invenio_vocabularies/services/custom_fields/subject.py +2 -1
- invenio_vocabularies/services/custom_fields/vocabulary.py +1 -1
- invenio_vocabularies/services/tasks.py +0 -30
- {invenio_vocabularies-4.1.1.dist-info → invenio_vocabularies-4.2.0.dist-info}/METADATA +9 -1
- {invenio_vocabularies-4.1.1.dist-info → invenio_vocabularies-4.2.0.dist-info}/RECORD +31 -30
- {invenio_vocabularies-4.1.1.dist-info → invenio_vocabularies-4.2.0.dist-info}/AUTHORS.rst +0 -0
- {invenio_vocabularies-4.1.1.dist-info → invenio_vocabularies-4.2.0.dist-info}/LICENSE +0 -0
- {invenio_vocabularies-4.1.1.dist-info → invenio_vocabularies-4.2.0.dist-info}/WHEEL +0 -0
- {invenio_vocabularies-4.1.1.dist-info → invenio_vocabularies-4.2.0.dist-info}/entry_points.txt +0 -0
- {invenio_vocabularies-4.1.1.dist-info → invenio_vocabularies-4.2.0.dist-info}/top_level.txt +0 -0
invenio_vocabularies/__init__.py
CHANGED
invenio_vocabularies/cli.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2020-
|
|
3
|
+
# Copyright (C) 2020-2024 CERN.
|
|
4
4
|
# Copyright (C) 2021 Graz University of Technology.
|
|
5
5
|
#
|
|
6
6
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
|
|
10
10
|
"""Commands to create and manage vocabularies."""
|
|
11
11
|
|
|
12
|
-
|
|
13
12
|
import click
|
|
14
13
|
from flask.cli import with_appcontext
|
|
15
14
|
from invenio_access.permissions import system_identity
|
|
@@ -101,7 +100,10 @@ def update(vocabulary, filepath=None, origin=None):
|
|
|
101
100
|
config = vc.get_config(filepath, origin)
|
|
102
101
|
|
|
103
102
|
for w_conf in config["writers"]:
|
|
104
|
-
w_conf["
|
|
103
|
+
if w_conf["type"] == "async":
|
|
104
|
+
w_conf["args"]["writer"]["args"]["update"] = True
|
|
105
|
+
else:
|
|
106
|
+
w_conf["args"]["update"] = True
|
|
105
107
|
|
|
106
108
|
success, errored, filtered = _process_vocab(config)
|
|
107
109
|
|
invenio_vocabularies/config.py
CHANGED
|
@@ -24,7 +24,7 @@ from .datastreams.readers import (
|
|
|
24
24
|
ZipReader,
|
|
25
25
|
)
|
|
26
26
|
from .datastreams.transformers import XMLTransformer
|
|
27
|
-
from .datastreams.writers import ServiceWriter, YamlWriter
|
|
27
|
+
from .datastreams.writers import AsyncWriter, ServiceWriter, YamlWriter
|
|
28
28
|
from .resources import VocabulariesResourceConfig
|
|
29
29
|
from .services.config import VocabulariesServiceConfig
|
|
30
30
|
|
|
@@ -134,6 +134,7 @@ VOCABULARIES_DATASTREAM_TRANSFORMERS = {
|
|
|
134
134
|
VOCABULARIES_DATASTREAM_WRITERS = {
|
|
135
135
|
"service": ServiceWriter,
|
|
136
136
|
"yaml": YamlWriter,
|
|
137
|
+
"async": AsyncWriter,
|
|
137
138
|
}
|
|
138
139
|
"""Data Streams writers."""
|
|
139
140
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2021 CERN.
|
|
3
|
+
# Copyright (C) 2021-2024 CERN.
|
|
4
4
|
#
|
|
5
5
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
6
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
"""Vocabulary affiliations."""
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
from .affiliations import record_type
|
|
13
12
|
|
|
14
13
|
Affiliation = record_type.record_cls
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
"""Affiliations datastreams, transformers, writers and readers."""
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from flask import current_app
|
|
13
13
|
from invenio_i18n import lazy_gettext as _
|
|
14
14
|
|
|
15
15
|
from ...datastreams.writers import ServiceWriter
|
|
16
|
-
from .
|
|
16
|
+
from ..common.ror.datastreams import RORTransformer
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class AffiliationsServiceWriter(ServiceWriter):
|
|
@@ -29,9 +29,35 @@ class AffiliationsServiceWriter(ServiceWriter):
|
|
|
29
29
|
return entry["id"]
|
|
30
30
|
|
|
31
31
|
|
|
32
|
+
class AffiliationsRORTransformer(RORTransformer):
|
|
33
|
+
"""Affiliations ROR Transformer."""
|
|
34
|
+
|
|
35
|
+
def __init__(
|
|
36
|
+
self, *args, vocab_schemes=None, funder_fundref_doi_prefix=None, **kwargs
|
|
37
|
+
):
|
|
38
|
+
"""Constructor."""
|
|
39
|
+
if vocab_schemes is None:
|
|
40
|
+
vocab_schemes = current_app.config.get("VOCABULARIES_AFFILIATION_SCHEMES")
|
|
41
|
+
super().__init__(
|
|
42
|
+
*args,
|
|
43
|
+
vocab_schemes=vocab_schemes,
|
|
44
|
+
funder_fundref_doi_prefix=funder_fundref_doi_prefix,
|
|
45
|
+
**kwargs
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
VOCABULARIES_DATASTREAM_READERS = {}
|
|
50
|
+
"""Affiliations datastream readers."""
|
|
51
|
+
|
|
32
52
|
VOCABULARIES_DATASTREAM_WRITERS = {
|
|
33
53
|
"affiliations-service": AffiliationsServiceWriter,
|
|
34
54
|
}
|
|
55
|
+
"""Affiliations datastream writers."""
|
|
56
|
+
|
|
57
|
+
VOCABULARIES_DATASTREAM_TRANSFORMERS = {
|
|
58
|
+
"ror-affiliations": AffiliationsRORTransformer,
|
|
59
|
+
}
|
|
60
|
+
"""Affiliations datastream transformers."""
|
|
35
61
|
|
|
36
62
|
|
|
37
63
|
DATASTREAM_CONFIG = {
|
|
@@ -46,17 +72,16 @@ DATASTREAM_CONFIG = {
|
|
|
46
72
|
],
|
|
47
73
|
"transformers": [
|
|
48
74
|
{
|
|
49
|
-
"type": "ror",
|
|
50
|
-
"args": {
|
|
51
|
-
"vocab_schemes": affiliation_schemes,
|
|
52
|
-
},
|
|
75
|
+
"type": "ror-affiliations",
|
|
53
76
|
},
|
|
54
77
|
],
|
|
55
78
|
"writers": [
|
|
56
79
|
{
|
|
57
|
-
"type": "
|
|
80
|
+
"type": "async",
|
|
58
81
|
"args": {
|
|
59
|
-
"
|
|
82
|
+
"writer": {
|
|
83
|
+
"type": "affiliations-service",
|
|
84
|
+
}
|
|
60
85
|
},
|
|
61
86
|
}
|
|
62
87
|
],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2021 CERN.
|
|
3
|
+
# Copyright (C) 2021-2024 CERN.
|
|
4
4
|
#
|
|
5
5
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
6
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
"""Vocabulary affiliations."""
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
from .affiliations import record_type
|
|
13
12
|
|
|
14
13
|
AffiliationsServiceConfig = record_type.service_config_cls
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2022 CERN.
|
|
3
|
+
# Copyright (C) 2022-2024 CERN.
|
|
4
4
|
#
|
|
5
5
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
6
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
7
7
|
# details.
|
|
8
8
|
|
|
9
9
|
"""Vocabulary awards."""
|
|
10
|
+
|
|
10
11
|
from flask_resources import (
|
|
11
12
|
BaseListSchema,
|
|
12
13
|
JSONSerializer,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2022 CERN.
|
|
3
|
+
# Copyright (C) 2022-2024 CERN.
|
|
4
4
|
#
|
|
5
5
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
6
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
"""Vocabulary awards."""
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
from .awards import record_type
|
|
13
12
|
|
|
14
13
|
AwardsServiceConfig = record_type.service_config_cls
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"""ROR-related Datastreams Readers/Writers/Transformers module."""
|
|
11
11
|
|
|
12
12
|
import io
|
|
13
|
+
from datetime import datetime
|
|
13
14
|
|
|
14
15
|
import requests
|
|
15
16
|
from idutils import normalize_ror
|
|
@@ -22,6 +23,11 @@ from invenio_vocabularies.datastreams.transformers import BaseTransformer
|
|
|
22
23
|
class RORHTTPReader(BaseReader):
|
|
23
24
|
"""ROR HTTP Reader returning an in-memory binary stream of the latest ROR data dump ZIP file."""
|
|
24
25
|
|
|
26
|
+
def __init__(self, origin=None, mode="r", since=None, *args, **kwargs):
|
|
27
|
+
"""Constructor."""
|
|
28
|
+
self._since = since
|
|
29
|
+
super().__init__(origin, mode, *args, **kwargs)
|
|
30
|
+
|
|
25
31
|
def _iter(self, fp, *args, **kwargs):
|
|
26
32
|
raise NotImplementedError(
|
|
27
33
|
"RORHTTPReader downloads one file and therefore does not iterate through items"
|
|
@@ -34,15 +40,41 @@ class RORHTTPReader(BaseReader):
|
|
|
34
40
|
"RORHTTPReader does not support being chained after another reader"
|
|
35
41
|
)
|
|
36
42
|
|
|
43
|
+
# Follow the DOI to get the link of the linkset
|
|
44
|
+
dataset_doi_link = "https://doi.org/10.5281/zenodo.6347574"
|
|
45
|
+
landing_page = requests.get(dataset_doi_link, allow_redirects=True)
|
|
46
|
+
landing_page.raise_for_status()
|
|
47
|
+
|
|
37
48
|
# Call the signposting `linkset+json` endpoint for the Concept DOI (i.e. latest version) of the ROR data dump.
|
|
38
49
|
# See: https://github.com/inveniosoftware/rfcs/blob/master/rfcs/rdm-0071-signposting.md#provide-an-applicationlinksetjson-endpoint
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
50
|
+
if "linkset" not in landing_page.links:
|
|
51
|
+
raise ReaderError("Linkset not found in the ROR dataset record.")
|
|
52
|
+
linkset_response = requests.get(
|
|
53
|
+
landing_page.links["linkset"]["url"],
|
|
54
|
+
headers={"Accept": "application/linkset+json"},
|
|
55
|
+
)
|
|
56
|
+
linkset_response.raise_for_status()
|
|
57
|
+
|
|
58
|
+
if self._since:
|
|
59
|
+
for link in linkset_response.json()["linkset"]:
|
|
60
|
+
if "type" in link and link["type"] == "application/ld+json":
|
|
61
|
+
json_ld_reponse = requests.get(
|
|
62
|
+
link["anchor"], headers={"Accept": link["type"]}
|
|
63
|
+
)
|
|
64
|
+
json_ld_reponse.raise_for_status()
|
|
65
|
+
|
|
66
|
+
# TODO Update to use dateCreated once the field is added to InvenioRDM. (https://github.com/inveniosoftware/invenio-rdm-records/issues/1777)
|
|
67
|
+
last_dump_date = json_ld_reponse.json()["datePublished"]
|
|
68
|
+
if datetime.fromisoformat(last_dump_date) < datetime.fromisoformat(
|
|
69
|
+
self._since
|
|
70
|
+
):
|
|
71
|
+
return
|
|
72
|
+
break
|
|
73
|
+
else:
|
|
74
|
+
raise ReaderError("Couldn't find json-ld in publisher's linkset.")
|
|
43
75
|
|
|
44
76
|
# Extract the Landing page Link Set Object located as the first (index 0) item.
|
|
45
|
-
landing_page_linkset =
|
|
77
|
+
landing_page_linkset = linkset_response.json()["linkset"][0]
|
|
46
78
|
|
|
47
79
|
# Extract the URL of the only ZIP file linked to the record.
|
|
48
80
|
landing_page_zip_items = [
|
|
@@ -164,3 +196,5 @@ class RORTransformer(BaseTransformer):
|
|
|
164
196
|
VOCABULARIES_DATASTREAM_TRANSFORMERS = {
|
|
165
197
|
"ror": RORTransformer,
|
|
166
198
|
}
|
|
199
|
+
|
|
200
|
+
VOCABULARIES_DATASTREAM_WRITERS = {}
|
|
@@ -9,12 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
"""Funders datastreams, transformers, writers and readers."""
|
|
11
11
|
|
|
12
|
-
from
|
|
13
|
-
from invenio_access.permissions import system_identity
|
|
12
|
+
from flask import current_app
|
|
14
13
|
from invenio_i18n import lazy_gettext as _
|
|
15
14
|
|
|
16
15
|
from ...datastreams.writers import ServiceWriter
|
|
17
|
-
from .
|
|
16
|
+
from ..common.ror.datastreams import RORTransformer
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
class FundersServiceWriter(ServiceWriter):
|
|
@@ -30,10 +29,40 @@ class FundersServiceWriter(ServiceWriter):
|
|
|
30
29
|
return entry["id"]
|
|
31
30
|
|
|
32
31
|
|
|
32
|
+
class FundersRORTransformer(RORTransformer):
|
|
33
|
+
"""Funders ROR Transformer."""
|
|
34
|
+
|
|
35
|
+
def __init__(
|
|
36
|
+
self, *args, vocab_schemes=None, funder_fundref_doi_prefix=None, **kwargs
|
|
37
|
+
):
|
|
38
|
+
"""Constructor."""
|
|
39
|
+
if vocab_schemes is None:
|
|
40
|
+
vocab_schemes = current_app.config.get("VOCABULARIES_FUNDER_SCHEMES")
|
|
41
|
+
if funder_fundref_doi_prefix is None:
|
|
42
|
+
funder_fundref_doi_prefix = current_app.config.get(
|
|
43
|
+
"VOCABULARIES_FUNDER_DOI_PREFIX"
|
|
44
|
+
)
|
|
45
|
+
super().__init__(
|
|
46
|
+
*args,
|
|
47
|
+
vocab_schemes=vocab_schemes,
|
|
48
|
+
funder_fundref_doi_prefix=funder_fundref_doi_prefix,
|
|
49
|
+
**kwargs
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
VOCABULARIES_DATASTREAM_READERS = {}
|
|
54
|
+
"""Funders datastreams writers."""
|
|
55
|
+
|
|
33
56
|
VOCABULARIES_DATASTREAM_WRITERS = {
|
|
34
57
|
"funders-service": FundersServiceWriter,
|
|
35
58
|
}
|
|
36
|
-
"""Funders
|
|
59
|
+
"""Funders datastreams writers."""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
VOCABULARIES_DATASTREAM_TRANSFORMERS = {
|
|
63
|
+
"ror-funders": FundersRORTransformer,
|
|
64
|
+
}
|
|
65
|
+
"""Funders datastreams transformers."""
|
|
37
66
|
|
|
38
67
|
|
|
39
68
|
DATASTREAM_CONFIG = {
|
|
@@ -48,18 +77,16 @@ DATASTREAM_CONFIG = {
|
|
|
48
77
|
],
|
|
49
78
|
"transformers": [
|
|
50
79
|
{
|
|
51
|
-
"type": "ror",
|
|
52
|
-
"args": {
|
|
53
|
-
"vocab_schemes": funder_schemes,
|
|
54
|
-
"funder_fundref_doi_prefix": funder_fundref_doi_prefix,
|
|
55
|
-
},
|
|
80
|
+
"type": "ror-funders",
|
|
56
81
|
},
|
|
57
82
|
],
|
|
58
83
|
"writers": [
|
|
59
84
|
{
|
|
60
|
-
"type": "
|
|
85
|
+
"type": "async",
|
|
61
86
|
"args": {
|
|
62
|
-
"
|
|
87
|
+
"writer": {
|
|
88
|
+
"type": "funders-service",
|
|
89
|
+
}
|
|
63
90
|
},
|
|
64
91
|
}
|
|
65
92
|
],
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2022 CERN.
|
|
3
|
+
# Copyright (C) 2022-2024 CERN.
|
|
4
4
|
#
|
|
5
5
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
6
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
7
7
|
# details.
|
|
8
8
|
|
|
9
9
|
"""Vocabulary funders."""
|
|
10
|
+
|
|
10
11
|
from flask_resources import (
|
|
11
12
|
BaseListSchema,
|
|
12
13
|
JSONSerializer,
|
|
@@ -270,19 +270,38 @@ class OAIPMHReader(BaseReader):
|
|
|
270
270
|
self.xml.find(f".//{self._oai_namespace}metadata").getchildren()[0],
|
|
271
271
|
)
|
|
272
272
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
273
|
+
if self._verb == "ListRecords":
|
|
274
|
+
scythe.class_mapping["ListRecords"] = OAIRecord
|
|
275
|
+
try:
|
|
276
|
+
records = scythe.list_records(
|
|
277
|
+
from_=self._from,
|
|
278
|
+
until=self._until,
|
|
279
|
+
metadata_prefix=self._metadata_prefix,
|
|
280
|
+
set_=self._set,
|
|
281
|
+
ignore_deleted=True,
|
|
282
|
+
)
|
|
283
|
+
for record in records:
|
|
284
|
+
yield {"record": record}
|
|
285
|
+
except oaipmh_scythe.NoRecordsMatch:
|
|
286
|
+
raise ReaderError("No records found in OAI-PMH request.")
|
|
287
|
+
else:
|
|
288
|
+
scythe.class_mapping["GetRecord"] = OAIRecord
|
|
289
|
+
try:
|
|
290
|
+
headers = scythe.list_identifiers(
|
|
291
|
+
from_=self._from,
|
|
292
|
+
until=self._until,
|
|
293
|
+
metadata_prefix=self._metadata_prefix,
|
|
294
|
+
set_=self._set,
|
|
295
|
+
ignore_deleted=True,
|
|
296
|
+
)
|
|
297
|
+
for header in headers:
|
|
298
|
+
record = scythe.get_record(
|
|
299
|
+
identifier=header.identifier,
|
|
300
|
+
metadata_prefix=self._metadata_prefix,
|
|
301
|
+
)
|
|
302
|
+
yield {"record": record}
|
|
303
|
+
except oaipmh_scythe.NoRecordsMatch:
|
|
304
|
+
raise ReaderError("No records found in OAI-PMH request.")
|
|
286
305
|
|
|
287
306
|
def read(self, item=None, *args, **kwargs):
|
|
288
307
|
"""Reads from item or opens the file descriptor from origin."""
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2022-2024 CERN.
|
|
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
|
+
"""Data Streams Celery tasks."""
|
|
10
|
+
|
|
11
|
+
from celery import shared_task
|
|
12
|
+
|
|
13
|
+
from ..datastreams import StreamEntry
|
|
14
|
+
from ..datastreams.factories import WriterFactory
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@shared_task(ignore_result=True)
|
|
18
|
+
def write_entry(writer, entry):
|
|
19
|
+
"""Write an entry.
|
|
20
|
+
|
|
21
|
+
:param writer: writer configuration as accepted by the WriterFactory.
|
|
22
|
+
:param entry: dictionary, StreamEntry is not serializable.
|
|
23
|
+
"""
|
|
24
|
+
writer = WriterFactory.create(config=writer)
|
|
25
|
+
writer.write(StreamEntry(entry))
|
|
@@ -20,6 +20,7 @@ from marshmallow import ValidationError
|
|
|
20
20
|
|
|
21
21
|
from .datastreams import StreamEntry
|
|
22
22
|
from .errors import WriterError
|
|
23
|
+
from .tasks import write_entry
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
class BaseWriter(ABC):
|
|
@@ -106,3 +107,21 @@ class YamlWriter(BaseWriter):
|
|
|
106
107
|
yaml.safe_dump([stream_entry.entry], file, allow_unicode=True)
|
|
107
108
|
|
|
108
109
|
return stream_entry
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class AsyncWriter(BaseWriter):
|
|
113
|
+
"""Writes the entries asynchronously (celery task)."""
|
|
114
|
+
|
|
115
|
+
def __init__(self, writer, *args, **kwargs):
|
|
116
|
+
"""Constructor.
|
|
117
|
+
|
|
118
|
+
:param writer: writer to use.
|
|
119
|
+
"""
|
|
120
|
+
self._writer = writer
|
|
121
|
+
super().__init__(*args, **kwargs)
|
|
122
|
+
|
|
123
|
+
def write(self, stream_entry, *args, **kwargs):
|
|
124
|
+
"""Launches a celery task to write an entry."""
|
|
125
|
+
write_entry.delay(self._writer, stream_entry.entry)
|
|
126
|
+
|
|
127
|
+
return stream_entry
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2020-
|
|
3
|
+
# Copyright (C) 2020-2024 CERN.
|
|
4
4
|
#
|
|
5
5
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
6
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -79,9 +79,7 @@ class VocabularyScheme(db.Model):
|
|
|
79
79
|
"""Create a new vocabulary subtype."""
|
|
80
80
|
banned = [",", ":"]
|
|
81
81
|
for b in banned:
|
|
82
|
-
assert
|
|
83
|
-
b not in data["id"]
|
|
84
|
-
), f"No '{b}' allowed in VocabularyScheme.id" # noqa
|
|
82
|
+
assert b not in data["id"], f"No '{b}' allowed in VocabularyScheme.id"
|
|
85
83
|
|
|
86
84
|
with db.session.begin_nested():
|
|
87
85
|
obj = cls(**data)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2021 CERN.
|
|
3
|
+
# Copyright (C) 2021-2024 CERN.
|
|
4
4
|
#
|
|
5
5
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
6
|
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
"""Persistent identifier provider for vocabularies."""
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
from invenio_pidstore.models import PIDStatus
|
|
13
12
|
from invenio_pidstore.providers.base import BaseProvider
|
|
14
13
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2020-
|
|
3
|
+
# Copyright (C) 2020-2024 CERN.
|
|
4
4
|
# Copyright (C) 2021 Northwestern University.
|
|
5
5
|
#
|
|
6
6
|
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
# details.
|
|
9
9
|
|
|
10
10
|
"""Vocabulary resource schema."""
|
|
11
|
+
|
|
11
12
|
from marshmallow import Schema, fields
|
|
12
13
|
|
|
13
14
|
from invenio_vocabularies.resources.serializer import L10NString
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
"""Custom fields."""
|
|
10
|
+
|
|
10
11
|
from invenio_i18n import lazy_gettext as _
|
|
11
12
|
|
|
12
13
|
from ...contrib.subjects.api import Subject
|
|
@@ -25,7 +26,7 @@ class SubjectCF(VocabularyCF):
|
|
|
25
26
|
vocabulary_id="subjects",
|
|
26
27
|
schema=SubjectRelationSchema,
|
|
27
28
|
ui_schema=SubjectRelationSchema,
|
|
28
|
-
**kwargs
|
|
29
|
+
**kwargs,
|
|
29
30
|
)
|
|
30
31
|
self.pid_field = Subject.pid
|
|
31
32
|
|
|
@@ -11,7 +11,6 @@ from celery import shared_task
|
|
|
11
11
|
from flask import current_app
|
|
12
12
|
|
|
13
13
|
from ..datastreams.factories import DataStreamFactory
|
|
14
|
-
from ..factories import get_vocabulary_config
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
@shared_task(ignore_result=True)
|
|
@@ -27,32 +26,3 @@ def process_datastream(config):
|
|
|
27
26
|
if result.errors:
|
|
28
27
|
for err in result.errors:
|
|
29
28
|
current_app.logger.error(err)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
@shared_task()
|
|
33
|
-
def import_funders():
|
|
34
|
-
"""Import the funders vocabulary.
|
|
35
|
-
|
|
36
|
-
Only new records are imported.
|
|
37
|
-
Existing records are not updated.
|
|
38
|
-
"""
|
|
39
|
-
vc = get_vocabulary_config("funders")
|
|
40
|
-
config = vc.get_config()
|
|
41
|
-
|
|
42
|
-
# When importing funders via a Celery task, make sure that we are automatically downloading the ROR file,
|
|
43
|
-
# instead of relying on a local file on the file system.
|
|
44
|
-
if config["readers"][0]["type"] == "ror-http":
|
|
45
|
-
readers_config_with_ror_http = config["readers"]
|
|
46
|
-
else:
|
|
47
|
-
readers_config_with_ror_http = [{"type": "ror-http"}] + config["readers"]
|
|
48
|
-
|
|
49
|
-
ds = DataStreamFactory.create(
|
|
50
|
-
readers_config=readers_config_with_ror_http,
|
|
51
|
-
transformers_config=config.get("transformers"),
|
|
52
|
-
writers_config=config["writers"],
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
for result in ds.process():
|
|
56
|
-
if result.errors:
|
|
57
|
-
for err in result.errors:
|
|
58
|
-
current_app.logger.exception(err)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: invenio-vocabularies
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.2.0
|
|
4
4
|
Summary: "Invenio module for managing vocabularies."
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-vocabularies
|
|
6
6
|
Author: CERN
|
|
@@ -78,6 +78,14 @@ https://invenio-vocabularies.readthedocs.io/
|
|
|
78
78
|
Changes
|
|
79
79
|
=======
|
|
80
80
|
|
|
81
|
+
Version v4.2.0 (released 2024-07-24)
|
|
82
|
+
|
|
83
|
+
- ror: check last update; use ld+json for metadata (#367)
|
|
84
|
+
- tasks: remove import funders task
|
|
85
|
+
- funders: add and export custom transformer
|
|
86
|
+
- affiliations: add and export custom transformer
|
|
87
|
+
- datastreams: implement asynchronous writer
|
|
88
|
+
|
|
81
89
|
Version v4.1.1 (released 2024-07-15)
|
|
82
90
|
|
|
83
91
|
- installation: use invenio-oaipmh-scythe from PyPI
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
invenio_vocabularies/__init__.py,sha256=
|
|
2
|
-
invenio_vocabularies/cli.py,sha256=
|
|
3
|
-
invenio_vocabularies/config.py,sha256=
|
|
1
|
+
invenio_vocabularies/__init__.py,sha256=fOsOa6766lKWONOkvvx15eYhnKovuRiq9tWwrXh_5HI,377
|
|
2
|
+
invenio_vocabularies/cli.py,sha256=0PpQttop3lTXxM29IpY70MXFFPhb9apbiutdb7WDBvw,5356
|
|
3
|
+
invenio_vocabularies/config.py,sha256=f3J658yL7E0ShFN99Jq2q1b5AJF1lDeiDyzijDmh8qA,4497
|
|
4
4
|
invenio_vocabularies/ext.py,sha256=GujJ4UARd4Fxf4z7zznRk9JAgHamZuYCOdrKU5czg00,5987
|
|
5
|
-
invenio_vocabularies/factories.py,sha256=
|
|
5
|
+
invenio_vocabularies/factories.py,sha256=JBvvhg5f47Cy9cJZ1-OBalh750ErycwstLj1e9Gn4W8,2903
|
|
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
9
|
invenio_vocabularies/webpack.py,sha256=aLRm0ut3rXPb8D87pVA9mO_ODq7WOSZdsJQyU4iMLoI,1891
|
|
10
10
|
invenio_vocabularies/administration/__init__.py,sha256=0bDp2Aw8aZth7C-q9Xn9rxeCUQQRoIUxoWWWwPvKbXA,308
|
|
11
11
|
invenio_vocabularies/administration/views/__init__.py,sha256=31DP4jLG6q4HQlzSRiGLPxUjHPUCCl4N34y4XMuPP6g,313
|
|
12
|
-
invenio_vocabularies/administration/views/vocabularies.py,sha256=
|
|
12
|
+
invenio_vocabularies/administration/views/vocabularies.py,sha256=JyKr1OYF9DO89zvWCNOtNfClO_QptdHdjvgY1kkImnw,1290
|
|
13
13
|
invenio_vocabularies/alembic/17c703ce1eb7_create_names_table.py,sha256=2QGs0Ofi6yd93VzIBqghNi47hrZtuLf0DylKyvVzskI,1572
|
|
14
14
|
invenio_vocabularies/alembic/4a9a4fd235f8_create_vocabulary_schemes.py,sha256=Ywtp8qOFcI3PxUXemHdvy_VwdcUVtMFV1sFgNAmYrms,1054
|
|
15
15
|
invenio_vocabularies/alembic/4f365fced43f_create_vocabularies_tables.py,sha256=jSrr0CLRchYADjkFeod0L-oophq2woXtRwbUU5Vytiw,3039
|
|
@@ -44,14 +44,14 @@ invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/script
|
|
|
44
44
|
invenio_vocabularies/contrib/__init__.py,sha256=C5eDia6tAVBCrbb5hd_KnxmczyBoF87NIBUCLID-Tzc,240
|
|
45
45
|
invenio_vocabularies/contrib/affiliations/__init__.py,sha256=rV8YAzBRoSKsBYcVjCNJh6j7ITuPRfurwj9HJHRjkN8,565
|
|
46
46
|
invenio_vocabularies/contrib/affiliations/affiliations.py,sha256=Ph0z7bT_tudsWDKFaiksCBngsG-eO6Xpbe3KdejfLXI,1591
|
|
47
|
-
invenio_vocabularies/contrib/affiliations/api.py,sha256
|
|
47
|
+
invenio_vocabularies/contrib/affiliations/api.py,sha256=5nIOvpfcseuAAg2XgblHc8jb7TAdfU79XOBRpL-p398,326
|
|
48
48
|
invenio_vocabularies/contrib/affiliations/config.py,sha256=u1sHeihy0B0e6w5e3HsbrC9e8A4WTLKCYPXUdcX-ZTs,1605
|
|
49
|
-
invenio_vocabularies/contrib/affiliations/datastreams.py,sha256=
|
|
49
|
+
invenio_vocabularies/contrib/affiliations/datastreams.py,sha256=oojLIh9jCE8zr0dj8KFepxPqsOn2SBSXQsX8L3XwFxs,2383
|
|
50
50
|
invenio_vocabularies/contrib/affiliations/facets.py,sha256=w316MGvtdyTpRCPOpCEmMxxLraRkbFFb1VvLkFlEc9o,1229
|
|
51
51
|
invenio_vocabularies/contrib/affiliations/models.py,sha256=JUcj-1ydc2Cw2Rsc24JwXE3TFBJ_6fivhUYhGq4rT8A,329
|
|
52
52
|
invenio_vocabularies/contrib/affiliations/resources.py,sha256=DBEbRxQmp-o-PeZlgFG588Q4sGcruuwIL8L9O-SzCes,435
|
|
53
53
|
invenio_vocabularies/contrib/affiliations/schema.py,sha256=O4s6aHcO1w4_aAfGuYLx_eLS6nctd6ktyIuHB6dMKqw,1842
|
|
54
|
-
invenio_vocabularies/contrib/affiliations/services.py,sha256=
|
|
54
|
+
invenio_vocabularies/contrib/affiliations/services.py,sha256=KJbv46c2LuQOW3xz7KVLtfZjWR8vhMRPHninlUEhrss,395
|
|
55
55
|
invenio_vocabularies/contrib/affiliations/jsonschemas/__init__.py,sha256=ILyZ5kejTr0p50macMBPALQCTJSe4KEE3_cgf2p3zV4,252
|
|
56
56
|
invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json,sha256=be-glRNIBtIO87Tcyw8d68OdG4J8-ojjiCj8UJBnckg,1649
|
|
57
57
|
invenio_vocabularies/contrib/affiliations/mappings/__init__.py,sha256=q7hb9lcT9KLRSGr6G7qpL8Top6wZfzj_E4uzGxnraTw,295
|
|
@@ -63,14 +63,14 @@ invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py,sha256=zr9YyyK
|
|
|
63
63
|
invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json,sha256=PaHChFsf9r7xRnZ_7ro8SWNEXpWv4uUYrl32g0QESZs,2096
|
|
64
64
|
invenio_vocabularies/contrib/awards/__init__.py,sha256=KwCmwFalz-3pDs9iTa5TKUidBjLepnUMqpCBXRiQOO8,474
|
|
65
65
|
invenio_vocabularies/contrib/awards/api.py,sha256=OXukE7PLXs45BTtqVrhvGBNqLmQaI-CgXmHTCi36LZk,303
|
|
66
|
-
invenio_vocabularies/contrib/awards/awards.py,sha256=
|
|
66
|
+
invenio_vocabularies/contrib/awards/awards.py,sha256=FU7XKSsfEIqaQYyCFjPMDbD2z-lwGsicuLXg69HO6oE,2701
|
|
67
67
|
invenio_vocabularies/contrib/awards/config.py,sha256=PlDHabkWDUzwa1Fvk_U2hG83kQYBqM1IyChg8Yg_VlY,1630
|
|
68
|
-
invenio_vocabularies/contrib/awards/datastreams.py,sha256=
|
|
68
|
+
invenio_vocabularies/contrib/awards/datastreams.py,sha256=wQIhLGXSYCIjwXzTofpiaSjnO1XuDpiOlH5TqiGix4c,8245
|
|
69
69
|
invenio_vocabularies/contrib/awards/models.py,sha256=mM-kSNf7kDH3oIbV8epxxbUi7muYqi4JreXxgWXlVzw,318
|
|
70
70
|
invenio_vocabularies/contrib/awards/resources.py,sha256=_9YTqbhz8axFXGhG5y4WyjE27p9n-7e3c6HoBRditPA,411
|
|
71
71
|
invenio_vocabularies/contrib/awards/schema.py,sha256=bg-09nvhEn-ipzaztK1iNbKc59saAM8v8hAW9zpKDAc,2786
|
|
72
72
|
invenio_vocabularies/contrib/awards/serializer.py,sha256=MDnq41EJf_LFu-UT6qlB3-O2S7aEYePIzQ_immMnwag,1139
|
|
73
|
-
invenio_vocabularies/contrib/awards/services.py,sha256=
|
|
73
|
+
invenio_vocabularies/contrib/awards/services.py,sha256=zwOMHqa4SyZuHopGZwEKhfw3kUHrWg73_4zMNo5kOe4,371
|
|
74
74
|
invenio_vocabularies/contrib/awards/jsonschemas/__init__.py,sha256=XB2l9hr53vqTk7o9lmy18FWGhHEUvNHu8D6nMF8Bz4k,246
|
|
75
75
|
invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json,sha256=XKHjWWmv7Ph6v-JxPsP09V_6Pr9QNJcJeZdaU5HZWwU,1117
|
|
76
76
|
invenio_vocabularies/contrib/awards/mappings/__init__.py,sha256=PbM5urjiSrJSx4Ak-H_lJrOOVKGT38MrGgRv61gIbAM,243
|
|
@@ -82,13 +82,13 @@ 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=joEiJwYawEaUggOZAQF6JrP8jHPfnAHmocK07nLMbO0,7893
|
|
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
|
|
89
|
-
invenio_vocabularies/contrib/funders/datastreams.py,sha256=
|
|
89
|
+
invenio_vocabularies/contrib/funders/datastreams.py,sha256=G3UBT_kXei08zAKD44oaeERbkCVkJ9q9pFUoXpk3yiQ,2480
|
|
90
90
|
invenio_vocabularies/contrib/funders/facets.py,sha256=a068TVtt74Ncu0latb177LFK8EdnpbMOWecAKozA04M,1245
|
|
91
|
-
invenio_vocabularies/contrib/funders/funders.py,sha256=
|
|
91
|
+
invenio_vocabularies/contrib/funders/funders.py,sha256=KtUydQzQZPKtT1YMbBSIRcGc2eBmdkk5Zqavo54zK1E,2298
|
|
92
92
|
invenio_vocabularies/contrib/funders/models.py,sha256=RAU-_YVOUNVCn03_XGJ2czcVwXTaZPk5w7X_bMAgMOk,314
|
|
93
93
|
invenio_vocabularies/contrib/funders/resources.py,sha256=He4gXd737ovdrHL-HB9dX7AGxp1BVJ9QteIO7JWUVSE,415
|
|
94
94
|
invenio_vocabularies/contrib/funders/schema.py,sha256=tEOdMU2i0z_3PkXL1yD1qIJeoAy_8n22xxv8V7iltz0,2480
|
|
@@ -143,14 +143,15 @@ invenio_vocabularies/datastreams/__init__.py,sha256=VPefh6k4Q3eYxKIW8I5zXUGucntp
|
|
|
143
143
|
invenio_vocabularies/datastreams/datastreams.py,sha256=_jSXv2yAvSjt8btMoLJlqXOkqBzYb3Xe9m2GH50Nwag,3987
|
|
144
144
|
invenio_vocabularies/datastreams/errors.py,sha256=IDUZ3gNtYGrhcOgApHCms1gNNJTyJzoMPmG5JtIeYNU,678
|
|
145
145
|
invenio_vocabularies/datastreams/factories.py,sha256=H8a2gAy7KNImtdCdtqpVKC5gIvE3ON6U1Wn1_zaMlQ4,2181
|
|
146
|
-
invenio_vocabularies/datastreams/readers.py,sha256=
|
|
146
|
+
invenio_vocabularies/datastreams/readers.py,sha256=9WypPQFGWEIKcrra6oC8yxdGzVG3utd3CtrGx-AUxLM,10834
|
|
147
|
+
invenio_vocabularies/datastreams/tasks.py,sha256=V3bm8ebdaB1tkrZWR1DuCscxSzP-O5maZecPkOF3Dyw,694
|
|
147
148
|
invenio_vocabularies/datastreams/transformers.py,sha256=wspny-kazYMRHjkkyFfRVNIYzJxbjAqokRCBQ_-gXcY,1357
|
|
148
|
-
invenio_vocabularies/datastreams/writers.py,sha256=
|
|
149
|
+
invenio_vocabularies/datastreams/writers.py,sha256=UkrPOKyAOu8SsNyxBgdxYelCtPcBab6kbaIw-swVxlw,4153
|
|
149
150
|
invenio_vocabularies/datastreams/xml.py,sha256=HFa-lfxj7kFrr2IjeN1jxSLDfcvpBwO9nZLZF2-BryE,997
|
|
150
151
|
invenio_vocabularies/records/__init__.py,sha256=Uj7O6fYdAtLOkLXUGSAYPADBB7aqP4yVs9b6OAjA158,243
|
|
151
152
|
invenio_vocabularies/records/api.py,sha256=Lynt6Sz4BVN1orh0zgJ5ljhnUobEtcq8c22PmSeUo2U,1494
|
|
152
|
-
invenio_vocabularies/records/models.py,sha256=
|
|
153
|
-
invenio_vocabularies/records/pidprovider.py,sha256=
|
|
153
|
+
invenio_vocabularies/records/models.py,sha256=36CxObDMe-D9hoGaelAlR4ggZZTyXgRmCWPxZRpWF5w,2460
|
|
154
|
+
invenio_vocabularies/records/pidprovider.py,sha256=uFuo-M0Wqua0QhTS2z17YpzYDySwNfJaOi7rp0S0dPs,3840
|
|
154
155
|
invenio_vocabularies/records/jsonschemas/__init__.py,sha256=qr2BZMyMVvVRSeJzPCI8re2BlGokiDjeqwREkythSrQ,246
|
|
155
156
|
invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json,sha256=1qTs-Liji01HMitT8768urX3BhYXZmHWUGqV8VmOotU,372
|
|
156
157
|
invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json,sha256=x7kkCkuMNQ6tygb_RWf7QOlOtyG-kqKOH5FNnBn1cqo,1289
|
|
@@ -164,10 +165,10 @@ invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json,sha
|
|
|
164
165
|
invenio_vocabularies/records/systemfields/__init__.py,sha256=MRLoLF3h8VYuqJ9tbbgXjXkTDUniz24pVnujLX-psZI,406
|
|
165
166
|
invenio_vocabularies/records/systemfields/pid.py,sha256=5e2zZD0uHP5r32--KmuzjfHk3B5GXEV3yBuoKeit9mQ,3740
|
|
166
167
|
invenio_vocabularies/records/systemfields/relations.py,sha256=UbaiuxvAZorxNN4t63Y5ePc5OUJ_cYGAxLsFcET3E-g,1528
|
|
167
|
-
invenio_vocabularies/resources/__init__.py,sha256=
|
|
168
|
+
invenio_vocabularies/resources/__init__.py,sha256=UpNMJA1JacoJ2U1_dq20sds3lJK1TyMCV4zLOWpfRvI,664
|
|
168
169
|
invenio_vocabularies/resources/config.py,sha256=PooKsBd3KXoApc9zoSk-fkeQhzygYdGU4lH5FgQ3W2Q,3157
|
|
169
170
|
invenio_vocabularies/resources/resource.py,sha256=hJs5GD0XtcBafwgTI9n8FHK5Fb6agx8BgzF81K5vRbU,4229
|
|
170
|
-
invenio_vocabularies/resources/schema.py,sha256=
|
|
171
|
+
invenio_vocabularies/resources/schema.py,sha256=6stpU9qgLGoeGib3DWnyrHj6XLPxJKbEV7TVoJEK41M,542
|
|
171
172
|
invenio_vocabularies/resources/serializer.py,sha256=pwfckLdkMu1MNDkocyMg1XeX6RhbfeuV4fjDO5xKDxo,1190
|
|
172
173
|
invenio_vocabularies/services/__init__.py,sha256=6mi62EG21Id6x23nx0X193I6sVTakK6jOdYNEKPxXUk,522
|
|
173
174
|
invenio_vocabularies/services/components.py,sha256=d9C-24dEDM63gFm75nU-dXrrjS2zZi7Nfkv40BGnHwM,1941
|
|
@@ -178,10 +179,10 @@ invenio_vocabularies/services/querystr.py,sha256=X3JHVF9B0O0iLWrnW3ok_bf_8jA-Cs_
|
|
|
178
179
|
invenio_vocabularies/services/results.py,sha256=6LZIpzWSbt9wpRNWgjA1uIM4RFooOYTkHcp5-PnIJdU,3767
|
|
179
180
|
invenio_vocabularies/services/schema.py,sha256=mwIBFylpQlWw1M6h_axc-z4Yd7X3Z1S0PxJOlZGpfrQ,4634
|
|
180
181
|
invenio_vocabularies/services/service.py,sha256=rUPeb86Jv2WXzRp-RZDHLWsouCmJcqHpCmgrpLm2Vs4,6387
|
|
181
|
-
invenio_vocabularies/services/tasks.py,sha256=
|
|
182
|
+
invenio_vocabularies/services/tasks.py,sha256=AH0XifkOypsEdh8LyjmlHnPLQK5qqUJC8cNVWGkbqks,788
|
|
182
183
|
invenio_vocabularies/services/custom_fields/__init__.py,sha256=QgvSsn-S1xLzbZ57pjjGTt5oI3HqzXHVjwGTtuPgzN8,421
|
|
183
|
-
invenio_vocabularies/services/custom_fields/subject.py,sha256=
|
|
184
|
-
invenio_vocabularies/services/custom_fields/vocabulary.py,sha256=
|
|
184
|
+
invenio_vocabularies/services/custom_fields/subject.py,sha256=TrtmRgk3Vj_NxmDhC_7sM8MAIje4AGXBxYIk7nIgt0o,2236
|
|
185
|
+
invenio_vocabularies/services/custom_fields/vocabulary.py,sha256=oQwI8Aoi2Nr9k3eWKnde5H7RXc7qdlATSeI6coy8UR0,3020
|
|
185
186
|
invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html,sha256=h9syHkwZ6ltgjWw_0M5UoR6h6Re2imJ7uQ6M6peOyhk,686
|
|
186
187
|
invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabularies-list.html,sha256=-gDwRctqIkSzh9ial8zfbA4o41ARM-Mq-THkcJ87U00,359
|
|
187
188
|
invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html,sha256=2dfQzRFl5RwUwle245sxWGnObwJQXr-e_bBzpe_PkkA,2684
|
|
@@ -280,10 +281,10 @@ invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo,sha256=g1I5aNO8r
|
|
|
280
281
|
invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po,sha256=vg8qC8ofpAdJ3mQz7mWM1ylKDpiNWXFs7rlMdSPkgKk,4629
|
|
281
282
|
invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo,sha256=cqSm8NtMAwrP9O6qbmtkDtRT1e9D93qpsJN5X9_PPVw,600
|
|
282
283
|
invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po,sha256=9ACePz_EpB-LfcIJajZ2kp8Q04tcdrQLOtug162ZUss,4115
|
|
283
|
-
invenio_vocabularies-4.
|
|
284
|
-
invenio_vocabularies-4.
|
|
285
|
-
invenio_vocabularies-4.
|
|
286
|
-
invenio_vocabularies-4.
|
|
287
|
-
invenio_vocabularies-4.
|
|
288
|
-
invenio_vocabularies-4.
|
|
289
|
-
invenio_vocabularies-4.
|
|
284
|
+
invenio_vocabularies-4.2.0.dist-info/AUTHORS.rst,sha256=8d0p_WWE1r9DavvzMDi2D4YIGBHiMYcN3LYxqQOj8sY,291
|
|
285
|
+
invenio_vocabularies-4.2.0.dist-info/LICENSE,sha256=UvI8pR8jGWqe0sTkb_hRG6eIrozzWwWzyCGEpuXX4KE,1062
|
|
286
|
+
invenio_vocabularies-4.2.0.dist-info/METADATA,sha256=2pdaEFZ5Z35PmaNmdeuq-TDu0P1X8KCeyUhZh6NvW-0,8167
|
|
287
|
+
invenio_vocabularies-4.2.0.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
|
|
288
|
+
invenio_vocabularies-4.2.0.dist-info/entry_points.txt,sha256=qHHFkyU3r0COsKm5gCYuhP8tfsioBggxKAiEXNAbbjM,2803
|
|
289
|
+
invenio_vocabularies-4.2.0.dist-info/top_level.txt,sha256=x1gRNbaODF_bCD0SBLM3nVOFPGi06cmGX5X94WKrFKk,21
|
|
290
|
+
invenio_vocabularies-4.2.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{invenio_vocabularies-4.1.1.dist-info → invenio_vocabularies-4.2.0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|