invenio-vocabularies 9.0.0__tar.gz → 9.1.1__tar.gz

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 (357) hide show
  1. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/CHANGES.rst +8 -0
  2. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/PKG-INFO +10 -2
  3. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/__init__.py +1 -1
  4. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +1 -1
  5. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/datastreams.py +11 -4
  6. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/schema.py +5 -3
  7. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/datastreams/datastreams.py +52 -4
  8. invenio_vocabularies-9.1.1/invenio_vocabularies/datastreams/tasks.py +115 -0
  9. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/datastreams/writers.py +26 -9
  10. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/jobs.py +28 -0
  11. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/tasks.py +3 -1
  12. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies.egg-info/PKG-INFO +10 -2
  13. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies.egg-info/requires.txt +1 -1
  14. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/setup.cfg +1 -1
  15. invenio_vocabularies-9.0.0/invenio_vocabularies/datastreams/tasks.py +0 -37
  16. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/.dockerignore +0 -0
  17. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/.editorconfig +0 -0
  18. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/.git-blame-ignore-revs +0 -0
  19. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/AUTHORS.rst +0 -0
  20. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/CONTRIBUTING.rst +0 -0
  21. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/INSTALL.rst +0 -0
  22. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/LICENSE +0 -0
  23. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/MANIFEST.in +0 -0
  24. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/README.rst +0 -0
  25. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/babel.ini +0 -0
  26. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/gen-migration.sh +0 -0
  27. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/administration/__init__.py +0 -0
  28. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/administration/views/__init__.py +0 -0
  29. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/administration/views/vocabularies.py +0 -0
  30. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/17c703ce1eb7_create_names_table.py +0 -0
  31. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/3ba812d80559_add_internal_name_id.py +0 -0
  32. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/4a9a4fd235f8_create_vocabulary_schemes.py +0 -0
  33. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/4f365fced43f_create_vocabularies_tables.py +0 -0
  34. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/55a700f897b6_add_names_and_afiliations_pid_column.py +0 -0
  35. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/6312f33645c1_create_affiliations_table.py +0 -0
  36. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/676dd587542d_create_funders_vocabulary_table.py +0 -0
  37. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/8ff82dfb0be8_create_vocabularies_branch.py +0 -0
  38. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/__init__.py +0 -0
  39. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/af2457652217_drop_unique_constraint_from_internal_id.py +0 -0
  40. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/alembic/e1146238edd3_create_awards_table.py +0 -0
  41. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.eslintrc.yml +0 -0
  42. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.prettierrc +0 -0
  43. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/index.js +0 -0
  44. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/AwardResults.js +0 -0
  45. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/CustomAwardForm.js +0 -0
  46. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FunderDropdown.js +0 -0
  47. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.js +0 -0
  48. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.test.js +0 -0
  49. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingFieldItem.js +0 -0
  50. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingModal.js +0 -0
  51. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/NoAwardResults.js +0 -0
  52. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/index.js +0 -0
  53. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/index.js +0 -0
  54. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/index.js +0 -0
  55. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/index.js +0 -0
  56. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next.js +0 -0
  57. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/_generatedTranslations.js +0 -0
  58. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ar/messages.po +0 -0
  59. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ar/translations.json +0 -0
  60. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/bg/messages.po +0 -0
  61. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/bg/translations.json +0 -0
  62. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ca/messages.po +0 -0
  63. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ca/translations.json +0 -0
  64. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/cs/messages.po +0 -0
  65. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/cs/translations.json +0 -0
  66. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/da/messages.po +0 -0
  67. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/da/translations.json +0 -0
  68. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/de/messages.po +0 -0
  69. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/de/translations.json +0 -0
  70. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/el/messages.po +0 -0
  71. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/el/translations.json +0 -0
  72. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/en/messages.po +0 -0
  73. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/en/translations.json +0 -0
  74. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/es/messages.po +0 -0
  75. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/es/translations.json +0 -0
  76. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/et/messages.po +0 -0
  77. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/et/translations.json +0 -0
  78. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fa/messages.po +0 -0
  79. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fa/translations.json +0 -0
  80. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fr/messages.po +0 -0
  81. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fr/translations.json +0 -0
  82. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hr/messages.po +0 -0
  83. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hr/translations.json +0 -0
  84. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hu/messages.po +0 -0
  85. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hu/translations.json +0 -0
  86. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/index.js +0 -0
  87. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/it/messages.po +0 -0
  88. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/it/translations.json +0 -0
  89. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ja/messages.po +0 -0
  90. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ja/translations.json +0 -0
  91. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ka/messages.po +0 -0
  92. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ka/translations.json +0 -0
  93. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ko/messages.po +0 -0
  94. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ko/translations.json +0 -0
  95. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/lt/messages.po +0 -0
  96. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/lt/translations.json +0 -0
  97. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/no/messages.po +0 -0
  98. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/no/translations.json +0 -0
  99. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pl/messages.po +0 -0
  100. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pl/translations.json +0 -0
  101. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pt/messages.po +0 -0
  102. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pt/translations.json +0 -0
  103. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ro/messages.po +0 -0
  104. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ro/translations.json +0 -0
  105. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ru/messages.po +0 -0
  106. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ru/translations.json +0 -0
  107. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sk/messages.po +0 -0
  108. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sk/translations.json +0 -0
  109. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sv/messages.po +0 -0
  110. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sv/translations.json +0 -0
  111. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/tr/messages.po +0 -0
  112. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/tr/translations.json +0 -0
  113. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/uk/messages.po +0 -0
  114. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/uk/translations.json +0 -0
  115. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_CN/messages.po +0 -0
  116. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_CN/translations.json +0 -0
  117. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_TW/messages.po +0 -0
  118. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_TW/translations.json +0 -0
  119. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/package.json +0 -0
  120. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/translations.pot +0 -0
  121. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/cli.py +0 -0
  122. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/config.py +0 -0
  123. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/__init__.py +0 -0
  124. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/__init__.py +0 -0
  125. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/affiliations.py +0 -0
  126. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/api.py +0 -0
  127. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/config.py +0 -0
  128. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/datastreams.py +0 -0
  129. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/facets.py +0 -0
  130. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/jsonschemas/__init__.py +0 -0
  131. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json +0 -0
  132. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/__init__.py +0 -0
  133. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/__init__.py +0 -0
  134. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v1.0.0.json +0 -0
  135. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v2.0.0.json +0 -0
  136. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/__init__.py +0 -0
  137. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v1.0.0.json +0 -0
  138. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v2.0.0.json +0 -0
  139. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py +0 -0
  140. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json +0 -0
  141. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/models.py +0 -0
  142. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/resources.py +0 -0
  143. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/schema.py +0 -0
  144. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/affiliations/services.py +0 -0
  145. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/__init__.py +0 -0
  146. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/api.py +0 -0
  147. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/awards.py +0 -0
  148. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/config.py +0 -0
  149. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/datastreams.py +0 -0
  150. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/jsonschemas/__init__.py +0 -0
  151. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +0 -0
  152. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/mappings/__init__.py +0 -0
  153. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/mappings/os-v1/__init__.py +0 -0
  154. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json +0 -0
  155. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/mappings/os-v2/__init__.py +0 -0
  156. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json +0 -0
  157. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/mappings/v7/__init__.py +0 -0
  158. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +0 -0
  159. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/models.py +0 -0
  160. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/resources.py +0 -0
  161. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/schema.py +0 -0
  162. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/serializer.py +0 -0
  163. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/awards/services.py +0 -0
  164. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/common/__init__.py +0 -0
  165. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/common/openaire/__init__.py +0 -0
  166. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/common/openaire/datastreams.py +0 -0
  167. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/common/ror/__init__.py +0 -0
  168. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/common/ror/datastreams.py +0 -0
  169. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/__init__.py +0 -0
  170. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/api.py +0 -0
  171. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/config.py +0 -0
  172. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/datastreams.py +0 -0
  173. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/facets.py +0 -0
  174. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/funders.py +0 -0
  175. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/jsonschemas/__init__.py +0 -0
  176. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +0 -0
  177. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/__init__.py +0 -0
  178. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/os-v1/__init__.py +0 -0
  179. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v1.0.0.json +0 -0
  180. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v2.0.0.json +0 -0
  181. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/os-v2/__init__.py +0 -0
  182. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v1.0.0.json +0 -0
  183. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v2.0.0.json +0 -0
  184. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/v7/__init__.py +0 -0
  185. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/mappings/v7/funders/funder-v1.0.0.json +0 -0
  186. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/models.py +0 -0
  187. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/resources.py +0 -0
  188. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/schema.py +0 -0
  189. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/serializer.py +0 -0
  190. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/funders/services.py +0 -0
  191. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/__init__.py +0 -0
  192. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/api.py +0 -0
  193. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/components.py +0 -0
  194. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/config.py +0 -0
  195. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/jsonschemas/__init__.py +0 -0
  196. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/jsonschemas/names/name-v1.0.0.json +0 -0
  197. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/__init__.py +0 -0
  198. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/os-v1/__init__.py +0 -0
  199. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v1.0.0.json +0 -0
  200. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v2.0.0.json +0 -0
  201. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/os-v2/__init__.py +0 -0
  202. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v1.0.0.json +0 -0
  203. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v2.0.0.json +0 -0
  204. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/v7/__init__.py +0 -0
  205. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json +0 -0
  206. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/models.py +0 -0
  207. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/names.py +0 -0
  208. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/permissions.py +0 -0
  209. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/resources.py +0 -0
  210. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/s3client.py +0 -0
  211. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/names/services.py +0 -0
  212. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/__init__.py +0 -0
  213. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/api.py +0 -0
  214. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/config.py +0 -0
  215. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/datastreams.py +0 -0
  216. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/euroscivoc/__init__.py +0 -0
  217. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/euroscivoc/datastreams.py +0 -0
  218. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/facets.py +0 -0
  219. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/gemet/__init__.py +0 -0
  220. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/gemet/datastreams.py +0 -0
  221. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py +0 -0
  222. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +0 -0
  223. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mappings/__init__.py +0 -0
  224. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py +0 -0
  225. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +0 -0
  226. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py +0 -0
  227. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +0 -0
  228. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py +0 -0
  229. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +0 -0
  230. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mesh/__init__.py +0 -0
  231. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/mesh/datastreams.py +0 -0
  232. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/models.py +0 -0
  233. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/nvs/__init__.py +0 -0
  234. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/nvs/datastreams.py +0 -0
  235. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/resources.py +0 -0
  236. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/schema.py +0 -0
  237. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/services.py +0 -0
  238. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/contrib/subjects/subjects.py +0 -0
  239. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/datastreams/__init__.py +0 -0
  240. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/datastreams/errors.py +0 -0
  241. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/datastreams/factories.py +0 -0
  242. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/datastreams/readers.py +0 -0
  243. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/datastreams/transformers.py +0 -0
  244. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/datastreams/xml.py +0 -0
  245. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/ext.py +0 -0
  246. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/factories.py +0 -0
  247. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/fixtures.py +0 -0
  248. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/proxies.py +0 -0
  249. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/__init__.py +0 -0
  250. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/api.py +0 -0
  251. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/jsonschemas/__init__.py +0 -0
  252. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json +0 -0
  253. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json +0 -0
  254. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/mappings/__init__.py +0 -0
  255. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/mappings/os-v1/__init__.py +0 -0
  256. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
  257. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/mappings/os-v2/__init__.py +0 -0
  258. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
  259. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/mappings/v7/__init__.py +0 -0
  260. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
  261. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/models.py +0 -0
  262. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/pidprovider.py +0 -0
  263. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/systemfields/__init__.py +0 -0
  264. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/systemfields/pid.py +0 -0
  265. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/records/systemfields/relations.py +0 -0
  266. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/resources/__init__.py +0 -0
  267. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/resources/config.py +0 -0
  268. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/resources/resource.py +0 -0
  269. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/resources/schema.py +0 -0
  270. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/resources/serializer.py +0 -0
  271. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/__init__.py +0 -0
  272. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/components.py +0 -0
  273. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/config.py +0 -0
  274. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/custom_fields/__init__.py +0 -0
  275. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/custom_fields/subject.py +0 -0
  276. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/custom_fields/vocabulary.py +0 -0
  277. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/facets.py +0 -0
  278. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/generators.py +0 -0
  279. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/permissions.py +0 -0
  280. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/querystr.py +0 -0
  281. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/results.py +0 -0
  282. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/schema.py +0 -0
  283. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/services/service.py +0 -0
  284. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html +0 -0
  285. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabularies-list.html +0 -0
  286. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html +0 -0
  287. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo +0 -0
  288. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.po +0 -0
  289. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.mo +0 -0
  290. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.po +0 -0
  291. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.mo +0 -0
  292. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.po +0 -0
  293. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.mo +0 -0
  294. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.po +0 -0
  295. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.mo +0 -0
  296. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.po +0 -0
  297. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.mo +0 -0
  298. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.po +0 -0
  299. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.mo +0 -0
  300. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.po +0 -0
  301. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.mo +0 -0
  302. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.po +0 -0
  303. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.mo +0 -0
  304. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.po +0 -0
  305. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.mo +0 -0
  306. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.po +0 -0
  307. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.mo +0 -0
  308. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.po +0 -0
  309. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.mo +0 -0
  310. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.po +0 -0
  311. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.mo +0 -0
  312. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.po +0 -0
  313. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.mo +0 -0
  314. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.po +0 -0
  315. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.mo +0 -0
  316. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.po +0 -0
  317. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.mo +0 -0
  318. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.po +0 -0
  319. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ko/LC_MESSAGES/messages.mo +0 -0
  320. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ko/LC_MESSAGES/messages.po +0 -0
  321. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.mo +0 -0
  322. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.po +0 -0
  323. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/messages.pot +0 -0
  324. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.mo +0 -0
  325. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.po +0 -0
  326. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.mo +0 -0
  327. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.po +0 -0
  328. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.mo +0 -0
  329. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.po +0 -0
  330. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.mo +0 -0
  331. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.po +0 -0
  332. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.mo +0 -0
  333. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.po +0 -0
  334. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.mo +0 -0
  335. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.po +0 -0
  336. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.mo +0 -0
  337. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.po +0 -0
  338. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.mo +0 -0
  339. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.po +0 -0
  340. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.mo +0 -0
  341. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.po +0 -0
  342. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  343. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
  344. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  345. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po +0 -0
  346. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/views.py +0 -0
  347. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies/webpack.py +0 -0
  348. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies.egg-info/SOURCES.txt +0 -0
  349. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies.egg-info/dependency_links.txt +0 -0
  350. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies.egg-info/entry_points.txt +0 -0
  351. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies.egg-info/not-zip-safe +0 -0
  352. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/invenio_vocabularies.egg-info/top_level.txt +0 -0
  353. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/pyproject.toml +0 -0
  354. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/requirements-feature.txt +0 -0
  355. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/run-js-linter.sh +0 -0
  356. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/run-tests.sh +0 -0
  357. {invenio_vocabularies-9.0.0 → invenio_vocabularies-9.1.1}/setup.py +0 -0
