invenio-app-ils 7.0.0__tar.gz → 7.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.
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/CHANGES.rst +7 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/PKG-INFO +8 -1
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/__init__.py +1 -1
- invenio_app_ils-7.1.0/invenio_app_ils/acquisition/indexer.py +72 -0
- {invenio_app_ils-7.0.0/invenio_app_ils/acquisition/mappings/v7 → invenio_app_ils-7.1.0/invenio_app_ils/acquisition/mappings/os-v2}/acq_orders/order-v1.0.0.json +5 -0
- invenio_app_ils-7.1.0/invenio_app_ils/acquisition/stats/__init__.py +8 -0
- invenio_app_ils-7.1.0/invenio_app_ils/acquisition/stats/views.py +82 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/indexer.py +2 -0
- invenio_app_ils-7.1.0/invenio_app_ils/circulation/stats/api.py +51 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/stats/views.py +14 -29
- invenio_app_ils-7.1.0/invenio_app_ils/document_requests/indexer.py +121 -0
- {invenio_app_ils-7.0.0/invenio_app_ils/document_requests/mappings/v7 → invenio_app_ils-7.1.0/invenio_app_ils/document_requests/mappings/os-v2}/document_requests/document_request-v1.0.0.json +5 -0
- invenio_app_ils-7.1.0/invenio_app_ils/document_requests/stats/__init__.py +8 -0
- invenio_app_ils-7.1.0/invenio_app_ils/document_requests/stats/views.py +85 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ext.py +49 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/permissions.py +2 -0
- invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/__init__.py +18 -0
- {invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats → invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram}/api.py +8 -50
- {invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats → invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram}/schemas.py +10 -28
- invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/serializers/__init__.py +18 -0
- {invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats → invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram}/serializers/response.py +3 -4
- {invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats → invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram}/serializers/schema.py +1 -1
- invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/views.py +34 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/PKG-INFO +8 -1
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/SOURCES.txt +12 -4
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/entry_points.txt +2 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/setup.cfg +2 -0
- invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats/serializers/__init__.py +0 -13
- invenio_app_ils-7.0.0/invenio_app_ils/document_requests/indexer.py +0 -47
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/.editorconfig +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/.git-blame-ignore-revs +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/AUTHORS.rst +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/CONTRIBUTING.rst +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/INSTALL.rst +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/LICENSE +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/MANIFEST.in +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/README.rst +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/backend/Dockerfile +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/Dockerfile +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/conf.d/default.conf +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/nginx.conf +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/test.crt +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/test.key +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/lb/Dockerfile +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/lb/haproxy.cfg +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/lb/haproxy_cert.pem +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker-compose.full.yml +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker-compose.yml +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker-services.yml +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/config.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/errors.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/ext.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/order_order_lines.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/order_provider.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/jsonschemas/order.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v1/acq_orders/order-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0/invenio_app_ils/acquisition/mappings/os-v2 → invenio_app_ils-7.1.0/invenio_app_ils/acquisition/mappings/v7}/acq_orders/order-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/proxies.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/schemas/acq_orders/order-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/assets/semantic-ui/less/theme.config +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/assets/semantic-ui/templates/.gitkeep +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/config.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/errors.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/jsonresolvers/loan.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/base.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/bulk_extend.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_checkout.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_self_checkout.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_update_dates.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/messages.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/tasks.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/receivers.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/csv.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/custom_fields.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/json.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/response.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/stats/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/tasks.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/bulk_extend.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/cancel.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkin.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkout.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/extend.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/overdue_reminder.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request_no_items.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/self_checkout.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/update_dates.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/will_expire_in_reminder.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/transitions/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/transitions/transitions.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/utils.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/cli.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/response.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/schema.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/tasks.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/config.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/demo_data/documents.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/demo_data/items.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_document.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_patron.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_decline.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_document.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_provider.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v1/document_requests/document_request-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0/invenio_app_ils/document_requests/mappings/os-v2 → invenio_app_ils-7.1.0/invenio_app_ils/document_requests/mappings/v7}/document_requests/document_request-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/messages.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/schemas/document_requests/document_request-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_accept.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_in_catalog.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_not_found.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_other.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_user_cancel.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_circulation.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_eitem.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_item.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_relations.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_stock.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/jsonschemas/document.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/documents/document-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/documents/document-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/documents/document-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/documents/document-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/utils.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/eitem_document.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/eitem_files.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/jsonschemas/eitems.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v3.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v3.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v3.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v3.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/errors.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/facets.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/fetchers.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/files/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/files/receivers.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/files/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/config.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/errors.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/ext.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_document.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_patron.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_provider.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/borrowing_request.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_actions.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_extension_actions.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v1/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v2/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/v7/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/messages.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/proxies.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/schemas/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/csv.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/custom_fields.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/json.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_accept.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_decline.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_request.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/jsonresolvers/internal_location.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/internal_location.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v1/internal_locations/internal_location-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v2/internal_locations/internal_location-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/v7/internal_locations/internal_location-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/schemas/internal_locations/internal_location-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_document.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_internal_location.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_loan.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/jsonschemas/items.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/items/item-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/items/item-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/items/item-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/items/item-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/items/item-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/items/item-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/items/item-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/items/item-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/serializers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/serializers/item.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/covers_builder.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/csv.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/custom_fields.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/json.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/jsonschemas/location.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v1/locations/location-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v2/locations/location-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/v7/locations/location-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/receivers.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/schemas/locations/location-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/minters.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/backends/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/backends/mail.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/messages.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/models.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/tasks.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/anonymization.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/cli.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v1/patrons/patron-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v2/patrons/patron-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/v7/patrons/patron-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/config.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/errors.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/ext.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/jsonschemas/provider.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v1/providers/provider-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v2/providers/provider-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/v7/providers/provider-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/proxies.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/schemas/providers/provider-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/proxies.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/jsonresolvers/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/listeners.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/changed_by.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/identifiers.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/preserve_cover_metadata.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/price.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/metadata_extensions.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/permissions.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/receivers.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/schemas/json.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/serializers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/retriever.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/nodes.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/search_permissions.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/jsonresolvers/series_relations.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/jsonschemas/series.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/series/series-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/series/series-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/series/series-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/series/series-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/series/series-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/series/series-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/series/series-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/series/series-v2.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/signals.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/static/images/placeholder.png +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/static_pages/search_guide.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/aggr-file-download-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/aggr-file-download-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/aggr-file-download-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/event_builders.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v1/file-download-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v2/file-download-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/v7/file-download-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/processors.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/ils_record_changes/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/aggr-ils-record-changes-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/loan_transitions/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/loan_transitions/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/loan_transitions/os-v2/aggr-loan-transitions-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/ils-record-changes-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/loan_transitions/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/loan_transitions/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/loan_transitions/os-v2/loan-transitions-v1.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/invenio_app_ils/mail/footer.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/invenio_app_ils/notifications/footer.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/logged_out.html +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/translations/.gitkeep +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/views.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/api.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/cli.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_mediums.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_order_line_payment_modes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_order_line_purchase_types.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_payment_modes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_recipients.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/affiliation_identifier_schemes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/alternative_identifier_schemes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/alternative_title_types.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_identifier_schemes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_roles.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_types.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/conference_identifier_schemes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/countries.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/currencies.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/docreq_payment_method.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/docreq_request_type.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_identifiers_materials.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_requests_mediums.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_subjects.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/eitem_sources.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/identifier_schemes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/ill_item_types.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/ill_payment_modes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/item_mediums.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/provider_types.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/series_identifier_schemes.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/series_url_access_restrictions.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/tags.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/indexer.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/jsonresolvers/licenses.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/schemas/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/schemas/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/search.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/__init__.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/base.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/json.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/opendefinition.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/webpack.py +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/dependency_links.txt +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/not-zip-safe +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/requires.txt +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/top_level.txt +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/pyproject.toml +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/run-tests.sh +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/bootstrap +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/build_assets +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/celery +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/console +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/server +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/setup +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/update +0 -0
- {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/setup.py +0 -0
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
Changes
|
|
9
9
|
=======
|
|
10
10
|
|
|
11
|
+
Version 7.1.0 (released 2026-01-22)
|
|
12
|
+
|
|
13
|
+
- stats: add document request stats endpoint and extend document request index
|
|
14
|
+
- stats: fix Schema using deserialize to validate
|
|
15
|
+
- stats: add order stats endpoint and extend orders index
|
|
16
|
+
- stats: turn loan histogram endpoint into reusable component
|
|
17
|
+
|
|
11
18
|
Version 7.0.0 (released 2026-01-06)
|
|
12
19
|
|
|
13
20
|
- stats: generalize stat tracking loan extensions to track all transitions
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invenio-app-ils
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.1.0
|
|
4
4
|
Summary: Invenio Integrated Library System.
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-app-ils
|
|
6
6
|
Author: CERN
|
|
@@ -103,6 +103,13 @@ https://invenioils.docs.cern.ch
|
|
|
103
103
|
Changes
|
|
104
104
|
=======
|
|
105
105
|
|
|
106
|
+
Version 7.1.0 (released 2026-01-22)
|
|
107
|
+
|
|
108
|
+
- stats: add document request stats endpoint and extend document request index
|
|
109
|
+
- stats: fix Schema using deserialize to validate
|
|
110
|
+
- stats: add order stats endpoint and extend orders index
|
|
111
|
+
- stats: turn loan histogram endpoint into reusable component
|
|
112
|
+
|
|
106
113
|
Version 7.0.0 (released 2026-01-06)
|
|
107
114
|
|
|
108
115
|
- stats: generalize stat tracking loan extensions to track all transitions
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2025 CERN.
|
|
4
|
+
#
|
|
5
|
+
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
7
|
+
|
|
8
|
+
"""Order indexer APIs."""
|
|
9
|
+
|
|
10
|
+
from datetime import datetime
|
|
11
|
+
|
|
12
|
+
from invenio_search import current_search_client
|
|
13
|
+
|
|
14
|
+
from invenio_app_ils.acquisition.api import ORDER_PID_TYPE
|
|
15
|
+
from invenio_app_ils.proxies import current_app_ils
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def index_stats_fields_for_order(order_dict):
|
|
19
|
+
"""Indexer hook to modify the order record dict before indexing."""
|
|
20
|
+
|
|
21
|
+
# This is done through the hook and not through an indexer class,
|
|
22
|
+
# as we need access to the `_created` field
|
|
23
|
+
|
|
24
|
+
# Only calculate stats if order is received
|
|
25
|
+
if not order_dict.get("received_date"):
|
|
26
|
+
return
|
|
27
|
+
|
|
28
|
+
stats = {}
|
|
29
|
+
|
|
30
|
+
received_date = datetime.fromisoformat(order_dict["received_date"]).date()
|
|
31
|
+
creation_date = datetime.fromisoformat(order_dict["_created"]).date()
|
|
32
|
+
|
|
33
|
+
# Calculate order_processing_time
|
|
34
|
+
order_processing_time = (received_date - creation_date).days
|
|
35
|
+
stats["order_processing_time"] = order_processing_time if order_processing_time >= 0 else None
|
|
36
|
+
|
|
37
|
+
# Find related document request if any
|
|
38
|
+
order_pid = order_dict.get("pid")
|
|
39
|
+
if order_pid:
|
|
40
|
+
doc_req_search_cls = current_app_ils.document_request_search_cls
|
|
41
|
+
search_body = {
|
|
42
|
+
"query": {
|
|
43
|
+
"bool": {
|
|
44
|
+
"must": [
|
|
45
|
+
{"term": {"physical_item_provider.pid": order_pid}},
|
|
46
|
+
{"term": {"physical_item_provider.pid_type": ORDER_PID_TYPE}},
|
|
47
|
+
],
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"size": 1,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
search_result = current_search_client.search(
|
|
54
|
+
index=doc_req_search_cls.Meta.index, body=search_body
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
hits = search_result["hits"]["hits"]
|
|
58
|
+
if len(hits) > 0:
|
|
59
|
+
doc_request = hits[0]["_source"]
|
|
60
|
+
doc_req_creation_date = datetime.fromisoformat(
|
|
61
|
+
doc_request["_created"]
|
|
62
|
+
).date()
|
|
63
|
+
|
|
64
|
+
order_dict["doc_request"] = {}
|
|
65
|
+
|
|
66
|
+
# Calculate document_request_waiting_time
|
|
67
|
+
waiting_time = (received_date - doc_req_creation_date).days
|
|
68
|
+
stats["document_request_waiting_time"] = (
|
|
69
|
+
waiting_time if waiting_time >= 0 else None
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
order_dict["stats"] = stats
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2025 CERN.
|
|
4
|
+
#
|
|
5
|
+
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
7
|
+
|
|
8
|
+
"""Invenio App ILS acquisition stats module."""
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2025 CERN.
|
|
4
|
+
#
|
|
5
|
+
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
7
|
+
|
|
8
|
+
"""Invenio App ILS acquisition stats views."""
|
|
9
|
+
|
|
10
|
+
from flask import Blueprint, request
|
|
11
|
+
from invenio_records_rest.query import default_search_factory
|
|
12
|
+
from invenio_rest import ContentNegotiatedMethodView
|
|
13
|
+
from marshmallow.exceptions import ValidationError
|
|
14
|
+
|
|
15
|
+
from invenio_app_ils.acquisition.api import ORDER_PID_TYPE
|
|
16
|
+
from invenio_app_ils.acquisition.proxies import current_ils_acq
|
|
17
|
+
from invenio_app_ils.errors import InvalidParameterError
|
|
18
|
+
from invenio_app_ils.permissions import need_permissions
|
|
19
|
+
from invenio_app_ils.stats.histogram import (
|
|
20
|
+
HistogramParamsSchema,
|
|
21
|
+
create_histogram_view,
|
|
22
|
+
get_record_statistics,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def create_acquisition_stats_blueprint(app):
|
|
27
|
+
"""Add statistics views to the blueprint."""
|
|
28
|
+
blueprint = Blueprint("invenio_app_ils_acquisition_stats", __name__, url_prefix="")
|
|
29
|
+
|
|
30
|
+
create_histogram_view(
|
|
31
|
+
blueprint, app, ORDER_PID_TYPE, OrderHistogramResource, "/acquisition"
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
return blueprint
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class OrderHistogramResource(ContentNegotiatedMethodView):
|
|
38
|
+
"""Order stats resource."""
|
|
39
|
+
|
|
40
|
+
view_name = "order_histogram"
|
|
41
|
+
|
|
42
|
+
def __init__(self, serializers, ctx, *args, **kwargs):
|
|
43
|
+
"""Constructor."""
|
|
44
|
+
super().__init__(serializers, *args, **kwargs)
|
|
45
|
+
for key, value in ctx.items():
|
|
46
|
+
setattr(self, key, value)
|
|
47
|
+
|
|
48
|
+
@need_permissions("stats-orders")
|
|
49
|
+
def get(self, **kwargs):
|
|
50
|
+
"""Get order statistics."""
|
|
51
|
+
|
|
52
|
+
order_date_fields = [
|
|
53
|
+
"order_date",
|
|
54
|
+
"expected_delivery_date",
|
|
55
|
+
"received_date",
|
|
56
|
+
"_created",
|
|
57
|
+
"_updated",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
schema = HistogramParamsSchema(order_date_fields)
|
|
61
|
+
try:
|
|
62
|
+
parsed_args = schema.load(request.args.to_dict())
|
|
63
|
+
except ValidationError as e:
|
|
64
|
+
raise InvalidParameterError(description=e.messages) from e
|
|
65
|
+
|
|
66
|
+
# Construct search to allow for filtering with the q parameter
|
|
67
|
+
search_cls = current_ils_acq.order_search_cls
|
|
68
|
+
search = search_cls()
|
|
69
|
+
search, _ = default_search_factory(self, search)
|
|
70
|
+
|
|
71
|
+
aggregation_buckets = get_record_statistics(
|
|
72
|
+
order_date_fields,
|
|
73
|
+
search,
|
|
74
|
+
parsed_args["group_by"],
|
|
75
|
+
parsed_args["metrics"],
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
response = {
|
|
79
|
+
"buckets": aggregation_buckets,
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return self.make_response(response, 200)
|
|
@@ -164,6 +164,8 @@ def index_stats_fields_for_loan(loan_dict):
|
|
|
164
164
|
)
|
|
165
165
|
|
|
166
166
|
|
|
167
|
+
# Make use of the `extra_data` property as loans are part of `invenio-circulation`,
|
|
168
|
+
# which do not expose the `stats` property directly
|
|
167
169
|
if not "extra_data" in loan_dict:
|
|
168
170
|
loan_dict["extra_data"] = {}
|
|
169
171
|
loan_dict["extra_data"]["stats"] = stats
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2019-2025 CERN.
|
|
4
|
+
#
|
|
5
|
+
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
7
|
+
|
|
8
|
+
"""APIs for ILS circulation statistics."""
|
|
9
|
+
|
|
10
|
+
from invenio_app_ils.circulation.search import get_most_loaned_documents
|
|
11
|
+
from invenio_app_ils.proxies import current_app_ils
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def fetch_most_loaned_documents(from_date, to_date, bucket_size):
|
|
15
|
+
"""Fetch the documents with the most loans within the date interval."""
|
|
16
|
+
# Create loans aggregation
|
|
17
|
+
most_loaned = get_most_loaned_documents(from_date, to_date, bucket_size)
|
|
18
|
+
|
|
19
|
+
# Prepare the loan and extension count
|
|
20
|
+
document_pids = []
|
|
21
|
+
document_metadata = {}
|
|
22
|
+
loan_result = most_loaned.execute()
|
|
23
|
+
for bucket in loan_result.aggregations.most_loaned_documents.buckets:
|
|
24
|
+
document_pid = bucket["key"]
|
|
25
|
+
loan_count = bucket["doc_count"]
|
|
26
|
+
loan_extensions = int(bucket["extensions"]["value"])
|
|
27
|
+
document_pids.append(document_pid)
|
|
28
|
+
document_metadata[document_pid] = dict(
|
|
29
|
+
loans=loan_count, extensions=loan_extensions
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
# Enhance the document serializer
|
|
33
|
+
doc_search = current_app_ils.document_search_cls()
|
|
34
|
+
doc_search = doc_search.with_preference_param().params(version=True)
|
|
35
|
+
doc_search = doc_search.search_by_pid(*document_pids)
|
|
36
|
+
doc_search = doc_search[0:bucket_size]
|
|
37
|
+
result = doc_search.execute()
|
|
38
|
+
|
|
39
|
+
for hit in result.hits:
|
|
40
|
+
pid = hit["pid"]
|
|
41
|
+
hit["loan_count"] = document_metadata[pid]["loans"]
|
|
42
|
+
hit["loan_extensions"] = document_metadata[pid]["extensions"]
|
|
43
|
+
|
|
44
|
+
res = result.to_dict()
|
|
45
|
+
res["hits"]["hits"] = sorted(
|
|
46
|
+
res["hits"]["hits"],
|
|
47
|
+
key=lambda hit: hit["_source"]["loan_count"],
|
|
48
|
+
reverse=True,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
return res
|
|
@@ -18,17 +18,17 @@ from invenio_records_rest.utils import obj_or_import_string
|
|
|
18
18
|
from invenio_rest import ContentNegotiatedMethodView
|
|
19
19
|
from marshmallow.exceptions import ValidationError
|
|
20
20
|
|
|
21
|
-
from invenio_app_ils.circulation.stats.api import
|
|
22
|
-
fetch_most_loaned_documents,
|
|
23
|
-
get_loan_statistics,
|
|
24
|
-
)
|
|
25
|
-
from invenio_app_ils.circulation.stats.schemas import HistogramParamsSchema
|
|
26
|
-
from invenio_app_ils.circulation.stats.serializers import loan_stats_response
|
|
21
|
+
from invenio_app_ils.circulation.stats.api import fetch_most_loaned_documents
|
|
27
22
|
from invenio_app_ils.circulation.views import IlsCirculationResource
|
|
28
23
|
from invenio_app_ils.config import RECORDS_REST_MAX_RESULT_WINDOW
|
|
29
24
|
from invenio_app_ils.documents.api import DOCUMENT_PID_FETCHER, DOCUMENT_PID_TYPE
|
|
30
25
|
from invenio_app_ils.errors import InvalidParameterError
|
|
31
26
|
from invenio_app_ils.permissions import need_permissions
|
|
27
|
+
from invenio_app_ils.stats.histogram import (
|
|
28
|
+
HistogramParamsSchema,
|
|
29
|
+
create_histogram_view,
|
|
30
|
+
get_record_statistics,
|
|
31
|
+
)
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
def create_most_loaned_documents_view(blueprint, app):
|
|
@@ -56,33 +56,18 @@ def create_most_loaned_documents_view(blueprint, app):
|
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
def create_loan_histogram_view(blueprint, app):
|
|
60
|
-
"""Add url rule for loan histogram view."""
|
|
61
|
-
|
|
62
|
-
endpoints = app.config.get("RECORDS_REST_ENDPOINTS")
|
|
63
|
-
document_endpoint = endpoints.get(CIRCULATION_LOAN_PID_TYPE)
|
|
64
|
-
default_media_type = document_endpoint.get("default_media_type")
|
|
65
|
-
loan_stats_serializers = {"application/json": loan_stats_response}
|
|
66
|
-
|
|
67
|
-
loan_stats_view_func = LoanHistogramResource.as_view(
|
|
68
|
-
LoanHistogramResource.view_name,
|
|
69
|
-
serializers=loan_stats_serializers,
|
|
70
|
-
default_media_type=default_media_type,
|
|
71
|
-
ctx={},
|
|
72
|
-
)
|
|
73
|
-
blueprint.add_url_rule(
|
|
74
|
-
"/circulation/loans/stats",
|
|
75
|
-
view_func=loan_stats_view_func,
|
|
76
|
-
methods=["GET"],
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
|
|
80
59
|
def create_circulation_stats_blueprint(app):
|
|
81
60
|
"""Add statistics views to the blueprint."""
|
|
82
61
|
blueprint = Blueprint("invenio_app_ils_circulation_stats", __name__, url_prefix="")
|
|
83
62
|
|
|
84
63
|
create_most_loaned_documents_view(blueprint, app)
|
|
85
|
-
|
|
64
|
+
create_histogram_view(
|
|
65
|
+
blueprint,
|
|
66
|
+
app,
|
|
67
|
+
CIRCULATION_LOAN_PID_TYPE,
|
|
68
|
+
LoanHistogramResource,
|
|
69
|
+
"/circulation/loans",
|
|
70
|
+
)
|
|
86
71
|
|
|
87
72
|
return blueprint
|
|
88
73
|
|
|
@@ -190,7 +175,7 @@ class LoanHistogramResource(IlsCirculationResource):
|
|
|
190
175
|
search = search_cls()
|
|
191
176
|
search, _ = default_search_factory(self, search)
|
|
192
177
|
|
|
193
|
-
aggregation_buckets =
|
|
178
|
+
aggregation_buckets = get_record_statistics(
|
|
194
179
|
loan_date_fields,
|
|
195
180
|
search,
|
|
196
181
|
parsed_args["group_by"],
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2019-2025 CERN.
|
|
4
|
+
#
|
|
5
|
+
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
7
|
+
|
|
8
|
+
"""DocumentRequest indexer APIs."""
|
|
9
|
+
|
|
10
|
+
from datetime import datetime
|
|
11
|
+
|
|
12
|
+
from celery import shared_task
|
|
13
|
+
from flask import current_app
|
|
14
|
+
from invenio_indexer.api import RecordIndexer
|
|
15
|
+
from invenio_search import current_search_client
|
|
16
|
+
|
|
17
|
+
from invenio_app_ils.acquisition.api import ORDER_PID_TYPE
|
|
18
|
+
from invenio_app_ils.acquisition.proxies import current_ils_acq
|
|
19
|
+
from invenio_app_ils.documents.api import DOCUMENT_PID_TYPE
|
|
20
|
+
from invenio_app_ils.ill.api import BORROWING_REQUEST_PID_TYPE
|
|
21
|
+
from invenio_app_ils.ill.proxies import current_ils_ill
|
|
22
|
+
from invenio_app_ils.indexer import ReferencedRecordsIndexer
|
|
23
|
+
from invenio_app_ils.proxies import current_app_ils
|
|
24
|
+
|
|
25
|
+
from .api import DOCUMENT_REQUEST_PID_TYPE
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def index_stats_fields_for_document_request(doc_request_dict):
|
|
29
|
+
"""Indexer hook to modify the document request record dict before indexing."""
|
|
30
|
+
|
|
31
|
+
# This is done through the hook and not through an indexer class,
|
|
32
|
+
# as we need access to the `_created` field.
|
|
33
|
+
|
|
34
|
+
physical_item_provider = doc_request_dict.get("physical_item_provider")
|
|
35
|
+
if not physical_item_provider:
|
|
36
|
+
return
|
|
37
|
+
|
|
38
|
+
provider_pid = physical_item_provider["pid"]
|
|
39
|
+
provider_pid_type = physical_item_provider["pid_type"]
|
|
40
|
+
|
|
41
|
+
doc_request_created = doc_request_dict["_created"]
|
|
42
|
+
doc_request_creation_date = datetime.fromisoformat(doc_request_created).date()
|
|
43
|
+
|
|
44
|
+
provider_creation_date = None
|
|
45
|
+
|
|
46
|
+
if provider_pid_type == ORDER_PID_TYPE:
|
|
47
|
+
order_search_cls = current_ils_acq.order_search_cls
|
|
48
|
+
search_body = {
|
|
49
|
+
"query": {"term": {"pid": provider_pid}},
|
|
50
|
+
"size": 1,
|
|
51
|
+
}
|
|
52
|
+
search_result = current_search_client.search(
|
|
53
|
+
index=order_search_cls.Meta.index, body=search_body
|
|
54
|
+
)
|
|
55
|
+
hits = search_result["hits"]["hits"]
|
|
56
|
+
if len(hits) > 0:
|
|
57
|
+
order = hits[0]["_source"]
|
|
58
|
+
provider_creation_date = datetime.fromisoformat(order["_created"]).date()
|
|
59
|
+
|
|
60
|
+
elif provider_pid_type == BORROWING_REQUEST_PID_TYPE:
|
|
61
|
+
brw_req_search_cls = current_ils_ill.borrowing_request_search_cls
|
|
62
|
+
search_body = {
|
|
63
|
+
"query": {"term": {"pid": provider_pid}},
|
|
64
|
+
"size": 1,
|
|
65
|
+
}
|
|
66
|
+
search_result = current_search_client.search(
|
|
67
|
+
index=brw_req_search_cls.Meta.index, body=search_body
|
|
68
|
+
)
|
|
69
|
+
hits = search_result["hits"]["hits"]
|
|
70
|
+
if len(hits) > 0:
|
|
71
|
+
brw_req = hits[0]["_source"]
|
|
72
|
+
provider_creation_date = datetime.fromisoformat(brw_req["_created"]).date()
|
|
73
|
+
stats = {}
|
|
74
|
+
if provider_creation_date:
|
|
75
|
+
provider_creation_delay = (
|
|
76
|
+
provider_creation_date - doc_request_creation_date
|
|
77
|
+
).days
|
|
78
|
+
stats["provider_creation_delay"] = (
|
|
79
|
+
provider_creation_delay if provider_creation_delay >= 0 else None
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
if stats:
|
|
83
|
+
doc_request_dict["stats"] = stats
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@shared_task(ignore_result=True)
|
|
87
|
+
def index_referenced_records(docreq):
|
|
88
|
+
"""Index referenced records."""
|
|
89
|
+
indexer = ReferencedRecordsIndexer()
|
|
90
|
+
indexed = dict(pid_type=DOCUMENT_REQUEST_PID_TYPE, record=docreq)
|
|
91
|
+
|
|
92
|
+
referenced = []
|
|
93
|
+
|
|
94
|
+
# fetch and index the document
|
|
95
|
+
document_pid = docreq.get("document_pid")
|
|
96
|
+
if document_pid:
|
|
97
|
+
document_cls = current_app_ils.document_record_cls
|
|
98
|
+
document = document_cls.get_record_by_pid(document_pid)
|
|
99
|
+
referenced.append(dict(pid_type=DOCUMENT_PID_TYPE, record=document))
|
|
100
|
+
|
|
101
|
+
# fetch and index the related order (physical_item_provider)
|
|
102
|
+
physical_item_provider = docreq.get("physical_item_provider")
|
|
103
|
+
if physical_item_provider:
|
|
104
|
+
provider_pid = physical_item_provider.get("pid")
|
|
105
|
+
provider_pid_type = physical_item_provider.get("pid_type")
|
|
106
|
+
if provider_pid and provider_pid_type == ORDER_PID_TYPE:
|
|
107
|
+
order_cls = current_ils_acq.order_record_cls
|
|
108
|
+
order = order_cls.get_record_by_pid(provider_pid)
|
|
109
|
+
referenced.append(dict(pid_type=ORDER_PID_TYPE, record=order))
|
|
110
|
+
|
|
111
|
+
indexer.index(indexed, referenced)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class DocumentRequestIndexer(RecordIndexer):
|
|
115
|
+
"""Indexer class for DocumentRequest record."""
|
|
116
|
+
|
|
117
|
+
def index(self, docreq, arguments=None, **kwargs):
|
|
118
|
+
"""Index a DocumentRequest."""
|
|
119
|
+
super().index(docreq)
|
|
120
|
+
eta = datetime.utcnow() + current_app.config["ILS_INDEXER_TASK_DELAY"]
|
|
121
|
+
index_referenced_records.apply_async((docreq,), eta=eta)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2025 CERN.
|
|
4
|
+
#
|
|
5
|
+
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
7
|
+
|
|
8
|
+
"""Invenio App ILS document requests stats module."""
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2025 CERN.
|
|
4
|
+
#
|
|
5
|
+
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
7
|
+
|
|
8
|
+
"""Invenio App ILS document requests stats views."""
|
|
9
|
+
|
|
10
|
+
from flask import Blueprint, request
|
|
11
|
+
from invenio_records_rest.query import default_search_factory
|
|
12
|
+
from invenio_rest import ContentNegotiatedMethodView
|
|
13
|
+
from marshmallow.exceptions import ValidationError
|
|
14
|
+
|
|
15
|
+
from invenio_app_ils.document_requests.api import DOCUMENT_REQUEST_PID_TYPE
|
|
16
|
+
from invenio_app_ils.errors import InvalidParameterError
|
|
17
|
+
from invenio_app_ils.permissions import need_permissions
|
|
18
|
+
from invenio_app_ils.proxies import current_app_ils
|
|
19
|
+
from invenio_app_ils.stats.histogram import (
|
|
20
|
+
HistogramParamsSchema,
|
|
21
|
+
create_histogram_view,
|
|
22
|
+
get_record_statistics,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def create_document_request_stats_blueprint(app):
|
|
27
|
+
"""Add statistics views to the blueprint."""
|
|
28
|
+
blueprint = Blueprint(
|
|
29
|
+
"invenio_app_ils_document_request_stats", __name__, url_prefix=""
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
create_histogram_view(
|
|
33
|
+
blueprint,
|
|
34
|
+
app,
|
|
35
|
+
DOCUMENT_REQUEST_PID_TYPE,
|
|
36
|
+
DocumentRequestHistogramResource,
|
|
37
|
+
"/document-requests",
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
return blueprint
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class DocumentRequestHistogramResource(ContentNegotiatedMethodView):
|
|
44
|
+
"""Document request stats resource."""
|
|
45
|
+
|
|
46
|
+
view_name = "document_request_histogram"
|
|
47
|
+
|
|
48
|
+
def __init__(self, serializers, ctx, *args, **kwargs):
|
|
49
|
+
"""Constructor."""
|
|
50
|
+
super().__init__(serializers, *args, **kwargs)
|
|
51
|
+
for key, value in ctx.items():
|
|
52
|
+
setattr(self, key, value)
|
|
53
|
+
|
|
54
|
+
@need_permissions("stats-document-requests")
|
|
55
|
+
def get(self, **kwargs):
|
|
56
|
+
"""Get document request statistics."""
|
|
57
|
+
|
|
58
|
+
document_request_date_fields = [
|
|
59
|
+
"_created",
|
|
60
|
+
"_updated",
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
schema = HistogramParamsSchema(document_request_date_fields)
|
|
64
|
+
try:
|
|
65
|
+
parsed_args = schema.load(request.args.to_dict())
|
|
66
|
+
except ValidationError as e:
|
|
67
|
+
raise InvalidParameterError(description=e.messages) from e
|
|
68
|
+
|
|
69
|
+
# Construct search to allow for filtering with the q parameter
|
|
70
|
+
search_cls = current_app_ils.document_request_search_cls
|
|
71
|
+
search = search_cls()
|
|
72
|
+
search, _ = default_search_factory(self, search)
|
|
73
|
+
|
|
74
|
+
aggregation_buckets = get_record_statistics(
|
|
75
|
+
document_request_date_fields,
|
|
76
|
+
search,
|
|
77
|
+
parsed_args["group_by"],
|
|
78
|
+
parsed_args["metrics"],
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
response = {
|
|
82
|
+
"buckets": aggregation_buckets,
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return self.make_response(response, 200)
|
|
@@ -20,12 +20,14 @@ from invenio_app_ils.records.metadata_extensions import (
|
|
|
20
20
|
)
|
|
21
21
|
|
|
22
22
|
from .circulation import config as circulation_config
|
|
23
|
+
from .acquisition.indexer import index_stats_fields_for_order
|
|
23
24
|
from .circulation.indexer import (
|
|
24
25
|
index_extra_fields_for_loan,
|
|
25
26
|
index_stats_fields_for_loan,
|
|
26
27
|
)
|
|
27
28
|
from .circulation.receivers import register_circulation_signals
|
|
28
29
|
from .document_requests.api import DOCUMENT_REQUEST_PID_TYPE
|
|
30
|
+
from .document_requests.indexer import index_stats_fields_for_document_request
|
|
29
31
|
from .documents.api import DOCUMENT_PID_TYPE
|
|
30
32
|
from .eitems.api import EITEM_PID_TYPE
|
|
31
33
|
from .files.receivers import register_files_signals
|
|
@@ -224,6 +226,8 @@ class InvenioAppIls(object):
|
|
|
224
226
|
self.init_app(app)
|
|
225
227
|
self.init_metadata_extensions(app)
|
|
226
228
|
self.init_loan_indexer_hook(app)
|
|
229
|
+
self.init_order_indexer_hook(app)
|
|
230
|
+
self.init_document_request_indexer_hook(app)
|
|
227
231
|
|
|
228
232
|
def init_app(self, app):
|
|
229
233
|
"""Flask application initialization."""
|
|
@@ -278,6 +282,24 @@ class InvenioAppIls(object):
|
|
|
278
282
|
index="{0}s-{0}-v1.0.0".format("loan"),
|
|
279
283
|
)
|
|
280
284
|
|
|
285
|
+
def init_order_indexer_hook(self, app):
|
|
286
|
+
"""Custom order indexer hook init."""
|
|
287
|
+
before_record_index.dynamic_connect(
|
|
288
|
+
before_order_index_hook,
|
|
289
|
+
sender=app,
|
|
290
|
+
weak=False,
|
|
291
|
+
index="acq_orders-order-v1.0.0",
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
def init_document_request_indexer_hook(self, app):
|
|
295
|
+
"""Custom document request indexer hook init."""
|
|
296
|
+
before_record_index.dynamic_connect(
|
|
297
|
+
before_document_request_index_hook,
|
|
298
|
+
sender=app,
|
|
299
|
+
weak=False,
|
|
300
|
+
index="document_requests-document_request-v1.0.0",
|
|
301
|
+
)
|
|
302
|
+
|
|
281
303
|
def update_config_records_rest(self, app):
|
|
282
304
|
"""Merge overridden circ records rest into global records rest."""
|
|
283
305
|
for k in dir(circulation_config):
|
|
@@ -332,3 +354,30 @@ def before_loan_index_hook(sender, json=None, record=None, index=None, **kwargs)
|
|
|
332
354
|
index_extra_fields_for_loan(json)
|
|
333
355
|
if current_app.config["ILS_EXTEND_INDICES_WITH_STATS_ENABLED"]:
|
|
334
356
|
index_stats_fields_for_loan(json)
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def before_order_index_hook(sender, json=None, record=None, index=None, **kwargs):
|
|
360
|
+
"""Hook to transform order record before ES indexing.
|
|
361
|
+
|
|
362
|
+
:param sender: The entity sending the signal.
|
|
363
|
+
:param json: The dumped Record dict which will be indexed.
|
|
364
|
+
:param record: The corresponding Record object.
|
|
365
|
+
:param index: The index in which the json will be indexed.
|
|
366
|
+
:param kwargs: Any other parameters.
|
|
367
|
+
"""
|
|
368
|
+
if current_app.config["ILS_EXTEND_INDICES_WITH_STATS_ENABLED"]:
|
|
369
|
+
index_stats_fields_for_order(json)
|
|
370
|
+
|
|
371
|
+
def before_document_request_index_hook(
|
|
372
|
+
sender, json=None, record=None, index=None, **kwargs
|
|
373
|
+
):
|
|
374
|
+
"""Hook to transform document request record before ES indexing.
|
|
375
|
+
|
|
376
|
+
:param sender: The entity sending the signal.
|
|
377
|
+
:param json: The dumped Record dict which will be indexed.
|
|
378
|
+
:param record: The corresponding Record object.
|
|
379
|
+
:param index: The index in which the json will be indexed.
|
|
380
|
+
:param kwargs: Any other parameters.
|
|
381
|
+
"""
|
|
382
|
+
if current_app.config["ILS_EXTEND_INDICES_WITH_STATS_ENABLED"]:
|
|
383
|
+
index_stats_fields_for_document_request(json)
|