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.

Files changed (27) hide show
  1. invenio_vocabularies/__init__.py +1 -1
  2. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +0 -6
  3. invenio_vocabularies/config.py +7 -1
  4. invenio_vocabularies/contrib/affiliations/affiliations.py +10 -0
  5. invenio_vocabularies/contrib/common/ror/datastreams.py +34 -32
  6. invenio_vocabularies/contrib/names/names.py +10 -0
  7. invenio_vocabularies/contrib/subjects/config.py +10 -4
  8. invenio_vocabularies/contrib/subjects/datastreams.py +55 -0
  9. invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +12 -0
  10. invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +18 -0
  11. invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +18 -0
  12. invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +18 -0
  13. invenio_vocabularies/contrib/subjects/mesh/datastreams.py +43 -0
  14. invenio_vocabularies/contrib/subjects/schema.py +21 -3
  15. invenio_vocabularies/contrib/subjects/subjects.py +10 -0
  16. invenio_vocabularies/factories.py +13 -0
  17. invenio_vocabularies/services/config.py +1 -1
  18. invenio_vocabularies/services/service.py +1 -1
  19. invenio_vocabularies/translations/messages.pot +95 -48
  20. invenio_vocabularies/webpack.py +1 -1
  21. {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/METADATA +11 -1
  22. {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/RECORD +27 -25
  23. {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/AUTHORS.rst +0 -0
  24. {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/LICENSE +0 -0
  25. {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/WHEEL +0 -0
  26. {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/entry_points.txt +0 -0
  27. {invenio_vocabularies-4.3.0.dist-info → invenio_vocabularies-4.5.0.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,6 @@
10
10
 
11
11
  from .ext import InvenioVocabularies
12
12
 
13
- __version__ = "4.3.0"
13
+ __version__ = "4.5.0"
14
14
 
15
15
  __all__ = ("__version__", "InvenioVocabularies")
@@ -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
  }
@@ -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
- # configure CUSTOM_VOCABULARY_TYPES to differentiate output. Is used in VocabulariesServiceConfig
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
- 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.")
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
- "subject^100",
27
- "subject._2gram",
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-2022 CERN.
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 lazy_gettext as _
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 BaseVocabularySchema, ContribVocabularyRelationSchema
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 Uni Münster.
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 Uni Münster.
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) 2022 CERN
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>, 2022.
5
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
6
6
  #
7
7
  #, fuzzy
8
8
  msgid ""
9
9
  msgstr ""
10
- "Project-Id-Version: invenio-vocabularies 0.13.2\n"
10
+ "Project-Id-Version: invenio-vocabularies 4.3.0\n"
11
11
  "Report-Msgid-Bugs-To: info@inveniosoftware.org\n"
12
- "POT-Creation-Date: 2022-10-12 12:27+0000\n"
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.10.3\n"
19
+ "Generated-By: Babel 2.15.0\n"
20
20
 
21
- #: invenio_vocabularies/config.py:37
21
+ #: invenio_vocabularies/config.py:38
22
22
  msgid "GRID"
23
23
  msgstr ""
24
24
 
25
- #: invenio_vocabularies/config.py:38 invenio_vocabularies/config.py:97
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:39 invenio_vocabularies/config.py:96
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:40
33
+ #: invenio_vocabularies/config.py:41
34
34
  msgid "ROR"
35
35
  msgstr ""
36
36
 
37
- #: invenio_vocabularies/config.py:51 invenio_vocabularies/config.py:60
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:59
41
+ #: invenio_vocabularies/config.py:60
42
42
  msgid "URL"
43
43
  msgstr ""
44
44
 
45
- #: invenio_vocabularies/config.py:95
45
+ #: invenio_vocabularies/config.py:101
46
46
  msgid "ORCID"
47
47
  msgstr ""
48
48
 
49
- #: invenio_vocabularies/contrib/affiliations/config.py:44
50
- #: invenio_vocabularies/contrib/funders/config.py:45
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/contrib/affiliations/config.py:52
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/service.py:72
73
+ #: invenio_vocabularies/services/config.py:81
69
74
  msgid "Newest"
70
75
  msgstr ""
71
76
 
72
- #: invenio_vocabularies/contrib/affiliations/config.py:56
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/service.py:76
81
+ #: invenio_vocabularies/services/config.py:85
77
82
  msgid "Oldest"
78
83
  msgstr ""
79
84
 
80
- #: invenio_vocabularies/contrib/awards/config.py:51
81
- msgid "Funders"
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/awards/datastreams.py:47
85
- msgid "Unknown OpenAIRE funder prefix {openaire_funder_prefix}"
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/schema.py:46
89
- msgid "Number cannot be blank."
97
+ #: invenio_vocabularies/contrib/awards/config.py:49
98
+ msgid "Funders"
90
99
  msgstr ""
91
100
 
92
- #: invenio_vocabularies/contrib/awards/schema.py:53
93
- #: invenio_vocabularies/contrib/funders/schema.py:57
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/schema.py:61
98
- #: invenio_vocabularies/contrib/funders/schema.py:65
99
- msgid "Missing PID."
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:103
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:120
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/funders/datastreams.py:44
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/funders/datastreams.py:48
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:35
119
- #: invenio_vocabularies/contrib/funders/schema.py:43
120
- msgid "Name cannot be blank."
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/schema.py:77
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/service.py:68
136
- msgid "Title"
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
 
@@ -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": "^3.0.0",
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.0
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=GpP8zZf9DfeXzWKEY02ASOpkML4CDrc9lSTEKpJnztU,377
1
+ invenio_vocabularies/__init__.py,sha256=afA3FAvbcl61ZjrLOtueUBN8mCZwrAeqltFDJDjCDDY,377
2
2
  invenio_vocabularies/cli.py,sha256=ToGc5dcGarDwNUgUXGqHIRT-3Uv1rleyFLKenwZdyBw,5719
3
- invenio_vocabularies/config.py,sha256=hhlwenD5MDajCqmz2EmS7J5hVd2QPD2v5l_MjxM_56s,5011
3
+ invenio_vocabularies/config.py,sha256=sOkJdmnfoSftfpH7msZEC6Eyo61Q3RQ7V2mMeE5LPAM,5157
4
4
  invenio_vocabularies/ext.py,sha256=GujJ4UARd4Fxf4z7zznRk9JAgHamZuYCOdrKU5czg00,5987
5
- invenio_vocabularies/factories.py,sha256=JBvvhg5f47Cy9cJZ1-OBalh750ErycwstLj1e9Gn4W8,2903
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=aLRm0ut3rXPb8D87pVA9mO_ODq7WOSZdsJQyU4iMLoI,1891
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=Yrju8xr5h7AOYM6fxkcunZ162cWS2eYVxYRiHhbSpSc,768
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=Ph0z7bT_tudsWDKFaiksCBngsG-eO6Xpbe3KdejfLXI,1591
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=joEiJwYawEaUggOZAQF6JrP8jHPfnAHmocK07nLMbO0,7893
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=fRNZW3yTmIE3FBB8zAcTdt1CXH6O8p6Ggz_7k9e8QTk,1987
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=0SHUKqR-EELVeEDiFjwzLY-_74ZmCxBKxC4dK_eOH8I,1535
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=jWPhpCDoScf8fRs7T15kcXnprWw31OuGBKJUziQ3t8A,1120
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=y5IidPbmYV3zs5aEp7CFzijYoVwWZ5GIMwl1kD0e0Eg,1441
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=jlKAY_0oZH2zMlK8F4oNI2Xbq0ENYhHrM_w5nM9d0Fc,914
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=Gr2dnAiqKgOISW2zhv4RZsssIGQPBNtPpgSu_ysHGDs,1166
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=Gr2dnAiqKgOISW2zhv4RZsssIGQPBNtPpgSu_ysHGDs,1166
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=Gr2dnAiqKgOISW2zhv4RZsssIGQPBNtPpgSu_ysHGDs,1166
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=uXiEFDVgBT1AgTdaB7dqfYn4n4Dw6J-sOmQ_QmBuHD4,4777
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=rUPeb86Jv2WXzRp-RZDHLWsouCmJcqHpCmgrpLm2Vs4,6387
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=IzTTWdWknzmKKtl1UNUxPOwHjfBB_iidm_eeEY2kV-M,3907
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.3.0.dist-info/AUTHORS.rst,sha256=8d0p_WWE1r9DavvzMDi2D4YIGBHiMYcN3LYxqQOj8sY,291
286
- invenio_vocabularies-4.3.0.dist-info/LICENSE,sha256=UvI8pR8jGWqe0sTkb_hRG6eIrozzWwWzyCGEpuXX4KE,1062
287
- invenio_vocabularies-4.3.0.dist-info/METADATA,sha256=MHY_zQ_1aP_8vhr6BXB7wUgxT3JxXQk_jqw4Ur9ur6U,8427
288
- invenio_vocabularies-4.3.0.dist-info/WHEEL,sha256=-G_t0oGuE7UD0DrSpVZnq1hHMBV9DD2XkS5v7XpmTnk,110
289
- invenio_vocabularies-4.3.0.dist-info/entry_points.txt,sha256=qHHFkyU3r0COsKm5gCYuhP8tfsioBggxKAiEXNAbbjM,2803
290
- invenio_vocabularies-4.3.0.dist-info/top_level.txt,sha256=x1gRNbaODF_bCD0SBLM3nVOFPGi06cmGX5X94WKrFKk,21
291
- invenio_vocabularies-4.3.0.dist-info/RECORD,,
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,,