invenio-vocabularies 6.7.0__tar.gz → 6.8.0__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 (431) hide show
  1. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/CHANGES.rst +7 -0
  2. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/PKG-INFO +8 -1
  3. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/__init__.py +1 -1
  4. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/cli.py +2 -0
  5. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/config.py +16 -0
  6. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/datastreams.py +182 -57
  7. invenio-vocabularies-6.8.0/invenio_vocabularies/contrib/subjects/bodc/__init__.py +9 -0
  8. invenio-vocabularies-6.8.0/invenio_vocabularies/contrib/subjects/bodc/datastreams.py +111 -0
  9. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/config.py +9 -4
  10. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/datastreams.py +2 -4
  11. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/euroscivoc/datastreams.py +33 -11
  12. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/gemet/datastreams.py +36 -5
  13. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/datastreams.py +18 -7
  14. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/factories.py +3 -1
  15. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/transformers.py +12 -0
  16. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/writers.py +6 -2
  17. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/factories.py +41 -0
  18. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/fixtures.py +2 -0
  19. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/querystr.py +5 -0
  20. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/tasks.py +2 -0
  21. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies.egg-info/PKG-INFO +8 -1
  22. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies.egg-info/SOURCES.txt +3 -0
  23. invenio-vocabularies-6.8.0/tests/contrib/names/test_names_datastreams.py +444 -0
  24. invenio-vocabularies-6.8.0/tests/contrib/subjects/bodc/test_subjects_bodc_datastream.py +122 -0
  25. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/gemet/test_subjects_gemet_datastream.py +18 -18
  26. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/test_subjects_resource.py +21 -15
  27. invenio-vocabularies-6.8.0/tests/datastreams/test_transformers.py +98 -0
  28. invenio-vocabularies-6.7.0/tests/contrib/names/test_names_datastreams.py +0 -241
  29. invenio-vocabularies-6.7.0/tests/datastreams/test_transformers.py +0 -63
  30. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/.dockerignore +0 -0
  31. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/.editorconfig +0 -0
  32. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/.git-blame-ignore-revs +0 -0
  33. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/.github/workflows/i18n-pull.yml +0 -0
  34. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/.github/workflows/i18n-push.yml +0 -0
  35. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/.github/workflows/pypi-publish.yml +0 -0
  36. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/.github/workflows/tests.yml +0 -0
  37. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/.tx/config +0 -0
  38. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/AUTHORS.rst +0 -0
  39. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/CONTRIBUTING.rst +0 -0
  40. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/INSTALL.rst +0 -0
  41. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/LICENSE +0 -0
  42. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/MANIFEST.in +0 -0
  43. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/README.rst +0 -0
  44. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/babel.ini +0 -0
  45. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/Makefile +0 -0
  46. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/api.rst +0 -0
  47. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/authors.rst +0 -0
  48. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/changes.rst +0 -0
  49. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/conf.py +0 -0
  50. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/configuration.rst +0 -0
  51. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/contributing.rst +0 -0
  52. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/index.rst +0 -0
  53. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/installation.rst +0 -0
  54. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/license.rst +0 -0
  55. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/make.bat +0 -0
  56. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/requirements.txt +0 -0
  57. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/docs/usage.rst +0 -0
  58. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/gen-migration.sh +0 -0
  59. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/administration/__init__.py +0 -0
  60. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/administration/views/__init__.py +0 -0
  61. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/administration/views/vocabularies.py +0 -0
  62. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/17c703ce1eb7_create_names_table.py +0 -0
  63. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/4a9a4fd235f8_create_vocabulary_schemes.py +0 -0
  64. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/4f365fced43f_create_vocabularies_tables.py +0 -0
  65. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/55a700f897b6_add_names_and_afiliations_pid_column.py +0 -0
  66. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/6312f33645c1_create_affiliations_table.py +0 -0
  67. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/676dd587542d_create_funders_vocabulary_table.py +0 -0
  68. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/8ff82dfb0be8_create_vocabularies_branch.py +0 -0
  69. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/__init__.py +0 -0
  70. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/alembic/e1146238edd3_create_awards_table.py +0 -0
  71. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.eslintrc.yml +0 -0
  72. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.prettierrc +0 -0
  73. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/index.js +0 -0
  74. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +0 -0
  75. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/AwardResults.js +0 -0
  76. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/CustomAwardForm.js +0 -0
  77. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FunderDropdown.js +0 -0
  78. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.js +0 -0
  79. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.test.js +0 -0
  80. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingFieldItem.js +0 -0
  81. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingModal.js +0 -0
  82. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/NoAwardResults.js +0 -0
  83. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/index.js +0 -0
  84. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/index.js +0 -0
  85. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/index.js +0 -0
  86. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/index.js +0 -0
  87. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next-scanner.config.js +0 -0
  88. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next.js +0 -0
  89. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/index.js +0 -0
  90. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/package.json +0 -0
  91. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/compileCatalog.js +0 -0
  92. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/initCatalog.js +0 -0
  93. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/__init__.py +0 -0
  94. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/__init__.py +0 -0
  95. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/affiliations.py +0 -0
  96. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/api.py +0 -0
  97. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/config.py +0 -0
  98. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/datastreams.py +0 -0
  99. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/facets.py +0 -0
  100. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/__init__.py +0 -0
  101. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json +0 -0
  102. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/__init__.py +0 -0
  103. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/__init__.py +0 -0
  104. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v1.0.0.json +0 -0
  105. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v2.0.0.json +0 -0
  106. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/__init__.py +0 -0
  107. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v1.0.0.json +0 -0
  108. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v2.0.0.json +0 -0
  109. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py +0 -0
  110. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json +0 -0
  111. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/models.py +0 -0
  112. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/resources.py +0 -0
  113. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/schema.py +0 -0
  114. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/affiliations/services.py +0 -0
  115. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/__init__.py +0 -0
  116. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/api.py +0 -0
  117. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/awards.py +0 -0
  118. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/config.py +0 -0
  119. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/datastreams.py +0 -0
  120. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/jsonschemas/__init__.py +0 -0
  121. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +0 -0
  122. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/mappings/__init__.py +0 -0
  123. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/__init__.py +0 -0
  124. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json +0 -0
  125. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/__init__.py +0 -0
  126. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json +0 -0
  127. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/mappings/v7/__init__.py +0 -0
  128. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +0 -0
  129. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/models.py +0 -0
  130. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/resources.py +0 -0
  131. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/schema.py +0 -0
  132. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/serializer.py +0 -0
  133. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/awards/services.py +0 -0
  134. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/common/__init__.py +0 -0
  135. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/common/openaire/__init__.py +0 -0
  136. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/common/openaire/datastreams.py +0 -0
  137. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/common/ror/__init__.py +0 -0
  138. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/common/ror/datastreams.py +0 -0
  139. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/__init__.py +0 -0
  140. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/api.py +0 -0
  141. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/config.py +0 -0
  142. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/datastreams.py +0 -0
  143. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/facets.py +0 -0
  144. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/funders.py +0 -0
  145. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/jsonschemas/__init__.py +0 -0
  146. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +0 -0
  147. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/__init__.py +0 -0
  148. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/__init__.py +0 -0
  149. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v1.0.0.json +0 -0
  150. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v2.0.0.json +0 -0
  151. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/__init__.py +0 -0
  152. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v1.0.0.json +0 -0
  153. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v2.0.0.json +0 -0
  154. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/v7/__init__.py +0 -0
  155. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/mappings/v7/funders/funder-v1.0.0.json +0 -0
  156. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/models.py +0 -0
  157. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/resources.py +0 -0
  158. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/schema.py +0 -0
  159. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/serializer.py +0 -0
  160. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/funders/services.py +0 -0
  161. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/__init__.py +0 -0
  162. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/api.py +0 -0
  163. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/config.py +0 -0
  164. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/jsonschemas/__init__.py +0 -0
  165. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/jsonschemas/names/name-v1.0.0.json +0 -0
  166. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/__init__.py +0 -0
  167. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/os-v1/__init__.py +0 -0
  168. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v1.0.0.json +0 -0
  169. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v2.0.0.json +0 -0
  170. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/os-v2/__init__.py +0 -0
  171. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v1.0.0.json +0 -0
  172. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v2.0.0.json +0 -0
  173. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/v7/__init__.py +0 -0
  174. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json +0 -0
  175. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/models.py +0 -0
  176. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/names.py +0 -0
  177. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/permissions.py +0 -0
  178. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/resources.py +0 -0
  179. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/s3client.py +0 -0
  180. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/schema.py +0 -0
  181. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/names/services.py +0 -0
  182. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/__init__.py +0 -0
  183. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/api.py +0 -0
  184. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/euroscivoc/__init__.py +0 -0
  185. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/facets.py +0 -0
  186. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/gemet/__init__.py +0 -0
  187. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py +0 -0
  188. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +0 -0
  189. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mappings/__init__.py +0 -0
  190. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py +0 -0
  191. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +0 -0
  192. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py +0 -0
  193. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +0 -0
  194. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py +0 -0
  195. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +0 -0
  196. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mesh/__init__.py +0 -0
  197. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/mesh/datastreams.py +0 -0
  198. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/models.py +0 -0
  199. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/resources.py +0 -0
  200. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/schema.py +0 -0
  201. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/services.py +0 -0
  202. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/contrib/subjects/subjects.py +0 -0
  203. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/__init__.py +0 -0
  204. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/errors.py +0 -0
  205. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/readers.py +0 -0
  206. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/tasks.py +0 -0
  207. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/datastreams/xml.py +0 -0
  208. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/ext.py +0 -0
  209. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/jobs.py +0 -0
  210. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/proxies.py +0 -0
  211. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/__init__.py +0 -0
  212. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/api.py +0 -0
  213. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/jsonschemas/__init__.py +0 -0
  214. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json +0 -0
  215. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json +0 -0
  216. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/mappings/__init__.py +0 -0
  217. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/mappings/os-v1/__init__.py +0 -0
  218. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
  219. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/mappings/os-v2/__init__.py +0 -0
  220. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
  221. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/mappings/v7/__init__.py +0 -0
  222. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
  223. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/models.py +0 -0
  224. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/pidprovider.py +0 -0
  225. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/systemfields/__init__.py +0 -0
  226. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/systemfields/pid.py +0 -0
  227. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/records/systemfields/relations.py +0 -0
  228. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/resources/__init__.py +0 -0
  229. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/resources/config.py +0 -0
  230. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/resources/resource.py +0 -0
  231. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/resources/schema.py +0 -0
  232. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/resources/serializer.py +0 -0
  233. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/__init__.py +0 -0
  234. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/components.py +0 -0
  235. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/config.py +0 -0
  236. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/custom_fields/__init__.py +0 -0
  237. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/custom_fields/subject.py +0 -0
  238. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/custom_fields/vocabulary.py +0 -0
  239. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/facets.py +0 -0
  240. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/generators.py +0 -0
  241. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/permissions.py +0 -0
  242. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/results.py +0 -0
  243. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/schema.py +0 -0
  244. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/services/service.py +0 -0
  245. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html +0 -0
  246. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabularies-list.html +0 -0
  247. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html +0 -0
  248. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/af/LC_MESSAGES/messages.mo +0 -0
  249. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/af/LC_MESSAGES/messages.po +0 -0
  250. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo +0 -0
  251. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.po +0 -0
  252. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.mo +0 -0
  253. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.po +0 -0
  254. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.mo +0 -0
  255. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.po +0 -0
  256. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.mo +0 -0
  257. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.po +0 -0
  258. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.mo +0 -0
  259. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.po +0 -0
  260. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.mo +0 -0
  261. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.po +0 -0
  262. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.mo +0 -0
  263. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.po +0 -0
  264. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.mo +0 -0
  265. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.po +0 -0
  266. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.mo +0 -0
  267. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.po +0 -0
  268. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/en/LC_MESSAGES/messages.mo +0 -0
  269. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/en/LC_MESSAGES/messages.po +0 -0
  270. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.mo +0 -0
  271. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.po +0 -0
  272. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.mo +0 -0
  273. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.po +0 -0
  274. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.mo +0 -0
  275. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.po +0 -0
  276. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.mo +0 -0
  277. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.po +0 -0
  278. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.mo +0 -0
  279. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.po +0 -0
  280. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.mo +0 -0
  281. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.po +0 -0
  282. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.mo +0 -0
  283. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.po +0 -0
  284. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.mo +0 -0
  285. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.po +0 -0
  286. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.mo +0 -0
  287. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.po +0 -0
  288. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.mo +0 -0
  289. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.po +0 -0
  290. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.mo +0 -0
  291. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.po +0 -0
  292. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.mo +0 -0
  293. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.po +0 -0
  294. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/gl/LC_MESSAGES/messages.mo +0 -0
  295. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/gl/LC_MESSAGES/messages.po +0 -0
  296. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.mo +0 -0
  297. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.po +0 -0
  298. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.mo +0 -0
  299. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.po +0 -0
  300. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.mo +0 -0
  301. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.po +0 -0
  302. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.mo +0 -0
  303. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.po +0 -0
  304. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.mo +0 -0
  305. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.po +0 -0
  306. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.mo +0 -0
  307. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.po +0 -0
  308. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.mo +0 -0
  309. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.po +0 -0
  310. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.mo +0 -0
  311. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.po +0 -0
  312. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/messages.pot +0 -0
  313. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ne/LC_MESSAGES/messages.mo +0 -0
  314. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ne/LC_MESSAGES/messages.po +0 -0
  315. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.mo +0 -0
  316. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.po +0 -0
  317. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.mo +0 -0
  318. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.po +0 -0
  319. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.mo +0 -0
  320. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.po +0 -0
  321. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.mo +0 -0
  322. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.po +0 -0
  323. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.mo +0 -0
  324. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.po +0 -0
  325. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/rw/LC_MESSAGES/messages.mo +0 -0
  326. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/rw/LC_MESSAGES/messages.po +0 -0
  327. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.mo +0 -0
  328. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.po +0 -0
  329. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.mo +0 -0
  330. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.po +0 -0
  331. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.mo +0 -0
  332. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.po +0 -0
  333. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.mo +0 -0
  334. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.po +0 -0
  335. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.mo +0 -0
  336. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.po +0 -0
  337. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.mo +0 -0
  338. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.po +0 -0
  339. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  340. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
  341. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  342. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po +0 -0
  343. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/views.py +0 -0
  344. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies/webpack.py +0 -0
  345. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies.egg-info/dependency_links.txt +0 -0
  346. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies.egg-info/entry_points.txt +0 -0
  347. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies.egg-info/not-zip-safe +0 -0
  348. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies.egg-info/requires.txt +0 -0
  349. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/invenio_vocabularies.egg-info/top_level.txt +0 -0
  350. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/pyproject.toml +0 -0
  351. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/requirements-feature.txt +0 -0
  352. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/run-js-linter.sh +0 -0
  353. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/run-tests.sh +0 -0
  354. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/setup.cfg +0 -0
  355. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/setup.py +0 -0
  356. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/conftest.py +0 -0
  357. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/affiliations/conftest.py +0 -0
  358. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/affiliations/test_affiliations_api.py +0 -0
  359. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/affiliations/test_affiliations_datastreams.py +0 -0
  360. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/affiliations/test_affiliations_jsonschema.py +0 -0
  361. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/affiliations/test_affiliations_resource.py +0 -0
  362. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/affiliations/test_affiliations_schema.py +0 -0
  363. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/affiliations/test_affiliations_service.py +0 -0
  364. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/awards/conftest.py +0 -0
  365. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/awards/test_awards_api.py +0 -0
  366. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/awards/test_awards_datastreams.py +0 -0
  367. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/awards/test_awards_jsonschema.py +0 -0
  368. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/awards/test_awards_resource.py +0 -0
  369. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/awards/test_awards_schema.py +0 -0
  370. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/awards/test_awards_service.py +0 -0
  371. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/common/openaire/test_openaire_datastreams.py +0 -0
  372. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/common/ror/test_ror_datastreams.py +0 -0
  373. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/funders/conftest.py +0 -0
  374. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/funders/test_funders_api.py +0 -0
  375. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/funders/test_funders_datastreams.py +0 -0
  376. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/funders/test_funders_jsonschema.py +0 -0
  377. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/funders/test_funders_resource.py +0 -0
  378. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/funders/test_funders_schema.py +0 -0
  379. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/funders/test_funders_service.py +0 -0
  380. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/names/conftest.py +0 -0
  381. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/names/test_name_permissions.py +0 -0
  382. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/names/test_names_api.py +0 -0
  383. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/names/test_names_jsonschema.py +0 -0
  384. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/names/test_names_resource.py +0 -0
  385. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/names/test_names_schema.py +0 -0
  386. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/names/test_names_service.py +0 -0
  387. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/conftest.py +0 -0
  388. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/euroscivoc/test_subjects_euroscivoc_datastream.py +0 -0
  389. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/test_subjects_api.py +0 -0
  390. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/test_subjects_datastreams.py +0 -0
  391. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/test_subjects_facets.py +0 -0
  392. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/test_subjects_jsonschema.py +0 -0
  393. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/test_subjects_schema.py +0 -0
  394. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/contrib/subjects/test_subjects_service.py +0 -0
  395. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/custom_fields/test_custom_fields.py +0 -0
  396. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/datastreams/conftest.py +0 -0
  397. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/datastreams/test_datastreams.py +0 -0
  398. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/datastreams/test_datastreams_tasks.py +0 -0
  399. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/datastreams/test_fixtures.py +0 -0
  400. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/datastreams/test_readers.py +0 -0
  401. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/datastreams/test_writers.py +0 -0
  402. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/datastreams/vocabularies.yaml +0 -0
  403. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/__init__.py +0 -0
  404. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/api.py +0 -0
  405. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/jsonschemas/__init__.py +0 -0
  406. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/jsonschemas/records/record-v1.0.0.json +0 -0
  407. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/mappings/__init__.py +0 -0
  408. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/mappings/v6/__init__.py +0 -0
  409. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/mappings/v6/records/record-v1.0.0.json +0 -0
  410. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/mappings/v7/__init__.py +0 -0
  411. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/mappings/v7/records/record-v1.0.0.json +0 -0
  412. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/mock_module/models.py +0 -0
  413. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/records/conftest.py +0 -0
  414. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/records/test_api.py +0 -0
  415. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/records/test_jsonschema.py +0 -0
  416. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/records/test_models.py +0 -0
  417. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/records/test_relationship.py +0 -0
  418. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/resources/conftest.py +0 -0
  419. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/resources/test_resources_get.py +0 -0
  420. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/resources/test_resources_l10n.py +0 -0
  421. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/resources/test_resources_search.py +0 -0
  422. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/resources/test_tasks_resources.py +0 -0
  423. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/services/conftest.py +0 -0
  424. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/services/test_labels.py +0 -0
  425. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/services/test_permissions.py +0 -0
  426. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/services/test_schema.py +0 -0
  427. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/services/test_service.py +0 -0
  428. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/test_alembic.py +0 -0
  429. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/test_cli.py +0 -0
  430. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/test_factory.py +0 -0
  431. {invenio-vocabularies-6.7.0 → invenio-vocabularies-6.8.0}/tests/test_invenio_vocabularies.py +0 -0