@@ -9,6 +9,14 @@
9
9
  Changes
10
10
  =======
11
11
 
12
+ Version v9.1.1 (released 2025-10-01)
13
+
14
+ - ui installation: bump react-overridable version
15
+
16
+ Version v9.1.0 (released 2025-10-01)
17
+
18
+ - installation: bump major version of invenio-jobs
19
+
12
20
  Version v9.0.0 (released 2025-09-05)
13
21
 
14
22
  - setup: bump major version of invenio-jobs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invenio-vocabularies
3
- Version: 9.0.0
3
+ Version: 9.1.1
4
4
  Summary: Invenio module for managing vocabularies.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-vocabularies
6
6
  Author: CERN
@@ -15,7 +15,7 @@ License-File: AUTHORS.rst
15
15
  Requires-Dist: invenio-i18n<4.0.0,>=3.0.0
16
16
  Requires-Dist: invenio-records-resources<9.0.0,>=8.0.0
17
17
  Requires-Dist: invenio-administration<5.0.0,>=4.0.0
18
- Requires-Dist: invenio-jobs<6.0.0,>=5.0.0
18
+ Requires-Dist: invenio-jobs<7.0.0,>=6.0.0
19
19
  Requires-Dist: lxml>=4.5.0
20
20
  Requires-Dist: pycountry>=24.0.0
