invenio-vocabularies 2.3.1__py2.py3-none-any.whl → 6.3.1__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 (165) hide show
  1. invenio_vocabularies/__init__.py +2 -2
  2. invenio_vocabularies/administration/__init__.py +10 -0
  3. invenio_vocabularies/administration/views/__init__.py +10 -0
  4. invenio_vocabularies/administration/views/vocabularies.py +45 -0
  5. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +1 -7
  6. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/CustomAwardForm.js +80 -64
  7. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.js +49 -41
  8. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingModal.js +5 -7
  9. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/NoAwardResults.js +3 -3
  10. invenio_vocabularies/cli.py +31 -44
  11. invenio_vocabularies/config.py +68 -4
  12. invenio_vocabularies/contrib/affiliations/affiliations.py +11 -0
  13. invenio_vocabularies/contrib/affiliations/api.py +1 -2
  14. invenio_vocabularies/contrib/affiliations/config.py +13 -2
  15. invenio_vocabularies/contrib/affiliations/datastreams.py +186 -0
  16. invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json +38 -1
  17. invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v1.0.0.json +22 -1
  18. invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v2.0.0.json +171 -0
  19. invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v1.0.0.json +22 -1
  20. invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v2.0.0.json +171 -0
  21. invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json +22 -1
  22. invenio_vocabularies/contrib/affiliations/schema.py +17 -3
  23. invenio_vocabularies/contrib/affiliations/services.py +1 -2
  24. invenio_vocabularies/contrib/awards/awards.py +17 -5
  25. invenio_vocabularies/contrib/awards/datastreams.py +241 -7
  26. invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +38 -0
  27. invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json +51 -2
  28. invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json +51 -2
  29. invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +51 -2
  30. invenio_vocabularies/contrib/awards/schema.py +16 -1
  31. invenio_vocabularies/contrib/awards/serializer.py +8 -1
  32. invenio_vocabularies/contrib/awards/services.py +1 -2
  33. invenio_vocabularies/contrib/common/__init__.py +9 -0
  34. invenio_vocabularies/contrib/common/openaire/__init__.py +9 -0
  35. invenio_vocabularies/contrib/common/openaire/datastreams.py +84 -0
  36. invenio_vocabularies/contrib/common/ror/__init__.py +9 -0
  37. invenio_vocabularies/contrib/common/ror/datastreams.py +220 -0
  38. invenio_vocabularies/contrib/funders/config.py +11 -2
  39. invenio_vocabularies/contrib/funders/datastreams.py +40 -62
  40. invenio_vocabularies/contrib/funders/funders.py +3 -1
  41. invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +36 -1
  42. invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v1.0.0.json +22 -1
  43. invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v2.0.0.json +156 -0
  44. invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v1.0.0.json +22 -1
  45. invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v2.0.0.json +156 -0
  46. invenio_vocabularies/contrib/funders/mappings/v7/funders/funder-v1.0.0.json +22 -1
  47. invenio_vocabularies/contrib/funders/schema.py +8 -0
  48. invenio_vocabularies/contrib/funders/serializer.py +2 -1
  49. invenio_vocabularies/contrib/names/config.py +5 -3
  50. invenio_vocabularies/contrib/names/datastreams.py +172 -4
  51. invenio_vocabularies/contrib/names/jsonschemas/names/name-v1.0.0.json +3 -0
  52. invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v1.0.0.json +3 -0
  53. invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v2.0.0.json +150 -0
  54. invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v1.0.0.json +3 -0
  55. invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v2.0.0.json +150 -0
  56. invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json +3 -0
  57. invenio_vocabularies/contrib/names/names.py +15 -3
  58. invenio_vocabularies/contrib/names/permissions.py +20 -0
  59. invenio_vocabularies/contrib/names/s3client.py +44 -0
  60. invenio_vocabularies/contrib/names/schema.py +14 -0
  61. invenio_vocabularies/contrib/subjects/config.py +9 -3
  62. invenio_vocabularies/contrib/subjects/datastreams.py +61 -0
  63. invenio_vocabularies/contrib/subjects/euroscivoc/__init__.py +9 -0
  64. invenio_vocabularies/contrib/subjects/euroscivoc/datastreams.py +171 -0
  65. invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +31 -0
  66. invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +35 -0
  67. invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +35 -0
  68. invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +35 -0
  69. invenio_vocabularies/contrib/subjects/mesh/__init__.py +9 -0
  70. invenio_vocabularies/contrib/subjects/mesh/datastreams.py +43 -0
  71. invenio_vocabularies/contrib/subjects/schema.py +47 -5
  72. invenio_vocabularies/contrib/subjects/subjects.py +10 -0
  73. invenio_vocabularies/datastreams/datastreams.py +61 -13
  74. invenio_vocabularies/datastreams/factories.py +1 -2
  75. invenio_vocabularies/datastreams/readers.py +138 -29
  76. invenio_vocabularies/datastreams/tasks.py +37 -0
  77. invenio_vocabularies/datastreams/transformers.py +17 -27
  78. invenio_vocabularies/datastreams/writers.py +116 -14
  79. invenio_vocabularies/datastreams/xml.py +34 -0
  80. invenio_vocabularies/ext.py +59 -5
  81. invenio_vocabularies/factories.py +137 -0
  82. invenio_vocabularies/jobs.py +133 -0
  83. invenio_vocabularies/proxies.py +2 -2
  84. invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json +7 -0
  85. invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json +1 -4
  86. invenio_vocabularies/records/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +3 -3
  87. invenio_vocabularies/records/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +3 -3
  88. invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json +3 -3
  89. invenio_vocabularies/records/models.py +2 -4
  90. invenio_vocabularies/records/pidprovider.py +1 -2
  91. invenio_vocabularies/records/systemfields/relations.py +2 -2
  92. invenio_vocabularies/resources/__init__.py +9 -1
  93. invenio_vocabularies/resources/config.py +105 -0
  94. invenio_vocabularies/resources/resource.py +31 -41
  95. invenio_vocabularies/resources/schema.py +2 -1
  96. invenio_vocabularies/services/__init__.py +5 -2
  97. invenio_vocabularies/services/config.py +179 -0
  98. invenio_vocabularies/services/custom_fields/__init__.py +6 -2
  99. invenio_vocabularies/services/custom_fields/subject.py +82 -0
  100. invenio_vocabularies/services/custom_fields/vocabulary.py +5 -3
  101. invenio_vocabularies/services/permissions.py +3 -1
  102. invenio_vocabularies/services/results.py +110 -0
  103. invenio_vocabularies/services/schema.py +11 -2
  104. invenio_vocabularies/services/service.py +46 -94
  105. invenio_vocabularies/services/tasks.py +1 -1
  106. invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html +23 -0
  107. invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabularies-list.html +12 -0
  108. invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html +71 -0
  109. invenio_vocabularies/translations/af/LC_MESSAGES/messages.mo +0 -0
  110. invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo +0 -0
  111. invenio_vocabularies/translations/bg/LC_MESSAGES/messages.mo +0 -0
  112. invenio_vocabularies/translations/ca/LC_MESSAGES/messages.mo +0 -0
  113. invenio_vocabularies/translations/cs/LC_MESSAGES/messages.mo +0 -0
  114. invenio_vocabularies/translations/da/LC_MESSAGES/messages.mo +0 -0
  115. invenio_vocabularies/translations/de/LC_MESSAGES/messages.mo +0 -0
  116. invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.mo +0 -0
  117. invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.mo +0 -0
  118. invenio_vocabularies/translations/el/LC_MESSAGES/messages.mo +0 -0
  119. invenio_vocabularies/translations/en/LC_MESSAGES/messages.mo +0 -0
  120. invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.mo +0 -0
  121. invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.mo +0 -0
  122. invenio_vocabularies/translations/es/LC_MESSAGES/messages.mo +0 -0
  123. invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.mo +0 -0
  124. invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.mo +0 -0
  125. invenio_vocabularies/translations/et/LC_MESSAGES/messages.mo +0 -0
  126. invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.mo +0 -0
  127. invenio_vocabularies/translations/fa/LC_MESSAGES/messages.mo +0 -0
  128. invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.mo +0 -0
  129. invenio_vocabularies/translations/fr/LC_MESSAGES/messages.mo +0 -0
  130. invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.mo +0 -0
  131. invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.mo +0 -0
  132. invenio_vocabularies/translations/gl/LC_MESSAGES/messages.mo +0 -0
  133. invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.mo +0 -0
  134. invenio_vocabularies/translations/hr/LC_MESSAGES/messages.mo +0 -0
  135. invenio_vocabularies/translations/hu/LC_MESSAGES/messages.mo +0 -0
  136. invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.mo +0 -0
  137. invenio_vocabularies/translations/it/LC_MESSAGES/messages.mo +0 -0
  138. invenio_vocabularies/translations/ja/LC_MESSAGES/messages.mo +0 -0
  139. invenio_vocabularies/translations/ka/LC_MESSAGES/messages.mo +0 -0
  140. invenio_vocabularies/translations/lt/LC_MESSAGES/messages.mo +0 -0
  141. invenio_vocabularies/translations/messages.pot +95 -48
  142. invenio_vocabularies/translations/ne/LC_MESSAGES/messages.mo +0 -0
  143. invenio_vocabularies/translations/no/LC_MESSAGES/messages.mo +0 -0
  144. invenio_vocabularies/translations/pl/LC_MESSAGES/messages.mo +0 -0
  145. invenio_vocabularies/translations/pt/LC_MESSAGES/messages.mo +0 -0
  146. invenio_vocabularies/translations/ro/LC_MESSAGES/messages.mo +0 -0
  147. invenio_vocabularies/translations/ru/LC_MESSAGES/messages.mo +0 -0
  148. invenio_vocabularies/translations/rw/LC_MESSAGES/messages.mo +0 -0
  149. invenio_vocabularies/translations/sk/LC_MESSAGES/messages.mo +0 -0
  150. invenio_vocabularies/translations/sv/LC_MESSAGES/messages.mo +0 -0
  151. invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.mo +0 -0
  152. invenio_vocabularies/translations/tr/LC_MESSAGES/messages.mo +0 -0
  153. invenio_vocabularies/translations/uk/LC_MESSAGES/messages.mo +0 -0
  154. invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.mo +0 -0
  155. invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  156. invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  157. invenio_vocabularies/views.py +12 -26
  158. invenio_vocabularies/webpack.py +3 -3
  159. {invenio_vocabularies-2.3.1.dist-info → invenio_vocabularies-6.3.1.dist-info}/METADATA +150 -6
  160. {invenio_vocabularies-2.3.1.dist-info → invenio_vocabularies-6.3.1.dist-info}/RECORD +165 -132
  161. {invenio_vocabularies-2.3.1.dist-info → invenio_vocabularies-6.3.1.dist-info}/WHEEL +1 -1
  162. {invenio_vocabularies-2.3.1.dist-info → invenio_vocabularies-6.3.1.dist-info}/entry_points.txt +17 -0
  163. {invenio_vocabularies-2.3.1.dist-info → invenio_vocabularies-6.3.1.dist-info}/AUTHORS.rst +0 -0
  164. {invenio_vocabularies-2.3.1.dist-info → invenio_vocabularies-6.3.1.dist-info}/LICENSE +0 -0
  165. {invenio_vocabularies-2.3.1.dist-info → invenio_vocabularies-6.3.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2020-2022 CERN.
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
@@ -35,6 +35,9 @@ class BaseVocabularyRelationSchema(Schema):
35
35
 
36
36
  id = SanitizedUnicode(required=True)
37
37
 
38
+ # Nested field type for administration UI form generation
39
+ administration_schema_type = "vocabulary"
40
+
38
41
 
39
42
  class VocabularyRelationSchema(BaseVocabularyRelationSchema):
40
43
  """Vocabulary relation schema."""
@@ -63,6 +66,9 @@ class ContribVocabularyRelationSchema(Schema):
63
66
  ftf_name = None # free text field name
64
67
  parent_field_name = None
65
68
 
69
+ # Nested field type for administration UI form generation
70
+ administration_schema_type = "vocabulary"
71
+
66
72
  @validates_schema
67
73
  def validate_relation_schema(self, data, **kwargs):
68
74
  """Validates that either id either the free text field are present."""
@@ -90,13 +96,16 @@ class BaseVocabularySchema(BaseRecordSchema):
90
96
  title = i18n_strings
91
97
  description = i18n_strings
92
98
  icon = fields.Str(allow_none=False)
99
+ tags = fields.List(SanitizedUnicode())
100
+
101
+ # Nested field type for administration UI form generation
102
+ administration_schema_type = "vocabulary"
93
103
 
94
104
 
95
105
  class VocabularySchema(BaseVocabularySchema):
96
106
  """Service schema for vocabulary records."""
97
107
 
98
108
  props = fields.Dict(allow_none=False, keys=fields.Str(), values=fields.Str())
99
- tags = fields.List(SanitizedUnicode())
100
109
  type = fields.Str(attribute="type.id", required=True)
101
110
 
102
111
 
@@ -1,7 +1,8 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2020-2021 CERN.
3
+ # Copyright (C) 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,108 +10,59 @@
9
10
 
10
11
  """Vocabulary service."""
11
12
 
13
+ import sqlalchemy as sa
12
14
  from invenio_cache import current_cache
13
- from invenio_db import db
14
- from invenio_i18n import lazy_gettext as _
15
- from invenio_records_resources.services import (
16
- Link,
17
- LinksTemplate,
18
- RecordService,
19
- RecordServiceConfig,
20
- SearchOptions,
21
- pagination_links,
22
- )
23
- from invenio_records_resources.services.records.components import DataComponent
24
- from invenio_records_resources.services.records.params import (
25
- FilterParam,
26
- SuggestQueryParser,
27
- )
15
+ from invenio_records_resources.services import LinksTemplate, RecordService
16
+ from invenio_records_resources.services.base.utils import map_search_params
28
17
  from invenio_records_resources.services.records.schema import ServiceSchemaWrapper
29
18
  from invenio_records_resources.services.uow import unit_of_work
30
19
  from invenio_search.engine import dsl
31
20
 
32
- from ..records.api import Vocabulary
33
21
  from ..records.models import VocabularyType
34
- from .components import PIDComponent, VocabularyTypeComponent
35
- from .permissions import PermissionPolicy
36
- from .schema import TaskSchema, VocabularySchema
37
22
  from .tasks import process_datastream
38
23
 
39
24
 
40
- class VocabularySearchOptions(SearchOptions):
41
- """Search options."""
42
-
43
- params_interpreters_cls = [
44
- FilterParam.factory(param="tags", field="tags"),
45
- ] + SearchOptions.params_interpreters_cls
46
-
47
- suggest_parser_cls = SuggestQueryParser.factory(
48
- fields=[
49
- "id.text^100",
50
- "id.text._2gram",
51
- "id.text._3gram",
52
- "title.en^5",
53
- "title.en._2gram",
54
- "title.en._3gram",
55
- ],
56
- )
57
-
58
- sort_default = "bestmatch"
59
-
60
- sort_default_no_query = "title"
61
-
62
- sort_options = {
63
- "bestmatch": dict(
64
- title=_("Best match"),
65
- fields=["_score"], # ES defaults to desc on `_score` field
66
- ),
67
- "title": dict(
68
- title=_("Title"),
69
- fields=["title_sort"],
70
- ),
71
- "newest": dict(
72
- title=_("Newest"),
73
- fields=["-created"],
74
- ),
75
- "oldest": dict(
76
- title=_("Oldest"),
77
- fields=["created"],
78
- ),
79
- }
80
-
81
-
82
- class VocabulariesServiceConfig(RecordServiceConfig):
83
- """Vocabulary service configuration."""
84
-
85
- service_id = "vocabularies"
86
- indexer_queue_name = "vocabularies"
87
- permission_policy_cls = PermissionPolicy
88
- record_cls = Vocabulary
89
- schema = VocabularySchema
90
- task_schema = TaskSchema
91
-
92
- search = VocabularySearchOptions
93
-
94
- components = [
95
- # Order of components are important!
96
- VocabularyTypeComponent,
97
- DataComponent,
98
- PIDComponent,
99
- ]
100
-
101
- links_item = {
102
- "self": Link(
103
- "{+api}/vocabularies/{type}/{id}",
104
- vars=lambda record, vars: vars.update(
105
- {
106
- "id": record.pid.pid_value,
107
- "type": record.type.id,
108
- }
109
- ),
110
- ),
111
- }
25
+ class VocabularyTypeService(RecordService):
26
+ """Vocabulary type service."""
27
+
28
+ def rebuild_index(self, identity, uow=None):
29
+ """Raise error since services are not backed by search indices."""
30
+ raise NotImplementedError()
31
+
32
+ def search(self, identity, params=None):
33
+ """Search for vocabulary types entries."""
34
+ self.require_permission(identity, "list_vocabularies")
35
+
36
+ search_params = map_search_params(self.config.search, params)
37
+
38
+ query_param = search_params["q"]
39
+
40
+ filters = []
41
+ if query_param:
42
+ filters.extend([VocabularyType.id.ilike(f"%{query_param}%")])
43
+
44
+ vocabulary_types = (
45
+ VocabularyType.query.filter(sa.or_(*filters))
46
+ .order_by(
47
+ search_params["sort_direction"](
48
+ sa.text(",".join(search_params["sort"]))
49
+ )
50
+ )
51
+ .paginate(
52
+ page=search_params["page"],
53
+ per_page=search_params["size"],
54
+ error_out=False,
55
+ )
56
+ )
112
57
 
113
- links_search = pagination_links("{+api}/vocabularies/{type}{?args*}")
58
+ return self.config.result_list_cls(
59
+ self,
60
+ identity,
61
+ vocabulary_types,
62
+ search_params,
63
+ links_tpl=LinksTemplate(self.config.links_search, context={"args": params}),
64
+ links_item_tpl=self.links_item_tpl,
65
+ )
114
66
 
115
67
 
116
68
  class VocabulariesService(RecordService):
@@ -145,7 +97,7 @@ class VocabulariesService(RecordService):
145
97
  params,
146
98
  search_preference,
147
99
  extra_filter=dsl.Q("term", type__id=vocabulary_type.id),
148
- **kwargs
100
+ **kwargs,
149
101
  ).execute()