@@ -8,6 +8,13 @@
8
8
  Changes
9
9
  =======
10
10
 
11
+ Version v6.8.0 (released 2024-12-09)
12
+
13
+ - names: extract affiliation identifiers from employments
14
+ - names: optimize memory usage on ORCID sync
15
+ - subjects: improve search with CompositeSuggestQueryParser
16
+ - subjects: added datastream for bodc
17
+
11
18
  Version v6.7.0 (released 2024-11-27)
12
19
 
13
20
  - contrib: improve search accuracy for names, funders, affiliations
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: invenio-vocabularies
3
- Version: 6.7.0
3
+ Version: 6.8.0
4
4
  Summary: Invenio module for managing vocabularies.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-vocabularies
6
6
  Author: CERN
@@ -50,6 +50,13 @@ Description: ..
50
50
  Changes
51
51
  =======
52
52
 
53
+ Version v6.8.0 (released 2024-12-09)
54
+
55
+ - names: extract affiliation identifiers from employments
56
+ - names: optimize memory usage on ORCID sync
57
+ - subjects: improve search with CompositeSuggestQueryParser
58
+ - subjects: added datastream for bodc
59
+
53
60
  Version v6.7.0 (released 2024-11-27)
54
61
 
55
62
  - contrib: improve search accuracy for names, funders, affiliations
