invenio-vocabularies 9.1.2__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.
Files changed (337) hide show
  1. invenio_vocabularies/__init__.py +16 -0
  2. invenio_vocabularies/administration/__init__.py +10 -0
  3. invenio_vocabularies/administration/views/__init__.py +10 -0
  4. invenio_vocabularies/administration/views/vocabularies.py +43 -0
  5. invenio_vocabularies/alembic/17c703ce1eb7_create_names_table.py +54 -0
  6. invenio_vocabularies/alembic/3ba812d80559_add_internal_name_id.py +36 -0
  7. invenio_vocabularies/alembic/4a9a4fd235f8_create_vocabulary_schemes.py +37 -0
  8. invenio_vocabularies/alembic/4f365fced43f_create_vocabularies_tables.py +92 -0
  9. invenio_vocabularies/alembic/55a700f897b6_add_names_and_afiliations_pid_column.py +96 -0
  10. invenio_vocabularies/alembic/6312f33645c1_create_affiliations_table.py +54 -0
  11. invenio_vocabularies/alembic/676dd587542d_create_funders_vocabulary_table.py +58 -0
  12. invenio_vocabularies/alembic/8ff82dfb0be8_create_vocabularies_branch.py +28 -0
  13. invenio_vocabularies/alembic/__init__.py +9 -0
  14. invenio_vocabularies/alembic/af2457652217_drop_unique_constraint_from_internal_id.py +37 -0
  15. invenio_vocabularies/alembic/e1146238edd3_create_awards_table.py +56 -0
  16. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.eslintrc.yml +11 -0
  17. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.prettierrc +1 -0
  18. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/index.js +7 -0
  19. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +25 -0
  20. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/AwardResults.js +95 -0
  21. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/CustomAwardForm.js +139 -0
  22. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FunderDropdown.js +87 -0
  23. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.js +244 -0
  24. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.test.js +1 -0
  25. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingFieldItem.js +152 -0
  26. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingModal.js +246 -0
  27. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/NoAwardResults.js +37 -0
  28. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/index.js +8 -0
  29. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/index.js +7 -0
  30. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/index.js +7 -0
  31. invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/index.js +7 -0
  32. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next.js +36 -0
  33. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/_generatedTranslations.js +66 -0
  34. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ar/messages.po +96 -0
  35. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ar/translations.json +28 -0
  36. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/bg/messages.po +94 -0
  37. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/bg/translations.json +28 -0
  38. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ca/messages.po +94 -0
  39. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ca/translations.json +28 -0
  40. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/cs/messages.po +97 -0
  41. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/cs/translations.json +28 -0
  42. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/da/messages.po +94 -0
  43. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/da/translations.json +28 -0
  44. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/de/messages.po +98 -0
  45. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/de/translations.json +28 -0
  46. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/el/messages.po +94 -0
  47. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/el/translations.json +28 -0
  48. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/en/messages.po +88 -0
  49. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/en/translations.json +28 -0
  50. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/es/messages.po +96 -0
  51. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/es/translations.json +28 -0
  52. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/et/messages.po +95 -0
  53. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/et/translations.json +28 -0
  54. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fa/messages.po +94 -0
  55. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fa/translations.json +28 -0
  56. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fr/messages.po +96 -0
  57. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fr/translations.json +28 -0
  58. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hr/messages.po +94 -0
  59. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hr/translations.json +28 -0
  60. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hu/messages.po +96 -0
  61. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hu/translations.json +28 -0
  62. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/index.js +24 -0
  63. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/it/messages.po +96 -0
  64. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/it/translations.json +28 -0
  65. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ja/messages.po +94 -0
  66. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ja/translations.json +28 -0
  67. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ka/messages.po +94 -0
  68. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ka/translations.json +28 -0
  69. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ko/messages.po +90 -0
  70. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ko/translations.json +28 -0
  71. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/lt/messages.po +94 -0
  72. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/lt/translations.json +28 -0
  73. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/no/messages.po +94 -0
  74. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/no/translations.json +28 -0
  75. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pl/messages.po +94 -0
  76. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pl/translations.json +28 -0
  77. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pt/messages.po +94 -0
  78. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pt/translations.json +28 -0
  79. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ro/messages.po +95 -0
  80. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ro/translations.json +28 -0
  81. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ru/messages.po +95 -0
  82. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ru/translations.json +28 -0
  83. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sk/messages.po +94 -0
  84. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sk/translations.json +28 -0
  85. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sv/messages.po +98 -0
  86. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sv/translations.json +28 -0
  87. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/tr/messages.po +96 -0
  88. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/tr/translations.json +28 -0
  89. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/uk/messages.po +94 -0
  90. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/uk/translations.json +28 -0
  91. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_CN/messages.po +96 -0
  92. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_CN/translations.json +28 -0
  93. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_TW/messages.po +94 -0
  94. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_TW/translations.json +28 -0
  95. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/package.json +19 -0
  96. invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/translations.pot +88 -0
  97. invenio_vocabularies/cli.py +175 -0
  98. invenio_vocabularies/config.py +231 -0
  99. invenio_vocabularies/contrib/__init__.py +9 -0
  100. invenio_vocabularies/contrib/affiliations/__init__.py +20 -0
  101. invenio_vocabularies/contrib/affiliations/affiliations.py +61 -0
  102. invenio_vocabularies/contrib/affiliations/api.py +13 -0
  103. invenio_vocabularies/contrib/affiliations/config.py +79 -0
  104. invenio_vocabularies/contrib/affiliations/datastreams.py +301 -0
  105. invenio_vocabularies/contrib/affiliations/facets.py +36 -0
  106. invenio_vocabularies/contrib/affiliations/jsonschemas/__init__.py +9 -0
  107. invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json +63 -0
  108. invenio_vocabularies/contrib/affiliations/mappings/__init__.py +10 -0
  109. invenio_vocabularies/contrib/affiliations/mappings/os-v1/__init__.py +9 -0
  110. invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v1.0.0.json +112 -0
  111. invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v2.0.0.json +171 -0
  112. invenio_vocabularies/contrib/affiliations/mappings/os-v2/__init__.py +9 -0
  113. invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v1.0.0.json +112 -0
  114. invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v2.0.0.json +171 -0
  115. invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py +9 -0
  116. invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json +112 -0
  117. invenio_vocabularies/contrib/affiliations/models.py +13 -0
  118. invenio_vocabularies/contrib/affiliations/resources.py +16 -0
  119. invenio_vocabularies/contrib/affiliations/schema.py +71 -0
  120. invenio_vocabularies/contrib/affiliations/services.py +15 -0
  121. invenio_vocabularies/contrib/awards/__init__.py +19 -0
  122. invenio_vocabularies/contrib/awards/api.py +13 -0
  123. invenio_vocabularies/contrib/awards/awards.py +96 -0
  124. invenio_vocabularies/contrib/awards/config.py +59 -0
  125. invenio_vocabularies/contrib/awards/datastreams.py +372 -0
  126. invenio_vocabularies/contrib/awards/jsonschemas/__init__.py +9 -0
  127. invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +91 -0
  128. invenio_vocabularies/contrib/awards/mappings/__init__.py +9 -0
  129. invenio_vocabularies/contrib/awards/mappings/os-v1/__init__.py +9 -0
  130. invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json +147 -0
  131. invenio_vocabularies/contrib/awards/mappings/os-v2/__init__.py +9 -0
  132. invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json +147 -0
  133. invenio_vocabularies/contrib/awards/mappings/v7/__init__.py +9 -0
  134. invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +147 -0
  135. invenio_vocabularies/contrib/awards/models.py +13 -0
  136. invenio_vocabularies/contrib/awards/resources.py +16 -0
  137. invenio_vocabularies/contrib/awards/schema.py +119 -0
  138. invenio_vocabularies/contrib/awards/serializer.py +47 -0
  139. invenio_vocabularies/contrib/awards/services.py +15 -0
  140. invenio_vocabularies/contrib/common/__init__.py +9 -0
  141. invenio_vocabularies/contrib/common/openaire/__init__.py +9 -0
  142. invenio_vocabularies/contrib/common/openaire/datastreams.py +84 -0
  143. invenio_vocabularies/contrib/common/ror/__init__.py +9 -0
  144. invenio_vocabularies/contrib/common/ror/datastreams.py +230 -0
  145. invenio_vocabularies/contrib/funders/__init__.py +19 -0
  146. invenio_vocabularies/contrib/funders/api.py +13 -0
  147. invenio_vocabularies/contrib/funders/config.py +78 -0
  148. invenio_vocabularies/contrib/funders/datastreams.py +97 -0
  149. invenio_vocabularies/contrib/funders/facets.py +36 -0
  150. invenio_vocabularies/contrib/funders/funders.py +72 -0
  151. invenio_vocabularies/contrib/funders/jsonschemas/__init__.py +9 -0
  152. invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +65 -0
  153. invenio_vocabularies/contrib/funders/mappings/__init__.py +9 -0
  154. invenio_vocabularies/contrib/funders/mappings/os-v1/__init__.py +9 -0
  155. invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v1.0.0.json +90 -0
  156. invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v2.0.0.json +156 -0
  157. invenio_vocabularies/contrib/funders/mappings/os-v2/__init__.py +9 -0
  158. invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v1.0.0.json +90 -0
  159. invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v2.0.0.json +156 -0
  160. invenio_vocabularies/contrib/funders/mappings/v7/__init__.py +9 -0
  161. invenio_vocabularies/contrib/funders/mappings/v7/funders/funder-v1.0.0.json +90 -0
  162. invenio_vocabularies/contrib/funders/models.py +13 -0
  163. invenio_vocabularies/contrib/funders/resources.py +16 -0
  164. invenio_vocabularies/contrib/funders/schema.py +88 -0
  165. invenio_vocabularies/contrib/funders/serializer.py +33 -0
  166. invenio_vocabularies/contrib/funders/services.py +15 -0
  167. invenio_vocabularies/contrib/names/__init__.py +19 -0
  168. invenio_vocabularies/contrib/names/api.py +13 -0
  169. invenio_vocabularies/contrib/names/components.py +24 -0
  170. invenio_vocabularies/contrib/names/config.py +75 -0
  171. invenio_vocabularies/contrib/names/datastreams.py +483 -0
  172. invenio_vocabularies/contrib/names/jsonschemas/__init__.py +9 -0
  173. invenio_vocabularies/contrib/names/jsonschemas/names/name-v1.0.0.json +68 -0
  174. invenio_vocabularies/contrib/names/mappings/__init__.py +9 -0
  175. invenio_vocabularies/contrib/names/mappings/os-v1/__init__.py +9 -0
  176. invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v1.0.0.json +101 -0
  177. invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v2.0.0.json +165 -0
  178. invenio_vocabularies/contrib/names/mappings/os-v2/__init__.py +9 -0
  179. invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v1.0.0.json +101 -0
  180. invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v2.0.0.json +165 -0
  181. invenio_vocabularies/contrib/names/mappings/v7/__init__.py +9 -0
  182. invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json +101 -0
  183. invenio_vocabularies/contrib/names/models.py +13 -0
  184. invenio_vocabularies/contrib/names/names.py +80 -0
  185. invenio_vocabularies/contrib/names/permissions.py +30 -0
  186. invenio_vocabularies/contrib/names/resources.py +54 -0
  187. invenio_vocabularies/contrib/names/s3client.py +50 -0
  188. invenio_vocabularies/contrib/names/schema.py +121 -0
  189. invenio_vocabularies/contrib/names/services.py +64 -0
  190. invenio_vocabularies/contrib/subjects/__init__.py +22 -0
  191. invenio_vocabularies/contrib/subjects/api.py +14 -0
  192. invenio_vocabularies/contrib/subjects/config.py +90 -0
  193. invenio_vocabularies/contrib/subjects/datastreams.py +63 -0
  194. invenio_vocabularies/contrib/subjects/euroscivoc/__init__.py +9 -0
  195. invenio_vocabularies/contrib/subjects/euroscivoc/datastreams.py +101 -0
  196. invenio_vocabularies/contrib/subjects/facets.py +23 -0
  197. invenio_vocabularies/contrib/subjects/gemet/__init__.py +9 -0
  198. invenio_vocabularies/contrib/subjects/gemet/datastreams.py +140 -0
  199. invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py +10 -0
  200. invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +69 -0
  201. invenio_vocabularies/contrib/subjects/mappings/__init__.py +9 -0
  202. invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py +9 -0
  203. invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +96 -0
  204. invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py +9 -0
  205. invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +96 -0
  206. invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py +9 -0
  207. invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +96 -0
  208. invenio_vocabularies/contrib/subjects/mesh/__init__.py +9 -0
  209. invenio_vocabularies/contrib/subjects/mesh/datastreams.py +48 -0
  210. invenio_vocabularies/contrib/subjects/models.py +14 -0
  211. invenio_vocabularies/contrib/subjects/nvs/__init__.py +9 -0
  212. invenio_vocabularies/contrib/subjects/nvs/datastreams.py +114 -0
  213. invenio_vocabularies/contrib/subjects/resources.py +17 -0
  214. invenio_vocabularies/contrib/subjects/schema.py +101 -0
  215. invenio_vocabularies/contrib/subjects/services.py +30 -0
  216. invenio_vocabularies/contrib/subjects/subjects.py +55 -0
  217. invenio_vocabularies/datastreams/__init__.py +18 -0
  218. invenio_vocabularies/datastreams/datastreams.py +239 -0
  219. invenio_vocabularies/datastreams/errors.py +29 -0
  220. invenio_vocabularies/datastreams/factories.py +86 -0
  221. invenio_vocabularies/datastreams/readers.py +448 -0
  222. invenio_vocabularies/datastreams/tasks.py +115 -0
  223. invenio_vocabularies/datastreams/transformers.py +130 -0
  224. invenio_vocabularies/datastreams/writers.py +222 -0
  225. invenio_vocabularies/datastreams/xml.py +34 -0
  226. invenio_vocabularies/ext.py +179 -0
  227. invenio_vocabularies/factories.py +193 -0
  228. invenio_vocabularies/fixtures.py +52 -0
  229. invenio_vocabularies/jobs.py +207 -0
  230. invenio_vocabularies/proxies.py +27 -0
  231. invenio_vocabularies/records/__init__.py +9 -0
  232. invenio_vocabularies/records/api.py +53 -0
  233. invenio_vocabularies/records/jsonschemas/__init__.py +9 -0
  234. invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json +30 -0
  235. invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json +55 -0
  236. invenio_vocabularies/records/mappings/__init__.py +9 -0
  237. invenio_vocabularies/records/mappings/os-v1/__init__.py +9 -0
  238. invenio_vocabularies/records/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +109 -0
  239. invenio_vocabularies/records/mappings/os-v2/__init__.py +9 -0
  240. invenio_vocabularies/records/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +109 -0
  241. invenio_vocabularies/records/mappings/v7/__init__.py +9 -0
  242. invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json +109 -0
  243. invenio_vocabularies/records/models.py +90 -0
  244. invenio_vocabularies/records/pidprovider.py +118 -0
  245. invenio_vocabularies/records/systemfields/__init__.py +16 -0
  246. invenio_vocabularies/records/systemfields/pid.py +125 -0
  247. invenio_vocabularies/records/systemfields/relations.py +51 -0
  248. invenio_vocabularies/resources/__init__.py +23 -0
  249. invenio_vocabularies/resources/config.py +105 -0
  250. invenio_vocabularies/resources/resource.py +156 -0
  251. invenio_vocabularies/resources/schema.py +21 -0
  252. invenio_vocabularies/resources/serializer.py +39 -0
  253. invenio_vocabularies/services/__init__.py +19 -0
  254. invenio_vocabularies/services/components.py +58 -0
  255. invenio_vocabularies/services/config.py +173 -0
  256. invenio_vocabularies/services/custom_fields/__init__.py +17 -0
  257. invenio_vocabularies/services/custom_fields/subject.py +82 -0
  258. invenio_vocabularies/services/custom_fields/vocabulary.py +96 -0
  259. invenio_vocabularies/services/facets.py +114 -0
  260. invenio_vocabularies/services/generators.py +38 -0
  261. invenio_vocabularies/services/permissions.py +30 -0
  262. invenio_vocabularies/services/querystr.py +57 -0
  263. invenio_vocabularies/services/results.py +110 -0
  264. invenio_vocabularies/services/schema.py +163 -0
  265. invenio_vocabularies/services/service.py +189 -0
  266. invenio_vocabularies/services/tasks.py +38 -0
  267. invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html +23 -0
  268. invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabularies-list.html +12 -0
  269. invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html +71 -0
  270. invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo +0 -0
  271. invenio_vocabularies/translations/ar/LC_MESSAGES/messages.po +277 -0
  272. invenio_vocabularies/translations/bg/LC_MESSAGES/messages.mo +0 -0
  273. invenio_vocabularies/translations/bg/LC_MESSAGES/messages.po +275 -0
  274. invenio_vocabularies/translations/ca/LC_MESSAGES/messages.mo +0 -0
  275. invenio_vocabularies/translations/ca/LC_MESSAGES/messages.po +276 -0
  276. invenio_vocabularies/translations/cs/LC_MESSAGES/messages.mo +0 -0
  277. invenio_vocabularies/translations/cs/LC_MESSAGES/messages.po +281 -0
  278. invenio_vocabularies/translations/da/LC_MESSAGES/messages.mo +0 -0
  279. invenio_vocabularies/translations/da/LC_MESSAGES/messages.po +271 -0
  280. invenio_vocabularies/translations/de/LC_MESSAGES/messages.mo +0 -0
  281. invenio_vocabularies/translations/de/LC_MESSAGES/messages.po +293 -0
  282. invenio_vocabularies/translations/el/LC_MESSAGES/messages.mo +0 -0
  283. invenio_vocabularies/translations/el/LC_MESSAGES/messages.po +275 -0
  284. invenio_vocabularies/translations/es/LC_MESSAGES/messages.mo +0 -0
  285. invenio_vocabularies/translations/es/LC_MESSAGES/messages.po +281 -0
  286. invenio_vocabularies/translations/et/LC_MESSAGES/messages.mo +0 -0
  287. invenio_vocabularies/translations/et/LC_MESSAGES/messages.po +276 -0
  288. invenio_vocabularies/translations/fa/LC_MESSAGES/messages.mo +0 -0
  289. invenio_vocabularies/translations/fa/LC_MESSAGES/messages.po +275 -0
  290. invenio_vocabularies/translations/fr/LC_MESSAGES/messages.mo +0 -0
  291. invenio_vocabularies/translations/fr/LC_MESSAGES/messages.po +279 -0
  292. invenio_vocabularies/translations/hr/LC_MESSAGES/messages.mo +0 -0
  293. invenio_vocabularies/translations/hr/LC_MESSAGES/messages.po +275 -0
  294. invenio_vocabularies/translations/hu/LC_MESSAGES/messages.mo +0 -0
  295. invenio_vocabularies/translations/hu/LC_MESSAGES/messages.po +280 -0
  296. invenio_vocabularies/translations/it/LC_MESSAGES/messages.mo +0 -0
  297. invenio_vocabularies/translations/it/LC_MESSAGES/messages.po +277 -0
  298. invenio_vocabularies/translations/ja/LC_MESSAGES/messages.mo +0 -0
  299. invenio_vocabularies/translations/ja/LC_MESSAGES/messages.po +275 -0
  300. invenio_vocabularies/translations/ka/LC_MESSAGES/messages.mo +0 -0
  301. invenio_vocabularies/translations/ka/LC_MESSAGES/messages.po +275 -0
  302. invenio_vocabularies/translations/ko/LC_MESSAGES/messages.mo +0 -0
  303. invenio_vocabularies/translations/ko/LC_MESSAGES/messages.po +275 -0
  304. invenio_vocabularies/translations/lt/LC_MESSAGES/messages.mo +0 -0
  305. invenio_vocabularies/translations/lt/LC_MESSAGES/messages.po +275 -0
  306. invenio_vocabularies/translations/messages.pot +270 -0
  307. invenio_vocabularies/translations/no/LC_MESSAGES/messages.mo +0 -0
  308. invenio_vocabularies/translations/no/LC_MESSAGES/messages.po +275 -0
  309. invenio_vocabularies/translations/pl/LC_MESSAGES/messages.mo +0 -0
  310. invenio_vocabularies/translations/pl/LC_MESSAGES/messages.po +275 -0
  311. invenio_vocabularies/translations/pt/LC_MESSAGES/messages.mo +0 -0
  312. invenio_vocabularies/translations/pt/LC_MESSAGES/messages.po +275 -0
  313. invenio_vocabularies/translations/ro/LC_MESSAGES/messages.mo +0 -0
  314. invenio_vocabularies/translations/ro/LC_MESSAGES/messages.po +280 -0
  315. invenio_vocabularies/translations/ru/LC_MESSAGES/messages.mo +0 -0
  316. invenio_vocabularies/translations/ru/LC_MESSAGES/messages.po +276 -0
  317. invenio_vocabularies/translations/sk/LC_MESSAGES/messages.mo +0 -0
  318. invenio_vocabularies/translations/sk/LC_MESSAGES/messages.po +276 -0
  319. invenio_vocabularies/translations/sv/LC_MESSAGES/messages.mo +0 -0
  320. invenio_vocabularies/translations/sv/LC_MESSAGES/messages.po +280 -0
  321. invenio_vocabularies/translations/tr/LC_MESSAGES/messages.mo +0 -0
  322. invenio_vocabularies/translations/tr/LC_MESSAGES/messages.po +277 -0
  323. invenio_vocabularies/translations/uk/LC_MESSAGES/messages.mo +0 -0
  324. invenio_vocabularies/translations/uk/LC_MESSAGES/messages.po +275 -0
  325. invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  326. invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po +276 -0
  327. invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  328. invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po +275 -0
  329. invenio_vocabularies/views.py +53 -0
  330. invenio_vocabularies/webpack.py +51 -0
  331. invenio_vocabularies-9.1.2.dist-info/METADATA +517 -0
  332. invenio_vocabularies-9.1.2.dist-info/RECORD +337 -0
  333. invenio_vocabularies-9.1.2.dist-info/WHEEL +6 -0
  334. invenio_vocabularies-9.1.2.dist-info/entry_points.txt +73 -0
  335. invenio_vocabularies-9.1.2.dist-info/licenses/AUTHORS.rst +13 -0
  336. invenio_vocabularies-9.1.2.dist-info/licenses/LICENSE +21 -0
  337. invenio_vocabularies-9.1.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,189 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2024 CERN.