21
21
  Requires-Dist: PyYAML>=5.4.1
@@ -89,6 +89,14 @@ Invenio module for managing vocabularies, based on Invenio-Records and Invenio-R
89
89
  Changes
90
90
  =======
91
91
 
92
+ Version v9.1.1 (released 2025-10-01)
93
+
94
+ - ui installation: bump react-overridable version
95
+
96
+ Version v9.1.0 (released 2025-10-01)
97
+
98
+ - installation: bump major version of invenio-jobs
99
+
92
100
  Version v9.0.0 (released 2025-09-05)
93
101
 
94
102
  - setup: bump major version of invenio-jobs
@@ -11,6 +11,6 @@
11
11
 
12
12
  from .ext import InvenioVocabularies
13
13
 
14
- __version__ = "9.0.0"
14
+ __version__ = "9.1.1"
15
15
 
16
16
  __all__ = ("__version__", "InvenioVocabularies")
@@ -20,6 +20,6 @@
20
20
  "react-dom": "^16.13.0",
21
21
  "react-scripts": "^5.0.1",
22
22
  "semantic-ui-react": "^2.1.0",
23
- "react-overridable": "^0.0.3"
23
+ "react-overridable": "^1.0.0"
24
24
  }
25
25
  }
@@ -69,12 +69,11 @@ class OrcidDataSyncReader(BaseReader):
69
69
  date_format_no_millis = "%Y-%m-%d %H:%M:%S"