@@ -10,6 +10,6 @@
10
10
 
11
11
  from .ext import InvenioVocabularies
12
12
 
13
- __version__ = "6.7.0"
13
+ __version__ = "6.8.0"
14
14
 
15
15
  __all__ = ("__version__", "InvenioVocabularies")
@@ -29,6 +29,8 @@ def _process_vocab(config, num_samples=None):
29
29
  readers_config=config["readers"],
30
30
  transformers_config=config.get("transformers"),
31
31
  writers_config=config["writers"],
32
+ batch_size=config.get("batch_size", 1000),
33
+ write_many=config.get("write_many", False),
32
34
  )
33
35
 
34
36
  success, errored, filtered = 0, 0, 0
@@ -196,6 +196,9 @@ VOCABULARIES_SUBJECTS_GEMET_FILE_URL = (
196
196
  )
197
197
  """Subject GEMET file download link."""
198
198
 
199
+ VOCABULARIES_SUBJECTS_BODC_PUV_FILE_URL = "http://vocab.nerc.ac.uk/collection/P01/current/?_profile=nvs&_mediatype=application/rdf+xml"
200
+ """Subject BODC-PUV file download link."""
201
+
199
202
  VOCABULARIES_AFFILIATIONS_EDMO_COUNTRY_MAPPING = {
200
203
  "Cape Verde": "Cabo Verde",
201
204
  }
