invenio-vocabularies 5.1.0__py2.py3-none-any.whl → 6.0.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.

Files changed (37) hide show
  1. invenio_vocabularies/__init__.py +1 -1
  2. invenio_vocabularies/cli.py +7 -2
  3. invenio_vocabularies/config.py +13 -0
  4. invenio_vocabularies/contrib/affiliations/datastreams.py +95 -1
  5. invenio_vocabularies/contrib/awards/awards.py +15 -4
  6. invenio_vocabularies/contrib/awards/datastreams.py +156 -60
  7. invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +55 -0
  8. invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json +44 -1
  9. invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json +44 -1
  10. invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +44 -1
  11. invenio_vocabularies/contrib/awards/schema.py +16 -1
  12. invenio_vocabularies/contrib/awards/serializer.py +8 -1
  13. invenio_vocabularies/contrib/common/openaire/__init__.py +9 -0
  14. invenio_vocabularies/contrib/common/openaire/datastreams.py +84 -0
  15. invenio_vocabularies/contrib/names/datastreams.py +12 -2
  16. invenio_vocabularies/contrib/names/names.py +4 -3
  17. invenio_vocabularies/contrib/names/permissions.py +20 -0
  18. invenio_vocabularies/contrib/subjects/datastreams.py +12 -6
  19. invenio_vocabularies/contrib/subjects/euroscivoc/__init__.py +9 -0
  20. invenio_vocabularies/contrib/subjects/euroscivoc/datastreams.py +171 -0
  21. invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +16 -0
  22. invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +14 -0
  23. invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +14 -0
  24. invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +14 -0
  25. invenio_vocabularies/contrib/subjects/mesh/__init__.py +9 -0
  26. invenio_vocabularies/contrib/subjects/schema.py +30 -6
  27. invenio_vocabularies/datastreams/readers.py +15 -4
  28. invenio_vocabularies/datastreams/transformers.py +15 -4
  29. invenio_vocabularies/datastreams/writers.py +44 -12
  30. invenio_vocabularies/factories.py +30 -0
  31. {invenio_vocabularies-5.1.0.dist-info → invenio_vocabularies-6.0.0.dist-info}/METADATA +10 -1
  32. {invenio_vocabularies-5.1.0.dist-info → invenio_vocabularies-6.0.0.dist-info}/RECORD +37 -31
  33. {invenio_vocabularies-5.1.0.dist-info → invenio_vocabularies-6.0.0.dist-info}/AUTHORS.rst +0 -0
  34. {invenio_vocabularies-5.1.0.dist-info → invenio_vocabularies-6.0.0.dist-info}/LICENSE +0 -0
  35. {invenio_vocabularies-5.1.0.dist-info → invenio_vocabularies-6.0.0.dist-info}/WHEEL +0 -0
  36. {invenio_vocabularies-5.1.0.dist-info → invenio_vocabularies-6.0.0.dist-info}/entry_points.txt +0 -0
  37. {invenio_vocabularies-5.1.0.dist-info → invenio_vocabularies-6.0.0.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  # Copyright (C) 2021 Northwestern University.
4
- # Copyright (C) 2021-2022 CERN.
4
+ # Copyright (C) 2021-2024 CERN.
5
5
  # Copyright (C) 2024 University of Münster.
6
6
  #
7
7
  # Invenio-Vocabularies is free software; you can redistribute it and/or
@@ -10,15 +10,19 @@
10
10
 
11
11
  """Subjects schema."""
12
12
 
13
+ from functools import partial
14
+
13
15
  from invenio_i18n import get_locale
14
- from marshmallow import fields, pre_load
15
- from marshmallow_utils.fields import SanitizedUnicode
16
+ from marshmallow import Schema, fields, pre_load
17
+ from marshmallow_utils.fields import IdentifierSet, SanitizedUnicode
18
+ from marshmallow_utils.schemas import IdentifierSchema
16
19
 
17
20
  from ...services.schema import (
18
21
  BaseVocabularySchema,
19
22
  ContribVocabularyRelationSchema,
20
23
  i18n_strings,
21
24
  )
25
+ from .config import subject_schemes
22
26
 
23
27
 
24
28
  class SubjectSchema(BaseVocabularySchema):
@@ -31,6 +35,16 @@ class SubjectSchema(BaseVocabularySchema):
31
35
  scheme = SanitizedUnicode(required=True)
32
36
  subject = SanitizedUnicode(required=True)
33
37
  title = i18n_strings
38
+ props = fields.Dict(keys=SanitizedUnicode(), values=SanitizedUnicode())
39
+ identifiers = IdentifierSet(
40
+ fields.Nested(
41
+ partial(
42
+ IdentifierSchema,
43
+ allowed_schemes=subject_schemes,
44
+ identifier_required=False,
45
+ )
46
+ )
47
+ )
34
48
  synonyms = fields.List(SanitizedUnicode())
35
49
 
36
50
  @pre_load
@@ -48,6 +62,16 @@ class SubjectRelationSchema(ContribVocabularyRelationSchema):
48
62
  ftf_name = "subject"
49
63
  parent_field_name = "subjects"
50
64
  subject = SanitizedUnicode()
51
- scheme = SanitizedUnicode()
52
- title = i18n_strings
53
- synonyms = fields.List(SanitizedUnicode())
65
+ scheme = SanitizedUnicode(dump_only=True)
66
+ title = fields.Dict(dump_only=True)
67
+ props = fields.Dict(dump_only=True)
68
+ identifiers = IdentifierSet(
69
+ fields.Nested(
70
+ partial(
71
+ IdentifierSchema,
72
+ allowed_schemes=subject_schemes,
73
+ identifier_required=False,
74
+ )
75
+ )
76
+ )
77
+ synonyms = fields.List(SanitizedUnicode(), dump_only=True)
@@ -224,19 +224,30 @@ class CSVReader(BaseReader):
224
224
  class XMLReader(BaseReader):
225
225
  """XML reader."""
226
226
 
227
+ def __init__(self, root_element=None, *args, **kwargs):
228
+ """Constructor."""
229
+ self.root_element = root_element
230
+ super().__init__(*args, **kwargs)
231
+
227
232
  def _iter(self, fp, *args, **kwargs):
228
233
  """Read and parse an XML file to dict."""
229
234
  # NOTE: We parse HTML, to skip XML validation and strip XML namespaces
230
235
  record = None
231
236
  try:
232
237
  xml_tree = fromstring(fp)
233
- record = etree_to_dict(xml_tree).get("record")
238
+ xml_dict = etree_to_dict(xml_tree)
234
239
  except Exception as e:
235
240
  xml_tree = html_parse(fp).getroot()
236
- record = etree_to_dict(xml_tree)["html"]["body"].get("record")
241
+ xml_dict = etree_to_dict(xml_tree)["html"]["body"]
237
242
 
238
- if not record:
239
- raise ReaderError(f"Record not found in XML entry.")
243
+ if self.root_element:
244
+ record = xml_dict.get(self.root_element)
245
+ if not record:
246
+ raise ReaderError(
247
+ f"Root element '{self.root_element}' not found in XML entry."
248
+ )
249
+ else:
250
+ record = xml_dict
240
251
 
241
252
  yield record
242
253
 
@@ -32,6 +32,11 @@ class BaseTransformer(ABC):
32
32
  class XMLTransformer(BaseTransformer):
33
33
  """XML transformer."""
34
34
 
35
+ def __init__(self, root_element=None, *args, **kwargs):
36
+ """Initializes the transformer."""
37
+ self.root_element = root_element
38
+ super().__init__(*args, **kwargs)
39
+
35
40
  @classmethod
36
41
  def _xml_to_etree(cls, xml):
37
42
  """Converts XML to a lxml etree."""
@@ -43,10 +48,16 @@ class XMLTransformer(BaseTransformer):
43
48
  Requires the root element to be named "record".
44
49
  """
45
50
  xml_tree = self._xml_to_etree(stream_entry.entry)
46
- record = etree_to_dict(xml_tree)["html"]["body"].get("record")
47
-
48
- if not record:
49
- raise TransformerError(f"Record not found in XML entry.")
51
+ xml_dict = etree_to_dict(xml_tree)["html"]["body"]
52
+
53
+ if self.root_element:
54
+ record = xml_dict.get(self.root_element)
55
+ if not record:
56
+ raise TransformerError(
57
+ f"Root element '{self.root_element}' not found in XML entry."
58
+ )
59
+ else:
60
+ record = xml_dict
50
61
 
51
62
  stream_entry.entry = record
52
63
  return stream_entry
@@ -13,10 +13,11 @@ from pathlib import Path
13
13
 
14
14
  import yaml
15
15
  from invenio_access.permissions import system_identity
16
- from invenio_pidstore.errors import PIDAlreadyExists
16
+ from invenio_pidstore.errors import PIDAlreadyExists, PIDDoesNotExistError
17
17
  from invenio_records.systemfields.relations.errors import InvalidRelationValue
18
18
  from invenio_records_resources.proxies import current_service_registry
19
19
  from marshmallow import ValidationError
20
+ from sqlalchemy.exc import NoResultFound
20
21
 
21
22
  from .datastreams import StreamEntry
22
23
  from .errors import WriterError
@@ -55,12 +56,15 @@ class BaseWriter(ABC):
55
56
  class ServiceWriter(BaseWriter):
56
57
  """Writes the entries to an RDM instance using a Service object."""
57
58
 
58
- def __init__(self, service_or_name, *args, identity=None, update=False, **kwargs):
59
+ def __init__(
60
+ self, service_or_name, *args, identity=None, insert=True, update=False, **kwargs
61
+ ):
59
62
  """Constructor.
60
63
 
61
64
  :param service_or_name: a service instance or a key of the
62
65
  service registry.
63
66
  :param identity: access identity.
67
+ :param insert: if True it will insert records which do not exist.
64
68
  :param update: if True it will update records if they exist.
65
69
  """
66
70
  if isinstance(service_or_name, str):
@@ -68,6 +72,7 @@ class ServiceWriter(BaseWriter):
68
72
 
69
73
  self._service = service_or_name
70
74
  self._identity = identity or system_identity
75
+ self._insert = insert
71
76
  self._update = update
72
77
 
73
78
  super().__init__(*args, **kwargs)
@@ -79,20 +84,47 @@ class ServiceWriter(BaseWriter):
79
84
  def _resolve(self, id_):
80
85
  return self._service.read(self._identity, id_)
81
86
 
87
+ def _do_update(self, entry):
88
+ vocab_id = self._entry_id(entry)
89
+ current = self._resolve(vocab_id)
90
+ combined_dict = current.to_dict()
91
+
92
+ # Update fields from entry
93
+ for key, value in entry.items():
94
+ if key in combined_dict:
95
+ if isinstance(combined_dict[key], list) and isinstance(value, list):
96
+ combined_dict[key].extend(
97
+ item for item in value if item not in combined_dict[key]
98
+ )
99
+ else:
100
+ combined_dict[key] = value
101
+ else:
102
+ combined_dict[key] = value
103
+
104
+ return StreamEntry(
105
+ self._service.update(self._identity, vocab_id, combined_dict)
106
+ )
107
+
82
108
  def write(self, stream_entry, *args, **kwargs):
83
109
  """Writes the input entry using a given service."""
84
110
  entry = stream_entry.entry
111
+
85
112
  try:
86
- try:
87
- return StreamEntry(self._service.create(self._identity, entry))
88
- except PIDAlreadyExists:
89
- if not self._update:
90
- raise WriterError([f"Vocabulary entry already exists: {entry}"])
91
- vocab_id = self._entry_id(entry)
92
- current = self._resolve(vocab_id)
93
- updated = dict(current.to_dict(), **entry)
94
- return StreamEntry(
95
- self._service.update(self._identity, vocab_id, updated)
113
+ if self._insert:
114
+ try:
115
+ return StreamEntry(self._service.create(self._identity, entry))
116
+ except PIDAlreadyExists:
117
+ if not self._update:
118
+ raise WriterError([f"Vocabulary entry already exists: {entry}"])
119
+ return self._do_update(entry)
120
+ elif self._update:
121
+ try:
122
+ return self._do_update(entry)
123
+ except (NoResultFound, PIDDoesNotExistError):
124
+ raise WriterError([f"Vocabulary entry does not exist: {entry}"])
125
+ else:
126
+ raise WriterError(
127
+ ["Writer wrongly configured to not insert and to not update"]
96
128
  )
97
129
 
98
130
  except ValidationError as err:
@@ -16,7 +16,13 @@ from invenio_records_resources.proxies import current_service_registry
16
16
  from .contrib.affiliations.datastreams import (
17
17
  DATASTREAM_CONFIG as affiliations_ds_config,
18
18
  )
19
+ from .contrib.affiliations.datastreams import (
20
+ DATASTREAM_CONFIG_OPENAIRE as affiliations_openaire_ds_config,
21
+ )
19
22
  from .contrib.awards.datastreams import DATASTREAM_CONFIG as awards_ds_config
23
+ from .contrib.awards.datastreams import (
24
+ DATASTREAM_CONFIG_CORDIS as awards_cordis_ds_config,
25
+ )
20
26
  from .contrib.funders.datastreams import DATASTREAM_CONFIG as funders_ds_config
21
27
  from .contrib.names.datastreams import DATASTREAM_CONFIG as names_ds_config
22
28
  from .contrib.subjects.datastreams import DATASTREAM_CONFIG as subjects_ds_config
@@ -84,6 +90,17 @@ class AwardsVocabularyConfig(VocabularyConfig):
84
90
  raise NotImplementedError("Service not implemented for Awards")
85
91
 
86
92
 
93
+ class AwardsCordisVocabularyConfig(VocabularyConfig):
94
+ """Awards Vocabulary Config."""
95
+
96
+ config = awards_cordis_ds_config
97
+ vocabulary_name = "awards:cordis"
98
+
99
+ def get_service(self):
100
+ """Get the service for the vocabulary."""
101
+ raise NotImplementedError("Service not implemented for CORDIS Awards")
102
+
103
+
87
104
  class AffiliationsVocabularyConfig(VocabularyConfig):
88
105
  """Affiliations Vocabulary Config."""
89
106
 
@@ -95,13 +112,26 @@ class AffiliationsVocabularyConfig(VocabularyConfig):
95
112
  raise NotImplementedError("Service not implemented for Affiliations")
96
113
 
97
114
 
115
+ class AffiliationsOpenAIREVocabularyConfig(VocabularyConfig):
116
+ """OpenAIRE Affiliations Vocabulary Config."""
117
+
118
+ config = affiliations_openaire_ds_config
119
+ vocabulary_name = "affiliations:openaire"
120
+
121
+ def get_service(self):
122
+ """Get the service for the vocabulary."""
123
+ raise NotImplementedError("Service not implemented for OpenAIRE Affiliations")
124
+
125
+
98
126
  def get_vocabulary_config(vocabulary):
99
127
  """Factory function to get the appropriate Vocabulary Config."""
100
128
  vocab_config = {
101
129
  "names": NamesVocabularyConfig,
102
130
  "funders": FundersVocabularyConfig,
103
131
  "awards": AwardsVocabularyConfig,
132
+ "awards:cordis": AwardsCordisVocabularyConfig,
104
133
  "affiliations": AffiliationsVocabularyConfig,
134
+ "affiliations:openaire": AffiliationsOpenAIREVocabularyConfig,
105
135
  "subjects": SubjectsVocabularyConfig,
106
136
  }
107
137
  return vocab_config.get(vocabulary, VocabularyConfig)()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: invenio-vocabularies
3
- Version: 5.1.0
3
+ Version: 6.0.0
4
4
  Summary: Invenio module for managing vocabularies.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-vocabularies
6
6
  Author: CERN
@@ -16,6 +16,7 @@ Requires-Dist: invenio-administration <3.0.0,>=2.0.0
16
16
  Requires-Dist: lxml >=4.5.0
17
17
  Requires-Dist: PyYAML >=5.4.1
18
18
  Requires-Dist: regex >=2024.7.24
19
+ Requires-Dist: rdflib >=7.0.0
19
20
  Provides-Extra: elasticsearch7
20
21
  Requires-Dist: invenio-search[elasticsearch7] <3.0.0,>=2.1.0 ; extra == 'elasticsearch7'
21
22
  Provides-Extra: mysql
@@ -81,6 +82,14 @@ https://invenio-vocabularies.readthedocs.io/
81
82
  Changes
82
83
  =======
83
84
 
85
+ Version v6.0.0 (released 2024-10-03)
86
+
87
+ - datastreams: writers: add option to not insert
88
+ - subjects: added euroscivoc datastream
89
+ - affiliations: OpenAIRE transformer and writer adding PIC identifier
90
+ - awards: added subjects and participating organizations from CORDIS datastreams
91
+ - names: add permission check to names search
92
+
84
93
  Version v5.1.0 (released 2024-09-25)
85
94
 
86
95
  - funders: tune search boost for acronyms
@@ -1,8 +1,8 @@
1
- invenio_vocabularies/__init__.py,sha256=EY0EBDXPeTzwN5DQMUlFBqdRhHxUqKpyOeWjvG3og0U,377
2
- invenio_vocabularies/cli.py,sha256=ToGc5dcGarDwNUgUXGqHIRT-3Uv1rleyFLKenwZdyBw,5719
3
- invenio_vocabularies/config.py,sha256=sOkJdmnfoSftfpH7msZEC6Eyo61Q3RQ7V2mMeE5LPAM,5157
1
+ invenio_vocabularies/__init__.py,sha256=SV2dyAIGCJfHua-VM-jL5my73f_o0u1gT2o-sAjYwq4,377
2
+ invenio_vocabularies/cli.py,sha256=S3lBsLxsSYa83sCDaGZr5mP7TwPvmmwxzzbB13h8VBI,5856
3
+ invenio_vocabularies/config.py,sha256=bpNKVgwfb7bgkP5zbmoawnAMD6bHWXIJV-6CpEhi-M8,5752
4
4
  invenio_vocabularies/ext.py,sha256=GujJ4UARd4Fxf4z7zznRk9JAgHamZuYCOdrKU5czg00,5987
5
- invenio_vocabularies/factories.py,sha256=VLMoWUZ8DKoJWnKA-HoWE1NlTewrB0GvRg3ej56pVYc,3339
5
+ invenio_vocabularies/factories.py,sha256=mVg4yGKe58e4uS8rYe0DmIO6oMpmtNTcK3wH9eM5jVU,4380
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
@@ -46,7 +46,7 @@ invenio_vocabularies/contrib/affiliations/__init__.py,sha256=rV8YAzBRoSKsBYcVjCN
46
46
  invenio_vocabularies/contrib/affiliations/affiliations.py,sha256=BSEjzAjLq17GGKHyPrgC5VLluvZqVnKMepIiqqLQKzo,2077
47
47
  invenio_vocabularies/contrib/affiliations/api.py,sha256=5nIOvpfcseuAAg2XgblHc8jb7TAdfU79XOBRpL-p398,326
48
48
  invenio_vocabularies/contrib/affiliations/config.py,sha256=kk-zAl7Uyi6N4qVOiCkBD9cN1KKOvDcILDHJ-zoIzJA,2084
49
- invenio_vocabularies/contrib/affiliations/datastreams.py,sha256=Mn62EBBkGwO09qjrXY71qDIrS2mNgarb89ez69Vw4Yk,2384
49
+ invenio_vocabularies/contrib/affiliations/datastreams.py,sha256=vEH6wj951LLa9pSsNb0rS8IVJ1zWbEQDDe0Cu770J9k,5479
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
@@ -65,24 +65,26 @@ invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py,sha256=zr9YyyK
65
65
  invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json,sha256=PaHChFsf9r7xRnZ_7ro8SWNEXpWv4uUYrl32g0QESZs,2096
66
66
  invenio_vocabularies/contrib/awards/__init__.py,sha256=KwCmwFalz-3pDs9iTa5TKUidBjLepnUMqpCBXRiQOO8,474
67
67
  invenio_vocabularies/contrib/awards/api.py,sha256=OXukE7PLXs45BTtqVrhvGBNqLmQaI-CgXmHTCi36LZk,303
68
- invenio_vocabularies/contrib/awards/awards.py,sha256=FU7XKSsfEIqaQYyCFjPMDbD2z-lwGsicuLXg69HO6oE,2701
68
+ invenio_vocabularies/contrib/awards/awards.py,sha256=tOLvcvTPiN1gn1QAl-hSh1bwcclg8Kx2ZMmJMEhI7vk,2959
69
69
  invenio_vocabularies/contrib/awards/config.py,sha256=PlDHabkWDUzwa1Fvk_U2hG83kQYBqM1IyChg8Yg_VlY,1630
70
- invenio_vocabularies/contrib/awards/datastreams.py,sha256=wQIhLGXSYCIjwXzTofpiaSjnO1XuDpiOlH5TqiGix4c,8245
70
+ invenio_vocabularies/contrib/awards/datastreams.py,sha256=j6dtimniWg9faHzV1J49QpAgUJDDW3rjQR0_Mhcfqm4,11147
71
71
  invenio_vocabularies/contrib/awards/models.py,sha256=mM-kSNf7kDH3oIbV8epxxbUi7muYqi4JreXxgWXlVzw,318
72
72
  invenio_vocabularies/contrib/awards/resources.py,sha256=_9YTqbhz8axFXGhG5y4WyjE27p9n-7e3c6HoBRditPA,411
73
- invenio_vocabularies/contrib/awards/schema.py,sha256=bg-09nvhEn-ipzaztK1iNbKc59saAM8v8hAW9zpKDAc,2786
74
- invenio_vocabularies/contrib/awards/serializer.py,sha256=MDnq41EJf_LFu-UT6qlB3-O2S7aEYePIzQ_immMnwag,1139
73
+ invenio_vocabularies/contrib/awards/schema.py,sha256=P_k9EONMMx0eWpALVuhGBzZlDeh4599elLlmMis-Vko,3302
74
+ invenio_vocabularies/contrib/awards/serializer.py,sha256=W59OMDxOXPdXrrimzMdIPbDIfVk6hARgyz1N2xSbchA,1440
75
75
  invenio_vocabularies/contrib/awards/services.py,sha256=zwOMHqa4SyZuHopGZwEKhfw3kUHrWg73_4zMNo5kOe4,371
76
76
  invenio_vocabularies/contrib/awards/jsonschemas/__init__.py,sha256=XB2l9hr53vqTk7o9lmy18FWGhHEUvNHu8D6nMF8Bz4k,246
77
- invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json,sha256=XKHjWWmv7Ph6v-JxPsP09V_6Pr9QNJcJeZdaU5HZWwU,1117
77
+ invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json,sha256=viw8rgfjiQwKsLjWyqIKCtZSYVC5vhdt6s0jE2EeQmw,2731
78
78
  invenio_vocabularies/contrib/awards/mappings/__init__.py,sha256=PbM5urjiSrJSx4Ak-H_lJrOOVKGT38MrGgRv61gIbAM,243
79
79
  invenio_vocabularies/contrib/awards/mappings/os-v1/__init__.py,sha256=r8IZvjorG9SVz32Hv1fncoqLfz-5Ml0Ph3jiYWCHBPk,250
80
- invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json,sha256=QJT2gS7SE47YTP2HdU4ESjMwHJBTzAH70JEhWWg9SXM,1528
80
+ invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json,sha256=dcE1dvgGBYYb7vziGArmXb64rg2HpBdiIw_aP3oYaDw,2441
81
81
  invenio_vocabularies/contrib/awards/mappings/os-v2/__init__.py,sha256=9gRLFRtjhNJcbop3qz8iRpQVEng_wudDTbOFsS-gxjk,250
82
- invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json,sha256=QJT2gS7SE47YTP2HdU4ESjMwHJBTzAH70JEhWWg9SXM,1528
82
+ invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json,sha256=dcE1dvgGBYYb7vziGArmXb64rg2HpBdiIw_aP3oYaDw,2441
83
83
  invenio_vocabularies/contrib/awards/mappings/v7/__init__.py,sha256=fERdPp7K7ajaoUu_4_HVLfF-WD_qcl7QgST6yGb68s4,253
84
- invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json,sha256=QJT2gS7SE47YTP2HdU4ESjMwHJBTzAH70JEhWWg9SXM,1528
84
+ invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json,sha256=dcE1dvgGBYYb7vziGArmXb64rg2HpBdiIw_aP3oYaDw,2441
85
85
  invenio_vocabularies/contrib/common/__init__.py,sha256=DdbGYRthEpQtObhY_YK4vOT9Zf7FFagQ6qtUjJOYw-M,247
86
+ invenio_vocabularies/contrib/common/openaire/__init__.py,sha256=L7UtSimFJ3NI6j53bHzYKsWpFti1uo4fPb9OaTl7leI,244
87
+ invenio_vocabularies/contrib/common/openaire/datastreams.py,sha256=BV6NtBCPFuii6KbTHGkgNQO5tt_3Hn9T_219bz8AINg,3514
86
88
  invenio_vocabularies/contrib/common/ror/__init__.py,sha256=3u2-fre1SQ-4nz3Ay0nxj3ntmMZ8Ujh_4eV-fyxfmtc,239
87
89
  invenio_vocabularies/contrib/common/ror/datastreams.py,sha256=7VaQUGtc4j0fX6P16csjAUgIVxSDEySrdZ5QZ57RD_g,7941
88
90
  invenio_vocabularies/contrib/funders/__init__.py,sha256=YxFXBDnT7NM8rFwxT_Ge3xXR2n17EM0alknQq7r_Bt8,478
@@ -110,9 +112,10 @@ invenio_vocabularies/contrib/funders/mappings/v7/funders/funder-v1.0.0.json,sha2
110
112
  invenio_vocabularies/contrib/names/__init__.py,sha256=DBfsM7JMETZGaV5QmXEwE7zhCaAXvc2SZN6uXnW_V-c,451
111
113
  invenio_vocabularies/contrib/names/api.py,sha256=sEPn_jFX3gyoxgbdEUSIvOoPCUI8pocI6qCZO6mzCgQ,300
112
114
  invenio_vocabularies/contrib/names/config.py,sha256=8FVtMuq1NHC0cz8O-p_-Ng_IpHE9PTOVqQ7KDJIm7qA,1905
113
- invenio_vocabularies/contrib/names/datastreams.py,sha256=PgCUwK0qpw_r0NTA17w7eqCDhgL2xd0tIXZ9-GjOT2M,9301
115
+ invenio_vocabularies/contrib/names/datastreams.py,sha256=EKatHb0gkvcC9LCYBLIcN5pAgklBY4G43lZR_XE52wY,9505
114
116
  invenio_vocabularies/contrib/names/models.py,sha256=SYdtDDG-y5Wq_d06YhiVO5n8gfxPW_mx-tECsIcv5H8,308
115
- invenio_vocabularies/contrib/names/names.py,sha256=Tq9dO_V1F2URzHNqt8QTHnlFjujDQxooXMlTkZ0lcaI,2459
117
+ invenio_vocabularies/contrib/names/names.py,sha256=x_kcSrH48Q6Iqx1zeCcat5xRmTLe_KqZd5CbHCeR2C4,2498
118
+ invenio_vocabularies/contrib/names/permissions.py,sha256=d7UxvmqFBKWNcFQeJ4MGGFUHlNh_BJGO03-DVW_YFI4,576
116
119
  invenio_vocabularies/contrib/names/resources.py,sha256=Z8XqLKfFKE69zdTTvcTDmpEZ6wqiqjIH5tp0LzXTSwQ,1588
117
120
  invenio_vocabularies/contrib/names/s3client.py,sha256=c7B9_NbnXCfE4pE_yMTsT6uQ2hgbcRU-KY6nbWFuFzU,1063
118
121
  invenio_vocabularies/contrib/names/schema.py,sha256=eKhpNwBaACMEY0JWNrSUhr-40lXhkiHDRmM42KsLrYg,3354
@@ -131,31 +134,34 @@ invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json,sha256=5Yb
131
134
  invenio_vocabularies/contrib/subjects/__init__.py,sha256=GtXZKA6VWG1oA1fUX2Wh92nd-1i7RnnQF6RprGhxkD4,591
132
135
  invenio_vocabularies/contrib/subjects/api.py,sha256=QH8mxoLsa8qjJT1i1Tj6rRnpbH23plo2IMOJ56rnvbU,347
133
136
  invenio_vocabularies/contrib/subjects/config.py,sha256=12Hoy46iGaBv7DlxcCjBuJaDtmpSvPPQKrWabtaUGe0,1712
134
- invenio_vocabularies/contrib/subjects/datastreams.py,sha256=SwhqoIjQn-6A0wm61HJ2TOFDDhCRG2EZwzeMJw_37ec,1606
137
+ invenio_vocabularies/contrib/subjects/datastreams.py,sha256=CiLSTm9PukzLKm34VDmmKOH4A_pYnjbrshxAht1Fox4,1787
135
138
  invenio_vocabularies/contrib/subjects/facets.py,sha256=qQ7_rppFBzsmrlZu4-MvOIdUcjeOmDA9gOHAcs0lWwI,695
136
139
  invenio_vocabularies/contrib/subjects/models.py,sha256=8XgbVRxDDvhWPjMWsoCriNlOKdmV_113a14yLRtlvM4,363
137
140
  invenio_vocabularies/contrib/subjects/resources.py,sha256=0KRfUMizwgIziZybk4HnIjiSsXbrCv_XmguNPwnxoo8,506
138
- invenio_vocabularies/contrib/subjects/schema.py,sha256=tN22MVZ-za0N4ZR-b77ItqNNYX2miHYl7inTnFW5R_w,1674
141
+ invenio_vocabularies/contrib/subjects/schema.py,sha256=5pM9FFVdeb1nUuTwr2SqkUJh-oHIjYN-EXXI8_SSjCQ,2446
139
142
  invenio_vocabularies/contrib/subjects/services.py,sha256=s1U6HMmpjuz7rrgR0DtT9C28TC6sZEeDTsa4Jh1TXQk,864
140
143
  invenio_vocabularies/contrib/subjects/subjects.py,sha256=NwZycExLyV8l7ikGStH4GOecVuDSxFT70KoNv6qC78I,1877
144
+ invenio_vocabularies/contrib/subjects/euroscivoc/__init__.py,sha256=e5L9E4l5JHqVzijAX8tn2DIa2n01vJ5wOAZdN62RnIo,247
145
+ invenio_vocabularies/contrib/subjects/euroscivoc/datastreams.py,sha256=ZEFDySRSEkb-2cjbYP_so2uCB1tP2_zcdMGpwPcRe90,6152
141
146
  invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py,sha256=WowVUST1JoEDS3-xeHhCJvIgC9nzMkFs8XRks9zgzaM,292
142
- invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json,sha256=cspw-pYIwiKpEO8zx7GFFqhWb7PZkAeQCRNLWoY8Uyk,1253
147
+ invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json,sha256=SCFOfwtdAQJnUC4wccRJj--c2yUUmo5Z3tnOfo2XluU,1632
143
148
  invenio_vocabularies/contrib/subjects/mappings/__init__.py,sha256=Qk-yj1ENsTmijO8ImWuDYGzXi6QQ2VjP4DbjrpRfDk8,243
144
149
  invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py,sha256=rv2-AasC_WJFp2t9Nrhzivmw9RovRI2_msin4oHTZuk,250
145
- invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json,sha256=iZ8BByd4nOsTQ8Go5prQQ-puZOWzYIYHVjVYD39kNXo,1533
150
+ invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json,sha256=WNNWVsaf-pNxqV6p_IR2uIcwIBh30WJeP4IDIxzqutI,1810
146
151
  invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py,sha256=rQnrw1tMKR0yzlPiXBbCVHnxy_aAhwrKghrSuhhZYAc,250
147
- invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json,sha256=iZ8BByd4nOsTQ8Go5prQQ-puZOWzYIYHVjVYD39kNXo,1533
152
+ invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json,sha256=cJSjcJ_PqrifBZOUeDMW3qyT7VtENTvYq3Xvi-iylOc,1810
148
153
  invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py,sha256=QK__a1749g2UN3fBqOr9jx8ccZHWAuvd6DSN4B1jJW4,258
149
- invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json,sha256=iZ8BByd4nOsTQ8Go5prQQ-puZOWzYIYHVjVYD39kNXo,1533
154
+ invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json,sha256=WNNWVsaf-pNxqV6p_IR2uIcwIBh30WJeP4IDIxzqutI,1810
155
+ invenio_vocabularies/contrib/subjects/mesh/__init__.py,sha256=P44hmgVNNTN5O_EmWgaeYJ91yqkGNoeKYo0wfif_wE4,241
150
156
  invenio_vocabularies/contrib/subjects/mesh/datastreams.py,sha256=qsi2fu-TzpI2aC9qIOkXGpNcLFkClJ5Dw5rC9ffEdjc,1318
151
157
  invenio_vocabularies/datastreams/__init__.py,sha256=VPefh6k4Q3eYxKIW8I5zXUGucntp7VHxaOR5Vhgkfmg,412
152
158
  invenio_vocabularies/datastreams/datastreams.py,sha256=SpI6ivmf2LIDS2JSkxoM2v5kRmrPoRDtAG5fuzZO4oQ,6078
153
159
  invenio_vocabularies/datastreams/errors.py,sha256=IDUZ3gNtYGrhcOgApHCms1gNNJTyJzoMPmG5JtIeYNU,678
154
160
  invenio_vocabularies/datastreams/factories.py,sha256=H8a2gAy7KNImtdCdtqpVKC5gIvE3ON6U1Wn1_zaMlQ4,2181
155
- invenio_vocabularies/datastreams/readers.py,sha256=JT76oKeD1N2u-0zWlyI7GZ5tR1aGc9IZe7pdTtNaSaM,11038
161
+ invenio_vocabularies/datastreams/readers.py,sha256=Gr_KbN-tZtoQ8R4TJG4dTBTE8028eLRlcxSv2-IqI9c,11386
156
162
  invenio_vocabularies/datastreams/tasks.py,sha256=0fuH_PRt9Ncv6WHM4pkYmfheRVGDKkERZiMPvgV4bZU,1129
157
- invenio_vocabularies/datastreams/transformers.py,sha256=wspny-kazYMRHjkkyFfRVNIYzJxbjAqokRCBQ_-gXcY,1357
158
- invenio_vocabularies/datastreams/writers.py,sha256=gFJ-NVbpIuR2aw4v5TyxR5roS-qVnETyqEVY1o8rYKk,6059
163
+ invenio_vocabularies/datastreams/transformers.py,sha256=0ymZiHtNtgfYxt2MIjthtSzikRH1jAqhIAZ1yScoAHs,1733
164
+ invenio_vocabularies/datastreams/writers.py,sha256=PO9UPQ8rT4pstfoCiB-zCfuvCNOHRgFbysq6-spXm34,7218
159
165
  invenio_vocabularies/datastreams/xml.py,sha256=HFa-lfxj7kFrr2IjeN1jxSLDfcvpBwO9nZLZF2-BryE,997
160
166
  invenio_vocabularies/records/__init__.py,sha256=Uj7O6fYdAtLOkLXUGSAYPADBB7aqP4yVs9b6OAjA158,243
161
167
  invenio_vocabularies/records/api.py,sha256=Lynt6Sz4BVN1orh0zgJ5ljhnUobEtcq8c22PmSeUo2U,1494
@@ -290,10 +296,10 @@ invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo,sha256=g1I5aNO8r
290
296
  invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po,sha256=vg8qC8ofpAdJ3mQz7mWM1ylKDpiNWXFs7rlMdSPkgKk,4629
291
297
  invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo,sha256=cqSm8NtMAwrP9O6qbmtkDtRT1e9D93qpsJN5X9_PPVw,600
292
298
  invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po,sha256=9ACePz_EpB-LfcIJajZ2kp8Q04tcdrQLOtug162ZUss,4115
293
- invenio_vocabularies-5.1.0.dist-info/AUTHORS.rst,sha256=8d0p_WWE1r9DavvzMDi2D4YIGBHiMYcN3LYxqQOj8sY,291
294
- invenio_vocabularies-5.1.0.dist-info/LICENSE,sha256=UvI8pR8jGWqe0sTkb_hRG6eIrozzWwWzyCGEpuXX4KE,1062
295
- invenio_vocabularies-5.1.0.dist-info/METADATA,sha256=q58QaH3-DlcUWMppE5PDWV1vf8FsIE4rWiT_mCvoaNo,9111
296
- invenio_vocabularies-5.1.0.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
297
- invenio_vocabularies-5.1.0.dist-info/entry_points.txt,sha256=qHHFkyU3r0COsKm5gCYuhP8tfsioBggxKAiEXNAbbjM,2803
298
- invenio_vocabularies-5.1.0.dist-info/top_level.txt,sha256=x1gRNbaODF_bCD0SBLM3nVOFPGi06cmGX5X94WKrFKk,21
299
- invenio_vocabularies-5.1.0.dist-info/RECORD,,
299
+ invenio_vocabularies-6.0.0.dist-info/AUTHORS.rst,sha256=8d0p_WWE1r9DavvzMDi2D4YIGBHiMYcN3LYxqQOj8sY,291
300
+ invenio_vocabularies-6.0.0.dist-info/LICENSE,sha256=UvI8pR8jGWqe0sTkb_hRG6eIrozzWwWzyCGEpuXX4KE,1062
301
+ invenio_vocabularies-6.0.0.dist-info/METADATA,sha256=15W_c_CPnFjEGWzftlNZhUaqtu0yaPs8_Gcu8f-6zac,9466
302
+ invenio_vocabularies-6.0.0.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
303
+ invenio_vocabularies-6.0.0.dist-info/entry_points.txt,sha256=qHHFkyU3r0COsKm5gCYuhP8tfsioBggxKAiEXNAbbjM,2803
304
+ invenio_vocabularies-6.0.0.dist-info/top_level.txt,sha256=x1gRNbaODF_bCD0SBLM3nVOFPGi06cmGX5X94WKrFKk,21
305
+ invenio_vocabularies-6.0.0.dist-info/RECORD,,