invenio-vocabularies 4.2.0__tar.gz → 4.4.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-4.4.0/.github/workflows/tests.yml +40 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/CHANGES.rst +10 -0
- {invenio-vocabularies-4.2.0/invenio_vocabularies.egg-info → invenio-vocabularies-4.4.0}/PKG-INFO +12 -1
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/__init__.py +1 -1
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/cli.py +12 -3
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/config.py +13 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/affiliations.py +10 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/datastreams.py +1 -1
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/datastreams.py +1 -1
- invenio-vocabularies-4.4.0/invenio_vocabularies/contrib/names/datastreams.py +288 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/names.py +10 -0
- invenio-vocabularies-4.4.0/invenio_vocabularies/contrib/names/s3client.py +44 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/subjects.py +10 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/datastreams.py +61 -13
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/readers.py +8 -2
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/tasks.py +14 -2
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/writers.py +53 -2
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/custom_fields/subject.py +1 -1
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html +1 -1
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0/invenio_vocabularies.egg-info}/PKG-INFO +12 -1
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies.egg-info/SOURCES.txt +1 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies.egg-info/requires.txt +4 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/setup.cfg +3 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/names/test_names_datastreams.py +38 -3
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/datastreams/conftest.py +8 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/datastreams/test_datastreams.py +10 -9
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/datastreams/test_datastreams_tasks.py +14 -2
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/resources/test_tasks_resources.py +5 -1
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/test_cli.py +1 -2
- invenio-vocabularies-4.2.0/.github/workflows/tests.yml +0 -89
- invenio-vocabularies-4.2.0/invenio_vocabularies/contrib/names/datastreams.py +0 -130
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/.dockerignore +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/.editorconfig +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/.git-blame-ignore-revs +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/.github/workflows/i18n-pull.yml +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/.github/workflows/i18n-push.yml +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/.github/workflows/pypi-publish.yml +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/.tx/config +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/AUTHORS.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/CONTRIBUTING.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/INSTALL.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/LICENSE +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/MANIFEST.in +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/README.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/babel.ini +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/Makefile +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/api.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/authors.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/changes.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/conf.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/configuration.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/contributing.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/index.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/installation.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/license.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/make.bat +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/requirements.txt +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/docs/usage.rst +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/gen-migration.sh +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/administration/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/administration/views/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/administration/views/vocabularies.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/17c703ce1eb7_create_names_table.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/4a9a4fd235f8_create_vocabulary_schemes.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/4f365fced43f_create_vocabularies_tables.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/55a700f897b6_add_names_and_afiliations_pid_column.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/6312f33645c1_create_affiliations_table.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/676dd587542d_create_funders_vocabulary_table.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/8ff82dfb0be8_create_vocabularies_branch.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/alembic/e1146238edd3_create_awards_table.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.eslintrc.yml +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.prettierrc +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/index.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/AwardResults.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/CustomAwardForm.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FunderDropdown.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.test.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingFieldItem.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingModal.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/NoAwardResults.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/index.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/index.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/index.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/index.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next-scanner.config.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/index.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/package.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/compileCatalog.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/scripts/initCatalog.js +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/config.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/facets.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/mappings/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/models.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/resources.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/affiliations/services.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/awards.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/config.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/datastreams.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/mappings/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/models.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/resources.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/serializer.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/awards/services.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/common/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/common/ror/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/common/ror/datastreams.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/config.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/facets.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/funders.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/mappings/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/mappings/v7/funders/funder-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/models.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/resources.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/serializer.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/funders/services.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/config.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/jsonschemas/names/name-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/mappings/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/mappings/os-v1/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/mappings/os-v2/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/models.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/resources.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/names/services.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/config.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/facets.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/mappings/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/models.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/resources.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/contrib/subjects/services.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/errors.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/factories.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/transformers.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/datastreams/xml.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/ext.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/factories.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/fixtures.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/proxies.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/mappings/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/mappings/os-v1/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/mappings/os-v2/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/models.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/pidprovider.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/systemfields/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/systemfields/pid.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/records/systemfields/relations.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/resources/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/resources/config.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/resources/resource.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/resources/schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/resources/serializer.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/components.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/config.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/custom_fields/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/custom_fields/vocabulary.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/facets.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/permissions.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/querystr.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/results.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/service.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/services/tasks.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabularies-list.html +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/af/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/af/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/de_AT/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/de_DE/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/en/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/en/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/en_AT/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/en_HU/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/es_CU/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/es_MX/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/et_EE/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fa_IR/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fr_CI/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/fr_FR/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/gl/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/gl/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/hi_IN/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/hu_HU/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/messages.pot +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ne/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ne/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/rw/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/rw/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/sv_SE/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/uk_UA/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/views.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies/webpack.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies.egg-info/dependency_links.txt +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies.egg-info/entry_points.txt +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies.egg-info/not-zip-safe +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/invenio_vocabularies.egg-info/top_level.txt +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/pyproject.toml +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/requirements-feature.txt +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/run-js-linter.sh +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/run-tests.sh +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/setup.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/affiliations/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/affiliations/test_affiliations_api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/affiliations/test_affiliations_datastreams.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/affiliations/test_affiliations_jsonschema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/affiliations/test_affiliations_resource.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/affiliations/test_affiliations_schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/affiliations/test_affiliations_service.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/awards/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/awards/test_awards_api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/awards/test_awards_datastreams.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/awards/test_awards_jsonschema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/awards/test_awards_resource.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/awards/test_awards_schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/awards/test_awards_service.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/common/ror/test_ror_datastreams.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/funders/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/funders/test_funders_api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/funders/test_funders_datastreams.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/funders/test_funders_jsonschema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/funders/test_funders_resource.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/funders/test_funders_schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/funders/test_funders_service.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/names/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/names/test_names_api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/names/test_names_jsonschema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/names/test_names_resource.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/names/test_names_schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/names/test_names_service.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/subjects/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/subjects/test_subjects_api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/subjects/test_subjects_facets.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/subjects/test_subjects_jsonschema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/subjects/test_subjects_resource.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/subjects/test_subjects_schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/contrib/subjects/test_subjects_service.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/custom_fields/test_custom_fields.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/datastreams/test_fixtures.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/datastreams/test_readers.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/datastreams/test_transformers.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/datastreams/test_writers.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/datastreams/vocabularies.yaml +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/jsonschemas/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/jsonschemas/records/record-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/mappings/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/mappings/v6/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/mappings/v6/records/record-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/mappings/v7/__init__.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/mappings/v7/records/record-v1.0.0.json +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/mock_module/models.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/records/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/records/test_api.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/records/test_jsonschema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/records/test_models.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/records/test_relationship.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/resources/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/resources/test_resources_get.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/resources/test_resources_l10n.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/resources/test_resources_search.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/services/conftest.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/services/test_labels.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/services/test_permissions.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/services/test_schema.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/services/test_service.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/test_alembic.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/test_factory.py +0 -0
- {invenio-vocabularies-4.2.0 → invenio-vocabularies-4.4.0}/tests/test_invenio_vocabularies.py +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# This file is part of Invenio.
|
|
4
|
+
# Copyright (C) 2020-2024 CERN.
|
|
5
|
+
# Copyright (C) 2022 Graz University of Technology.
|
|
6
|
+
#
|
|
7
|
+
# Invenio is free software; you can redistribute it and/or modify it
|
|
8
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
9
|
+
|
|
10
|
+
name: CI
|
|
11
|
+
|
|
12
|
+
on:
|
|
13
|
+
push:
|
|
14
|
+
branches:
|
|
15
|
+
- master
|
|
16
|
+
pull_request:
|
|
17
|
+
branches:
|
|
18
|
+
- master
|
|
19
|
+
- "maint-**"
|
|
20
|
+
schedule:
|
|
21
|
+
# * is a special character in YAML so you have to quote this string
|
|
22
|
+
- cron: "0 3 * * 6"
|
|
23
|
+
workflow_dispatch:
|
|
24
|
+
inputs:
|
|
25
|
+
reason:
|
|
26
|
+
description: "Reason"
|
|
27
|
+
required: false
|
|
28
|
+
default: "Manual trigger"
|
|
29
|
+
|
|
30
|
+
jobs:
|
|
31
|
+
Python:
|
|
32
|
+
uses: inveniosoftware/workflows/.github/workflows/tests-python.yml@master
|
|
33
|
+
with:
|
|
34
|
+
extras: "tests,oaipmh"
|
|
35
|
+
|
|
36
|
+
JS:
|
|
37
|
+
uses: inveniosoftware/workflows/.github/workflows/tests-js.yml@master
|
|
38
|
+
with:
|
|
39
|
+
js-working-directory: ./invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies
|
|
40
|
+
translations-working-directory: ./invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
Changes
|
|
9
9
|
=======
|
|
10
10
|
|
|
11
|
+
Version v4.4.0 (released 2024-08-09)
|
|
12
|
+
|
|
13
|
+
- services: use and adjust vnd.inveniordm.v1+json http accept header
|
|
14
|
+
|
|
15
|
+
Version v4.3.0 (released 2024-08-05)
|
|
16
|
+
|
|
17
|
+
- names: make names_exclude_regex configurable
|
|
18
|
+
- names: validate entry full names
|
|
19
|
+
- names: add orcid public data sync
|
|
20
|
+
|
|
11
21
|
Version v4.2.0 (released 2024-07-24)
|
|
12
22
|
|
|
13
23
|
- ror: check last update; use ld+json for metadata (#367)
|
{invenio-vocabularies-4.2.0/invenio_vocabularies.egg-info → invenio-vocabularies-4.4.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: invenio-vocabularies
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4.0
|
|
4
4
|
Summary: "Invenio module for managing vocabularies."
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-vocabularies
|
|
6
6
|
Author: CERN
|
|
@@ -50,6 +50,16 @@ Description: ..
|
|
|
50
50
|
Changes
|
|
51
51
|
=======
|
|
52
52
|
|
|
53
|
+
Version v4.4.0 (released 2024-08-09)
|
|
54
|
+
|
|
55
|
+
- services: use and adjust vnd.inveniordm.v1+json http accept header
|
|
56
|
+
|
|
57
|
+
Version v4.3.0 (released 2024-08-05)
|
|
58
|
+
|
|
59
|
+
- names: make names_exclude_regex configurable
|
|
60
|
+
- names: validate entry full names
|
|
61
|
+
- names: add orcid public data sync
|
|
62
|
+
|
|
53
63
|
Version v4.2.0 (released 2024-07-24)
|
|
54
64
|
|
|
55
65
|
- ror: check last update; use ld+json for metadata (#367)
|
|
@@ -250,6 +260,7 @@ Keywords: invenio vocabulary management
|
|
|
250
260
|
Platform: any
|
|
251
261
|
Classifier: Development Status :: 5 - Production/Stable
|
|
252
262
|
Requires-Python: >=3.7
|
|
263
|
+
Provides-Extra: s3fs
|
|
253
264
|
Provides-Extra: oaipmh
|
|
254
265
|
Provides-Extra: tests
|
|
255
266
|
Provides-Extra: elasticsearch7
|
|
@@ -142,18 +142,27 @@ def convert(vocabulary, filepath=None, origin=None, target=None, num_samples=Non
|
|
|
142
142
|
type=click.STRING,
|
|
143
143
|
help="Identifier of the vocabulary item to delete.",
|
|
144
144
|
)
|
|
145
|
-
@click.option("--all", is_flag=True, default=False
|
|
145
|
+
@click.option("--all", is_flag=True, default=False)
|
|
146
146
|
@with_appcontext
|
|
147
147
|
def delete(vocabulary, identifier, all):
|
|
148
148
|
"""Delete all items or a specific one of the vocabulary."""
|
|
149
|
-
if not
|
|
149
|
+
if not identifier and not all:
|
|
150
150
|
click.secho("An identifier or the --all flag must be present.", fg="red")
|
|
151
151
|
exit(1)
|
|
152
|
+
|
|
152
153
|
vc = get_vocabulary_config(vocabulary)
|
|
153
154
|
service = vc.get_service()
|
|
154
155
|
if identifier:
|
|
155
156
|
try:
|
|
156
|
-
if service.delete(
|
|
157
|
+
if service.delete(system_identity, identifier):
|
|
157
158
|
click.secho(f"{identifier} deleted from {vocabulary}.", fg="green")
|
|
158
159
|
except (PIDDeletedError, PIDDoesNotExistError):
|
|
159
160
|
click.secho(f"PID {identifier} not found.")
|
|
161
|
+
elif all:
|
|
162
|
+
items = service.scan(system_identity)
|
|
163
|
+
for item in items.hits:
|
|
164
|
+
try:
|
|
165
|
+
if service.delete(system_identity, item["id"]):
|
|
166
|
+
click.secho(f"{item['id']} deleted from {vocabulary}.", fg="green")
|
|
167
|
+
except (PIDDeletedError, PIDDoesNotExistError):
|
|
168
|
+
click.secho(f"PID {item['id']} not found.")
|
|
@@ -155,3 +155,16 @@ VOCABULARIES_TYPES_SEARCH = {
|
|
|
155
155
|
"sort": ["name", "count"],
|
|
156
156
|
}
|
|
157
157
|
"""Vocabulary type search configuration."""
|
|
158
|
+
|
|
159
|
+
VOCABULARIES_ORCID_ACCESS_KEY = "TODO"
|
|
160
|
+
"""ORCID access key to access the s3 bucket."""
|
|
161
|
+
VOCABULARIES_ORCID_SECRET_KEY = "TODO"
|
|
162
|
+
"""ORCID secret key to access the s3 bucket."""
|
|
163
|
+
VOCABULARIES_ORCID_SUMMARIES_BUCKET = "v3.0-summaries"
|
|
164
|
+
"""ORCID summaries bucket name."""
|
|
165
|
+
VOCABULARIES_ORCID_SYNC_MAX_WORKERS = 32
|
|
166
|
+
"""ORCID max number of simultaneous workers/connections."""
|
|
167
|
+
VOCABULARIES_ORCID_SYNC_SINCE = {
|
|
168
|
+
"days": 1,
|
|
169
|
+
}
|
|
170
|
+
"""ORCID time shift to sync. Parameters accepted are the ones passed to 'datetime.timedelta'."""
|
|
@@ -8,11 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
"""Vocabulary affiliations."""
|
|
10
10
|
|
|
11
|
+
from flask_resources import JSONSerializer, ResponseHandler
|
|
11
12
|
from invenio_db import db
|
|
12
13
|
from invenio_records.dumpers import SearchDumper
|
|
13
14
|
from invenio_records.dumpers.indexedat import IndexedAtDumperExt
|
|
14
15
|
from invenio_records_resources.factories.factory import RecordTypeFactory
|
|
15
16
|
from invenio_records_resources.records.systemfields import ModelPIDField
|
|
17
|
+
from invenio_records_resources.resources.records.headers import etag_headers
|
|
16
18
|
|
|
17
19
|
from ...services.permissions import PermissionPolicy
|
|
18
20
|
from .config import AffiliationsSearchOptions, service_components
|
|
@@ -46,4 +48,12 @@ record_type = RecordTypeFactory(
|
|
|
46
48
|
permission_policy_cls=PermissionPolicy,
|
|
47
49
|
# Resource layer
|
|
48
50
|
endpoint_route="/affiliations",
|
|
51
|
+
resource_cls_attrs={
|
|
52
|
+
"response_handlers": {
|
|
53
|
+
"application/json": ResponseHandler(JSONSerializer(), headers=etag_headers),
|
|
54
|
+
"application/vnd.inveniordm.v1+json": ResponseHandler(
|
|
55
|
+
JSONSerializer(), headers=etag_headers
|
|
56
|
+
),
|
|
57
|
+
}
|
|
58
|
+
},
|
|
49
59
|
)
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2021-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
|
+
"""Names datastreams, transformers, writers and readers."""
|
|
10
|
+
|
|
11
|
+
import csv
|
|
12
|
+
import io
|
|
13
|
+
import tarfile
|
|
14
|
+
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
15
|
+
from datetime import timedelta
|
|
16
|
+
|
|
17
|
+
import arrow
|
|
18
|
+
import regex as re
|
|
19
|
+
from flask import current_app
|
|
20
|
+
from invenio_access.permissions import system_identity
|
|
21
|
+
from invenio_records.dictutils import dict_lookup
|
|
22
|
+
|
|
23
|
+
from invenio_vocabularies.contrib.names.s3client import S3OrcidClient
|
|
24
|
+
|
|
25
|
+
from ...datastreams.errors import TransformerError
|
|
26
|
+
from ...datastreams.readers import BaseReader, SimpleHTTPReader
|
|
27
|
+
from ...datastreams.transformers import BaseTransformer
|
|
28
|
+
from ...datastreams.writers import ServiceWriter
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class OrcidDataSyncReader(BaseReader):
|
|
32
|
+
"""ORCiD Data Sync Reader."""
|
|
33
|
+
|
|
34
|
+
def __init__(self, origin=None, mode="r", since=None, *args, **kwargs):
|
|
35
|
+
"""Constructor.
|
|
36
|
+
|
|
37
|
+
:param origin: Data source (e.g. filepath).
|
|
38
|
+
Can be none in case of piped readers.
|
|
39
|
+
"""
|
|
40
|
+
super().__init__(origin=origin, mode=mode, *args, **kwargs)
|
|
41
|
+
self.s3_client = S3OrcidClient()
|
|
42
|
+
self.since = since
|
|
43
|
+
|
|
44
|
+
def _fetch_orcid_data(self, orcid_to_sync, bucket):
|
|
45
|
+
"""Fetches a single ORCiD record from S3."""
|
|
46
|
+
# The ORCiD file key is located in a folder which name corresponds to the last three digits of the ORCiD
|
|
47
|
+
suffix = orcid_to_sync[-3:]
|
|
48
|
+
key = f"{suffix}/{orcid_to_sync}.xml"
|
|
49
|
+
try:
|
|
50
|
+
return self.s3_client.read_file(f"s3://{bucket}/{key}")
|
|
51
|
+
except Exception as e:
|
|
52
|
+
# TODO: log
|
|
53
|
+
return None
|
|
54
|
+
|
|
55
|
+
def _process_lambda_file(self, fileobj):
|
|
56
|
+
"""Process the ORCiD lambda file and returns a list of ORCiDs to sync.
|
|
57
|
+
|
|
58
|
+
The decoded fileobj looks like the following:
|
|
59
|
+
orcid, path, date_created, last_modified
|
|
60
|
+
0000-0001-5109-3700, http://orcid.org/0000-0001-5109-3700, 2014-08-02 15:00:00.000,2021-08-02 15:00:00.000
|
|
61
|
+
|
|
62
|
+
Yield ORCiDs to sync until the last sync date is reached.
|
|
63
|
+
"""
|
|
64
|
+
date_format = "YYYY-MM-DD HH:mm:ss.SSSSSS"
|
|
65
|
+
date_format_no_millis = "YYYY-MM-DD HH:mm:ss"
|
|
66
|
+
time_shift = current_app.config["VOCABULARIES_ORCID_SYNC_SINCE"]
|
|
67
|
+
if self.since:
|
|
68
|
+
time_shift = self.since
|
|
69
|
+
last_sync = arrow.now() - timedelta(**time_shift)
|
|
70
|
+
|
|
71
|
+
file_content = fileobj.read().decode("utf-8")
|
|
72
|
+
|
|
73
|
+
csv_reader = csv.DictReader(file_content.splitlines())
|
|
74
|
+
|
|
75
|
+
for row in csv_reader: # Skip the header line
|
|
76
|
+
orcid = row["orcid"]
|
|
77
|
+
|
|
78
|
+
# Lambda file is ordered by last modified date
|
|
79
|
+
last_modified_str = row["last_modified"]
|
|
80
|
+
try:
|
|
81
|
+
last_modified_date = arrow.get(last_modified_str, date_format)
|
|
82
|
+
except arrow.parser.ParserError:
|
|
83
|
+
last_modified_date = arrow.get(last_modified_str, date_format_no_millis)
|
|
84
|
+
|
|
85
|
+
if last_modified_date < last_sync:
|
|
86
|
+
break
|
|
87
|
+
yield orcid
|
|
88
|
+
|
|
89
|
+
def _iter(self, orcids):
|
|
90
|
+
"""Iterates over the ORCiD records yielding each one."""
|
|
91
|
+
with ThreadPoolExecutor(
|
|
92
|
+
max_workers=current_app.config["VOCABULARIES_ORCID_SYNC_MAX_WORKERS"]
|
|
93
|
+
) as executor:
|
|
94
|
+
futures = [
|
|
95
|
+
executor.submit(
|
|
96
|
+
self._fetch_orcid_data,
|
|
97
|
+
orcid,
|
|
98
|
+
current_app.config["VOCABULARIES_ORCID_SUMMARIES_BUCKET"],
|
|
99
|
+
)
|
|
100
|
+
for orcid in orcids
|
|
101
|
+
]
|
|
102
|
+
for future in as_completed(futures):
|
|
103
|
+
result = future.result()
|
|
104
|
+
if result is not None:
|
|
105
|
+
yield result
|
|
106
|
+
|
|
107
|
+
def read(self, item=None, *args, **kwargs):
|
|
108
|
+
"""Streams the ORCiD lambda file, process it to get the ORCiDS to sync and yields it's data."""
|
|
109
|
+
# Read the file from S3
|
|
110
|
+
tar_content = self.s3_client.read_file(
|
|
111
|
+
"s3://orcid-lambda-file/last_modified.csv.tar"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
orcids_to_sync = []
|
|
115
|
+
# Opens tar file and process it
|
|
116
|
+
with tarfile.open(fileobj=io.BytesIO(tar_content)) as tar:
|
|
117
|
+
# Iterate over each member (file or directory) in the tar file
|
|
118
|
+
for member in tar.getmembers():
|
|
119
|
+
# Extract the file
|
|
120
|
+
extracted_file = tar.extractfile(member)
|
|
121
|
+
if extracted_file:
|
|
122
|
+
# Process the file and get the ORCiDs to sync
|
|
123
|
+
orcids_to_sync.extend(self._process_lambda_file(extracted_file))
|
|
124
|
+
|
|
125
|
+
yield from self._iter(orcids_to_sync)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class OrcidHTTPReader(SimpleHTTPReader):
|
|
129
|
+
"""ORCiD HTTP Reader."""
|
|
130
|
+
|
|
131
|
+
def __init__(self, *args, test_mode=True, **kwargs):
|
|
132
|
+
"""Constructor."""
|
|
133
|
+
if test_mode:
|
|
134
|
+
origin = "https://sandbox.orcid.org/{id}"
|
|
135
|
+
else:
|
|
136
|
+
origin = "https://orcid.org/{id}"
|
|
137
|
+
|
|
138
|
+
super().__init__(origin, *args, **kwargs)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
DEFAULT_NAMES_EXCLUDE_REGEX = r"[\p{P}\p{S}\p{Nd}\p{No}\p{Emoji}--,.()\-']"
|
|
142
|
+
"""Regex to filter out names with punctuations, symbols, decimal numbers and emojis."""
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class OrcidTransformer(BaseTransformer):
|
|
146
|
+
"""Transforms an ORCiD record into a names record."""
|
|
147
|
+
|
|
148
|
+
def __init__(
|
|
149
|
+
self, *args, names_exclude_regex=DEFAULT_NAMES_EXCLUDE_REGEX, **kwargs
|
|
150
|
+
) -> None:
|
|
151
|
+
"""Constructor."""
|
|
152
|
+
self._names_exclude_regex = names_exclude_regex
|
|
153
|
+
super().__init__()
|
|
154
|
+
|
|
155
|
+
def _is_valid_name(self, name):
|
|
156
|
+
"""Check whether the name passes the regex."""
|
|
157
|
+
if not self._names_exclude_regex:
|
|
158
|
+
return True
|
|
159
|
+
return not bool(re.search(self._names_exclude_regex, name, re.UNICODE | re.V1))
|
|
160
|
+
|
|
161
|
+
def apply(self, stream_entry, **kwargs):
|
|
162
|
+
"""Applies the transformation to the stream entry."""
|
|
163
|
+
record = stream_entry.entry
|
|
164
|
+
person = record["person"]
|
|
165
|
+
orcid_id = record["orcid-identifier"]["path"]
|
|
166
|
+
|
|
167
|
+
name = person.get("name")
|
|
168
|
+
if name is None:
|
|
169
|
+
raise TransformerError(f"Name not found in ORCiD entry.")
|
|
170
|
+
if name.get("family-name") is None:
|
|
171
|
+
raise TransformerError(f"Family name not found in ORCiD entry.")
|
|
172
|
+
|
|
173
|
+
if not self._is_valid_name(name["given-names"] + name["family-name"]):
|
|
174
|
+
raise TransformerError(f"Invalid characters in name.")
|
|
175
|
+
|
|
176
|
+
entry = {
|
|
177
|
+
"id": orcid_id,
|
|
178
|
+
"given_name": name.get("given-names"),
|
|
179
|
+
"family_name": name.get("family-name"),
|
|
180
|
+
"identifiers": [{"scheme": "orcid", "identifier": orcid_id}],
|
|
181
|
+
"affiliations": [],
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
try:
|
|
185
|
+
employments = dict_lookup(
|
|
186
|
+
record, "activities-summary.employments.affiliation-group"
|
|
187
|
+
)
|
|
188
|
+
if isinstance(employments, dict):
|
|
189
|
+
employments = [employments]
|
|
190
|
+
history = set()
|
|
191
|
+
for employment in employments:
|
|
192
|
+
terminated = employment["employment-summary"].get("end-date")
|
|
193
|
+
affiliation = dict_lookup(
|
|
194
|
+
employment,
|
|
195
|
+
"employment-summary.organization.name",
|
|
196
|
+
)
|
|
197
|
+
if affiliation not in history and not terminated:
|
|
198
|
+
history.add(affiliation)
|
|
199
|
+
entry["affiliations"].append({"name": affiliation})
|
|
200
|
+
except Exception:
|
|
201
|
+
pass
|
|
202
|
+
|
|
203
|
+
stream_entry.entry = entry
|
|
204
|
+
return stream_entry
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
class NamesServiceWriter(ServiceWriter):
|
|
208
|
+
"""Names service writer."""
|
|
209
|
+
|
|
210
|
+
def __init__(self, *args, **kwargs):
|
|
211
|
+
"""Constructor."""
|
|
212
|
+
service_or_name = kwargs.pop("service_or_name", "names")
|
|
213
|
+
super().__init__(service_or_name=service_or_name, *args, **kwargs)
|
|
214
|
+
|
|
215
|
+
def _entry_id(self, entry):
|
|
216
|
+
"""Get the id from an entry."""
|
|
217
|
+
return entry["id"]
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
VOCABULARIES_DATASTREAM_READERS = {
|
|
221
|
+
"orcid-http": OrcidHTTPReader,
|
|
222
|
+
"orcid-data-sync": OrcidDataSyncReader,
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
VOCABULARIES_DATASTREAM_TRANSFORMERS = {
|
|
227
|
+
"orcid": OrcidTransformer,
|
|
228
|
+
}
|
|
229
|
+
"""ORCiD Data Streams transformers."""
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
VOCABULARIES_DATASTREAM_WRITERS = {
|
|
233
|
+
"names-service": NamesServiceWriter,
|
|
234
|
+
}
|
|
235
|
+
"""ORCiD Data Streams transformers."""
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
DATASTREAM_CONFIG = {
|
|
239
|
+
"readers": [
|
|
240
|
+
{
|
|
241
|
+
"type": "tar",
|
|
242
|
+
"args": {
|
|
243
|
+
"regex": "\\.xml$",
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
{"type": "xml"},
|
|
247
|
+
],
|
|
248
|
+
"transformers": [{"type": "orcid"}],
|
|
249
|
+
"writers": [
|
|
250
|
+
{
|
|
251
|
+
"type": "names-service",
|
|
252
|
+
"args": {
|
|
253
|
+
"identity": system_identity,
|
|
254
|
+
},
|
|
255
|
+
}
|
|
256
|
+
],
|
|
257
|
+
}
|
|
258
|
+
"""ORCiD Data Stream configuration.
|
|
259
|
+
|
|
260
|
+
An origin is required for the reader.
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
# TODO: Used on the jobs and should be set as a "PRESET" (naming to be defined)
|
|
264
|
+
ORCID_PRESET_DATASTREAM_CONFIG = {
|
|
265
|
+
"readers": [
|
|
266
|
+
{
|
|
267
|
+
"type": "orcid-data-sync",
|
|
268
|
+
},
|
|
269
|
+
{"type": "xml"},
|
|
270
|
+
],
|
|
271
|
+
"transformers": [{"type": "orcid"}],
|
|
272
|
+
"writers": [
|
|
273
|
+
{
|
|
274
|
+
"type": "async",
|
|
275
|
+
"args": {
|
|
276
|
+
"writer": {
|
|
277
|
+
"type": "names-service",
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
}
|
|
281
|
+
],
|
|
282
|
+
"batch_size": 1000,
|
|
283
|
+
"write_many": True,
|
|
284
|
+
}
|
|
285
|
+
"""ORCiD Data Stream configuration.
|
|
286
|
+
|
|
287
|
+
An origin is required for the reader.
|
|
288
|
+
"""
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
"""Vocabulary names."""
|
|
10
10
|
|
|
11
|
+
from flask_resources import JSONSerializer, ResponseHandler
|
|
11
12
|
from invenio_db import db
|
|
12
13
|
from invenio_records.dumpers import SearchDumper
|
|
13
14
|
from invenio_records.dumpers.indexedat import IndexedAtDumperExt
|
|
@@ -18,6 +19,7 @@ from invenio_records_resources.records.systemfields import (
|
|
|
18
19
|
ModelPIDField,
|
|
19
20
|
PIDListRelation,
|
|
20
21
|
)
|
|
22
|
+
from invenio_records_resources.resources.records.headers import etag_headers
|
|
21
23
|
|
|
22
24
|
from ...services.permissions import PermissionPolicy
|
|
23
25
|
from ..affiliations.api import Affiliation
|
|
@@ -63,4 +65,12 @@ record_type = RecordTypeFactory(
|
|
|
63
65
|
permission_policy_cls=PermissionPolicy,
|
|
64
66
|
# Resource layer
|
|
65
67
|
endpoint_route="/names",
|
|
68
|
+
resource_cls_attrs={
|
|
69
|
+
"response_handlers": {
|
|
70
|
+
"application/json": ResponseHandler(JSONSerializer(), headers=etag_headers),
|
|
71
|
+
"application/vnd.inveniordm.v1+json": ResponseHandler(
|
|
72
|
+
JSONSerializer(), headers=etag_headers
|
|
73
|
+
),
|
|
74
|
+
}
|
|
75
|
+
},
|
|
66
76
|
)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# This file is part of Invenio.
|
|
4
|
+
# Copyright (C) 2024 CERN.
|
|
5
|
+
#
|
|
6
|
+
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
8
|
+
# details.
|
|
9
|
+
|
|
10
|
+
"""S3 client."""
|
|
11
|
+
|
|
12
|
+
from flask import current_app
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
import s3fs
|
|
16
|
+
except ImportError:
|
|
17
|
+
s3fs = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class S3Client:
|
|
21
|
+
"""S3 client."""
|
|
22
|
+
|
|
23
|
+
def __init__(self, access_key, secret_key):
|
|
24
|
+
"""Constructor."""
|
|
25
|
+
if s3fs is None:
|
|
26
|
+
raise Exception("s3fs is not installed.")
|
|
27
|
+
|
|
28
|
+
self.fs = s3fs.S3FileSystem(key=access_key, secret=secret_key)
|
|
29
|
+
|
|
30
|
+
def read_file(self, s3_path):
|
|
31
|
+
"""Reads a file from S3."""
|
|
32
|
+
with self.fs.open(s3_path, "rb") as f:
|
|
33
|
+
return f.read()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class S3OrcidClient(S3Client):
|
|
37
|
+
"""S3 ORCiD client."""
|
|
38
|
+
|
|
39
|
+
def __init__(self):
|
|
40
|
+
"""Constructor."""
|
|
41
|
+
super().__init__(
|
|
42
|
+
access_key=current_app.config["VOCABULARIES_ORCID_ACCESS_KEY"],
|
|
43
|
+
secret_key=current_app.config["VOCABULARIES_ORCID_SECRET_KEY"],
|
|
44
|
+
)
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
"""Vocabulary subjects."""
|
|
11
11
|
|
|
12
|
+
from flask_resources import JSONSerializer, ResponseHandler
|
|
12
13
|
from invenio_records.dumpers import SearchDumper
|
|
13
14
|
from invenio_records.dumpers.indexedat import IndexedAtDumperExt
|
|
14
15
|
from invenio_records_resources.factories.factory import RecordTypeFactory
|
|
16
|
+
from invenio_records_resources.resources.records.headers import etag_headers
|
|
15
17
|
|
|
16
18
|
from ...records.pidprovider import PIDProviderFactory
|
|
17
19
|
from ...records.systemfields import BaseVocabularyPIDFieldContext
|
|
@@ -42,4 +44,12 @@ record_type = RecordTypeFactory(
|
|
|
42
44
|
permission_policy_cls=PermissionPolicy,
|
|
43
45
|
# Resource layer
|
|
44
46
|
endpoint_route="/subjects",
|
|
47
|
+
resource_cls_attrs={
|
|
48
|
+
"response_handlers": {
|
|
49
|
+
"application/json": ResponseHandler(JSONSerializer(), headers=etag_headers),
|
|
50
|
+
"application/vnd.inveniordm.v1+json": ResponseHandler(
|
|
51
|
+
JSONSerializer(), headers=etag_headers
|
|
52
|
+
),
|
|
53
|
+
}
|
|
54
|
+
},
|
|
45
55
|
)
|