@@ -213,3 +216,16 @@ VOCABULARIES_ORCID_SYNC_SINCE = {
213
216
  "days": 1,
214
217
  }
215
218
  """ORCID time shift to sync. Parameters accepted are the ones passed to 'datetime.timedelta'."""
219
+
220
+ VOCABULARIES_ORCID_ORG_IDS_MAPPING_PATH = None
221
+ """Path to the CSV file for mapping ORCiD organization IDs to affiliation IDs.
222
+
223
+ The path can be specified as either an absolute path or a relative path within the
224
+ Flask app instance folder (i.e. ``current_app.instance_path``).
225
+
226
+ The CSV file should have the following columns:
227
+
228
+ - `org_scheme`: The ORCiD organization ID.
229
+ - `org_id`: The ORCiD organization ID.
230
+ - `aff_id`: The affiliation ID to map to.
231
+ """
@@ -13,12 +13,14 @@ import io
13
13
  import tarfile
14
14
  from concurrent.futures import ThreadPoolExecutor, as_completed
15
15
  from datetime import timedelta
16
+ from itertools import islice
17
+ from pathlib import Path
16
18
 
17
19
  import arrow
18
20
  import regex as re
19
21
  from flask import current_app
20
22
  from invenio_access.permissions import system_identity
21
- from invenio_records.dictutils import dict_lookup
23
+ from werkzeug.utils import cached_property
22
24
 