70
70
 
71
71
  if self.since:
72
- last_sync = datetime.now()
72
+ last_sync = datetime.strptime(self.since, date_format)
73
73
  else:
74
74
  last_sync = datetime.now() - timedelta(
75
75
  **current_app.config["VOCABULARIES_ORCID_SYNC_SINCE"]
76
76
  )
77
-
78
77
  try:
79
78
  content = io.TextIOWrapper(fileobj, encoding="utf-8")
80
79
  csv_reader = csv.DictReader(content)
@@ -95,7 +94,10 @@ class OrcidDataSyncReader(BaseReader):
95
94
 
96
95
  if last_modified_date < last_sync:
97
96
  current_app.logger.debug(
98
- f"Skipping ORCiD {orcid} (last modified: {last_modified_date})"
97
+ f"Skipping ORCiD {orcid}: last modified {last_modified_date} is older than cutoff {last_sync}"
98
+ )
99
+ current_app.logger.info(
100
+ "Reached cutoff date. No more recent records to process."
99
101
  )
100
102
  break
101
103
  current_app.logger.debug(f"Yielding ORCiD {orcid} for sync.")
@@ -285,7 +287,12 @@ class OrcidTransformer(BaseTransformer):
285
287
  f"Family name not found in ORCiD entry for ORCiD ID: {orcid_id}."
286
288
  )
287
289
  )