4
+ # Copyright (C) 2021 Northwestern University.
5
+ # Copyright (C) 2024 University of Münster.
6
+ # Copyright (C) 2025 Graz University of Technology.
7
+ #
8
+ # Invenio-Vocabularies is free software; you can redistribute it and/or
9
+ # modify it under the terms of the MIT License; see LICENSE file for more
10
+ # details.
11
+
12
+ """Vocabulary service."""
13
+
14
+ import sqlalchemy as sa
15
+ from invenio_cache import current_cache
16
+ from invenio_records_resources.services import LinksTemplate, RecordService
17
+ from invenio_records_resources.services.base.utils import map_search_params
18
+ from invenio_records_resources.services.records.schema import ServiceSchemaWrapper
19
+ from invenio_records_resources.services.uow import unit_of_work
20
+ from invenio_search.engine import dsl
21
+
22
+ from ..records.models import VocabularyType
23
+ from .tasks import process_datastream
24
+
25
+
26
+ class VocabularyTypeService(RecordService):
27
+ """Vocabulary type service."""
28
+
29
+ def rebuild_index(self, identity, uow=None):
30
+ """Raise error since services are not backed by search indices."""
31
+ raise NotImplementedError()
32
+
33
+ def search(self, identity, params=None):
34
+ """Search for vocabulary types entries."""
35
+ self.require_permission(identity, "list_vocabularies")
36
+
37
+ filters = []
38
+ search_params = map_search_params(self.config.search, params)
39
+
40
+ query_param = search_params["q"]
41
+ if query_param:
42
+ filters.append(
43
+ # NOTE: Even though we only have one field, we use `or_` to
44
+ # allow for future expansion where multiple fields might be searched.
45
+ sa.or_(
46
+ VocabularyType.id.ilike(f"%{query_param}%"),
47
+ )
48
+ )
49
+
50
+ vocabulary_types = (
51
+ VocabularyType.query.filter(*filters)
52
+ .order_by(
53
+ search_params["sort_direction"](
54
+ sa.text(",".join(search_params["sort"]))
55
+ )
56
+ )
57
+ .paginate(
58
+ page=search_params["page"],
59
+ per_page=search_params["size"],
60
+ error_out=False,
61
+ )
62
+ )
63
+
64
+ return self.config.result_list_cls(
65
+ self,
66
+ identity,
67
+ vocabulary_types,
68
+ search_params,
69
+ links_tpl=LinksTemplate(self.config.links_search, context={"args": params}),
70
+ links_item_tpl=self.links_item_tpl,
71
+ )
72
+
73
+
74
+ class VocabulariesService(RecordService):
75
+ """Vocabulary service."""
76
+
77
+ @property
78
+ def task_schema(self):
79
+ """Returns the data schema instance."""
80
+ return ServiceSchemaWrapper(self, schema=self.config.task_schema)
81
+
82
+ @unit_of_work()
83
+ def create_type(self, identity, id, pid_type, uow=None):
84
+ """Create a new vocabulary type."""
85
+ self.require_permission(identity, "manage")
86
+ type_ = VocabularyType.create(id=id, pid_type=pid_type)
87
+ return type_
88
+
89
+ def search(
90
+ self, identity, params=None, search_preference=None, type=None, **kwargs
91
+ ):
92
+ """Search for vocabulary entries."""
93
+ self.require_permission(identity, "search")
94
+
95
+ # If not found, NoResultFound is raised (caught by the resource).
96
+ vocabulary_type = VocabularyType.query.filter_by(id=type).one()
97
+
98
+ # Prepare and execute the search
99
+ params = params or {}
100
+ search_result = self._search(
101
+ "search",
102
+ identity,
103
+ params,
104
+ search_preference,
105
+ extra_filter=dsl.Q("term", type__id=vocabulary_type.id),
106
+ **kwargs,
107
+ ).execute()
108
+
109
+ return self.result_list(
110
+ self,
111
+ identity,
112
+ search_result,
113
+ params,
114
+ links_tpl=LinksTemplate(
115
+ self.config.links_search,
116
+ context={
117
+ "args": params,
118
+ "type": vocabulary_type.id,
119
+ },
120
+ ),
121
+ links_item_tpl=self.links_item_tpl,
122
+ )
123
+
124
+ def read_all(self, identity, fields, type, cache=True, extra_filter="", **kwargs):
125
+ """Search for records matching the querystring."""
126
+ cache_key = type + "_" + str(extra_filter) + "_" + "-".join(fields)
127
+ results = current_cache.get(cache_key)
128
+ search_query = dsl.Q("match_all")
129
+
130
+ if not results:
131
+ # If not found, NoResultFound is raised (caught by the resource).
132
+ vocabulary_type = VocabularyType.query.filter_by(id=type).one()
133
+ vocab_id_filter = dsl.Q("term", type__id=vocabulary_type.id)
134
+ if extra_filter:
135
+ vocab_id_filter = vocab_id_filter & extra_filter
136
+ results = self._read_many(
137
+ identity, search_query, fields, extra_filter=vocab_id_filter, **kwargs
138
+ )
139
+ if cache:
140
+ # ES DSL Response is not pickable.
141
+ # If saved in cache serialization wont work with to_dict()
142
+ current_cache.set(cache_key, results.to_dict())
143
+
144
+ else:
145
+ search = self.create_search(
146
+ identity=identity,
147
+ record_cls=self.record_cls,
148
+ search_opts=self.config.search,
149
+ permission_action="search",
150
+ ).query(search_query)
151
+
152
+ results = dsl.response.Response(search, results)
153
+
154
+ return self.result_list(self, identity, results)
155
+
156
+ def read_many(self, identity, type, ids, fields=None, **kwargs):
157
+ """Search for records matching the querystring filtered by ids."""
158
+ search_query = dsl.Q("match_all")
159
+ vocabulary_type = VocabularyType.query.filter_by(id=type).one()
160
+ vocab_id_filter = dsl.Q("term", type__id=vocabulary_type.id)
161
+ filters = []
162
+
163
+ for id_ in ids:
164
+ filters.append(dsl.Q("term", **{"id": id_}))
165
+ filter = dsl.Q("bool", minimum_should_match=1, should=filters)
166
+ filter = filter & vocab_id_filter
167
+ results = self._read_many(
168
+ identity, search_query, fields, extra_filter=filter, **kwargs
169
+ )
170
+
171
+ return self.result_list(self, identity, results)
172
+
173
+ def launch(self, identity, data):
174
+ """Create a task.
175
+
176
+ FIXME: This is a PoC. The final implementation should resemble
177
+ the PIDs, having a sub-service and a manager. If persistance is
178
+ added UoW should be used.
179
+ """
180
+ self.require_permission(identity, "manage")
181
+ task_config, _ = self.task_schema.load(
182
+ data,
183
+ context={"identity": identity}, # FIXME: is this needed
184
+ raise_errors=True,
185
+ )
186
+ process_datastream.delay(task_config)
187
+
188
+ # 202 if accepted, otherwise it will be caught by an error handler
189
+ return True
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2022-2024 CERN.
4
+ #
5
+ # Invenio-Vocabularies is free software; you can redistribute it and/or modify
6
+ # it under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """Celery tasks."""
9
+
10
+ from celery import shared_task
11
+ from flask import current_app
12
+ from invenio_jobs.errors import TaskExecutionPartialError
13
+
14
+ from ..datastreams.factories import DataStreamFactory
15
+
16
+
17
+ @shared_task(ignore_result=True)
18
+ def process_datastream(config):
19
+ """Process a datastream from config."""
20
+ ds = DataStreamFactory.create(
21
+ readers_config=config["readers"],
22
+ transformers_config=config.get("transformers"),
23
+ writers_config=config["writers"],
24
+ batch_size=config.get("batch_size", 1000),
25
+ write_many=config.get("write_many", False),
26
+ )
27
+ entries_with_errors = 0
28
+ for result in ds.process():
29
+ if result.errors:
30
+ for err in result.errors:
31
+ current_app.logger.error(err)
32
+ entries_with_errors += 1
33
+
34
+ if entries_with_errors:
35
+ raise TaskExecutionPartialError(
36
+ message=f"Task execution succeeded with {entries_with_errors} entries with errors.",
37
+ errored_entries_count=entries_with_errors,
38
+ )
@@ -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 %}
@@ -0,0 +1,277 @@
1
+ # Translations template for invenio-vocabularies.
2
+ # Copyright (C) 2025 CERN
3
+ # This file is distributed under the same license as the
4
+ # invenio-vocabularies project.
5
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
6
+ #
7
+ # Translators:
8
+ # Tibor Simko <tibor.simko@cern.ch>, 2021
9
+ # Salaheddine Ben Ali <salaheddine.benali@cnudst.tn>, 2025
10
+ # Bessem Aamira <bessemamira@gmail.com>, 2025
11
+ #
12
+ #, fuzzy
13
+ msgid ""
14
+ msgstr ""
15
+ "Project-Id-Version: invenio-vocabularies 8.1.0\n"
16
+ "Report-Msgid-Bugs-To: info@inveniosoftware.org\n"
17
+ "POT-Creation-Date: 2025-07-08 20:00+0000\n"
18
+ "PO-Revision-Date: 2021-07-13 12:40+0000\n"
19
+ "Last-Translator: Bessem Aamira <bessemamira@gmail.com>, 2025\n"
20
+ "Language-Team: Arabic (https://app.transifex.com/inveniosoftware/teams/23537/ar/)\n"
21
+ "MIME-Version: 1.0\n"
22
+ "Content-Type: text/plain; charset=UTF-8\n"
23
+ "Content-Transfer-Encoding: 8bit\n"
24
+ "Generated-By: Babel 2.17.0\n"
25
+ "Language: ar\n"
26
+ "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
27
+
28
+ #: invenio_vocabularies/config.py:44
29
+ msgid "GRID"
30
+ msgstr "GRID"
31
+
32
+ #: invenio_vocabularies/config.py:45 invenio_vocabularies/config.py:126
33
+ #: invenio_vocabularies/config.py:131
34
+ msgid "GND"
35
+ msgstr "GND"
36
+
37
+ #: invenio_vocabularies/config.py:46 invenio_vocabularies/config.py:125
38
+ msgid "ISNI"
39
+ msgstr "ISNI"
40
+
41
+ #: invenio_vocabularies/config.py:47
42
+ msgid "ROR"
43
+ msgstr "رور ROR"
44
+
45
+ #: invenio_vocabularies/config.py:68
46
+ msgid "PIC"
47
+ msgstr ""
48
+
49
+ #: invenio_vocabularies/config.py:69
50
+ msgid "EDMO"
51
+ msgstr ""
52
+
53
+ #: invenio_vocabularies/config.py:75 invenio_vocabularies/config.py:84
54
+ msgid "DOI"
55
+ msgstr "المعرف الوحيد للأشياء DOI"
56
+
57
+ #: invenio_vocabularies/config.py:83 invenio_vocabularies/config.py:132
58
+ msgid "URL"
59
+ msgstr "عنوان ويب URL"
60
+
61
+ #: invenio_vocabularies/config.py:124
62
+ msgid "ORCID"
63
+ msgstr "أوركيد ORCID"
64
+
65
+ #: invenio_vocabularies/administration/views/vocabularies.py:37
66
+ #: invenio_vocabularies/config.py:175
67
+ #: invenio_vocabularies/contrib/affiliations/config.py:61
68
+ #: invenio_vocabularies/contrib/funders/config.py:60
69
+ #: invenio_vocabularies/contrib/names/config.py:55
70
+ #: invenio_vocabularies/contrib/subjects/config.py:70
71
+ msgid "Name"
72
+ msgstr "إسم"
73
+
74
+ #: invenio_vocabularies/administration/views/vocabularies.py:38
75
+ #: invenio_vocabularies/config.py:179
76
+ msgid "Number of entries"
77
+ msgstr ""
78
+
79
+ #: invenio_vocabularies/jobs.py:30
80
+ msgid "Process ROR affiliations"
81
+ msgstr ""
82
+
83
+ #: invenio_vocabularies/jobs.py:31
84
+ msgid "Load ROR affiliations"
85
+ msgstr ""
86
+
87
+ #: invenio_vocabularies/jobs.py:68
88
+ msgid "Process ROR funders"
89
+ msgstr ""
90
+
91
+ #: invenio_vocabularies/jobs.py:69
92
+ msgid "Load ROR funders"
93
+ msgstr ""
94
+
95
+ #: invenio_vocabularies/jobs.py:106
96
+ msgid "Import awards from OpenAIRE"
97
+ msgstr ""
98
+
99
+ #: invenio_vocabularies/jobs.py:107
100
+ msgid "Import Awards OpenAIRE"
101
+ msgstr ""
102
+
103
+ #: invenio_vocabularies/jobs.py:141
104
+ msgid "Update awards from CORDIS"
105
+ msgstr ""
106
+
107
+ #: invenio_vocabularies/jobs.py:142
108
+ msgid "Update Awards CORDIS"
109
+ msgstr ""
110
+
111
+ #: invenio_vocabularies/jobs.py:169 invenio_vocabularies/jobs.py:170
112
+ msgid "Import ORCID data"
113
+ msgstr ""
114
+
115
+ #: invenio_vocabularies/administration/views/vocabularies.py:21
116
+ #: invenio_vocabularies/administration/views/vocabularies.py:24
117
+ msgid "Vocabulary Types"
118
+ msgstr ""
119
+
120
+ #: invenio_vocabularies/administration/views/vocabularies.py:25
121
+ msgid "Site management"
122
+ msgstr "إدارة الموقع"
123
+
124
+ #: invenio_vocabularies/contrib/affiliations/config.py:57
125
+ #: invenio_vocabularies/contrib/funders/config.py:56
126
+ #: invenio_vocabularies/contrib/names/config.py:51
127
+ #: invenio_vocabularies/contrib/subjects/config.py:66
128
+ #: invenio_vocabularies/services/config.py:67
129
+ msgid "Best match"
130
+ msgstr "أفضل تطابق "
131
+
132
+ #: invenio_vocabularies/contrib/affiliations/config.py:65
133
+ #: invenio_vocabularies/contrib/funders/config.py:64
134
+ #: invenio_vocabularies/contrib/names/config.py:59
135
+ #: invenio_vocabularies/contrib/subjects/config.py:74
136
+ #: invenio_vocabularies/services/config.py:75
137
+ msgid "Newest"
138
+ msgstr "الأحدث"
139
+
140
+ #: invenio_vocabularies/contrib/affiliations/config.py:69
141
+ #: invenio_vocabularies/contrib/funders/config.py:68
142
+ #: invenio_vocabularies/contrib/names/config.py:63
143
+ #: invenio_vocabularies/contrib/subjects/config.py:78
144
+ #: invenio_vocabularies/services/config.py:79
145
+ msgid "Oldest"
146
+ msgstr "الأقدم"
147
+
148
+ #: invenio_vocabularies/contrib/affiliations/schema.py:41
149
+ #: invenio_vocabularies/contrib/funders/schema.py:36
150
+ #: invenio_vocabularies/contrib/funders/schema.py:44
151
+ msgid "Name cannot be blank."
152
+ msgstr "اﻹسم لا يمكن أن يكون فارغا"
153
+
154
+ #: invenio_vocabularies/contrib/affiliations/schema.py:47
155
+ #: invenio_vocabularies/contrib/awards/schema.py:69
156
+ #: invenio_vocabularies/contrib/funders/schema.py:60
157
+ msgid "PID cannot be blank."
158
+ msgstr "معرف PID لا يمكن أن يكون فارغا."
159
+
160
+ #: invenio_vocabularies/contrib/awards/config.py:49
161
+ msgid "Funders"
162
+ msgstr "ممولون"
163
+
164
+ #: invenio_vocabularies/contrib/awards/datastreams.py:67
165
+ #, python-brace-format
166
+ msgid "Unknown OpenAIRE funder prefix {openaire_funder_prefix}"
167
+ msgstr "OpenAIRE funder prefix غير معلوم {openaire_funder_prefix}"
168
+
169
+ #: invenio_vocabularies/contrib/awards/datastreams.py:108
170
+ #, python-brace-format
171
+ msgid "Missing title attribute for award {award_id}"
172
+ msgstr ""
173
+
174
+ #: invenio_vocabularies/contrib/awards/datastreams.py:244
175
+ #, python-brace-format
176
+ msgid "No related legal basis programme found for project {project_id}"
177
+ msgstr ""
178
+
179
+ #: invenio_vocabularies/contrib/awards/schema.py:52
180
+ msgid "Number cannot be blank."
181
+ msgstr "الرقم لا يمكن أن يكون فارغا"
182
+
183
+ #: invenio_vocabularies/contrib/awards/schema.py:100
184
+ msgid "An existing id or either number or title must be present."
185
+ msgstr ""
186
+
187
+ #: invenio_vocabularies/contrib/awards/schema.py:118
188
+ msgid "At least award or funder should be present."
189
+ msgstr " يجب ان يكون هناك جائزة أو ممول على الاقل."
190
+
191
+ #: invenio_vocabularies/contrib/common/ror/datastreams.py:147
192
+ msgid "Id not found in ROR entry."
193
+ msgstr "معرف Id غير متواجد بمدخلات سجل ROR."
194
+
195
+ #: invenio_vocabularies/contrib/common/ror/datastreams.py:179
196
+ msgid "Name with type ror_display not found in ROR entry."
197
+ msgstr ""
198
+
199
+ #: invenio_vocabularies/contrib/funders/schema.py:73
200
+ #: invenio_vocabularies/services/schema.py:120
201
+ msgid "Missing PID."
202
+ msgstr "معرف PID مفقود."
203
+
204
+ #: invenio_vocabularies/contrib/names/schema.py:76
205
+ msgid ""
206
+ "A name or the family name together with the given name must be present."
207
+ msgstr "يجب أن يكون اللّقب أو اسم العائلة موجودا مع الاسم."
208
+
209
+ #: invenio_vocabularies/contrib/names/schema.py:90
210
+ msgid "Duplicated affiliations."
211
+ msgstr "الانتماءات المكررة."
212
+
213
+ #: invenio_vocabularies/records/models.py:84
214
+ #, python-format
215
+ msgid "No '%(banned_char)s' allowed in VocabularyScheme.id"
216
+ msgstr "كل '%(banned_char)s' غير مسموحة في VocabularyScheme.id"
217
+
218
+ #: invenio_vocabularies/services/components.py:29
219
+ msgid "The vocabulary type does not exists."
220
+ msgstr "نوع المفردات غير موجود."
221
+
222
+ #: invenio_vocabularies/services/config.py:71
223
+ msgid "Title"
224
+ msgstr "العنوان"
225
+
226
+ #: invenio_vocabularies/services/config.py:90
227
+ msgid "ID"
228
+ msgstr "معرّف ID"
229
+
230
+ #: invenio_vocabularies/services/config.py:100
231
+ msgid "Ascending"
232
+ msgstr "تصاعدي"
233
+
234
+ #: invenio_vocabularies/services/config.py:101
235
+ msgid "Descending"
236
+ msgstr "تنازلي"
237
+
238
+ #: invenio_vocabularies/services/schema.py:85
239
+ #, python-brace-format
240
+ msgid "An existing id or a free text {ftf_name} must be present."
241
+ msgstr "يجب أن يكون هناك معرف id موجود او نص حر {ftf_name}."
242
+
243
+ #: invenio_vocabularies/services/custom_fields/subject.py:50
244
+ msgid "Subjects"
245
+ msgstr "المواضيع"
246
+
247
+ #: invenio_vocabularies/services/custom_fields/subject.py:57
248
+ msgid "Keywords and subjects"
249
+ msgstr "كلمات مفتاحية و مواضيع"
250
+
251
+ #: invenio_vocabularies/services/custom_fields/subject.py:59
252
+ msgid "The subjects related to the community"
253
+ msgstr "المواضيع المتعلقة بالمجتمع"
254
+
255
+ #: invenio_vocabularies/services/custom_fields/subject.py:60
256
+ msgid "Search for a subject by name e.g. Psychology ..."
257
+ msgstr "إبحث عن موضوع حسب الاسم مثل: علم النفس ..."
258
+
259
+ #: invenio_vocabularies/services/custom_fields/subject.py:62
260
+ msgid "Search for subjects..."
261
+ msgstr "البحث عن المواضيع..."
262
+
263
+ #: invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html:16
264
+ msgid "Search results for "
265
+ msgstr "نتائج البحث لـ"
266
+
267
+ #: invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html:26
268
+ msgid "Settings"
269
+ msgstr "إعدادات"
270
+
271
+ #: invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html:31
272
+ msgid "Schedule"
273
+ msgstr ""
274
+
275
+ #: invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html:36
276
+ msgid "Run now"
277
+ msgstr ""