23
25
  from invenio_vocabularies.contrib.names.s3client import S3OrcidClient
24
26
 
@@ -47,10 +49,11 @@ class OrcidDataSyncReader(BaseReader):
47
49
  suffix = orcid_to_sync[-3:]
48
50
  key = f"{suffix}/{orcid_to_sync}.xml"
49
51
  try:
52
+ # Potential improvement: use the a XML jax parser to avoid loading the whole file in memory
53
+ # and choose the sections we need to read (probably the summary)
50
54
  return self.s3_client.read_file(f"s3://{bucket}/{key}")
51
- except Exception as e:
52
- # TODO: log
53
- return None
55
+ except Exception:
56
+ current_app.logger.exception("Failed to fetch ORCiD record.")
54
57
 
55
58
  def _process_lambda_file(self, fileobj):
56
59
  """Process the ORCiD lambda file and returns a list of ORCiDs to sync.
@@ -67,42 +70,54 @@ class OrcidDataSyncReader(BaseReader):
67
70
  if self.since:
68
71
  time_shift = self.since
69
72
  last_sync = arrow.now() - timedelta(**time_shift)
70
-
71
- file_content = fileobj.read().decode("utf-8")
72
-
73
- csv_reader = csv.DictReader(file_content.splitlines())
74
-
75
- for row in csv_reader: # Skip the header line
76
- orcid = row["orcid"]
77
-
78
- # Lambda file is ordered by last modified date
79
- last_modified_str = row["last_modified"]
80
- try:
81
- last_modified_date = arrow.get(last_modified_str, date_format)
82
- except arrow.parser.ParserError:
83
- last_modified_date = arrow.get(last_modified_str, date_format_no_millis)
84
-
85
- if last_modified_date < last_sync:
86
- break
87
- yield orcid
73
+ try:
74
+ content = io.TextIOWrapper(fileobj, encoding="utf-8")
75
+ csv_reader = csv.DictReader(content)
76
+
77
+ for row in csv_reader: # Skip the header line
78
+ orcid = row["orcid"]
79
+
80
+ # Lambda file is ordered by last modified date
81
+ last_modified_str = row["last_modified"]
82
+ try:
83
+ last_modified_date = arrow.get(last_modified_str, date_format)
84
+ except arrow.parser.ParserError:
85
+ last_modified_date = arrow.get(
86
+ last_modified_str, date_format_no_millis
87
+ )
88
+
89
+ if last_modified_date < last_sync:
90
+ break
91
+ yield orcid
92
+ finally:
93
+ fileobj.close()
88
94
 
89
95
  def _iter(self, orcids):
90
96
  """Iterates over the ORCiD records yielding each one."""
91
97
  with ThreadPoolExecutor(
92
98
  max_workers=current_app.config["VOCABULARIES_ORCID_SYNC_MAX_WORKERS"]
93
99
  ) as executor:
94
- futures = [
95
- executor.submit(
100
+ # futures is a dictionary where the key is the ORCID value and the item is the Future object
101
+ futures = {
102
+ orcid: executor.submit(
96
103
  self._fetch_orcid_data,
97
104
  orcid,
98
105
  current_app.config["VOCABULARIES_ORCID_SUMMARIES_BUCKET"],
99
106
  )
100
107
  for orcid in orcids
101
- ]
102
- for future in as_completed(futures):
103
- result = future.result()
104
- if result is not None:
105
- yield result
108
+ }
109
+
110
+ for orcid in list(futures.keys()):
111
+ try:
112
+ result = futures[orcid].result()
113
+ if result:
114
+ yield result
115
+ finally:
116
+ # Explicitly release memory, as we don't need the future anymore.
117
+ # This is mostly required because as long as we keep a reference to the future
118
+ # (in the above futures dict), the garbage collector won't collect it
119
+ # and it will keep the memory allocated.
120
+ del futures[orcid]
106
121
 
107
122
  def read(self, item=None, *args, **kwargs):
108
123
  """Streams the ORCiD lambda file, process it to get the ORCiDS to sync and yields it's data."""
@@ -111,7 +126,6 @@ class OrcidDataSyncReader(BaseReader):
111
126
  "s3://orcid-lambda-file/last_modified.csv.tar"
112
127
  )
113
128
 
114
- orcids_to_sync = []
115
129
  # Opens tar file and process it
116
130
  with tarfile.open(fileobj=io.BytesIO(tar_content)) as tar:
117
131
  # Iterate over each member (file or directory) in the tar file
@@ -119,10 +133,24 @@ class OrcidDataSyncReader(BaseReader):
119
133
  # Extract the file
120
134
  extracted_file = tar.extractfile(member)
121
135
  if extracted_file:
136
+ current_app.logger.info(f"[ORCID Reader] Processing lambda file...")
122
137
  # Process the file and get the ORCiDs to sync