288
- if not self._is_valid_name(given_names + family_name):
290
+ full_name = " ".join(
291
+ p.strip()
292
+ for p in (given_names, family_name)
293
+ if isinstance(p, str) and p.strip()
294
+ )
295
+ if not self._is_valid_name(full_name):
289
296
  errors.append(
290
297
  TransformerError(
291
298
  f"Invalid characters in name for ORCiD ID: {orcid_id}."
@@ -80,18 +80,20 @@ class NameSchema(BaseVocabularySchema, ModePIDFieldVocabularyMixin):
80
80
 
81
81
  @validates_schema
82
82
  def validate_affiliations(self, data, **kwargs):
83
- """Validate names."""
83
+ """Validate and return distinct affiliations."""
84
84
  affiliations = data.get("affiliations", [])
85
85
  seen_names = set()
86
86
  for affiliation in affiliations:
87
87
  name = affiliation.get("name")
88
88
  if not affiliation.get("id") and name:
89
89
  if name in seen_names:
90
- messages = [_("Duplicated affiliations.")]
91
- raise ValidationError({"affiliations": messages})
90
+ affiliations.remove(affiliation)
92
91
  else:
93
92
  seen_names.add(name)
94
93
 
94
+ if affiliations:
95
+ data["affiliations"] = affiliations
96
+
95
97
  @post_load
96
98
  def update_name(self, data, **kwargs):
97
99
  """Update names for person.
@@ -9,6 +9,11 @@
9
9
  """Base data stream."""
10
10
 
11
11
  from flask import current_app
12
+ from invenio_access.permissions import system_identity, system_user_id
13
+ from invenio_access.utils import get_identity
14
+ from invenio_accounts.proxies import current_datastore
15
+ from invenio_jobs.logging.jobs import EMPTY_JOB_CTX, job_context
16
+ from invenio_jobs.proxies import current_runs_service
12
17
 
13
18
  from .errors import ReaderError, TransformerError, WriterError
14
19
 
@@ -78,6 +83,14 @@ class DataStream:
78
83
  def process_batch(self, batch):
79
84
  """Process a batch of entries."""
80
85
  current_app.logger.info(f"Processing batch of size: {len(batch)}")
86
+ if job_context.get() is not EMPTY_JOB_CTX:
87
+ run_id = job_context.get()["run_id"]
88
+ current_runs_service.add_total_entries(
89
+ system_identity,
90
+ run_id=run_id,
91
+ job_id=job_context.get()["job_id"],
92
+ total_entries=len(batch),
93
+ )
81
94
  transformed_entries = []
82
95
  transformed_entries_with_errors = []
83
96
  for stream_entry in batch:
@@ -168,12 +181,36 @@ class DataStream:
168
181
 
169
182
  return stream_entry
170
183
 
184
+ def _prepare_async_context(self):
185
+ """Prepare the async context for writers."""
186
+ job_ctx = job_context.get()
187
+ run_id = job_ctx.get("run_id")
188
+ identity_id = job_ctx.get("identity_id")
189
+ job_id = job_ctx.get("job_id")
190
+ # System user needs to be handled separately because it doesn't exist in the database
191
+ if identity_id == system_user_id:
192
+ identity = system_identity
193
+ else:
194
+ user = current_datastore.get_user(identity_id)
195
+ if user is None:
196
+ raise ValueError(f"User with ID:{identity_id} not found.")
197
+ identity = get_identity(user)
198
+
199
+ subtask_run = current_runs_service.create_subtask_run(
200
+ identity, parent_run_id=run_id, job_id=job_id
201
+ )
202
+ return str(subtask_run.id)
203
+
171
204
  def write(self, stream_entry, *args, **kwargs):
172
- """Apply the transformations to an stream_entry."""
205
+ """Write a single stream entry."""
173
206
  current_app.logger.debug(f"Writing entry: {stream_entry.entry}")
174
207
  for writer in self._writers:
175
208
  try:
176
- writer.write(stream_entry)
209
+ if writer.is_async and job_context.get() is not EMPTY_JOB_CTX:
210
+ subtask_run_id = self._prepare_async_context()
211
+ writer.write(stream_entry, subtask_run_id=subtask_run_id)
212
+ else:
213
+ writer.write(stream_entry)
177
214
  except WriterError as err:
178
215
  current_app.logger.error(f"Writer error: {str(err)}")
179
216
  stream_entry.errors.append(f"{writer.__class__.__name__}: {str(err)}")
@@ -181,10 +218,21 @@ class DataStream:
181
218
  return stream_entry
182
219
 
183
220
  def batch_write(self, stream_entries, *args, **kwargs):
184
- """Apply the transformations to an stream_entry. Errors are handler in the service layer."""
221
+ """Write a batch of stream entries."""
185
222
  current_app.logger.debug(f"Batch writing entries: {len(stream_entries)}")
186
223
  for writer in self._writers:
187
- yield from writer.write_many(stream_entries)
224
+ try:
225
+ if writer.is_async and job_context.get() is not EMPTY_JOB_CTX:
226
+ subtask_run_id = self._prepare_async_context()
227
+ yield from writer.write_many(
228
+ stream_entries, subtask_run_id=subtask_run_id
229
+ )
230
+ else:
231
+ yield from writer.write_many(stream_entries)
232
+ except WriterError as err:
233
+ current_app.logger.error(f"Writer error: {str(err)}")
234
+ for entry in stream_entries:
235
+ entry.errors.append(f"{writer.__class__.__name__}: {str(err)}")
188
236
 
189
237
  def total(self, *args, **kwargs):
190
238
  """The total of entries obtained from the origin."""
@@ -0,0 +1,115 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2022-2024 CERN.
4
+ #
5
+ # Invenio-Vocabularies is free software; you can redistribute it and/or
6
+ # modify it under the terms of the MIT License; see LICENSE file for more
7
+ # details.
8
+
9
+ """Data Streams Celery tasks."""
10
+
11
+ from celery import shared_task
12
+ from flask import current_app
13
+ from invenio_access.permissions import system_identity
14
+ from invenio_jobs.logging.jobs import EMPTY_JOB_CTX, job_context
15
+ from invenio_jobs.proxies import current_runs_service
16
+
17
+ from ..datastreams import StreamEntry
18
+ from ..datastreams.factories import WriterFactory
19
+
20
+
21
+ @shared_task(ignore_result=True)
22
+ def write_entry(writer_config, entry, subtask_run_id=None):
23
+ """Write an entry.
24
+
25
+ :param writer: writer configuration as accepted by the WriterFactory.
26
+ :param entry: dictionary, StreamEntry is not serializable.
27
+ """
28
+ job_ctx = job_context.get()
29
+ job_id = job_ctx.get("job_id", None) if job_ctx is not EMPTY_JOB_CTX else None
30
+ if subtask_run_id and job_id:
31
+ subtask_run = current_runs_service.get(
32
+ system_identity, job_id=job_id, run_id=subtask_run_id
33
+ )
34
+ current_runs_service.start_processing_subtask(
35
+ system_identity, subtask_run.id, job_id=job_id
36
+ )
37
+
38
+ writer = WriterFactory.create(config=writer_config)
39
+ try:
40
+ processed_stream_entry = writer.write(StreamEntry(entry))
41
+ errored_entries_count = 1 if processed_stream_entry.errors else 0
42
+ inserted_count = 1 if processed_stream_entry.op_type == "create" else 0
43
+ updated_count = 1 if processed_stream_entry.op_type == "update" else 0
44
+ if subtask_run_id and job_id:
45
+ current_runs_service.finalize_subtask(
46
+ system_identity,
47
+ subtask_run_id,
48
+ job_id,
49
+ success=True if not processed_stream_entry.errors else False,
50
+ errored_entries_count=errored_entries_count,
51
+ inserted_entries_count=inserted_count,
52
+ updated_entries_count=updated_count,
53
+ )
54
+ except Exception as exc:
55
+ current_app.logger.error(f"Error writing entry {entry}: {exc}")
56
+ if subtask_run_id and job_id:
57
+ current_runs_service.finalize_subtask(
58
+ system_identity,
59
+ subtask_run_id,
60
+ job_id,
61
+ success=False,
62
+ errored_entries_count=1,
63
+ )
64
+
65
+
66
+ @shared_task(ignore_result=True)
67
+ def write_many_entry(writer_config, entries, subtask_run_id=None):
68
+ """Write many entries.
69
+
70
+ :param writer: writer configuration as accepted by the WriterFactory.
71
+ :param entry: lisf ot dictionaries, StreamEntry is not serializable.
72
+ """
73
+ job_ctx = job_context.get()
74
+ job_id = job_ctx.get("job_id", None) if job_ctx is not EMPTY_JOB_CTX else None
75
+ if subtask_run_id and job_id:
76
+ subtask_run = current_runs_service.get(
77
+ system_identity, job_id=job_id, run_id=subtask_run_id
78
+ )
79
+ current_runs_service.start_processing_subtask(
80
+ system_identity, subtask_run.id, job_id=job_id
81
+ )
82
+ writer = WriterFactory.create(config=writer_config)
83
+ stream_entries = [StreamEntry(entry) for entry in entries]
84
+ try:
85
+ processed_stream_entries = writer.write_many(stream_entries)
86
+ errored_entries_count = sum(
87
+ 1 for entry in processed_stream_entries if entry.errors
88
+ )
89
+ inserted_count = sum(
90
+ 1 for entry in processed_stream_entries if entry.op_type == "create"
91
+ )
92
+ updated_count = sum(
93
+ 1 for entry in processed_stream_entries if entry.op_type == "update"
94
+ )
95
+ if subtask_run_id and job_id:
96
+ current_runs_service.finalize_subtask(
97
+ system_identity,
98
+ subtask_run_id,
99
+ job_id,
100
+ success=True,
101
+ errored_entries_count=errored_entries_count,
102
+ inserted_entries_count=inserted_count,
103
+ updated_entries_count=updated_count,
104
+ )
105
+ except Exception as exc:
106
+ current_app.logger.error(
107
+ f"Error writing entries {entries}: {exc}. The errorred entries count might be incorrect as an entire batch might have failed"
108
+ )
109
+ if subtask_run_id and job_id:
110
+ current_runs_service.finalize_subtask(
111
+ system_identity,
112
+ subtask_run_id,
113
+ job_id,
114
+ success=False,
115
+ )
@@ -28,6 +28,8 @@ from .tasks import write_entry, write_many_entry
28
28
  class BaseWriter(ABC):
29
29
  """Base writer."""
30
30
 
31
+ is_async = False
32
+
31
33
  def __init__(self, *args, **kwargs):
32
34
  """Base initialization logic."""
33
35
  # Add any base initialization here if needed
@@ -91,7 +93,9 @@ class ServiceWriter(BaseWriter):
91
93
  current = self._resolve(vocab_id)
92
94
  updated = dict(current.to_dict(), **entry)
93
95
  current_app.logger.debug(f"Updating entry with ID: {vocab_id}")
94
- return StreamEntry(self._service.update(self._identity, vocab_id, updated))
96
+ return StreamEntry(
97
+ self._service.update(self._identity, vocab_id, updated), op_type="update"
98
+ )
95
99
 
96
100
  def write(self, stream_entry, *args, **kwargs):
97
101
  """Writes the input entry using a given service."""
@@ -102,7 +106,9 @@ class ServiceWriter(BaseWriter):
102
106
  if self._insert:
103
107
  try:
104
108
  current_app.logger.debug("Inserting entry.")
105
- return StreamEntry(self._service.create(self._identity, entry))
109
+ return StreamEntry(
110
+ self._service.create(self._identity, entry), op_type="create"
111
+ )
106
112
  except PIDAlreadyExists:
107
113
  if not self._update:
108
114
  raise WriterError([f"Vocabulary entry already exists: {entry}"])
@@ -182,6 +188,8 @@ class YamlWriter(BaseWriter):
182
188
  class AsyncWriter(BaseWriter):
183
189
  """Writes the entries asynchronously (celery task)."""
184
190
 
191
+ is_async = True
192
+
185
193
  def __init__(self, writer, *args, **kwargs):
186
194
  """Constructor.
187
195
 
@@ -190,16 +198,25 @@ class AsyncWriter(BaseWriter):
190
198
  super().__init__(*args, **kwargs)
191
199
  self._writer = writer
192
200
 
193
- def write(self, stream_entry, *args, **kwargs):
194
- """Launches a celery task to write an entry."""
195
- write_entry.delay(self._writer, stream_entry.entry)
201
+ def write(self, stream_entry, subtask_run_id=None, *args, **kwargs):
202
+ """Launches a celery task to write an entry with a delay."""
203
+ # Add some delay to avoid processing the tasks too fast
204
+ write_entry.apply_async(
205
+ args=(self._writer, stream_entry.entry, subtask_run_id), countdown=1
206
+ )
196
207
 
197
208
  return stream_entry
198
209
 
199
- def write_many(self, stream_entries, *args, **kwargs):
200
- """Launches a celery task to write an entry."""
201
- write_many_entry.delay(
202
- self._writer, [stream_entry.entry for stream_entry in stream_entries]
210
+ def write_many(self, stream_entries, subtask_run_id=None, *args, **kwargs):
211
+ """Launches a celery task to write entries with a delay."""
212
+ # Add some delay to avoid processing the tasks too fast
213
+ write_many_entry.apply_async(
214
+ args=(
215
+ self._writer,
216
+ [stream_entry.entry for stream_entry in stream_entries],
217
+ subtask_run_id,
218
+ ),
219
+ countdown=1,
203
220
  )
204
221
 
205
222
  return stream_entries
@@ -8,6 +8,9 @@
8
8
 
9
9
  """Jobs module."""
10
10
 
11
+ from datetime import datetime, timedelta
12
+
13
+ from flask import current_app
11
14
  from invenio_i18n import lazy_gettext as _
12
15
  from invenio_jobs.jobs import JobType
13
16
 
@@ -177,3 +180,28 @@ class ImportORCIDJob(ProcessDataStreamJob):
177
180
  # It is the responsibility of the reader to handle it or ignore it
178
181
  reader["args"] = {**reader.get("args", {}), "since": str(since)}
179
182
  return task_args
183
+
184
+ @classmethod
185
+ def _build_task_arguments(cls, job_obj, since=None, custom_args=None, **kwargs):
186
+ """Build dict of arguments injected on task execution.
187
+
188
+ :param job_obj (Job): the Job object.
189
+ :param since (datetime): last time the job was executed.
190
+ :param custom_args (dict): when provided, takes precedence over any other
191
+ provided argument.
192
+ :return: a dict of arguments to be injected on task execution.
193
+ """
194
+ if custom_args:
195
+ return custom_args
196
+
197
+ if since is None:
198
+ """We set since to a time in the past defined by the VOCABULARIES_ORCID_SYNC_SINCE."""
199
+
200
+ since = datetime.now() - timedelta(
201
+ **current_app.config["VOCABULARIES_ORCID_SYNC_SINCE"]
202
+ )
203
+ """
204
+ Otherwise, since is already specified as a datetime with a timezone (see PredefinedArgsSchema) or we have never
205
+ run the job before so there is no logical value.
206
+ """
207
+ return {**cls.build_task_arguments(job_obj, since=since, **kwargs)}
@@ -30,7 +30,9 @@ def process_datastream(config):
30
30
  for err in result.errors:
31
31
  current_app.logger.error(err)
32
32
  entries_with_errors += 1
33
+
33
34
  if entries_with_errors:
34
35
  raise TaskExecutionPartialError(
35
- message=f"Task execution succeeded with {entries_with_errors} entries with errors."
36
+ message=f"Task execution succeeded with {entries_with_errors} entries with errors.",
37
+ errored_entries_count=entries_with_errors,
36
38
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invenio-vocabularies
3
- Version: 9.0.0
3
+ Version: 9.1.1
4
4
  Summary: Invenio module for managing vocabularies.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-vocabularies
6
6
  Author: CERN
@@ -15,7 +15,7 @@ License-File: AUTHORS.rst
15
15
  Requires-Dist: invenio-i18n<4.0.0,>=3.0.0
16
16
  Requires-Dist: invenio-records-resources<9.0.0,>=8.0.0
17
17
  Requires-Dist: invenio-administration<5.0.0,>=4.0.0
18
- Requires-Dist: invenio-jobs<6.0.0,>=5.0.0
18
+ Requires-Dist: invenio-jobs<7.0.0,>=6.0.0
19
19
  Requires-Dist: lxml>=4.5.0
20
20
  Requires-Dist: pycountry>=24.0.0
21
21
  Requires-Dist: PyYAML>=5.4.1
@@ -89,6 +89,14 @@ Invenio module for managing vocabularies, based on Invenio-Records and Invenio-R
89
89
  Changes
90
90
  =======
91
91
 
92
+ Version v9.1.1 (released 2025-10-01)
93
+
94
+ - ui installation: bump react-overridable version
95
+
96
+ Version v9.1.0 (released 2025-10-01)
97
+
98
+ - installation: bump major version of invenio-jobs
99
+
92
100
  Version v9.0.0 (released 2025-09-05)
93
101
 
94
102
  - setup: bump major version of invenio-jobs
@@ -1,7 +1,7 @@
1
1
  invenio-i18n<4.0.0,>=3.0.0
2
2
  invenio-records-resources<9.0.0,>=8.0.0
3
3
  invenio-administration<5.0.0,>=4.0.0
4
- invenio-jobs<6.0.0,>=5.0.0
4
+ invenio-jobs<7.0.0,>=6.0.0
5
5
  lxml>=4.5.0
6
6
  pycountry>=24.0.0
7
7
  PyYAML>=5.4.1
@@ -21,7 +21,7 @@ install_requires =
21
21
  invenio-i18n>=3.0.0,<4.0.0
22
22
  invenio-records-resources>=8.0.0,<9.0.0
23
23
  invenio-administration>=4.0.0,<5.0.0
24
- invenio-jobs>=5.0.0,<6.0.0
24
+ invenio-jobs>=6.0.0,<7.0.0
25
25
  lxml>=4.5.0
26
26
  pycountry>=24.0.0
27
27
  PyYAML>=5.4.1
@@ -1,37 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2022-2024 CERN.
4
- #
5
- # Invenio-Vocabularies is free software; you can redistribute it and/or
6
- # modify it under the terms of the MIT License; see LICENSE file for more
7
- # details.
8
-
9
- """Data Streams Celery tasks."""
10
-
11
- from celery import shared_task
12
-
13
- from ..datastreams import StreamEntry
14
- from ..datastreams.factories import WriterFactory
15
-
16
-
17
- @shared_task(ignore_result=True)
18
- def write_entry(writer_config, entry):
19
- """Write an entry.
20
-
21
- :param writer: writer configuration as accepted by the WriterFactory.
22
- :param entry: dictionary, StreamEntry is not serializable.
23
- """
24
- writer = WriterFactory.create(config=writer_config)
25
- writer.write(StreamEntry(entry))
26
-
27
-
28
- @shared_task(ignore_result=True)
29
- def write_many_entry(writer_config, entries):
30
- """Write many entries.
31
-
32
- :param writer: writer configuration as accepted by the WriterFactory.
33
- :param entry: lisf ot dictionaries, StreamEntry is not serializable.
34
- """
35
- writer = WriterFactory.create(config=writer_config)
36
- stream_entries = [StreamEntry(entry) for entry in entries]
37
- writer.write_many(stream_entries)