150
102
 
151
103
  return self.result_list(
@@ -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 modify
6
6
  # it under the terms of the MIT License; see LICENSE file for more details.
@@ -0,0 +1,23 @@
1
+ {#
2
+ Copyright (C) 2024 CERN.
3
+
4
+ Invenio RDM Records is free software; you can redistribute it and/or modify
5
+ it under the terms of the MIT License; see LICENSE file for more details.
6
+ #}
7
+
8
+ {%- set subjects = field_value -%}
9
+ {% if subjects %}
10
+ <ul class="ui horizontal list no-bullets subjects">
11
+ {%- for subject in subjects %}
12
+ <li class="item">
13
+ {%- set q = 'metadata.subjects.subject:"' + subject.subject + '"' %}
14
+ <a href="{{ url_for('invenio_search_ui.search', q=q) }}"
15
+ class="subject"
16
+ title="{{ _('Search results for ') + subject.subject }}"
17
+ >
18
+ {{ subject.subject }}
19
+ </a>
20
+ </li>
21
+ {%- endfor %}
22
+ </ul>
23
+ {% endif %}
@@ -0,0 +1,12 @@
1
+ {#
2
+ Copyright (C) 2024 Uni Münster.
3
+
4
+ Invenio App RDM is free software; you can redistribute it and/or modify it
5
+ under the terms of the MIT License; see LICENSE file for more details.
6
+ #}
7
+ {% extends "invenio_administration/search.html" %}
8
+
9
+ {% block javascript %}
10
+ {{ super() }}
11
+ {{ webpack['invenio-vocabularies-search.js'] }}
12
+ {% endblock %}
@@ -0,0 +1,71 @@
1
+ {#
2
+ Copyright (C) 2024 CERN.
3
+
4
+ Invenio App RDM is free software; you can redistribute it and/or modify it
5
+ under the terms of the MIT License; see LICENSE file for more details.
6
+ #}
7
+
8
+ {%- from "invenio_administration/macros.html" import go_back %}
9
+
10
+ {% extends "invenio_administration/search.html" %}
11
+
12
+ {% block admin_main_column %}
13
+ <main id="admin-main-content"
14
+ class="ten wide mobile twelve wide tablet thirteen wide computer fourteen wide widescreen column">
15
+
16
+ <div class="ui container fluid pl-10 pr-10 pt-10 pb-10">
17
+ {{ go_back() }}
18
+ <div class="ui grid">
19
+ <div class="column six wide">
20
+ <h1 class="ui header">{{ title or name }}</h1>
21
+ </div>
22
+ <div class="column ten wide right aligned">
23
+ <a class="ui icon labeled button"
24
+ href="{{ edit_endpoint }}">
25
+ <i aria-hidden="true"
26
+ class="cog icon"></i>{{ _("Settings") }}
27
+ </a>
28
+ <a class="ui icon labeled button"
29
+ href="{{ create_ui_endpoint }}">
30
+ <i aria-hidden="true"
31
+ class="calendar icon"></i>{{ _("Schedule") }}
32
+ </a>
33
+ <a class="ui icon labeled button"
34
+ href="{{ run_endpoint }}">
35
+ <i aria-hidden="true"
36
+ class="play icon"></i>{{ _("Run now") }}
37
+ </a>
38
+ </div>
39
+ </div>
40
+ {% block admin_page_content %}
41
+ <div class="ui divider" aria-hidden="true"></div>
42
+
43
+ {%- block search_app %}
44
+ <div
45
+ id="invenio-search-config"
46
+ data-title='{{ title | tojson }}'
47
+ data-resource-name='{{ resource_name | tojson }}'
48
+ data-invenio-search-config='{{ search_config() | tojson }}'
49
+ data-fields='{{ fields | tojson }}'
50
+ data-display-search='{{ display_search | tojson }}'
51
+ data-display-read='{{ display_read | tojson }}'
52
+ data-display-edit='{{ display_edit | tojson }}'
53
+ data-display-delete='{{ display_delete | tojson }}'
54
+ data-resource-schema='{{ resource_schema | tojson }}'
55
+ data-actions='{{ actions | tojson }}'
56
+ data-api-endpoint='{{ api_endpoint }}'
57
+ data-pid-path='{{ pid_path | tojson }}'
58
+ data-create-endpoint='{{ create_ui_endpoint }}'
59
+ data-list-endpoint='{{ list_ui_endpoint }}'
60
+ >
61
+ </div>
62
+ {%- endblock search_app %}
63
+ {% endblock admin_page_content %}
64
+ </div>
65
+ </main>
66
+ {% endblock %}
67
+
68
+ {% block javascript %}
69
+ {{ super() }}
70
+ {{ webpack['invenio-jobs-details.js'] }}
71
+ {% endblock %}
@@ -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