123
- orcids_to_sync.extend(self._process_lambda_file(extracted_file))
138
+ orcids_to_sync = set(self._process_lambda_file(extracted_file))
139
+
140
+ # Close the file explicitly after processing
141
+ extracted_file.close()
142
+
143
+ # Process ORCIDs in smaller batches
144
+ for orcid_batch in self._chunked_iter(
145
+ orcids_to_sync, batch_size=100
146
+ ):
147
+ yield from self._iter(orcid_batch)
124
148
 
125
- yield from self._iter(orcids_to_sync)
149
+ def _chunked_iter(self, iterable, batch_size):
150
+ """Yield successive chunks of a given size."""
151
+ it = iter(iterable)
152
+ while chunk := list(islice(it, batch_size)):
153
+ yield chunk
126
154
 
127
155
 
128
156
  class OrcidHTTPReader(SimpleHTTPReader):
@@ -139,24 +167,75 @@ class OrcidHTTPReader(SimpleHTTPReader):
139
167
 
140
168
 
141
169
  DEFAULT_NAMES_EXCLUDE_REGEX = r"[\p{P}\p{S}\p{Nd}\p{No}\p{Emoji}--,.()\-']"
142
- """Regex to filter out names with punctuations, symbols, decimal numbers and emojis."""
170
+ """Regex to filter out names with punctuation, symbols, numbers and emojis."""
171
+
172
+
173
+ class OrcidOrgToAffiliationMapper:
174
+ """Default ORCiD Org ID to affiliation ID mapper."""
175
+
176
+ def __init__(self, org_ids_mapping=None, org_ids_mapping_file=None):
177
+ """Constructor."""
178
+ self._org_ids_mapping = org_ids_mapping
179
+ self._org_ids_mapping_file = org_ids_mapping_file
180
+
181
+ @cached_property
182
+ def org_ids_mapping(self):
183
+ """Mapping of ORCiD org IDs to affiliation IDs."""
184
+ org_ids_mapping_file = self._org_ids_mapping_file or current_app.config.get(
185
+ "VOCABULARIES_ORCID_ORG_IDS_MAPPING_PATH"
186
+ )
187
+ if org_ids_mapping_file:
188
+ org_ids_mapping_file = Path(org_ids_mapping_file)
189
+ # If the path is relative, prepend the instance path
190
+ if not org_ids_mapping_file.is_absolute():
191
+ org_ids_mapping_file = (
192
+ Path(current_app.instance_path) / org_ids_mapping_file
193
+ )
194
+ with open(org_ids_mapping_file) as fin:
195
+ result = {}
196
+ reader = csv.reader(fin)
197
+
198
+ # Check if the first row is a header
199
+ org_scheme, org_id, aff_id = next(reader)
200
+ if org_scheme.lower() != "org_scheme":
201
+ result[(org_scheme, org_id)] = aff_id
202
+
203
+ for org_scheme, org_id, aff_id in reader:
204
+ result[(org_scheme, org_id)] = aff_id
205
+
206
+ return result
207
+
208
+ return self._org_ids_mapping or {}
209
+
210
+ def __call__(self, org_scheme, org_id):
211
+ """Map an ORCiD org ID to an affiliation ID."""
212
+ # By default we know that ROR IDs are linkable
213
+ if org_scheme == "ROR":
214
+ return org_id.split("/")[-1]
215
+ # Otherwise see if we have a mapping from other schemes to an affiliation ID
216
+ return self.org_ids_mapping.get((org_scheme, org_id))
143
217
 
144
218
 
145
219
  class OrcidTransformer(BaseTransformer):
146
220
  """Transforms an ORCiD record into a names record."""
147
221
 
148
222
  def __init__(
149
- self, *args, names_exclude_regex=DEFAULT_NAMES_EXCLUDE_REGEX, **kwargs
223
+ self,
224
+ *args,
225
+ names_exclude_regex=DEFAULT_NAMES_EXCLUDE_REGEX,
226
+ org_id_to_affiliation_id_func=None,
227
+ **kwargs,
150
228
  ) -> None:
151
229
  """Constructor."""
152
230
  self._names_exclude_regex = names_exclude_regex
231
+ self._org_id_to_affiliation_id_func = (
232
+ org_id_to_affiliation_id_func or OrcidOrgToAffiliationMapper()
233
+ )
153
234
  super().__init__()
154
235
 
155
- def _is_valid_name(self, name):
156
- """Check whether the name passes the regex."""
157
- if not self._names_exclude_regex:
158
- return True
159
- return not bool(re.search(self._names_exclude_regex, name, re.UNICODE | re.V1))
236
+ def org_id_to_affiliation_id(self, org_scheme, org_id):
237
+ """Convert and ORCiD org ID to a linkable affiliation ID."""
238
+ return self._org_id_to_affiliation_id_func(org_scheme, org_id)
160
239
 
161
240
  def apply(self, stream_entry, **kwargs):
162
241
  """Applies the transformation to the stream entry."""
@@ -166,42 +245,88 @@ class OrcidTransformer(BaseTransformer):
166
245
 
167
246
  name = person.get("name")
168
247
  if name is None:
169
- raise TransformerError(f"Name not found in ORCiD entry.")
248
+ raise TransformerError("Name not found in ORCiD entry.")
170
249
  if name.get("family-name") is None:
171
- raise TransformerError(f"Family name not found in ORCiD entry.")
250
+ raise TransformerError("Family name not found in ORCiD entry.")
172
251
 
173
252
  if not self._is_valid_name(name["given-names"] + name["family-name"]):
174
- raise TransformerError(f"Invalid characters in name.")
253
+ raise TransformerError("Invalid characters in name.")
175
254
 
176
255
  entry = {
177
256
  "id": orcid_id,
178
257
  "given_name": name.get("given-names"),
179
258
  "family_name": name.get("family-name"),
180
259
  "identifiers": [{"scheme": "orcid", "identifier": orcid_id}],
181
- "affiliations": [],
260
+ "affiliations": self._extract_affiliations(record),
182
261
  }
