invenio-vocabularies 8.3.0__tar.gz → 9.1.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-8.3.0 → invenio_vocabularies-9.1.0}/CHANGES.rst +9 -1
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/PKG-INFO +11 -3
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/__init__.py +1 -1
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/datastreams.py +11 -4
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/schema.py +5 -3
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/datastreams/datastreams.py +52 -4
- invenio_vocabularies-9.1.0/invenio_vocabularies/datastreams/tasks.py +115 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/datastreams/writers.py +26 -9
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/jobs.py +28 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/tasks.py +3 -1
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies.egg-info/PKG-INFO +11 -3
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies.egg-info/requires.txt +1 -1
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/setup.cfg +1 -1
- invenio_vocabularies-8.3.0/invenio_vocabularies/datastreams/tasks.py +0 -37
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/.dockerignore +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/.editorconfig +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/.git-blame-ignore-revs +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/AUTHORS.rst +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/CONTRIBUTING.rst +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/INSTALL.rst +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/LICENSE +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/MANIFEST.in +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/README.rst +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/babel.ini +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/gen-migration.sh +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/administration/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/administration/views/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/administration/views/vocabularies.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/17c703ce1eb7_create_names_table.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/3ba812d80559_add_internal_name_id.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/4a9a4fd235f8_create_vocabulary_schemes.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/4f365fced43f_create_vocabularies_tables.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/55a700f897b6_add_names_and_afiliations_pid_column.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/6312f33645c1_create_affiliations_table.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/676dd587542d_create_funders_vocabulary_table.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/8ff82dfb0be8_create_vocabularies_branch.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/af2457652217_drop_unique_constraint_from_internal_id.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/e1146238edd3_create_awards_table.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.eslintrc.yml +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/.prettierrc +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/index.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/package.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/AwardResults.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/CustomAwardForm.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FunderDropdown.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingField.test.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingFieldItem.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/FundingModal.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/NoAwardResults.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/Funding/index.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/forms/index.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/contrib/index.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/js/invenio_vocabularies/src/index.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/i18next.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/_generatedTranslations.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ar/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ar/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/bg/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/bg/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ca/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ca/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/cs/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/cs/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/da/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/da/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/de/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/de/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/el/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/el/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/en/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/en/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/es/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/es/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/et/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/et/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fa/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fa/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fr/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/fr/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hr/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hr/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hu/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/hu/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/index.js +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/it/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/it/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ja/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ja/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ka/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ka/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ko/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ko/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/lt/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/lt/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/no/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/no/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pl/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pl/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pt/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/pt/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ro/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ro/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ru/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/ru/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sk/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sk/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sv/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/sv/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/tr/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/tr/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/uk/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/uk/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_CN/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_CN/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_TW/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/messages/zh_TW/translations.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/package.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/assets/semantic-ui/translations/invenio_vocabularies/translations.pot +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/cli.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/config.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/affiliations.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/api.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/config.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/facets.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/jsonschemas/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v1/affiliations/affiliation-v2.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/os-v2/affiliations/affiliation-v2.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/mappings/v7/affiliations/affiliation-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/models.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/resources.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/schema.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/affiliations/services.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/api.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/awards.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/config.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/jsonschemas/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/jsonschemas/awards/award-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/mappings/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/mappings/os-v1/awards/award-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/mappings/os-v2/awards/award-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/mappings/v7/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/mappings/v7/awards/award-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/models.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/resources.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/schema.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/serializer.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/awards/services.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/common/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/common/openaire/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/common/openaire/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/common/ror/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/common/ror/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/api.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/config.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/facets.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/funders.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/jsonschemas/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/jsonschemas/funders/funder-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/os-v1/funders/funder-v2.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/os-v2/funders/funder-v2.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/v7/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/mappings/v7/funders/funder-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/models.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/resources.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/schema.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/serializer.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/funders/services.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/api.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/components.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/config.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/jsonschemas/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/jsonschemas/names/name-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/os-v1/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/os-v1/names/name-v2.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/os-v2/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/os-v2/names/name-v2.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/v7/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/mappings/v7/names/name-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/models.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/names.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/permissions.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/resources.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/s3client.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/names/services.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/api.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/config.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/euroscivoc/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/euroscivoc/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/facets.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/gemet/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/gemet/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/jsonschemas/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/jsonschemas/subjects/subject-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mappings/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mappings/os-v1/subjects/subject-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mappings/os-v2/subjects/subject-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mappings/v7/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mappings/v7/subjects/subject-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mesh/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/mesh/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/models.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/nvs/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/nvs/datastreams.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/resources.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/schema.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/services.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/contrib/subjects/subjects.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/datastreams/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/datastreams/errors.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/datastreams/factories.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/datastreams/readers.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/datastreams/transformers.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/datastreams/xml.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/ext.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/factories.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/fixtures.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/proxies.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/api.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/jsonschemas/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/jsonschemas/vocabularies/definitions-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/jsonschemas/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/mappings/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/mappings/os-v1/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/mappings/os-v2/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/mappings/v7/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/models.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/pidprovider.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/systemfields/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/systemfields/pid.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/records/systemfields/relations.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/resources/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/resources/config.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/resources/resource.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/resources/schema.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/resources/serializer.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/components.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/config.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/custom_fields/__init__.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/custom_fields/subject.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/custom_fields/vocabulary.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/facets.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/generators.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/permissions.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/querystr.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/results.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/schema.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/service.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/subjects.html +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabularies-list.html +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/templates/semantic-ui/invenio_vocabularies/vocabulary-details.html +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ar/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/bg/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ca/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/cs/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/da/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/de/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/el/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/es/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/et/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/fa/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/fr/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/hr/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/hu/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/it/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ja/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ka/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ko/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ko/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/lt/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/messages.pot +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/no/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/pl/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/pt/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ro/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/ru/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/sk/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/sv/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/tr/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/uk/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/translations/zh_TW/LC_MESSAGES/messages.po +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/views.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/webpack.py +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies.egg-info/SOURCES.txt +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies.egg-info/dependency_links.txt +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies.egg-info/entry_points.txt +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies.egg-info/not-zip-safe +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies.egg-info/top_level.txt +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/pyproject.toml +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/requirements-feature.txt +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/run-js-linter.sh +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/run-tests.sh +0 -0
- {invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/setup.py +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
..
|
|
2
|
-
Copyright (C) 2020-
|
|
2
|
+
Copyright (C) 2020-2025 CERN.
|
|
3
3
|
Copyright (C) 2024-2025 Graz University of Technology.
|
|
4
4
|
|
|
5
5
|
Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
@@ -9,6 +9,14 @@
|
|
|
9
9
|
Changes
|
|
10
10
|
=======
|
|
11
11
|
|
|
12
|
+
Version v9.1.0 (released 2025-09-05)
|
|
13
|
+
|
|
14
|
+
- installation: bump major version of invenio-jobs
|
|
15
|
+
|
|
16
|
+
Version v9.0.0 (released 2025-09-05)
|
|
17
|
+
|
|
18
|
+
- setup: bump major version of invenio-jobs
|
|
19
|
+
|
|
12
20
|
Version v8.3.0 (released 2025-07-31)
|
|
13
21
|
|
|
14
22
|
- subjects: Add search scheme field configuration to enable composite and filter query support in subject search functionality
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invenio-vocabularies
|
|
3
|
-
Version:
|
|
3
|
+
Version: 9.1.0
|
|
4
4
|
Summary: Invenio module for managing vocabularies.
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-vocabularies
|
|
6
6
|
Author: CERN
|
|
@@ -15,7 +15,7 @@ License-File: AUTHORS.rst
|
|
|
15
15
|
Requires-Dist: invenio-i18n<4.0.0,>=3.0.0
|
|
16
16
|
Requires-Dist: invenio-records-resources<9.0.0,>=8.0.0
|
|
17
17
|
Requires-Dist: invenio-administration<5.0.0,>=4.0.0
|
|
18
|
-
Requires-Dist: invenio-jobs<
|
|
18
|
+
Requires-Dist: invenio-jobs<7.0.0,>=6.0.0
|
|
19
19
|
Requires-Dist: lxml>=4.5.0
|
|
20
20
|
Requires-Dist: pycountry>=24.0.0
|
|
21
21
|
Requires-Dist: PyYAML>=5.4.1
|
|
@@ -79,7 +79,7 @@ Invenio module for managing vocabularies, based on Invenio-Records and Invenio-R
|
|
|
79
79
|
- Helpers for importing vocabularies
|
|
80
80
|
|
|
81
81
|
..
|
|
82
|
-
Copyright (C) 2020-
|
|
82
|
+
Copyright (C) 2020-2025 CERN.
|
|
83
83
|
Copyright (C) 2024-2025 Graz University of Technology.
|
|
84
84
|
|
|
85
85
|
Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
@@ -89,6 +89,14 @@ Invenio module for managing vocabularies, based on Invenio-Records and Invenio-R
|
|
|
89
89
|
Changes
|
|
90
90
|
=======
|
|
91
91
|
|
|
92
|
+
Version v9.1.0 (released 2025-09-05)
|
|
93
|
+
|
|
94
|
+
- installation: bump major version of invenio-jobs
|
|
95
|
+
|
|
96
|
+
Version v9.0.0 (released 2025-09-05)
|
|
97
|
+
|
|
98
|
+
- setup: bump major version of invenio-jobs
|
|
99
|
+
|
|
92
100
|
Version v8.3.0 (released 2025-07-31)
|
|
93
101
|
|
|
94
102
|
- subjects: Add search scheme field configuration to enable composite and filter query support in subject search functionality
|
|
@@ -69,12 +69,11 @@ class OrcidDataSyncReader(BaseReader):
|
|
|
69
69
|
date_format_no_millis = "%Y-%m-%d %H:%M:%S"
|
|
70
70
|
|
|
71
71
|
if self.since:
|
|
72
|
-
last_sync = datetime.
|
|
72
|
+
last_sync = datetime.strptime(self.since, date_format)
|
|
73
73
|
else:
|
|
74
74
|
last_sync = datetime.now() - timedelta(
|
|
75
75
|
**current_app.config["VOCABULARIES_ORCID_SYNC_SINCE"]
|
|
76
76
|
)
|
|
77
|
-
|
|
78
77
|
try:
|
|
79
78
|
content = io.TextIOWrapper(fileobj, encoding="utf-8")
|
|
80
79
|
csv_reader = csv.DictReader(content)
|
|
@@ -95,7 +94,10 @@ class OrcidDataSyncReader(BaseReader):
|
|
|
95
94
|
|
|
96
95
|
if last_modified_date < last_sync:
|
|
97
96
|
current_app.logger.debug(
|
|
98
|
-
f"Skipping ORCiD {orcid}
|
|
97
|
+
f"Skipping ORCiD {orcid}: last modified {last_modified_date} is older than cutoff {last_sync}"
|
|
98
|
+
)
|
|
99
|
+
current_app.logger.info(
|
|
100
|
+
"Reached cutoff date. No more recent records to process."
|
|
99
101
|
)
|
|
100
102
|
break
|
|
101
103
|
current_app.logger.debug(f"Yielding ORCiD {orcid} for sync.")
|
|
@@ -285,7 +287,12 @@ class OrcidTransformer(BaseTransformer):
|
|
|
285
287
|
f"Family name not found in ORCiD entry for ORCiD ID: {orcid_id}."
|
|
286
288
|
)
|
|
287
289
|
)
|
|
288
|
-
|
|
290
|
+
full_name = " ".join(
|
|
291
|
+
p.strip()
|
|
292
|
+
for p in (given_names, family_name)
|
|
293
|
+
if isinstance(p, str) and p.strip()
|
|
294
|
+
)
|
|
295
|
+
if not self._is_valid_name(full_name):
|
|
289
296
|
errors.append(
|
|
290
297
|
TransformerError(
|
|
291
298
|
f"Invalid characters in name for ORCiD ID: {orcid_id}."
|
|
@@ -80,18 +80,20 @@ class NameSchema(BaseVocabularySchema, ModePIDFieldVocabularyMixin):
|
|
|
80
80
|
|
|
81
81
|
@validates_schema
|
|
82
82
|
def validate_affiliations(self, data, **kwargs):
|
|
83
|
-
"""Validate
|
|
83
|
+
"""Validate and return distinct affiliations."""
|
|
84
84
|
affiliations = data.get("affiliations", [])
|
|
85
85
|
seen_names = set()
|
|
86
86
|
for affiliation in affiliations:
|
|
87
87
|
name = affiliation.get("name")
|
|
88
88
|
if not affiliation.get("id") and name:
|
|
89
89
|
if name in seen_names:
|
|
90
|
-
|
|
91
|
-
raise ValidationError({"affiliations": messages})
|
|
90
|
+
affiliations.remove(affiliation)
|
|
92
91
|
else:
|
|
93
92
|
seen_names.add(name)
|
|
94
93
|
|
|
94
|
+
if affiliations:
|
|
95
|
+
data["affiliations"] = affiliations
|
|
96
|
+
|
|
95
97
|
@post_load
|
|
96
98
|
def update_name(self, data, **kwargs):
|
|
97
99
|
"""Update names for person.
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
"""Base data stream."""
|
|
10
10
|
|
|
11
11
|
from flask import current_app
|
|
12
|
+
from invenio_access.permissions import system_identity, system_user_id
|
|
13
|
+
from invenio_access.utils import get_identity
|
|
14
|
+
from invenio_accounts.proxies import current_datastore
|
|
15
|
+
from invenio_jobs.logging.jobs import EMPTY_JOB_CTX, job_context
|
|
16
|
+
from invenio_jobs.proxies import current_runs_service
|
|
12
17
|
|
|
13
18
|
from .errors import ReaderError, TransformerError, WriterError
|
|
14
19
|
|
|
@@ -78,6 +83,14 @@ class DataStream:
|
|
|
78
83
|
def process_batch(self, batch):
|
|
79
84
|
"""Process a batch of entries."""
|
|
80
85
|
current_app.logger.info(f"Processing batch of size: {len(batch)}")
|
|
86
|
+
if job_context.get() is not EMPTY_JOB_CTX:
|
|
87
|
+
run_id = job_context.get()["run_id"]
|
|
88
|
+
current_runs_service.add_total_entries(
|
|
89
|
+
system_identity,
|
|
90
|
+
run_id=run_id,
|
|
91
|
+
job_id=job_context.get()["job_id"],
|
|
92
|
+
total_entries=len(batch),
|
|
93
|
+
)
|
|
81
94
|
transformed_entries = []
|
|
82
95
|
transformed_entries_with_errors = []
|
|
83
96
|
for stream_entry in batch:
|
|
@@ -168,12 +181,36 @@ class DataStream:
|
|
|
168
181
|
|
|
169
182
|
return stream_entry
|
|
170
183
|
|
|
184
|
+
def _prepare_async_context(self):
|
|
185
|
+
"""Prepare the async context for writers."""
|
|
186
|
+
job_ctx = job_context.get()
|
|
187
|
+
run_id = job_ctx.get("run_id")
|
|
188
|
+
identity_id = job_ctx.get("identity_id")
|
|
189
|
+
job_id = job_ctx.get("job_id")
|
|
190
|
+
# System user needs to be handled separately because it doesn't exist in the database
|
|
191
|
+
if identity_id == system_user_id:
|
|
192
|
+
identity = system_identity
|
|
193
|
+
else:
|
|
194
|
+
user = current_datastore.get_user(identity_id)
|
|
195
|
+
if user is None:
|
|
196
|
+
raise ValueError(f"User with ID:{identity_id} not found.")
|
|
197
|
+
identity = get_identity(user)
|
|
198
|
+
|
|
199
|
+
subtask_run = current_runs_service.create_subtask_run(
|
|
200
|
+
identity, parent_run_id=run_id, job_id=job_id
|
|
201
|
+
)
|
|
202
|
+
return str(subtask_run.id)
|
|
203
|
+
|
|
171
204
|
def write(self, stream_entry, *args, **kwargs):
|
|
172
|
-
"""
|
|
205
|
+
"""Write a single stream entry."""
|
|
173
206
|
current_app.logger.debug(f"Writing entry: {stream_entry.entry}")
|
|
174
207
|
for writer in self._writers:
|
|
175
208
|
try:
|
|
176
|
-
writer.
|
|
209
|
+
if writer.is_async and job_context.get() is not EMPTY_JOB_CTX:
|
|
210
|
+
subtask_run_id = self._prepare_async_context()
|
|
211
|
+
writer.write(stream_entry, subtask_run_id=subtask_run_id)
|
|
212
|
+
else:
|
|
213
|
+
writer.write(stream_entry)
|
|
177
214
|
except WriterError as err:
|
|
178
215
|
current_app.logger.error(f"Writer error: {str(err)}")
|
|
179
216
|
stream_entry.errors.append(f"{writer.__class__.__name__}: {str(err)}")
|
|
@@ -181,10 +218,21 @@ class DataStream:
|
|
|
181
218
|
return stream_entry
|
|
182
219
|
|
|
183
220
|
def batch_write(self, stream_entries, *args, **kwargs):
|
|
184
|
-
"""
|
|
221
|
+
"""Write a batch of stream entries."""
|
|
185
222
|
current_app.logger.debug(f"Batch writing entries: {len(stream_entries)}")
|
|
186
223
|
for writer in self._writers:
|
|
187
|
-
|
|
224
|
+
try:
|
|
225
|
+
if writer.is_async and job_context.get() is not EMPTY_JOB_CTX:
|
|
226
|
+
subtask_run_id = self._prepare_async_context()
|
|
227
|
+
yield from writer.write_many(
|
|
228
|
+
stream_entries, subtask_run_id=subtask_run_id
|
|
229
|
+
)
|
|
230
|
+
else:
|
|
231
|
+
yield from writer.write_many(stream_entries)
|
|
232
|
+
except WriterError as err:
|
|
233
|
+
current_app.logger.error(f"Writer error: {str(err)}")
|
|
234
|
+
for entry in stream_entries:
|
|
235
|
+
entry.errors.append(f"{writer.__class__.__name__}: {str(err)}")
|
|
188
236
|
|
|
189
237
|
def total(self, *args, **kwargs):
|
|
190
238
|
"""The total of entries obtained from the origin."""
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2022-2024 CERN.
|
|
4
|
+
#
|
|
5
|
+
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
|
+
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
7
|
+
# details.
|
|
8
|
+
|
|
9
|
+
"""Data Streams Celery tasks."""
|
|
10
|
+
|
|
11
|
+
from celery import shared_task
|
|
12
|
+
from flask import current_app
|
|
13
|
+
from invenio_access.permissions import system_identity
|
|
14
|
+
from invenio_jobs.logging.jobs import EMPTY_JOB_CTX, job_context
|
|
15
|
+
from invenio_jobs.proxies import current_runs_service
|
|
16
|
+
|
|
17
|
+
from ..datastreams import StreamEntry
|
|
18
|
+
from ..datastreams.factories import WriterFactory
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@shared_task(ignore_result=True)
|
|
22
|
+
def write_entry(writer_config, entry, subtask_run_id=None):
|
|
23
|
+
"""Write an entry.
|
|
24
|
+
|
|
25
|
+
:param writer: writer configuration as accepted by the WriterFactory.
|
|
26
|
+
:param entry: dictionary, StreamEntry is not serializable.
|
|
27
|
+
"""
|
|
28
|
+
job_ctx = job_context.get()
|
|
29
|
+
job_id = job_ctx.get("job_id", None) if job_ctx is not EMPTY_JOB_CTX else None
|
|
30
|
+
if subtask_run_id and job_id:
|
|
31
|
+
subtask_run = current_runs_service.get(
|
|
32
|
+
system_identity, job_id=job_id, run_id=subtask_run_id
|
|
33
|
+
)
|
|
34
|
+
current_runs_service.start_processing_subtask(
|
|
35
|
+
system_identity, subtask_run.id, job_id=job_id
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
writer = WriterFactory.create(config=writer_config)
|
|
39
|
+
try:
|
|
40
|
+
processed_stream_entry = writer.write(StreamEntry(entry))
|
|
41
|
+
errored_entries_count = 1 if processed_stream_entry.errors else 0
|
|
42
|
+
inserted_count = 1 if processed_stream_entry.op_type == "create" else 0
|
|
43
|
+
updated_count = 1 if processed_stream_entry.op_type == "update" else 0
|
|
44
|
+
if subtask_run_id and job_id:
|
|
45
|
+
current_runs_service.finalize_subtask(
|
|
46
|
+
system_identity,
|
|
47
|
+
subtask_run_id,
|
|
48
|
+
job_id,
|
|
49
|
+
success=True if not processed_stream_entry.errors else False,
|
|
50
|
+
errored_entries_count=errored_entries_count,
|
|
51
|
+
inserted_entries_count=inserted_count,
|
|
52
|
+
updated_entries_count=updated_count,
|
|
53
|
+
)
|
|
54
|
+
except Exception as exc:
|
|
55
|
+
current_app.logger.error(f"Error writing entry {entry}: {exc}")
|
|
56
|
+
if subtask_run_id and job_id:
|
|
57
|
+
current_runs_service.finalize_subtask(
|
|
58
|
+
system_identity,
|
|
59
|
+
subtask_run_id,
|
|
60
|
+
job_id,
|
|
61
|
+
success=False,
|
|
62
|
+
errored_entries_count=1,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@shared_task(ignore_result=True)
|
|
67
|
+
def write_many_entry(writer_config, entries, subtask_run_id=None):
|
|
68
|
+
"""Write many entries.
|
|
69
|
+
|
|
70
|
+
:param writer: writer configuration as accepted by the WriterFactory.
|
|
71
|
+
:param entry: lisf ot dictionaries, StreamEntry is not serializable.
|
|
72
|
+
"""
|
|
73
|
+
job_ctx = job_context.get()
|
|
74
|
+
job_id = job_ctx.get("job_id", None) if job_ctx is not EMPTY_JOB_CTX else None
|
|
75
|
+
if subtask_run_id and job_id:
|
|
76
|
+
subtask_run = current_runs_service.get(
|
|
77
|
+
system_identity, job_id=job_id, run_id=subtask_run_id
|
|
78
|
+
)
|
|
79
|
+
current_runs_service.start_processing_subtask(
|
|
80
|
+
system_identity, subtask_run.id, job_id=job_id
|
|
81
|
+
)
|
|
82
|
+
writer = WriterFactory.create(config=writer_config)
|
|
83
|
+
stream_entries = [StreamEntry(entry) for entry in entries]
|
|
84
|
+
try:
|
|
85
|
+
processed_stream_entries = writer.write_many(stream_entries)
|
|
86
|
+
errored_entries_count = sum(
|
|
87
|
+
1 for entry in processed_stream_entries if entry.errors
|
|
88
|
+
)
|
|
89
|
+
inserted_count = sum(
|
|
90
|
+
1 for entry in processed_stream_entries if entry.op_type == "create"
|
|
91
|
+
)
|
|
92
|
+
updated_count = sum(
|
|
93
|
+
1 for entry in processed_stream_entries if entry.op_type == "update"
|
|
94
|
+
)
|
|
95
|
+
if subtask_run_id and job_id:
|
|
96
|
+
current_runs_service.finalize_subtask(
|
|
97
|
+
system_identity,
|
|
98
|
+
subtask_run_id,
|
|
99
|
+
job_id,
|
|
100
|
+
success=True,
|
|
101
|
+
errored_entries_count=errored_entries_count,
|
|
102
|
+
inserted_entries_count=inserted_count,
|
|
103
|
+
updated_entries_count=updated_count,
|
|
104
|
+
)
|
|
105
|
+
except Exception as exc:
|
|
106
|
+
current_app.logger.error(
|
|
107
|
+
f"Error writing entries {entries}: {exc}. The errorred entries count might be incorrect as an entire batch might have failed"
|
|
108
|
+
)
|
|
109
|
+
if subtask_run_id and job_id:
|
|
110
|
+
current_runs_service.finalize_subtask(
|
|
111
|
+
system_identity,
|
|
112
|
+
subtask_run_id,
|
|
113
|
+
job_id,
|
|
114
|
+
success=False,
|
|
115
|
+
)
|
|
@@ -28,6 +28,8 @@ from .tasks import write_entry, write_many_entry
|
|
|
28
28
|
class BaseWriter(ABC):
|
|
29
29
|
"""Base writer."""
|
|
30
30
|
|
|
31
|
+
is_async = False
|
|
32
|
+
|
|
31
33
|
def __init__(self, *args, **kwargs):
|
|
32
34
|
"""Base initialization logic."""
|
|
33
35
|
# Add any base initialization here if needed
|
|
@@ -91,7 +93,9 @@ class ServiceWriter(BaseWriter):
|
|
|
91
93
|
current = self._resolve(vocab_id)
|
|
92
94
|
updated = dict(current.to_dict(), **entry)
|
|
93
95
|
current_app.logger.debug(f"Updating entry with ID: {vocab_id}")
|
|
94
|
-
return StreamEntry(
|
|
96
|
+
return StreamEntry(
|
|
97
|
+
self._service.update(self._identity, vocab_id, updated), op_type="update"
|
|
98
|
+
)
|
|
95
99
|
|
|
96
100
|
def write(self, stream_entry, *args, **kwargs):
|
|
97
101
|
"""Writes the input entry using a given service."""
|
|
@@ -102,7 +106,9 @@ class ServiceWriter(BaseWriter):
|
|
|
102
106
|
if self._insert:
|
|
103
107
|
try:
|
|
104
108
|
current_app.logger.debug("Inserting entry.")
|
|
105
|
-
return StreamEntry(
|
|
109
|
+
return StreamEntry(
|
|
110
|
+
self._service.create(self._identity, entry), op_type="create"
|
|
111
|
+
)
|
|
106
112
|
except PIDAlreadyExists:
|
|
107
113
|
if not self._update:
|
|
108
114
|
raise WriterError([f"Vocabulary entry already exists: {entry}"])
|
|
@@ -182,6 +188,8 @@ class YamlWriter(BaseWriter):
|
|
|
182
188
|
class AsyncWriter(BaseWriter):
|
|
183
189
|
"""Writes the entries asynchronously (celery task)."""
|
|
184
190
|
|
|
191
|
+
is_async = True
|
|
192
|
+
|
|
185
193
|
def __init__(self, writer, *args, **kwargs):
|
|
186
194
|
"""Constructor.
|
|
187
195
|
|
|
@@ -190,16 +198,25 @@ class AsyncWriter(BaseWriter):
|
|
|
190
198
|
super().__init__(*args, **kwargs)
|
|
191
199
|
self._writer = writer
|
|
192
200
|
|
|
193
|
-
def write(self, stream_entry, *args, **kwargs):
|
|
194
|
-
"""Launches a celery task to write an entry."""
|
|
195
|
-
|
|
201
|
+
def write(self, stream_entry, subtask_run_id=None, *args, **kwargs):
|
|
202
|
+
"""Launches a celery task to write an entry with a delay."""
|
|
203
|
+
# Add some delay to avoid processing the tasks too fast
|
|
204
|
+
write_entry.apply_async(
|
|
205
|
+
args=(self._writer, stream_entry.entry, subtask_run_id), countdown=1
|
|
206
|
+
)
|
|
196
207
|
|
|
197
208
|
return stream_entry
|
|
198
209
|
|
|
199
|
-
def write_many(self, stream_entries, *args, **kwargs):
|
|
200
|
-
"""Launches a celery task to write
|
|
201
|
-
|
|
202
|
-
|
|
210
|
+
def write_many(self, stream_entries, subtask_run_id=None, *args, **kwargs):
|
|
211
|
+
"""Launches a celery task to write entries with a delay."""
|
|
212
|
+
# Add some delay to avoid processing the tasks too fast
|
|
213
|
+
write_many_entry.apply_async(
|
|
214
|
+
args=(
|
|
215
|
+
self._writer,
|
|
216
|
+
[stream_entry.entry for stream_entry in stream_entries],
|
|
217
|
+
subtask_run_id,
|
|
218
|
+
),
|
|
219
|
+
countdown=1,
|
|
203
220
|
)
|
|
204
221
|
|
|
205
222
|
return stream_entries
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
"""Jobs module."""
|
|
10
10
|
|
|
11
|
+
from datetime import datetime, timedelta
|
|
12
|
+
|
|
13
|
+
from flask import current_app
|
|
11
14
|
from invenio_i18n import lazy_gettext as _
|
|
12
15
|
from invenio_jobs.jobs import JobType
|
|
13
16
|
|
|
@@ -177,3 +180,28 @@ class ImportORCIDJob(ProcessDataStreamJob):
|
|
|
177
180
|
# It is the responsibility of the reader to handle it or ignore it
|
|
178
181
|
reader["args"] = {**reader.get("args", {}), "since": str(since)}
|
|
179
182
|
return task_args
|
|
183
|
+
|
|
184
|
+
@classmethod
|
|
185
|
+
def _build_task_arguments(cls, job_obj, since=None, custom_args=None, **kwargs):
|
|
186
|
+
"""Build dict of arguments injected on task execution.
|
|
187
|
+
|
|
188
|
+
:param job_obj (Job): the Job object.
|
|
189
|
+
:param since (datetime): last time the job was executed.
|
|
190
|
+
:param custom_args (dict): when provided, takes precedence over any other
|
|
191
|
+
provided argument.
|
|
192
|
+
:return: a dict of arguments to be injected on task execution.
|
|
193
|
+
"""
|
|
194
|
+
if custom_args:
|
|
195
|
+
return custom_args
|
|
196
|
+
|
|
197
|
+
if since is None:
|
|
198
|
+
"""We set since to a time in the past defined by the VOCABULARIES_ORCID_SYNC_SINCE."""
|
|
199
|
+
|
|
200
|
+
since = datetime.now() - timedelta(
|
|
201
|
+
**current_app.config["VOCABULARIES_ORCID_SYNC_SINCE"]
|
|
202
|
+
)
|
|
203
|
+
"""
|
|
204
|
+
Otherwise, since is already specified as a datetime with a timezone (see PredefinedArgsSchema) or we have never
|
|
205
|
+
run the job before so there is no logical value.
|
|
206
|
+
"""
|
|
207
|
+
return {**cls.build_task_arguments(job_obj, since=since, **kwargs)}
|
{invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/services/tasks.py
RENAMED
|
@@ -30,7 +30,9 @@ def process_datastream(config):
|
|
|
30
30
|
for err in result.errors:
|
|
31
31
|
current_app.logger.error(err)
|
|
32
32
|
entries_with_errors += 1
|
|
33
|
+
|
|
33
34
|
if entries_with_errors:
|
|
34
35
|
raise TaskExecutionPartialError(
|
|
35
|
-
message=f"Task execution succeeded with {entries_with_errors} entries with errors."
|
|
36
|
+
message=f"Task execution succeeded with {entries_with_errors} entries with errors.",
|
|
37
|
+
errored_entries_count=entries_with_errors,
|
|
36
38
|
)
|
{invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invenio-vocabularies
|
|
3
|
-
Version:
|
|
3
|
+
Version: 9.1.0
|
|
4
4
|
Summary: Invenio module for managing vocabularies.
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-vocabularies
|
|
6
6
|
Author: CERN
|
|
@@ -15,7 +15,7 @@ License-File: AUTHORS.rst
|
|
|
15
15
|
Requires-Dist: invenio-i18n<4.0.0,>=3.0.0
|
|
16
16
|
Requires-Dist: invenio-records-resources<9.0.0,>=8.0.0
|
|
17
17
|
Requires-Dist: invenio-administration<5.0.0,>=4.0.0
|
|
18
|
-
Requires-Dist: invenio-jobs<
|
|
18
|
+
Requires-Dist: invenio-jobs<7.0.0,>=6.0.0
|
|
19
19
|
Requires-Dist: lxml>=4.5.0
|
|
20
20
|
Requires-Dist: pycountry>=24.0.0
|
|
21
21
|
Requires-Dist: PyYAML>=5.4.1
|
|
@@ -79,7 +79,7 @@ Invenio module for managing vocabularies, based on Invenio-Records and Invenio-R
|
|
|
79
79
|
- Helpers for importing vocabularies
|
|
80
80
|
|
|
81
81
|
..
|
|
82
|
-
Copyright (C) 2020-
|
|
82
|
+
Copyright (C) 2020-2025 CERN.
|
|
83
83
|
Copyright (C) 2024-2025 Graz University of Technology.
|
|
84
84
|
|
|
85
85
|
Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
@@ -89,6 +89,14 @@ Invenio module for managing vocabularies, based on Invenio-Records and Invenio-R
|
|
|
89
89
|
Changes
|
|
90
90
|
=======
|
|
91
91
|
|
|
92
|
+
Version v9.1.0 (released 2025-09-05)
|
|
93
|
+
|
|
94
|
+
- installation: bump major version of invenio-jobs
|
|
95
|
+
|
|
96
|
+
Version v9.0.0 (released 2025-09-05)
|
|
97
|
+
|
|
98
|
+
- setup: bump major version of invenio-jobs
|
|
99
|
+
|
|
92
100
|
Version v8.3.0 (released 2025-07-31)
|
|
93
101
|
|
|
94
102
|
- subjects: Add search scheme field configuration to enable composite and filter query support in subject search functionality
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2022-2024 CERN.
|
|
4
|
-
#
|
|
5
|
-
# Invenio-Vocabularies is free software; you can redistribute it and/or
|
|
6
|
-
# modify it under the terms of the MIT License; see LICENSE file for more
|
|
7
|
-
# details.
|
|
8
|
-
|
|
9
|
-
"""Data Streams Celery tasks."""
|
|
10
|
-
|
|
11
|
-
from celery import shared_task
|
|
12
|
-
|
|
13
|
-
from ..datastreams import StreamEntry
|
|
14
|
-
from ..datastreams.factories import WriterFactory
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
@shared_task(ignore_result=True)
|
|
18
|
-
def write_entry(writer_config, entry):
|
|
19
|
-
"""Write an entry.
|
|
20
|
-
|
|
21
|
-
:param writer: writer configuration as accepted by the WriterFactory.
|
|
22
|
-
:param entry: dictionary, StreamEntry is not serializable.
|
|
23
|
-
"""
|
|
24
|
-
writer = WriterFactory.create(config=writer_config)
|
|
25
|
-
writer.write(StreamEntry(entry))
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
@shared_task(ignore_result=True)
|
|
29
|
-
def write_many_entry(writer_config, entries):
|
|
30
|
-
"""Write many entries.
|
|
31
|
-
|
|
32
|
-
:param writer: writer configuration as accepted by the WriterFactory.
|
|
33
|
-
:param entry: lisf ot dictionaries, StreamEntry is not serializable.
|
|
34
|
-
"""
|
|
35
|
-
writer = WriterFactory.create(config=writer_config)
|
|
36
|
-
stream_entries = [StreamEntry(entry) for entry in entries]
|
|
37
|
-
writer.write_many(stream_entries)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{invenio_vocabularies-8.3.0 → invenio_vocabularies-9.1.0}/invenio_vocabularies/alembic/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|