invenio-vocabularies 3.4.1__tar.gz → 4.0.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 (394) hide show
  1. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/CHANGES.rst +9 -4
  2. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/PKG-INFO +9 -4
  3. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/__init__.py +1 -1
  4. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/CustomAwardForm.js +2 -2
  5. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/cli.py +10 -39
  6. invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/awards/datastreams.py +215 -0
  7. invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/common/__init__.py +9 -0
  8. invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/common/ror/__init__.py +9 -0
  9. invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/common/ror/datastreams.py +66 -0
  10. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/config.py +2 -0
  11. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/datastreams.py +47 -12
  12. invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +62 -0
  13. {invenio-vocabularies-3.4.1/invenio_vocabularies/contrib/funders/mappings/os-v2 → invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/funders/mappings/os-v1}/funders/funder-v1.0.0.json +18 -0
  14. {invenio-vocabularies-3.4.1/invenio_vocabularies/contrib/funders/mappings/v7 → invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/funders/mappings/os-v2}/funders/funder-v1.0.0.json +18 -0
  15. {invenio-vocabularies-3.4.1/invenio_vocabularies/contrib/funders/mappings/os-v1 → invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/funders/mappings/v7}/funders/funder-v1.0.0.json +18 -0
  16. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/schema.py +8 -0
  17. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/readers.py +12 -3
  18. invenio-vocabularies-4.0.0/invenio_vocabularies/factories.py +78 -0
  19. invenio-vocabularies-4.0.0/invenio_vocabularies/services/tasks.py +58 -0
  20. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/PKG-INFO +9 -4
  21. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/SOURCES.txt +6 -0
  22. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/entry_points.txt +3 -0
  23. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/requires.txt +1 -1
  24. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/setup.cfg +3 -1
  25. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_datastreams.py +126 -3
  26. invenio-vocabularies-4.0.0/tests/contrib/common/ror/test_ror_datastreams.py +122 -0
  27. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/conftest.py +9 -2
  28. invenio-vocabularies-4.0.0/tests/contrib/funders/test_funders_datastreams.py +219 -0
  29. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_readers.py +53 -1
  30. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/test_cli.py +5 -2
  31. invenio-vocabularies-4.0.0/tests/test_factory.py +70 -0
  32. invenio-vocabularies-3.4.1/invenio_vocabularies/contrib/awards/datastreams.py +0 -128
  33. invenio-vocabularies-3.4.1/invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +0 -30
  34. invenio-vocabularies-3.4.1/invenio_vocabularies/services/tasks.py +0 -28
  35. invenio-vocabularies-3.4.1/tests/contrib/funders/test_funders_datastreams.py +0 -138
  36. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.dockerignore +0 -0
  37. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.editorconfig +0 -0
  38. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.git-blame-ignore-revs +0 -0
  39. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.github/workflows/i18n-pull.yml +0 -0
  40. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.github/workflows/i18n-push.yml +0 -0
  41. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.github/workflows/pypi-publish.yml +0 -0
  42. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.github/workflows/tests.yml +0 -0
  43. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.tx/config +0 -0
  44. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/AUTHORS.rst +0 -0
  45. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/CONTRIBUTING.rst +0 -0
  46. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/INSTALL.rst +0 -0
  47. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/LICENSE +0 -0
  48. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/MANIFEST.in +0 -0
  49. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/README.rst +0 -0
  50. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/babel.ini +0 -0
  51. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/Makefile +0 -0
  52. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/api.rst +0 -0
  53. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/authors.rst +0 -0
  54. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/changes.rst +0 -0
  55. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/conf.py +0 -0
  56. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/configuration.rst +0 -0
  57. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/contributing.rst +0 -0
  58. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/index.rst +0 -0
  59. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/installation.rst +0 -0
  60. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/license.rst +0 -0
  61. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/make.bat +0 -0
  62. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/requirements.txt +0 -0
  63. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/usage.rst +0 -0
  64. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/gen-migration.sh +0 -0
  65. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/17c703ce1eb7_create_names_table.py +0 -0
  66. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/4a9a4fd235f8_create_vocabulary_schemes.py +0 -0
  67. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/4f365fced43f_create_vocabularies_tables.py +0 -0
  68. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/55a700f897b6_add_names_and_afiliations_pid_column.py +0 -0
  69. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/6312f33645c1_create_affiliations_table.py +0 -0
  70. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/676dd587542d_create_funders_vocabulary_table.py +0 -0
  71. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/8ff82dfb0be8_create_vocabularies_branch.py +0 -0
  72. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/__init__.py +0 -0
  73. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/e1146238edd3_create_awards_table.py +0 -0
  74. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.eslintrc.yml +0 -0
  75. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.prettierrc +0 -0
  76. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/index.js +0 -0
  77. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +0 -0
  78. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/AwardResults.js +0 -0
  79. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FunderDropdown.js +0 -0
  80. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.js +0 -0
  81. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.test.js +0 -0
  82. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingFieldItem.js +0 -0
  83. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingModal.js +0 -0
  84. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/NoAwardResults.js +0 -0
  85. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/index.js +0 -0
  86. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/index.js +0 -0
  87. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/index.js +0 -0
  88. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/index.js +0 -0
  89. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next-scanner.config.js +0 -0
  90. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next.js +0 -0
  91. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/index.js +0 -0
  92. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/package.json +0 -0
  93. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/compileCatalog.js +0 -0
  94. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/initCatalog.js +0 -0
  95. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/config.py +0 -0
  96. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/__init__.py +0 -0
  97. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/__init__.py +0 -0
  98. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/affiliations.py +0 -0
  99. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/api.py +0 -0
  100. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/config.py +0 -0
  101. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/facets.py +0 -0
  102. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/__init__.py +0 -0
  103. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json +0 -0
  104. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/__init__.py +0 -0
  105. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/__init__.py +0 -0
  106. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v1.0.0.json +0 -0
  107. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/__init__.py +0 -0
  108. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v1.0.0.json +0 -0
  109. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py +0 -0
  110. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json +0 -0
  111. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/models.py +0 -0
  112. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/resources.py +0 -0
  113. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/schema.py +0 -0
  114. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/services.py +0 -0
  115. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/__init__.py +0 -0
  116. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/api.py +0 -0
  117. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/awards.py +0 -0
  118. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/config.py +0 -0
  119. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/jsonschemas/__init__.py +0 -0
  120. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +0 -0
  121. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/__init__.py +0 -0
  122. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/__init__.py +0 -0
  123. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json +0 -0
  124. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/__init__.py +0 -0
  125. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json +0 -0
  126. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/v7/__init__.py +0 -0
  127. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +0 -0
  128. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/models.py +0 -0
  129. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/resources.py +0 -0
  130. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/schema.py +0 -0
  131. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/serializer.py +0 -0
  132. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/services.py +0 -0
  133. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/__init__.py +0 -0
  134. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/api.py +0 -0
  135. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/facets.py +0 -0
  136. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/funders.py +0 -0
  137. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/jsonschemas/__init__.py +0 -0
  138. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/mappings/__init__.py +0 -0
  139. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/__init__.py +0 -0
  140. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/__init__.py +0 -0
  141. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/mappings/v7/__init__.py +0 -0
  142. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/models.py +0 -0
  143. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/resources.py +0 -0
  144. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/serializer.py +0 -0
  145. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/services.py +0 -0
  146. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/__init__.py +0 -0
  147. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/api.py +0 -0
  148. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/config.py +0 -0
  149. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/datastreams.py +0 -0
  150. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/jsonschemas/__init__.py +0 -0
  151. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/jsonschemas/names/name-v1.0.0.json +0 -0
  152. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/__init__.py +0 -0
  153. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/os-v1/__init__.py +0 -0
  154. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v1.0.0.json +0 -0
  155. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/os-v2/__init__.py +0 -0
  156. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v1.0.0.json +0 -0
  157. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/v7/__init__.py +0 -0
  158. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json +0 -0
  159. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/models.py +0 -0
  160. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/names.py +0 -0
  161. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/resources.py +0 -0
  162. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/schema.py +0 -0
  163. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/services.py +0 -0
  164. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/__init__.py +0 -0
  165. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/api.py +0 -0
  166. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/config.py +0 -0
  167. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/facets.py +0 -0
  168. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py +0 -0
  169. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +0 -0
  170. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/__init__.py +0 -0
  171. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py +0 -0
  172. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +0 -0
  173. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py +0 -0
  174. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +0 -0
  175. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py +0 -0
  176. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +0 -0
  177. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/models.py +0 -0
  178. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/resources.py +0 -0
  179. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/schema.py +0 -0
  180. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/services.py +0 -0
  181. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/subjects.py +0 -0
  182. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/__init__.py +0 -0
  183. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/datastreams.py +0 -0
  184. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/errors.py +0 -0
  185. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/factories.py +0 -0
  186. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/transformers.py +0 -0
  187. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/writers.py +0 -0
  188. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/xml.py +0 -0
  189. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/ext.py +0 -0
  190. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/fixtures.py +0 -0
  191. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/proxies.py +0 -0
  192. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/__init__.py +0 -0
  193. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/api.py +0 -0
  194. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/jsonschemas/__init__.py +0 -0
  195. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json +0 -0
  196. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json +0 -0
  197. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/__init__.py +0 -0
  198. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/os-v1/__init__.py +0 -0
  199. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
  200. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/os-v2/__init__.py +0 -0
  201. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
  202. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/v7/__init__.py +0 -0
  203. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
  204. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/models.py +0 -0
  205. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/pidprovider.py +0 -0
  206. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/systemfields/__init__.py +0 -0
  207. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/systemfields/pid.py +0 -0
  208. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/systemfields/relations.py +0 -0
  209. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/resources/__init__.py +0 -0
  210. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/resources/resource.py +0 -0
  211. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/resources/schema.py +0 -0
  212. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/resources/serializer.py +0 -0
  213. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/__init__.py +0 -0
  214. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/components.py +0 -0
  215. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/custom_fields/__init__.py +0 -0
  216. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/custom_fields/subject.py +0 -0
  217. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/custom_fields/vocabulary.py +0 -0
  218. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/facets.py +0 -0
  219. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/permissions.py +0 -0
  220. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/querystr.py +0 -0
  221. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/schema.py +0 -0
  222. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/service.py +0 -0
  223. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html +0 -0
  224. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/af/LC_MESSAGES/messages.mo +0 -0
  225. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/af/LC_MESSAGES/messages.po +0 -0
  226. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo +0 -0
  227. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.po +0 -0
  228. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.mo +0 -0
  229. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.po +0 -0
  230. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.mo +0 -0
  231. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.po +0 -0
  232. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.mo +0 -0
  233. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.po +0 -0
  234. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.mo +0 -0
  235. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.po +0 -0
  236. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.mo +0 -0
  237. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.po +0 -0
  238. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.mo +0 -0
  239. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.po +0 -0
  240. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.mo +0 -0
  241. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.po +0 -0
  242. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.mo +0 -0
  243. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.po +0 -0
  244. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en/LC_MESSAGES/messages.mo +0 -0
  245. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en/LC_MESSAGES/messages.po +0 -0
  246. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.mo +0 -0
  247. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.po +0 -0
  248. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.mo +0 -0
  249. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.po +0 -0
  250. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.mo +0 -0
  251. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.po +0 -0
  252. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.mo +0 -0
  253. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.po +0 -0
  254. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.mo +0 -0
  255. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.po +0 -0
  256. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.mo +0 -0
  257. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.po +0 -0
  258. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.mo +0 -0
  259. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.po +0 -0
  260. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.mo +0 -0
  261. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.po +0 -0
  262. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.mo +0 -0
  263. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.po +0 -0
  264. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.mo +0 -0
  265. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.po +0 -0
  266. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.mo +0 -0
  267. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.po +0 -0
  268. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.mo +0 -0
  269. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.po +0 -0
  270. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/gl/LC_MESSAGES/messages.mo +0 -0
  271. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/gl/LC_MESSAGES/messages.po +0 -0
  272. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.mo +0 -0
  273. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.po +0 -0
  274. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.mo +0 -0
  275. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.po +0 -0
  276. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.mo +0 -0
  277. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.po +0 -0
  278. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.mo +0 -0
  279. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.po +0 -0
  280. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.mo +0 -0
  281. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.po +0 -0
  282. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.mo +0 -0
  283. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.po +0 -0
  284. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.mo +0 -0
  285. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.po +0 -0
  286. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.mo +0 -0
  287. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.po +0 -0
  288. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/messages.pot +0 -0
  289. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ne/LC_MESSAGES/messages.mo +0 -0
  290. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ne/LC_MESSAGES/messages.po +0 -0
  291. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.mo +0 -0
  292. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.po +0 -0
  293. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.mo +0 -0
  294. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.po +0 -0
  295. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.mo +0 -0
  296. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.po +0 -0
  297. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.mo +0 -0
  298. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.po +0 -0
  299. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.mo +0 -0
  300. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.po +0 -0
  301. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/rw/LC_MESSAGES/messages.mo +0 -0
  302. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/rw/LC_MESSAGES/messages.po +0 -0
  303. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.mo +0 -0
  304. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.po +0 -0
  305. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.mo +0 -0
  306. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.po +0 -0
  307. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.mo +0 -0
  308. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.po +0 -0
  309. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.mo +0 -0
  310. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.po +0 -0
  311. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.mo +0 -0
  312. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.po +0 -0
  313. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.mo +0 -0
  314. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.po +0 -0
  315. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  316. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
  317. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  318. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po +0 -0
  319. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/views.py +0 -0
  320. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/webpack.py +0 -0
  321. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/dependency_links.txt +0 -0
  322. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/not-zip-safe +0 -0
  323. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/top_level.txt +0 -0
  324. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/pyproject.toml +0 -0
  325. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/requirements-feature.txt +0 -0
  326. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/run-js-linter.sh +0 -0
  327. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/run-tests.sh +0 -0
  328. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/setup.py +0 -0
  329. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/conftest.py +0 -0
  330. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/conftest.py +0 -0
  331. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_api.py +0 -0
  332. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_jsonschema.py +0 -0
  333. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_resource.py +0 -0
  334. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_schema.py +0 -0
  335. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_service.py +0 -0
  336. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/conftest.py +0 -0
  337. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_api.py +0 -0
  338. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_jsonschema.py +0 -0
  339. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_resource.py +0 -0
  340. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_schema.py +0 -0
  341. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_service.py +0 -0
  342. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_api.py +0 -0
  343. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_jsonschema.py +0 -0
  344. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_resource.py +0 -0
  345. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_schema.py +0 -0
  346. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_service.py +0 -0
  347. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/conftest.py +0 -0
  348. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_api.py +0 -0
  349. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_datastreams.py +0 -0
  350. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_jsonschema.py +0 -0
  351. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_resource.py +0 -0
  352. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_schema.py +0 -0
  353. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_service.py +0 -0
  354. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/conftest.py +0 -0
  355. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_api.py +0 -0
  356. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_facets.py +0 -0
  357. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_jsonschema.py +0 -0
  358. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_resource.py +0 -0
  359. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_schema.py +0 -0
  360. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_service.py +0 -0
  361. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/custom_fields/test_custom_fields.py +0 -0
  362. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/conftest.py +0 -0
  363. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_datastreams.py +0 -0
  364. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_fixtures.py +0 -0
  365. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_transformers.py +0 -0
  366. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_writers.py +0 -0
  367. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/vocabularies.yaml +0 -0
  368. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/__init__.py +0 -0
  369. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/api.py +0 -0
  370. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/jsonschemas/__init__.py +0 -0
  371. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/jsonschemas/records/record-v1.0.0.json +0 -0
  372. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/__init__.py +0 -0
  373. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/v6/__init__.py +0 -0
  374. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/v6/records/record-v1.0.0.json +0 -0
  375. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/v7/__init__.py +0 -0
  376. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/v7/records/record-v1.0.0.json +0 -0
  377. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/models.py +0 -0
  378. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/conftest.py +0 -0
  379. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/test_api.py +0 -0
  380. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/test_jsonschema.py +0 -0
  381. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/test_models.py +0 -0
  382. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/test_relationship.py +0 -0
  383. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/conftest.py +0 -0
  384. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/test_resources_get.py +0 -0
  385. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/test_resources_l10n.py +0 -0
  386. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/test_resources_search.py +0 -0
  387. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/test_tasks_resources.py +0 -0
  388. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/conftest.py +0 -0
  389. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/test_labels.py +0 -0
  390. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/test_permissions.py +0 -0
  391. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/test_schema.py +0 -0
  392. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/test_service.py +0 -0
  393. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/test_alembic.py +0 -0
  394. {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/test_invenio_vocabularies.py +0 -0
@@ -8,10 +8,15 @@
8
8
  Changes
9
9
  =======
10
10
 
11
- Version 3.4.1 (released 2024-04-19)
12
-
13
- - funders: exclude ROR schema v2 json (#309)
14
-
11
+ Version 4.0.0 (released 2024-06-04)
12
+
13
+ - datastreams: implement factories for generating vocabulary configurations
14
+ - datastreams: added ROR HTTP reader
15
+ - funders: use ROR v2 dump instead of v1
16
+ - datastreams: added celery task for funders using ROR HTTP reader
17
+ - datastreams: add OpenAIRE Project HTTP Reader
18
+ - datastreams: fix OpenAIRE graph dataset parsing
19
+ - installation: upgrade invenio-records-resources
15
20
 
16
21
  Version 3.4.0 (released 2024-04-19)
17
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: invenio-vocabularies
3
- Version: 3.4.1
3
+ Version: 4.0.0
4
4
  Summary: "Invenio module for managing vocabularies."
5
5
  Home-page: https://github.com/inveniosoftware/invenio-vocabularies
6
6
  Author: CERN
@@ -50,10 +50,15 @@ Description: ..
50
50
  Changes
51
51
  =======
52
52
 
53
- Version 3.4.1 (released 2024-04-19)
54
-
55
- - funders: exclude ROR schema v2 json (#309)
53
+ Version 4.0.0 (released 2024-06-04)
56
54
 
55
+ - datastreams: implement factories for generating vocabulary configurations
56
+ - datastreams: added ROR HTTP reader
57
+ - funders: use ROR v2 dump instead of v1
58
+ - datastreams: added celery task for funders using ROR HTTP reader
59
+ - datastreams: add OpenAIRE Project HTTP Reader
60
+ - datastreams: fix OpenAIRE graph dataset parsing
61
+ - installation: upgrade invenio-records-resources
57
62
 
58
63
  Version 3.4.0 (released 2024-04-19)
59
64
 
@@ -10,6 +10,6 @@
10
10
 
11
11
  from .ext import InvenioVocabularies
12
12
 
13
- __version__ = "3.4.1"
13
+ __version__ = "4.0.0"
14
14
 
15
15
  __all__ = ("__version__", "InvenioVocabularies")
@@ -28,8 +28,8 @@ function CustomAwardForm({ deserializeFunder, selectedFunding }) {
28
28
  funderPID = funderItem.id;
29
29
  }
30
30
 
31
- if (funderItem.country) {
32
- funderCountry = funderItem.country;
31
+ if (funderItem.country_name) {
32
+ funderCountry = funderItem.country_name;
33
33
  }
34
34
 
35
35
  if (!funderName && !funderPID) {
@@ -9,46 +9,14 @@
9
9
 
10
10
  """Commands to create and manage vocabularies."""
11
11
 
12
- from copy import deepcopy
13
12
 
14
13
  import click
15
- import yaml
16
14
  from flask.cli import with_appcontext
17
15
  from invenio_access.permissions import system_identity
18
16
  from invenio_pidstore.errors import PIDDeletedError, PIDDoesNotExistError
19
- from invenio_records_resources.proxies import current_service_registry
20
17
 
21
- from .contrib.awards.datastreams import DATASTREAM_CONFIG as awards_ds_config
22
- from .contrib.funders.datastreams import DATASTREAM_CONFIG as funders_ds_config
23
- from .contrib.names.datastreams import DATASTREAM_CONFIG as names_ds_config
24
18
  from .datastreams import DataStreamFactory
25
-
26
-
27
- def get_config_for_ds(vocabulary, filepath=None, origin=None):
28
- """Calculates the configuration for a Data Stream."""
29
- config = None
30
- if vocabulary == "names": # FIXME: turn into a proper factory
31
- config = deepcopy(names_ds_config)
32
- elif vocabulary == "funders":
33
- config = deepcopy(funders_ds_config)
34
- elif vocabulary == "awards":
35
- config = deepcopy(awards_ds_config)
36
-
37
- if config:
38
- if filepath:
39
- with open(filepath) as f:
40
- config = yaml.safe_load(f).get(vocabulary)
41
- if origin:
42
- config["readers"][0].setdefault("args", {})
43
- config["readers"][0]["args"]["origin"] = origin
44
-
45
- return config
46
-
47
-
48
- def get_service_for_vocabulary(vocabulary):
49
- """Calculates the configuration for a Data Stream."""
50
- if vocabulary == "names": # FIXME: turn into a proper factory
51
- return current_service_registry.get("names")
19
+ from .factories import get_vocabulary_config
52
20
 
53
21
 
54
22
  @click.group()
@@ -111,7 +79,9 @@ def import_vocab(vocabulary, filepath=None, origin=None, num_samples=None):
111
79
  click.secho("One of --filepath or --origin must be present.", fg="red")
112
80
  exit(1)
113
81
 
114
- config = get_config_for_ds(vocabulary, filepath, origin)
82
+ vc = get_vocabulary_config(vocabulary)
83
+ config = vc.get_config(filepath, origin)
84
+
115
85
  success, errored, filtered = _process_vocab(config, num_samples)
116
86
 
117
87
  _output_process(vocabulary, "imported", success, errored, filtered)
@@ -127,8 +97,8 @@ def update(vocabulary, filepath=None, origin=None):
127
97
  if not filepath and not origin:
128
98
  click.secho("One of --filepath or --origin must be present.", fg="red")
129
99
  exit(1)
130
-
131
- config = get_config_for_ds(vocabulary, filepath, origin)
100
+ vc = get_vocabulary_config(vocabulary)
101
+ config = vc.get_config(filepath, origin)
132
102
 
133
103
  for w_conf in config["writers"]:
134
104
  w_conf["args"]["update"] = True
@@ -153,7 +123,8 @@ def convert(vocabulary, filepath=None, origin=None, target=None, num_samples=Non
153
123
  )
154
124
  exit(1)
155
125
 
156
- config = get_config_for_ds(vocabulary, filepath, origin)
126
+ vc = get_vocabulary_config(vocabulary)
127
+ config = vc.get_config(filepath, origin)
157
128
  if not filepath:
158
129
  config["writers"] = [{"type": "yaml", "args": {"filepath": target}}]
159
130
 
@@ -176,8 +147,8 @@ def delete(vocabulary, identifier, all):
176
147
  if not id and not all:
177
148
  click.secho("An identifier or the --all flag must be present.", fg="red")
178
149
  exit(1)
179
-
180
- service = get_service_for_vocabulary(vocabulary)
150
+ vc = get_vocabulary_config(vocabulary)
151
+ service = vc.get_service()
181
152
  if identifier:
182
153
  try:
183
154
  if service.delete(identifier, system_identity):
@@ -0,0 +1,215 @@
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
+ """Awards datastreams, transformers, writers and readers."""
10
+ import io
11
+
12
+ import requests
13
+ from invenio_access.permissions import system_identity
14
+ from invenio_i18n import lazy_gettext as _
15
+
16
+ from ...datastreams.errors import ReaderError, TransformerError
17
+ from ...datastreams.readers import BaseReader
18
+ from ...datastreams.transformers import BaseTransformer
19
+ from ...datastreams.writers import ServiceWriter
20
+ from .config import awards_ec_ror_id, awards_openaire_funders_mapping
21
+
22
+
23
+ class OpenAIREProjectHTTPReader(BaseReader):
24
+ """OpenAIRE Project HTTP Reader returning an in-memory binary stream of the latest OpenAIRE Graph Dataset project tar file."""
25
+
26
+ def _iter(self, fp, *args, **kwargs):
27
+ raise NotImplementedError(
28
+ "OpenAIREProjectHTTPReader downloads one file and therefore does not iterate through items"
29
+ )
30
+
31
+ def read(self, item=None, *args, **kwargs):
32
+ """Reads the latest OpenAIRE Graph Dataset project tar file from Zenodo and yields an in-memory binary stream of it."""
33
+ if item:
34
+ raise NotImplementedError(
35
+ "OpenAIREProjectHTTPReader does not support being chained after another reader"
36
+ )
37
+
38
+ if self._origin == "full":
39
+ # OpenAIRE Graph Dataset
40
+ api_url = "https://zenodo.org/api/records/3516917"
41
+ elif self._origin == "diff":
42
+ # OpenAIRE Graph dataset: new collected projects
43
+ api_url = "https://zenodo.org/api/records/6419021"
44
+ else:
45
+ raise ReaderError("The --origin option should be either 'full' or 'diff'")
46
+
47
+ # Call the signposting `linkset+json` endpoint for the Concept DOI (i.e. latest version) of the OpenAIRE Graph Dataset.
48
+ # See: https://github.com/inveniosoftware/rfcs/blob/master/rfcs/rdm-0071-signposting.md#provide-an-applicationlinksetjson-endpoint
49
+ headers = {"Accept": "application/linkset+json"}
50
+ api_resp = requests.get(api_url, headers=headers)
51
+ api_resp.raise_for_status()
52
+
53
+ # Extract the Landing page Link Set Object located as the first (index 0) item.
54
+ landing_page_linkset = api_resp.json()["linkset"][0]
55
+
56
+ # Extract the URL of the only project tar file linked to the record.
57
+ landing_page_project_tar_items = [
58
+ item
59
+ for item in landing_page_linkset["item"]
60
+ if item["type"] == "application/x-tar"
61
+ and item["href"].endswith("/project.tar")
62
+ ]
63
+ if len(landing_page_project_tar_items) != 1:
64
+ raise ReaderError(
65
+ f"Expected 1 project tar item but got {len(landing_page_project_tar_items)}"
66
+ )
67
+ file_url = landing_page_project_tar_items[0]["href"]
68
+
69
+ # Download the project tar file and fully load the response bytes content in memory.
70
+ # The bytes content are then wrapped by a BytesIO to be file-like object (as required by `tarfile.open`).
71
+ # Using directly `file_resp.raw` is not possible since `tarfile.open` requires the file-like object to be seekable.
72
+ file_resp = requests.get(file_url)
73
+ file_resp.raise_for_status()
74
+ yield io.BytesIO(file_resp.content)
75
+
76
+
77
+ class AwardsServiceWriter(ServiceWriter):
78
+ """Funders service writer."""
79
+
80
+ def __init__(self, *args, **kwargs):
81
+ """Constructor."""
82
+ service_or_name = kwargs.pop("service_or_name", "awards")
83
+ super().__init__(service_or_name=service_or_name, *args, **kwargs)
84
+
85
+ def _entry_id(self, entry):
86
+ """Get the id from an entry."""
87
+ return entry["id"]
88
+
89
+
90
+ class OpenAIREProjectTransformer(BaseTransformer):
91
+ """Transforms an OpenAIRE project record into an award record."""
92
+
93
+ def apply(self, stream_entry, **kwargs):
94
+ """Applies the transformation to the stream entry."""
95
+ record = stream_entry.entry
96
+ award = {}
97
+
98
+ code = record["code"]
99
+
100
+ # The `id` should follow the format `sourcePrefix::md5(localId)` where `sourcePrefix` is 12 characters long.
101
+ # See: https://graph.openaire.eu/docs/data-model/pids-and-identifiers#identifiers-in-the-graph
102
+ #
103
+ # The format of `id` in the full OpenAIRE Graph Dataset (https://doi.org/10.5281/zenodo.3516917)
104
+ # follows this format (e.g. 'abc_________::0123456789abcdef0123456789abcdef').
105
+ # However, the format of `id` in the new collected projects dataset (https://doi.org/10.5281/zenodo.6419021)
106
+ # does not follow this format, and has a `40|` prefix (e.g. '40|abc_________::0123456789abcdef0123456789abcdef').
107
+ #
108
+ # The number '40' corresponds to the entity types 'Project'.
109
+ # See: https://ec.europa.eu/research/participants/documents/downloadPublic?documentIds=080166e5a3a1a213&appId=PPGMS
110
+ # See: https://graph.openaire.eu/docs/5.0.0/data-model/entities/project#id
111
+ openaire_funder_prefix = record["id"].split("::", 1)[0].split("|", 1)[-1]
112
+
113
+ funder_id = awards_openaire_funders_mapping.get(openaire_funder_prefix)
114
+ if funder_id is None:
115
+ raise TransformerError(
116
+ _(
117
+ "Unknown OpenAIRE funder prefix {openaire_funder_prefix}".format(
118
+ openaire_funder_prefix=openaire_funder_prefix
119
+ )
120
+ )
121
+ )
122
+
123
+ award["id"] = f"{funder_id}::{code}"
124
+
125
+ funding = next(iter(record.get("funding", [])), None)
126
+ if funding:
127
+ funding_stream_id = funding.get("funding_stream", {}).get("id", "")
128
+ # Example funding stream ID: `EC::HE::HORIZON-AG-UN`. We need the `EC`
129
+ # string, i.e. the second "part" of the identifier.
130
+ program = next(iter(funding_stream_id.split("::")[1:2]), "")
131
+ if program:
132
+ award["program"] = program
133
+
134
+ identifiers = []
135
+ if funder_id == awards_ec_ror_id:
136
+ identifiers.append(
137
+ {
138
+ "identifier": f"https://cordis.europa.eu/projects/{code}",
139
+ "scheme": "url",
140
+ }
141
+ )
142
+ elif record.get("websiteurl"):
143
+ identifiers.append(
144
+ {"identifier": record.get("websiteurl"), "scheme": "url"}
145
+ )
146
+
147
+ if identifiers:
148
+ award["identifiers"] = identifiers
149
+
150
+ award["number"] = code
151
+
152
+ # `title` is a mandatory attribute of the `Project` object in the OpenAIRE Graph Data Model.
153
+ # See: https://graph.openaire.eu/docs/data-model/entities/project#title
154
+ # However, 15'000+ awards for the FCT funder (and 1 record the NIH funder) are missing a title attribute.
155
+ if "title" not in record:
156
+ raise TransformerError(
157
+ _(
158
+ "Missing title attribute for award {award_id}".format(
159
+ award_id=award["id"]
160
+ )
161
+ )
162
+ )
163
+ award["title"] = {"en": record["title"]}
164
+
165
+ award["funder"] = {"id": funder_id}
166
+ acronym = record.get("acronym")
167
+ if acronym:
168
+ award["acronym"] = acronym
169
+
170
+ stream_entry.entry = award
171
+ return stream_entry
172
+
173
+
174
+ VOCABULARIES_DATASTREAM_READERS = {
175
+ "openaire-project-http": OpenAIREProjectHTTPReader,
176
+ }
177
+
178
+ VOCABULARIES_DATASTREAM_TRANSFORMERS = {
179
+ "openaire-award": OpenAIREProjectTransformer,
180
+ }
181
+ """ORCiD Data Streams transformers."""
182
+
183
+ VOCABULARIES_DATASTREAM_WRITERS = {
184
+ "awards-service": AwardsServiceWriter,
185
+ }
186
+ """ORCiD Data Streams transformers."""
187
+
188
+ DATASTREAM_CONFIG = {
189
+ "readers": [
190
+ {
191
+ "type": "tar",
192
+ "args": {
193
+ "regex": "\\.json.gz$",
194
+ "mode": "r",
195
+ },
196
+ },
197
+ {"type": "gzip"},
198
+ {"type": "jsonl"},
199
+ ],
200
+ "transformers": [
201
+ {"type": "openaire-award"},
202
+ ],
203
+ "writers": [
204
+ {
205
+ "type": "awards-service",
206
+ "args": {
207
+ "identity": system_identity,
208
+ },
209
+ }
210
+ ],
211
+ }
212
+ """Data Stream configuration.
213
+
214
+ An origin is required for the reader.
215
+ """
@@ -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
+ """Vocabularies common module."""
@@ -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
+ """ROR-related module."""
@@ -0,0 +1,66 @@
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
+ """ROR-related Datastreams Readers/Writers/Transformers module."""
10
+
11
+ import io
12
+
13
+ import requests
14
+
15
+ from invenio_vocabularies.datastreams.errors import ReaderError
16
+ from invenio_vocabularies.datastreams.readers import BaseReader
17
+
18
+
19
+ class RORHTTPReader(BaseReader):
20
+ """ROR HTTP Reader returning an in-memory binary stream of the latest ROR data dump ZIP file."""
21
+
22
+ def _iter(self, fp, *args, **kwargs):
23
+ raise NotImplementedError(
24
+ "RORHTTPReader downloads one file and therefore does not iterate through items"
25
+ )
26
+
27
+ def read(self, item=None, *args, **kwargs):
28
+ """Reads the latest ROR data dump ZIP file from Zenodo and yields an in-memory binary stream of it."""
29
+ if item:
30
+ raise NotImplementedError(
31
+ "RORHTTPReader does not support being chained after another reader"
32
+ )
33
+
34
+ # Call the signposting `linkset+json` endpoint for the Concept DOI (i.e. latest version) of the ROR data dump.
35
+ # See: https://github.com/inveniosoftware/rfcs/blob/master/rfcs/rdm-0071-signposting.md#provide-an-applicationlinksetjson-endpoint
36
+ headers = {"Accept": "application/linkset+json"}
37
+ api_url = "https://zenodo.org/api/records/6347574"
38
+ api_resp = requests.get(api_url, headers=headers)
39
+ api_resp.raise_for_status()
40
+
41
+ # Extract the Landing page Link Set Object located as the first (index 0) item.
42
+ landing_page_linkset = api_resp.json()["linkset"][0]
43
+
44
+ # Extract the URL of the only ZIP file linked to the record.
45
+ landing_page_zip_items = [
46
+ item
47
+ for item in landing_page_linkset["item"]
48
+ if item["type"] == "application/zip"
49
+ ]
50
+ if len(landing_page_zip_items) != 1:
51
+ raise ReaderError(
52
+ f"Expected 1 ZIP item but got {len(landing_page_zip_items)}"
53
+ )
54
+ file_url = landing_page_zip_items[0]["href"]
55
+
56
+ # Download the ZIP file and fully load the response bytes content in memory.
57
+ # The bytes content are then wrapped by a BytesIO to be file-like object (as required by `zipfile.ZipFile`).
58
+ # Using directly `file_resp.raw` is not possible since `zipfile.ZipFile` requires the file-like object to be seekable.
59
+ file_resp = requests.get(file_url)
60
+ file_resp.raise_for_status()
61
+ yield io.BytesIO(file_resp.content)
62
+
63
+
64
+ VOCABULARIES_DATASTREAM_READERS = {
65
+ "ror-http": RORHTTPReader,
66
+ }
@@ -31,6 +31,8 @@ class FundersSearchOptions(SearchOptions):
31
31
  fields=[
32
32
  "name^100",
33
33
  "identifiers.identifier^10",
34
+ "acronym^10",
35
+ "aliases^10",
34
36
  ]
35
37
  )
36
38
 
@@ -1,6 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  # Copyright (C) 2022 CERN.
4
+ # Copyright (C) 2024 California Institute of Technology.
4
5
  #
5
6
  # Invenio-Vocabularies is free software; you can redistribute it and/or
6
7
  # modify it under the terms of the MIT License; see LICENSE file for more
@@ -38,36 +39,70 @@ class RORTransformer(BaseTransformer):
38
39
  """Applies the transformation to the stream entry."""
39
40
  record = stream_entry.entry
40
41
  funder = {}
42
+ funder["title"] = {}
41
43
 
42
44
  funder["id"] = normalize_ror(record.get("id"))
43
45
  if not funder["id"]:
44
46
  raise TransformerError(_("Id not found in ROR entry."))
45
47
 
46
- funder["name"] = record.get("name")
48
+ aliases = []
49
+ acronym = None
50
+ for name in record.get("names"):
51
+ # Some name entries have a `lang` key with a `None` value.
52
+ # Therefore, providing a default value to `name.get("lang")` is not enough,
53
+ # and we need instead to check if the result of `get` is None.
54
+ lang = name.get("lang")
55
+ if lang is None:
56
+ lang = "en"
57
+
58
+ if "ror_display" in name["types"]:
59
+ funder["name"] = name["value"]
60
+ if "label" in name["types"]:
61
+ funder["title"][lang] = name["value"]
62
+ if "alias" in name["types"]:
63
+ aliases.append(name["value"])
64
+ if "acronym" in name["types"]:
65
+ # The first acronyn goes in acronym field to maintain
66
+ # compatability with existing data structure
67
+ if not acronym:
68
+ acronym = name["value"]
69
+ else:
70
+ aliases.append(name["value"])
71
+ if acronym:
72
+ funder["acronym"] = acronym
73
+ if aliases:
74
+ funder["aliases"] = aliases
75
+
76
+ # ror_display is required and should be in every entry
47
77
  if not funder["name"]:
48
- raise TransformerError(_("Name not found in ROR entry."))
78
+ raise TransformerError(
79
+ _("Name with type ror_display not found in ROR entry.")
80
+ )
49
81
 
50
- country_code = record.get("country", {}).get("country_code")
51
- if country_code:
52
- funder["country"] = country_code
82
+ # This only gets the first location, to maintain compatability
83
+ # with existing data structure
84
+ location = record.get("locations", [{}])[0].get("geonames_details", {})
85
+ funder["country"] = location.get("country_code")
86
+ funder["country_name"] = location.get("country_name")
87
+ funder["location_name"] = location.get("name")
53
88
 
54
- funder["title"] = {"en": funder["name"]}
55
- for label in record.get("labels", []):
56
- funder["title"][label["iso639"]] = label["label"]
89
+ funder["types"] = record.get("types")
90
+
91
+ status = record.get("status")
92
+ funder["status"] = status
57
93
 
58
94
  # The ROR is always listed in identifiers, expected by serialization
59
95
  funder["identifiers"] = [{"identifier": funder["id"], "scheme": "ror"}]
60
96
  valid_schemes = set(funder_schemes.keys())
61
97
  fund_ref = "fundref"
62
98
  valid_schemes.add(fund_ref)
63
- for scheme, identifier in record.get("external_ids", {}).items():
64
- scheme = scheme.lower()
99
+ for identifier in record.get("external_ids"):
100
+ scheme = identifier["type"]
65
101
  if scheme in valid_schemes:
66
102
  value = identifier.get("preferred") or identifier.get("all")[0]
67
103
  if scheme == fund_ref:
68
104
  value = f"{funder_fundref_doi_prefix}/{value}"
69
105
  scheme = "doi"
70
-
71
106
  funder["identifiers"].append(
72
107
  {
73
108
  "identifier": value,
@@ -96,7 +131,7 @@ DATASTREAM_CONFIG = {
96
131
  {
97
132
  "type": "zip",
98
133
  "args": {
99
- "regex": "(?<!_schema_v2)\\.json$",
134
+ "regex": "_schema_v2\\.json$",
100
135
  },
101
136
  },
102
137
  {"type": "json"},
@@ -0,0 +1,62 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "local://funders/funder-v1.0.0.json",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "properties": {
7
+ "$schema": {
8
+ "$ref": "local://definitions-v1.0.0.json#/$schema"
9
+ },
10
+ "country": {
11
+ "type": "string",
12
+ "description": "Represents a funder's origin country as a country code."
13
+ },
14
+ "country_name": {
15
+ "type": "string",
16
+ "description": "Represents a funder's origin country as a full name."
17
+ },
18
+ "location_name": {
19
+ "type": "string",
20
+ "description": "Represents a funder's location name (usually a city)."
21
+ },
22
+ "identifiers": {
23
+ "description": "Alternate identifiers for the record.",
24
+ "type": "array",
25
+ "items": {
26
+ "$ref": "local://definitions-v1.0.0.json#/identifiers_with_scheme"
27
+ },
28
+ "uniqueItems": true
29
+ },
30
+ "name": {
31
+ "type": "string",
32
+ "description": "Funders name."
33
+ },
34
+ "acronym": {
35
+ "type": "string",
36
+ "description": "Acronym for funders name."
37
+ },
38
+ "status": {
39
+ "type": "string",
40
+ "description": "Status of the funder."
41
+ },
42
+ "aliases": {
43
+ "description": "Alternate names for the funder.",
44
+ "type": "array",
45
+ "items": {
46
+ "type": "string"
47
+ },
48
+ "uniqueItems": true
49
+ },
50
+ "types": {
51
+ "description": "Types of funders.",
52
+ "type": "array",
53
+ "items": {
54
+ "type": "string"
55
+ },
56
+ "uniqueItems": true
57
+ },
58
+ "title": {
59
+ "$ref": "local://vocabularies/definitions-v1.0.0.json#/title"
60
+ }
61
+ }
62
+ }
@@ -57,6 +57,24 @@
57
57
  "country": {
58
58
  "type": "text"
59
59
  },
60
+ "country_name": {
61
+ "type": "text"
62
+ },
63
+ "location_name": {
64
+ "type": "text"
65
+ },
66
+ "acronym": {
67
+ "type": "text"
68
+ },
69
+ "status": {
70
+ "type": "keyword"
71
+ },
72
+ "aliases": {
73
+ "type": "text"
74
+ },
75
+ "types": {
76
+ "type": "keyword"
77
+ },
60
78
  "id": {
61
79
  "type": "keyword"
62
80
  },