183
262
 
263
+ stream_entry.entry = entry
264
+ return stream_entry
265
+
266
+ def _is_valid_name(self, name):
267
+ """Check whether the name passes the regex."""
268
+ if not self._names_exclude_regex:
269
+ return True
270
+ return not bool(re.search(self._names_exclude_regex, name, re.UNICODE | re.V1))
271
+
272
+ def _extract_affiliations(self, record):
273
+ """Extract affiliations from the ORCiD record."""
274
+ result = []
184
275
  try:
185
- employments = dict_lookup(
186
- record, "activities-summary.employments.affiliation-group"
276
+ employments = (
277
+ record.get("activities-summary", {})
278
+ .get("employments", {})
279
+ .get("affiliation-group", [])
187
280
  )
281
+
282
+ # If there are single values, the XML to dict, doesn't wrap them in a list
188
283
  if isinstance(employments, dict):
189
284
  employments = [employments]
190
- history = set()
285
+
286
+ # Remove the "employment-summary" nesting
287
+ employments = [
288
+ employment.get("employment-summary", {}) for employment in employments
289
+ ]
290
+
191
291
  for employment in employments:
192
- terminated = employment["employment-summary"].get("end-date")
193
- affiliation = dict_lookup(
194
- employment,
195
- "employment-summary.organization.name",
196
- )
197
- if affiliation not in history and not terminated:
198
- history.add(affiliation)
199
- entry["affiliations"].append({"name": affiliation})
292
+ terminated = employment.get("end-date")
293
+ if terminated:
294
+ continue
295
+
296
+ org = employment["organization"]
297
+ aff_id = self._extract_affiliation_id(org)
298
+
299
+ # Skip adding if the ID already exists in result
300
+ if aff_id and any(aff.get("id") == aff_id for aff in result):
301
+ continue
302
+
303
+ # Skip adding if the name exists in result with no ID
304
+ if any(
305
+ aff.get("name") == org["name"] and "id" not in aff for aff in result
306
+ ):
307
+ continue
308
+
309
+ aff = {"name": org["name"]}
310
+ if aff_id:
311
+ aff["id"] = aff_id
312
+
313
+ result.append(aff)
200
314
  except Exception:
201
315
  pass
202
-
203
- stream_entry.entry = entry
204
- return stream_entry
316
+ return result
317
+
318
+ def _extract_affiliation_id(self, org):
319
+ """Extract the affiliation ID from an ORCiD organization."""
320
+ dis_org = org.get("disambiguated-organization")
321
+ if not dis_org:
322
+ return
323
+
324
+ aff_id = None
325
+ org_id = dis_org.get("disambiguated-organization-identifier")
326
+ org_scheme = dis_org.get("disambiguation-source")
327
+ if org_id and org_scheme:
328
+ aff_id = self.org_id_to_affiliation_id(org_scheme, org_id)
329
+ return aff_id
205
330
 
206
331
 
207
332
  class NamesServiceWriter(ServiceWriter):
@@ -0,0 +1,9 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 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
+ """BODC Subjects module."""
@@ -0,0 +1,111 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 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
+ """BODC subjects datastreams, readers, transformers, and writers."""
10
+
11
+ from invenio_vocabularies.datastreams.errors import TransformerError
12
+ from invenio_vocabularies.datastreams.readers import RDFReader
13
+ from invenio_vocabularies.datastreams.transformers import RDFTransformer
14
+
15
+ from ..config import bodc_puv_file_url
16
+
17
+ # Available with the "rdf" extra
18
+ try:
19
+ import rdflib
20
+ except ImportError:
21
+ rdflib = None
22
+
23
+
24
+ class BODCPUVSubjectsTransformer(RDFTransformer):
25
+ """
26
+ Transformer class to convert BODC-PUV RDF data to a dictionary format.
27
+
28
+ Input:
29
+ - Relevant fields:
30
+ - `skos:notation`: Primary identifier for the concept.
31
+ - `skos:prefLabel`: Preferred labels with language codes.
32
+ - `skos:altLabel`: Alternative labels (optional).
33
+ - `skos:definition`: Definitions of the concept.
34
+ - `owl:deprecated`: Boolean flag indicating if the concept is deprecated.
35
+
36
+ Output:
37
+ - A dictionary with the following structure:
38
+ {
39
+ "id": "SDN:P01::SAGEMSFM", # BODC-specific parameter ID (skos:notation).
40
+ "scheme": "BODC-PUV", # The scheme name indicating this is a BODC Parameter Usage Vocabulary concept.
41
+ "subject": "AMSSedAge", # The alternative label (skos:altLabel), if available, or None.
42
+ "title": {
43
+ "en": "14C age of Foraminiferida" # English preferred label (skos:prefLabel).
44
+ },
45
+ "props": {
46
+ "definitions": "Accelerated mass spectrometry on picked tests", # Definition of subject (skos:definition).
47
+ },
48
+ "identifiers": [
49
+ {
50
+ "scheme": "url", # Type of identifier (URL).
51
+ "identifier": "http://vocab.nerc.ac.uk/collection/P01/current/SAGEMSFM" # URI of the concept.
52
+ }
53
+ ]
54
+ }
55
+ """
56
+
57
+ def _get_subject_data(self, rdf_graph, subject):
58
+ """Fetch all triples for a subject and organize them into a dictionary."""
59
+ data = {}
60
+ for predicate, obj in rdf_graph.predicate_objects(subject=subject):
61
+ predicate_name = str(predicate)
62
+ if predicate_name not in data:
63
+ data[predicate_name] = []
64
+ data[predicate_name].append(obj)
65
+ return data
66
+
67
+ def _transform_entry(self, subject, rdf_graph):
68
+ """Transform an entry to the required dictionary format."""
69
+ labels = self._get_labels(subject, rdf_graph)
70
+ subject_data = self._get_subject_data(rdf_graph, subject)
71
+ deprecated = subject_data.get(str(rdflib.namespace.OWL.deprecated), [False])
72
+ if deprecated and str(deprecated[0]).lower() == "true":
73
+ return None # Skip deprecated subjects
74
+
75
+ notation = subject_data.get(str(self.skos_core.notation), [])
76
+ if notation:
77
+ id = str(notation[0])
78
+ else:
79
+ raise TransformerError(f"No id found for: {subject}")
80
+
81
+ alt_labels = [obj for obj in subject_data.get(str(self.skos_core.altLabel), [])]
82
+ subject_text = str(alt_labels[0]) if alt_labels else ""
83
+ definition = str(subject_data.get(str(self.skos_core.definition), [None])[0])
84
+
85
+ return {
86
+ "id": id,
87
+ "scheme": "BODC-PUV",
88
+ "subject": subject_text,
89
+ "title": labels,
90
+ "props": {"definition": definition} if definition else {},
91
+ "identifiers": self._get_identifiers(subject),
92
+ }
93
+
94
+
95
+ # Configuration for datastream
96
+
97
+ VOCABULARIES_DATASTREAM_TRANSFORMERS = {"bodc-transformer": BODCPUVSubjectsTransformer}
98
+
99
+ DATASTREAM_CONFIG = {
100
+ "readers": [
101
+ {
102
+ "type": "http",
103
+ "args": {
104
+ "origin": bodc_puv_file_url,
105
+ },
106
+ },
107
+ {"type": "rdf"},
108
+ ],
109
+ "transformers": [{"type": "bodc-transformer"}],
110
+ "writers": [{"args": {"writer": {"type": "subjects-service"}}, "type": "async"}],
111
+ }
@@ -15,10 +15,12 @@ from invenio_i18n import get_locale
15
15
  from invenio_i18n import lazy_gettext as _
16
16
  from invenio_records_resources.services import SearchOptions
17
17
  from invenio_records_resources.services.records.components import DataComponent
18
+ from invenio_records_resources.services.records.queryparser import (
19
+ CompositeSuggestQueryParser,
20
+ )
18
21
  from werkzeug.local import LocalProxy
19
22
 
20
23
  from ...services.components import PIDComponent
21
- from ...services.querystr import FilteredSuggestQueryParser
22
24
 
23
25
  subject_schemes = LocalProxy(
24
26
  lambda: current_app.config["VOCABULARIES_SUBJECTS_SCHEMES"]
@@ -34,13 +36,16 @@ euroscivoc_file_url = LocalProxy(
34
36
  lambda: current_app.config["VOCABULARIES_SUBJECTS_EUROSCIVOC_FILE_URL"]
35
37
  )
36
38
 
39
+ bodc_puv_file_url = LocalProxy(
40
+ lambda: current_app.config["VOCABULARIES_SUBJECTS_BODC_PUV_FILE_URL"]
41
+ )
42
+
37
43
 
38
44
  class SubjectsSearchOptions(SearchOptions):
39
45
  """Search options."""
40
46
 
41
- suggest_parser_cls = FilteredSuggestQueryParser.factory(
42
- filter_field="scheme",
43
- fields=[ # suggest fields
47
+ suggest_parser_cls = CompositeSuggestQueryParser.factory(
48
+ fields=[
44
49
  "subject^100",
45
50
  localized_title,
46
51
  "synonyms^20",
@@ -12,6 +12,7 @@ from invenio_access.permissions import system_identity
12
12
  from invenio_i18n import lazy_gettext as _
13
13
 
14
14
  from ...datastreams.writers import ServiceWriter
15
+ from .bodc import datastreams as bodc_datastreams
15
16
  from .euroscivoc import datastreams as euroscivoc_datastreams
16
17
  from .gemet import datastreams as gemet_datastreams
17
18
  from .mesh import datastreams as mesh_datastreams
@@ -32,8 +33,6 @@ class SubjectsServiceWriter(ServiceWriter):
32
33
 
33
34
  VOCABULARIES_DATASTREAM_READERS = {
34
35
  **mesh_datastreams.VOCABULARIES_DATASTREAM_READERS,
35
- **euroscivoc_datastreams.VOCABULARIES_DATASTREAM_READERS,
36
- **gemet_datastreams.VOCABULARIES_DATASTREAM_READERS,
37
36
  }
38
37
  """Subjects Data Streams readers."""
39
38
 
@@ -41,14 +40,13 @@ VOCABULARIES_DATASTREAM_TRANSFORMERS = {
41
40
  **mesh_datastreams.VOCABULARIES_DATASTREAM_TRANSFORMERS,
42
41
  **euroscivoc_datastreams.VOCABULARIES_DATASTREAM_TRANSFORMERS,
43
42
  **gemet_datastreams.VOCABULARIES_DATASTREAM_TRANSFORMERS,
43
+ **bodc_datastreams.VOCABULARIES_DATASTREAM_TRANSFORMERS,
44
44
  }
45
45
  """Subjects Data Streams transformers."""
46
46
 
47
47
  VOCABULARIES_DATASTREAM_WRITERS = {
48
48
  "subjects-service": SubjectsServiceWriter,
49
49
  **mesh_datastreams.VOCABULARIES_DATASTREAM_WRITERS,
50
- **euroscivoc_datastreams.VOCABULARIES_DATASTREAM_WRITERS,
51
- **gemet_datastreams.VOCABULARIES_DATASTREAM_WRITERS,
52
50
  }
53
51
  """Subjects Data Streams writers."""
54
52