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.
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/CHANGES.rst +9 -4
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/PKG-INFO +9 -4
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/__init__.py +1 -1
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/cli.py +10 -39
- invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/awards/datastreams.py +215 -0
- invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/common/__init__.py +9 -0
- invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/common/ror/__init__.py +9 -0
- invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/common/ror/datastreams.py +66 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/config.py +2 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/datastreams.py +47 -12
- invenio-vocabularies-4.0.0/invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +62 -0
- {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
- {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
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/schema.py +8 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/readers.py +12 -3
- invenio-vocabularies-4.0.0/invenio_vocabularies/factories.py +78 -0
- invenio-vocabularies-4.0.0/invenio_vocabularies/services/tasks.py +58 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/PKG-INFO +9 -4
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/SOURCES.txt +6 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/entry_points.txt +3 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/requires.txt +1 -1
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/setup.cfg +3 -1
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_datastreams.py +126 -3
- invenio-vocabularies-4.0.0/tests/contrib/common/ror/test_ror_datastreams.py +122 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/conftest.py +9 -2
- invenio-vocabularies-4.0.0/tests/contrib/funders/test_funders_datastreams.py +219 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_readers.py +53 -1
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/test_cli.py +5 -2
- invenio-vocabularies-4.0.0/tests/test_factory.py +70 -0
- invenio-vocabularies-3.4.1/invenio_vocabularies/contrib/awards/datastreams.py +0 -128
- invenio-vocabularies-3.4.1/invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +0 -30
- invenio-vocabularies-3.4.1/invenio_vocabularies/services/tasks.py +0 -28
- invenio-vocabularies-3.4.1/tests/contrib/funders/test_funders_datastreams.py +0 -138
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.dockerignore +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.editorconfig +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.git-blame-ignore-revs +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.github/workflows/i18n-pull.yml +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.github/workflows/i18n-push.yml +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.github/workflows/pypi-publish.yml +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.github/workflows/tests.yml +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/.tx/config +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/AUTHORS.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/CONTRIBUTING.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/INSTALL.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/LICENSE +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/MANIFEST.in +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/README.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/babel.ini +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/Makefile +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/api.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/authors.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/changes.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/conf.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/configuration.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/contributing.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/index.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/installation.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/license.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/make.bat +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/requirements.txt +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/docs/usage.rst +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/gen-migration.sh +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/17c703ce1eb7_create_names_table.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/4a9a4fd235f8_create_vocabulary_schemes.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/4f365fced43f_create_vocabularies_tables.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/55a700f897b6_add_names_and_afiliations_pid_column.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/6312f33645c1_create_affiliations_table.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/676dd587542d_create_funders_vocabulary_table.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/8ff82dfb0be8_create_vocabularies_branch.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/alembic/e1146238edd3_create_awards_table.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.eslintrc.yml +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.prettierrc +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/index.js +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/index.js +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/index.js +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next-scanner.config.js +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next.js +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/index.js +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/package.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/compileCatalog.js +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/initCatalog.js +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/config.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/affiliations.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/config.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/facets.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/__init__.py +0 -0
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/__init__.py +0 -0
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/models.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/resources.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/affiliations/services.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/awards.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/config.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/__init__.py +0 -0
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/__init__.py +0 -0
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/models.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/resources.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/serializer.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/awards/services.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/facets.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/funders.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/mappings/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/models.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/resources.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/serializer.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/funders/services.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/config.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/datastreams.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/jsonschemas/names/name-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/os-v1/__init__.py +0 -0
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/os-v2/__init__.py +0 -0
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/models.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/names.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/resources.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/names/services.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/config.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/facets.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py +0 -0
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py +0 -0
- {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
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/models.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/resources.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/services.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/contrib/subjects/subjects.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/datastreams.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/errors.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/factories.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/transformers.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/writers.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/datastreams/xml.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/ext.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/fixtures.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/proxies.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/os-v1/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/os-v2/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/models.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/pidprovider.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/systemfields/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/systemfields/pid.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/records/systemfields/relations.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/resources/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/resources/resource.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/resources/schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/resources/serializer.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/components.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/custom_fields/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/custom_fields/subject.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/custom_fields/vocabulary.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/facets.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/permissions.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/querystr.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/services/service.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/af/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/af/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/gl/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/gl/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/messages.pot +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ne/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ne/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/rw/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/rw/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/views.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies/webpack.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/dependency_links.txt +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/not-zip-safe +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/invenio_vocabularies.egg-info/top_level.txt +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/pyproject.toml +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/requirements-feature.txt +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/run-js-linter.sh +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/run-tests.sh +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/setup.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_jsonschema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_resource.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/affiliations/test_affiliations_service.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_jsonschema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_resource.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/awards/test_awards_service.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_jsonschema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_resource.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/funders/test_funders_service.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_datastreams.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_jsonschema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_resource.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/names/test_names_service.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_facets.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_jsonschema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_resource.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/contrib/subjects/test_subjects_service.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/custom_fields/test_custom_fields.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_datastreams.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_fixtures.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_transformers.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/test_writers.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/datastreams/vocabularies.yaml +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/jsonschemas/records/record-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/v6/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/v6/records/record-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/mappings/v7/records/record-v1.0.0.json +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/mock_module/models.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/test_api.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/test_jsonschema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/test_models.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/records/test_relationship.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/test_resources_get.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/test_resources_l10n.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/test_resources_search.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/resources/test_tasks_resources.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/conftest.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/test_labels.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/test_permissions.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/test_schema.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/services/test_service.py +0 -0
- {invenio-vocabularies-3.4.1 → invenio-vocabularies-4.0.0}/tests/test_alembic.py +0 -0
- {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
|
|
12
|
-
|
|
13
|
-
-
|
|
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
|
+
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
|
|
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
|
|
|
@@ -28,8 +28,8 @@ function CustomAwardForm({ deserializeFunder, selectedFunding }) {
|
|
|
28
28
|
funderPID = funderItem.id;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
if (funderItem.
|
|
32
|
-
funderCountry = funderItem.
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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,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
|
+
}
|
|
@@ -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
|
-
|
|
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(
|
|
78
|
+
raise TransformerError(
|
|
79
|
+
_("Name with type ror_display not found in ROR entry.")
|
|
80
|
+
)
|
|
49
81
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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["
|
|
55
|
-
|
|
56
|
-
|
|
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
|
|
64
|
-
scheme =
|
|
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": "
|
|
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
|
},
|