invenio-app-ils 4.4.0__tar.gz → 4.5.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-4.4.0 → invenio_app_ils-4.5.0}/CHANGES.rst +5 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/PKG-INFO +8 -2
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/__init__.py +1 -1
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/api.py +11 -6
- invenio_app_ils-4.5.0/invenio_app_ils/closures/api.py +134 -0
- invenio_app_ils-4.5.0/invenio_app_ils/closures/serializers/__init__.py +16 -0
- invenio_app_ils-4.5.0/invenio_app_ils/closures/serializers/response.py +35 -0
- invenio_app_ils-4.5.0/invenio_app_ils/closures/serializers/schema.py +28 -0
- invenio_app_ils-4.5.0/invenio_app_ils/closures/views.py +66 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils.egg-info/PKG-INFO +8 -2
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils.egg-info/SOURCES.txt +4 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils.egg-info/entry_points.txt +1 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/run-tests.sh +2 -2
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/setup.cfg +1 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_checkout.py +29 -3
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_closures.py +46 -8
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/items.json +11 -0
- invenio_app_ils-4.4.0/invenio_app_ils/closures/api.py +0 -66
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/.editorconfig +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/.git-blame-ignore-revs +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/AUTHORS.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/CONTRIBUTING.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/INSTALL.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/LICENSE +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/MANIFEST.in +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/README.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/backend/Dockerfile +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/frontend/Dockerfile +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/frontend/conf.d/default.conf +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/frontend/nginx.conf +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/frontend/test.crt +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/frontend/test.key +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/lb/Dockerfile +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/lb/haproxy.cfg +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker/lb/haproxy_cert.pem +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker-compose.full.yml +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker-compose.yml +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docker-services.yml +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/Makefile +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/authors.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/changes.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/conf.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/configuration.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/contributing.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/index.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/installation.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/license.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/make.bat +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/requirements.txt +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/docs/usage.rst +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/config.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/errors.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/ext.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/jsonresolvers/order_order_lines.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/jsonresolvers/order_provider.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/loaders/jsonschemas/order.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/mappings/os-v1/acq_orders/order-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/mappings/os-v2/acq_orders/order-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/mappings/v7/acq_orders/order-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/proxies.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/schemas/acq_orders/order-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/acquisition/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/config.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/jsonresolvers/loan.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/schemas/json/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/schemas/json/base.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/schemas/json/bulk_extend.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_checkout.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_self_checkout.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_update_dates.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/notifications/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/notifications/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/notifications/messages.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/notifications/tasks.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/receivers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/serializers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/serializers/csv.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/serializers/custom_fields.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/serializers/json.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/serializers/response.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/stats/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/stats/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/stats/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/tasks.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/bulk_extend.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/cancel.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkin.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkout.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/extend.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/overdue_reminder.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request_no_items.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/self_checkout.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/will_expire_in_reminder.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/transitions/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/transitions/transitions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/utils.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/circulation/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/cli.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/closures/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/closures/tasks.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/config.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/demo_data/documents.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/demo_data/items.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_document.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_patron.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_decline.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_document.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_provider.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/mappings/os-v1/document_requests/document_request-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/mappings/os-v2/document_requests/document_request-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/mappings/v7/document_requests/document_request-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/notifications/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/notifications/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/notifications/messages.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/schemas/document_requests/document_request-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_accept.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_in_catalog.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_not_found.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_other.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_user_cancel.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/document_requests/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/jsonresolvers/document_circulation.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/jsonresolvers/document_eitem.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/jsonresolvers/document_item.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/jsonresolvers/document_relations.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/jsonresolvers/document_stock.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/loaders/jsonschemas/document.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/v7/documents/document-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/mappings/v7/documents/document-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/schemas/documents/document-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/schemas/documents/document-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/documents/utils.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/jsonresolvers/eitem_document.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/jsonresolvers/eitem_files.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/loaders/jsonschemas/eitems.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v3.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v3.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v3.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v3.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/eitems/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/errors.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ext.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/facets.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/fetchers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/files/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/files/receivers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/files/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/config.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/errors.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/ext.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_document.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_patron.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_provider.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/loaders/jsonschemas/borrowing_request.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_actions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_extension_actions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/mappings/os-v1/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/mappings/os-v2/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/mappings/v7/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/notifications/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/notifications/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/notifications/messages.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/proxies.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/schemas/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/serializers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/serializers/csv.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/serializers/custom_fields.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/serializers/json.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_accept.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_decline.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_request.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/ill/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/jsonresolvers/internal_location.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/internal_location.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/mappings/os-v1/internal_locations/internal_location-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/mappings/os-v2/internal_locations/internal_location-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/mappings/v7/internal_locations/internal_location-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/schemas/internal_locations/internal_location-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/internal_locations/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/jsonresolvers/item_document.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/jsonresolvers/item_internal_location.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/jsonresolvers/item_loan.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/loaders/jsonschemas/items.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/os-v1/items/item-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/os-v1/items/item-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/os-v2/items/item-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/os-v2/items/item-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/v7/items/item-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/mappings/v7/items/item-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/schemas/items/item-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/schemas/items/item-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/serializers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/items/serializers/item.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/literature/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/literature/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/literature/covers_builder.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/literature/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/literature/serializers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/literature/serializers/csv.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/literature/serializers/custom_fields.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/literature/serializers/json.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/loaders/jsonschemas/location.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/mappings/os-v1/locations/location-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/mappings/os-v2/locations/location-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/mappings/v7/locations/location-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/receivers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/schemas/locations/location-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/locations/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/minters.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/admin.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/backends/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/backends/mail.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/messages.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/models.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/tasks.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/notifications/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/anonymization.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/cli.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/mappings/os-v1/patrons/patron-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/mappings/os-v2/patrons/patron-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/mappings/v7/patrons/patron-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/patrons/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/config.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/errors.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/ext.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/loaders/jsonschemas/provider.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/mappings/os-v1/providers/provider-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/mappings/os-v2/providers/provider-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/mappings/v7/providers/provider-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/proxies.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/schemas/providers/provider-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/providers/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/proxies.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/jsonresolvers/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/listeners.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/loaders/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/loaders/schemas/changed_by.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/loaders/schemas/identifiers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/loaders/schemas/preserve_cover_metadata.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/loaders/schemas/price.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/metadata_extensions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/receivers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/schemas/json.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/serializers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records_relations/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records_relations/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records_relations/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records_relations/retriever.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/records_relations/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/relations/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/relations/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/relations/nodes.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/search_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/jsonresolvers/series_relations.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/loaders/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/loaders/jsonschemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/loaders/jsonschemas/series.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/os-v1/series/series-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/os-v1/series/series-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/os-v2/series/series-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/os-v2/series/series-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/v7/series/series-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/mappings/v7/series/series-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/schemas/series/series-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/schemas/series/series-v2.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/series/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/signals.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/static/images/placeholder.png +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/static_pages/search_guide.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/aggregations/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/aggregations/aggr_file_download/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/aggr-file-download-v1.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/aggr-file-download-v1.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/aggr-file-download-v1.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/file_download/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/file_download/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/file_download/os-v1/file-download-v1.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/file_download/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/file_download/os-v2/file-download-v1.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/file_download/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/stats/file_download/v7/file-download-v1.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/templates/invenio_app_ils/mail/footer.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/templates/invenio_app_ils/notifications/footer.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/templates/logged_out.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/translations/.gitkeep +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/views.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/api.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/cli.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/acq_mediums.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/acq_order_line_payment_modes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/acq_order_line_purchase_types.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/acq_payment_modes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/acq_recipients.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/affiliation_identifier_schemes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/alternative_identifier_schemes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/alternative_title_types.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/author_identifier_schemes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/author_roles.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/author_types.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/conference_identifier_schemes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/countries.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/currencies.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/docreq_payment_method.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/docreq_request_type.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/document_identifiers_materials.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/document_requests_mediums.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/document_subjects.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/eitem_sources.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/identifier_schemes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/ill_item_types.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/ill_payment_modes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/item_mediums.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/provider_types.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/series_identifier_schemes.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/series_url_access_restrictions.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/data/tags.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/indexer.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/jsonresolvers/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/jsonresolvers/licenses.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/mappings/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/mappings/os-v1/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/mappings/os-v2/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/mappings/v7/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/schemas/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/schemas/vocabularies/vocabulary-v1.0.0.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/search.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/sources/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/sources/base.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/sources/json.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils/vocabularies/sources/opendefinition.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils.egg-info/dependency_links.txt +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils.egg-info/not-zip-safe +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils.egg-info/requires.txt +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/invenio_app_ils.egg-info/top_level.txt +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/pyproject.toml +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/scripts/bootstrap +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/scripts/build_assets +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/scripts/celery +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/scripts/console +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/scripts/server +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/scripts/setup +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/scripts/update +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/setup.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/acquisition/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/acquisition/test_acq_orders_crud.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/acquisition/test_acq_orders_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/acquisition/test_acq_providers_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_expired_loans.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_bulk_extend.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_default_durations.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_document_resolver.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_extend.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_item_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_item_resolver.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_list_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_patron_resolver.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_request.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_loan_update.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/circulation/test_notifications.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/conftest.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/document_requests/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/document_requests/test_document_requests.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/document_requests/test_document_requests_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/document_requests/test_notifications_filter.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ill/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ill/test_ill_brw_crud.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ill/test_ill_brw_reqs_patron_loan_create_action.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ill/test_ill_brw_reqs_patron_loan_extension_actions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ill/test_ill_brw_reqs_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ill/test_ill_providers_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/documents/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/documents/test_document_crud.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/documents/test_document_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/documents/test_document_resolvers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/eitems/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/eitems/test_eitems_crud.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/eitems/test_eitems_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/eitems/test_files.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/items/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/items/test_apis.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/items/test_items_crud.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/items/test_items_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/records_relations/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/records_relations/helpers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/records_relations/test_records_relations_parentchild.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/records_relations/test_records_relations_sequence.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/records_relations/test_records_relations_siblings.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/series/__init__.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/series/test_series_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_anonymization.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_apis.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_errors.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_facets.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_internal_locations.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_loaders.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_metadata_extensions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_notifications.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_notifications_mails.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_notifications_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_patrons.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_record_delete.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_record_permissions.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_resolvers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_stats.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_tasks.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/api/ils/test_vocabularies.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/conftest.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/acq_orders.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/acq_providers.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/document_requests.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/documents.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/eitems.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/ill_borrowing_requests.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/ill_providers.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/internal_locations.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/loans.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/loans_most_loaned.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/locations.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/data/series.json +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/helpers.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/templates/notifications/blank.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/templates/notifications/title_body.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/templates/notifications/title_body_html.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/templates/notifications/title_body_html_ctx.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/templates/notifications/title_only.html +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/test_post_logout_redirect.py +0 -0
- {invenio_app_ils-4.4.0 → invenio_app_ils-4.5.0}/tests/test_version.py +0 -0
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
Changes
|
|
9
9
|
=======
|
|
10
10
|
|
|
11
|
+
Version 4.5.0 (released 2025-06-04)
|
|
12
|
+
|
|
13
|
+
- closures: added endpoint for closure periods in a year
|
|
14
|
+
- circulation: self-checkout of MISSING items marks them as CAN_CIRCULATE
|
|
15
|
+
- tests: Fix comment on running tests by bumping Postgres & adding param
|
|
11
16
|
|
|
12
17
|
Version 4.4.0 (released 2025-02-21)
|
|
13
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: invenio-app-ils
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.5.0
|
|
4
4
|
Summary: Invenio Integrated Library System.
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-app-ils
|
|
6
6
|
Author: CERN
|
|
@@ -66,6 +66,7 @@ Requires-Dist: lorem>=0.1.1; extra == "lorem"
|
|
|
66
66
|
Provides-Extra: opensearch2
|
|
67
67
|
Requires-Dist: invenio-search[opensearch2]<3.0.0,>=2.0.0; extra == "opensearch2"
|
|
68
68
|
Provides-Extra: docs
|
|
69
|
+
Dynamic: license-file
|
|
69
70
|
|
|
70
71
|
..
|
|
71
72
|
Copyright (C) 2018-2020 CERN.
|
|
@@ -101,6 +102,11 @@ https://invenioils.docs.cern.ch
|
|
|
101
102
|
Changes
|
|
102
103
|
=======
|
|
103
104
|
|
|
105
|
+
Version 4.5.0 (released 2025-06-04)
|
|
106
|
+
|
|
107
|
+
- closures: added endpoint for closure periods in a year
|
|
108
|
+
- circulation: self-checkout of MISSING items marks them as CAN_CIRCULATE
|
|
109
|
+
- tests: Fix comment on running tests by bumping Postgres & adding param
|
|
104
110
|
|
|
105
111
|
Version 4.4.0 (released 2025-02-21)
|
|
106
112
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2018-
|
|
3
|
+
# Copyright (C) 2018-2025 CERN.
|
|
4
4
|
#
|
|
5
5
|
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
6
|
# under the terms of the MIT License; see LICENSE file for more details.
|
|
@@ -78,9 +78,9 @@ def _validate_delivery(delivery):
|
|
|
78
78
|
)
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
def _set_item_to_can_circulate(
|
|
81
|
+
def _set_item_to_can_circulate(item_pid_value):
|
|
82
82
|
"""Change the item status to CAN_CIRCULATE."""
|
|
83
|
-
item = Item.get_record_by_pid(
|
|
83
|
+
item = Item.get_record_by_pid(item_pid_value)
|
|
84
84
|
if item["status"] != "CAN_CIRCULATE":
|
|
85
85
|
item["status"] = "CAN_CIRCULATE"
|
|
86
86
|
item.commit()
|
|
@@ -245,7 +245,7 @@ def checkout_loan(
|
|
|
245
245
|
_validate_delivery(optional_delivery)
|
|
246
246
|
|
|
247
247
|
if force:
|
|
248
|
-
_set_item_to_can_circulate(item_pid)
|
|
248
|
+
_set_item_to_can_circulate(item_pid["value"])
|
|
249
249
|
|
|
250
250
|
return _checkout_loan(
|
|
251
251
|
item_pid,
|
|
@@ -256,14 +256,19 @@ def checkout_loan(
|
|
|
256
256
|
)
|
|
257
257
|
|
|
258
258
|
|
|
259
|
-
def _ensure_item_loanable_via_self_checkout(
|
|
259
|
+
def _ensure_item_loanable_via_self_checkout(item_pid_value):
|
|
260
260
|
"""Self-checkout: return loanable item or raise when not loanable.
|
|
261
261
|
|
|
262
262
|
Implements the self-checkout rules to loan an item.
|
|
263
263
|
"""
|
|
264
|
-
item = current_app_ils.item_record_cls.get_record_by_pid(
|
|
264
|
+
item = current_app_ils.item_record_cls.get_record_by_pid(item_pid_value)
|
|
265
265
|
item_dict = item.replace_refs()
|
|
266
266
|
|
|
267
|
+
if item_dict["status"] == "MISSING":
|
|
268
|
+
_set_item_to_can_circulate(item_pid_value)
|
|
269
|
+
item = current_app_ils.item_record_cls.get_record_by_pid(item_pid_value)
|
|
270
|
+
item_dict = item.replace_refs()
|
|
271
|
+
|
|
267
272
|
if item_dict["status"] != "CAN_CIRCULATE":
|
|
268
273
|
raise ItemCannotCirculateError()
|
|
269
274
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2020-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
|
+
"""ILS location closures API."""
|
|
9
|
+
|
|
10
|
+
from datetime import date, timedelta
|
|
11
|
+
from calendar import day_name
|
|
12
|
+
|
|
13
|
+
import arrow
|
|
14
|
+
|
|
15
|
+
from invenio_app_ils.errors import IlsException
|
|
16
|
+
from invenio_app_ils.proxies import current_app_ils
|
|
17
|
+
|
|
18
|
+
_ONE_DAY_INCREMENT = timedelta(days=1) # Atomic increment
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _is_in_interval(date, interval):
|
|
22
|
+
"""Checks if a date is included in an interval."""
|
|
23
|
+
return (
|
|
24
|
+
arrow.get(interval["start_date"]).date()
|
|
25
|
+
<= date
|
|
26
|
+
<= arrow.get(interval["end_date"]).date()
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _is_normally_open(location, date):
|
|
31
|
+
"""Checks if the location is normally opened on a given date."""
|
|
32
|
+
opening = location["opening_weekdays"]
|
|
33
|
+
opening_weekday = opening[date.weekday()]
|
|
34
|
+
return opening_weekday["is_open"]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _is_exceptionally_open(location, date):
|
|
38
|
+
"""Checks if the location is exceptionally opened on a given date."""
|
|
39
|
+
for exception in location.get("opening_exceptions", []):
|
|
40
|
+
if _is_in_interval(date, exception):
|
|
41
|
+
return exception["is_open"]
|
|
42
|
+
return None # Date is not included in any interval
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _is_open_on(location, date):
|
|
46
|
+
"""Checks if the location is open or closed on a given date."""
|
|
47
|
+
exceptionally_open = _is_exceptionally_open(location, date)
|
|
48
|
+
if exceptionally_open is not None:
|
|
49
|
+
return exceptionally_open
|
|
50
|
+
return _is_normally_open(location, date)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def find_next_open_date(location_pid, date):
|
|
54
|
+
"""Finds the next day where this location is open."""
|
|
55
|
+
location = current_app_ils.location_record_cls.get_record_by_pid(location_pid)
|
|
56
|
+
_infinite_loop_guard = date + timedelta(days=365)
|
|
57
|
+
while date < _infinite_loop_guard:
|
|
58
|
+
if _is_open_on(location, date):
|
|
59
|
+
return date
|
|
60
|
+
date += _ONE_DAY_INCREMENT
|
|
61
|
+
|
|
62
|
+
# Termination is normally guaranteed if there is at least one weekday open
|
|
63
|
+
raise IlsException(
|
|
64
|
+
description="Cannot find any date for which the "
|
|
65
|
+
"location %s is open after the given date %s."
|
|
66
|
+
"Please check opening/closures dates." % (location_pid, date.isoformat())
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def get_closure_periods(location, start, end):
|
|
71
|
+
"""
|
|
72
|
+
Return date ranges within a specified period when the location is closed.
|
|
73
|
+
"""
|
|
74
|
+
if (
|
|
75
|
+
not location
|
|
76
|
+
or not isinstance(start, date)
|
|
77
|
+
or not isinstance(end, date)
|
|
78
|
+
or start > end
|
|
79
|
+
):
|
|
80
|
+
raise ValueError("Invalid input parameters")
|
|
81
|
+
|
|
82
|
+
one_day_delta = timedelta(days=1)
|
|
83
|
+
|
|
84
|
+
weekday_name_to_index = {name.lower(): i for i, name in enumerate(day_name)}
|
|
85
|
+
closed_weekdays = set()
|
|
86
|
+
for weekday_rule in location.get("opening_weekdays", []):
|
|
87
|
+
if weekday_rule.get("is_open") is False:
|
|
88
|
+
weekday_str = weekday_rule.get("weekday", "").lower()
|
|
89
|
+
closed_weekdays.add(weekday_name_to_index[weekday_str])
|
|
90
|
+
|
|
91
|
+
exception_overrides = {}
|
|
92
|
+
for exception in location.get("opening_exceptions", []):
|
|
93
|
+
is_closed_override = not exception.get("is_open")
|
|
94
|
+
|
|
95
|
+
ex_start = date.fromisoformat(exception["start_date"])
|
|
96
|
+
ex_end = date.fromisoformat(exception["end_date"])
|
|
97
|
+
|
|
98
|
+
current_ex_date = ex_start
|
|
99
|
+
while current_ex_date <= ex_end:
|
|
100
|
+
exception_overrides[current_ex_date] = is_closed_override
|
|
101
|
+
current_ex_date += one_day_delta
|
|
102
|
+
|
|
103
|
+
closure_periods = []
|
|
104
|
+
closure_streak_start = None
|
|
105
|
+
current_date = start
|
|
106
|
+
|
|
107
|
+
while current_date <= end:
|
|
108
|
+
is_date_closed = False
|
|
109
|
+
|
|
110
|
+
override_status = exception_overrides.get(current_date)
|
|
111
|
+
|
|
112
|
+
if override_status is not None:
|
|
113
|
+
is_date_closed = override_status
|
|
114
|
+
else:
|
|
115
|
+
if current_date.weekday() in closed_weekdays:
|
|
116
|
+
is_date_closed = True
|
|
117
|
+
|
|
118
|
+
if is_date_closed:
|
|
119
|
+
if closure_streak_start is None:
|
|
120
|
+
closure_streak_start = current_date
|
|
121
|
+
else:
|
|
122
|
+
if closure_streak_start is not None:
|
|
123
|
+
closure_periods.append(
|
|
124
|
+
{"start": closure_streak_start, "end": current_date - one_day_delta}
|
|
125
|
+
)
|
|
126
|
+
closure_streak_start = None
|
|
127
|
+
|
|
128
|
+
current_date += one_day_delta
|
|
129
|
+
|
|
130
|
+
# Handle trailing closed period
|
|
131
|
+
if closure_streak_start is not None:
|
|
132
|
+
closure_periods.append({"start": closure_streak_start, "end": end})
|
|
133
|
+
|
|
134
|
+
return closure_periods
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# This file is part of Invenio.
|
|
4
|
+
# Copyright (C) 2025-2025 CERN.
|
|
5
|
+
#
|
|
6
|
+
# Invenio is free software; you can redistribute it and/or modify it
|
|
7
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
from invenio_app_ils.closures.serializers.response import closure_periods_responsify
|
|
11
|
+
from invenio_app_ils.closures.serializers.schema import ClosurePeriodsV1
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
closure_periods_response = closure_periods_responsify(
|
|
15
|
+
ClosurePeriodsV1, "application/json"
|
|
16
|
+
)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# This file is part of Invenio.
|
|
4
|
+
# Copyright (C) 2025-2025 CERN.
|
|
5
|
+
#
|
|
6
|
+
# Invenio is free software; you can redistribute it and/or modify it
|
|
7
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
8
|
+
|
|
9
|
+
"""Invenio App ILS Closures response serializers."""
|
|
10
|
+
|
|
11
|
+
import json
|
|
12
|
+
from flask import current_app
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def closure_periods_responsify(schema_class, mimetype):
|
|
16
|
+
"""Closure periods response serializer.
|
|
17
|
+
|
|
18
|
+
:param schema_class: Schema instance.
|
|
19
|
+
:param mimetype: MIME type of response.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def view(data, code=200, headers=None):
|
|
23
|
+
"""Generate the response object."""
|
|
24
|
+
response_data = schema_class().dump(data)
|
|
25
|
+
|
|
26
|
+
response = current_app.response_class(
|
|
27
|
+
json.dumps(response_data), mimetype=mimetype
|
|
28
|
+
)
|
|
29
|
+
response.status_code = code
|
|
30
|
+
|
|
31
|
+
if headers is not None:
|
|
32
|
+
response.headers.extend(headers)
|
|
33
|
+
return response
|
|
34
|
+
|
|
35
|
+
return view
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# This file is part of Invenio.
|
|
4
|
+
# Copyright (C) 2025-2025 CERN.
|
|
5
|
+
#
|
|
6
|
+
# Invenio is free software; you can redistribute it and/or modify it
|
|
7
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
8
|
+
|
|
9
|
+
"""Invenio App ILS Closures response schemas."""
|
|
10
|
+
|
|
11
|
+
from marshmallow import Schema, fields
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DateRangeSchema(Schema):
|
|
15
|
+
"""Schema for a single closure period."""
|
|
16
|
+
|
|
17
|
+
start = fields.Date(required=True, description="Start date of the closure period.")
|
|
18
|
+
end = fields.Date(required=True, description="End date of the closure period.")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ClosurePeriodsV1(Schema):
|
|
22
|
+
"""Schema for a list of closure periods."""
|
|
23
|
+
|
|
24
|
+
closure_periods = fields.List(
|
|
25
|
+
fields.Nested(DateRangeSchema),
|
|
26
|
+
required=True,
|
|
27
|
+
description="List of closure date periods.",
|
|
28
|
+
)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# This file is part of Invenio.
|
|
4
|
+
# Copyright (C) 2025-2025 CERN.
|
|
5
|
+
#
|
|
6
|
+
# Invenio is free software; you can redistribute it and/or modify it
|
|
7
|
+
# under the terms of the MIT License; see LICENSE file for more details.
|
|
8
|
+
|
|
9
|
+
"""Invenio App ILS Closure views."""
|
|
10
|
+
|
|
11
|
+
from flask import Blueprint, abort
|
|
12
|
+
from flask_login import current_user
|
|
13
|
+
from datetime import date
|
|
14
|
+
from invenio_records_rest.views import pass_record
|
|
15
|
+
from invenio_rest import ContentNegotiatedMethodView
|
|
16
|
+
from invenio_app_ils.locations.api import LOCATION_PID_TYPE
|
|
17
|
+
from invenio_app_ils.closures.serializers import closure_periods_response
|
|
18
|
+
from invenio_app_ils.closures.api import get_closure_periods
|
|
19
|
+
from invenio_app_ils.permissions import backoffice_permission
|
|
20
|
+
from invenio_app_ils.records.permissions import RecordPermission
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def create_closures_blueprint(app):
|
|
24
|
+
"""Create location closed periods blueprint."""
|
|
25
|
+
blueprint = Blueprint("invenio_app_ils_closures", __name__, url_prefix="")
|
|
26
|
+
endpoints = app.config["RECORDS_REST_ENDPOINTS"]
|
|
27
|
+
|
|
28
|
+
options = endpoints[LOCATION_PID_TYPE]
|
|
29
|
+
default_media_type = options.get("default_media_type", "")
|
|
30
|
+
closure_periods_serializers = {"application/json": closure_periods_response}
|
|
31
|
+
|
|
32
|
+
closure_periods_view = LocationClosurePeriodsResource.as_view(
|
|
33
|
+
LocationClosurePeriodsResource.view_name,
|
|
34
|
+
serializers=closure_periods_serializers,
|
|
35
|
+
default_media_type=default_media_type,
|
|
36
|
+
)
|
|
37
|
+
blueprint.add_url_rule(
|
|
38
|
+
"{0}/closure_periods/<int:year>".format(options["item_route"]),
|
|
39
|
+
view_func=closure_periods_view,
|
|
40
|
+
methods=["GET"],
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
return blueprint
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class LocationClosurePeriodsResource(ContentNegotiatedMethodView):
|
|
47
|
+
"""Returns the closure periods of a Location"""
|
|
48
|
+
|
|
49
|
+
view_name = "location_closure_periods"
|
|
50
|
+
|
|
51
|
+
@pass_record
|
|
52
|
+
def get(self, pid, record, year, **kwargs):
|
|
53
|
+
"""Get the date ranges for which a location is closure based in the specified year"""
|
|
54
|
+
|
|
55
|
+
factory = RecordPermission(record, "read")
|
|
56
|
+
if not factory.is_public() and not backoffice_permission().can():
|
|
57
|
+
if not current_user.is_authenticated:
|
|
58
|
+
abort(401)
|
|
59
|
+
abort(403)
|
|
60
|
+
|
|
61
|
+
start_date = date(year, 1, 1)
|
|
62
|
+
end_date = date(year, 12, 31)
|
|
63
|
+
|
|
64
|
+
closure_periods = get_closure_periods(record, start_date, end_date)
|
|
65
|
+
|
|
66
|
+
return self.make_response({"closure_periods": closure_periods}, 200)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: invenio-app-ils
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.5.0
|
|
4
4
|
Summary: Invenio Integrated Library System.
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-app-ils
|
|
6
6
|
Author: CERN
|
|
@@ -66,6 +66,7 @@ Requires-Dist: lorem>=0.1.1; extra == "lorem"
|
|
|
66
66
|
Provides-Extra: opensearch2
|
|
67
67
|
Requires-Dist: invenio-search[opensearch2]<3.0.0,>=2.0.0; extra == "opensearch2"
|
|
68
68
|
Provides-Extra: docs
|
|
69
|
+
Dynamic: license-file
|
|
69
70
|
|
|
70
71
|
..
|
|
71
72
|
Copyright (C) 2018-2020 CERN.
|
|
@@ -101,6 +102,11 @@ https://invenioils.docs.cern.ch
|
|
|
101
102
|
Changes
|
|
102
103
|
=======
|
|
103
104
|
|
|
105
|
+
Version 4.5.0 (released 2025-06-04)
|
|
106
|
+
|
|
107
|
+
- closures: added endpoint for closure periods in a year
|
|
108
|
+
- circulation: self-checkout of MISSING items marks them as CAN_CIRCULATE
|
|
109
|
+
- tests: Fix comment on running tests by bumping Postgres & adding param
|
|
104
110
|
|
|
105
111
|
Version 4.4.0 (released 2025-02-21)
|
|
106
112
|
|
|
@@ -125,6 +125,10 @@ invenio_app_ils/circulation/transitions/transitions.py
|
|
|
125
125
|
invenio_app_ils/closures/__init__.py
|
|
126
126
|
invenio_app_ils/closures/api.py
|
|
127
127
|
invenio_app_ils/closures/tasks.py
|
|
128
|
+
invenio_app_ils/closures/views.py
|
|
129
|
+
invenio_app_ils/closures/serializers/__init__.py
|
|
130
|
+
invenio_app_ils/closures/serializers/response.py
|
|
131
|
+
invenio_app_ils/closures/serializers/schema.py
|
|
128
132
|
invenio_app_ils/demo_data/documents.json
|
|
129
133
|
invenio_app_ils/demo_data/items.json
|
|
130
134
|
invenio_app_ils/document_requests/__init__.py
|
|
@@ -24,6 +24,7 @@ ils_rest = invenio_app_ils.ext:InvenioAppIlsREST
|
|
|
24
24
|
[invenio_base.api_blueprints]
|
|
25
25
|
ils_circulation = invenio_app_ils.circulation.views:create_circulation_blueprint
|
|
26
26
|
ils_circulation_stats = invenio_app_ils.circulation.stats.views:create_circulation_stats_blueprint
|
|
27
|
+
ils_closures = invenio_app_ils.closures.views:create_closures_blueprint
|
|
27
28
|
ils_document_request = invenio_app_ils.document_requests.views:create_document_request_action_blueprint
|
|
28
29
|
ils_document_stats = invenio_app_ils.records.views:create_document_stats_blueprint
|
|
29
30
|
ils_files = invenio_app_ils.files.views:create_files_blueprint
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2020 CERN.
|
|
4
|
+
# Copyright (C) 2020-2025 CERN.
|
|
5
5
|
#
|
|
6
6
|
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
7
7
|
# under the terms of the MIT License; see LICENSE file for more details.
|
|
8
8
|
|
|
9
9
|
# To run a test locally:
|
|
10
|
-
# 1. eval "$(docker-services-cli up --db
|
|
10
|
+
# 1. eval "$(docker-services-cli up --db postgresql14 --search opensearch2 --cache redis --mq rabbitmq --env)"
|
|
11
11
|
# 2. python -m pytest -svvvv tests/api/ils/test_apis.py
|
|
12
12
|
# 3. eval "$(docker-services-cli down --env)"
|
|
13
13
|
|
|
@@ -106,6 +106,7 @@ invenio_base.api_blueprints =
|
|
|
106
106
|
ils_relations = invenio_app_ils.records_relations.views:create_relations_blueprint
|
|
107
107
|
ils_document_request = invenio_app_ils.document_requests.views:create_document_request_action_blueprint
|
|
108
108
|
ils_document_stats = invenio_app_ils.records.views:create_document_stats_blueprint
|
|
109
|
+
ils_closures = invenio_app_ils.closures.views:create_closures_blueprint
|
|
109
110
|
ils_files = invenio_app_ils.files.views:create_files_blueprint
|
|
110
111
|
ils_patrons = invenio_app_ils.patrons.views:get_user_loan_information_blueprint
|
|
111
112
|
ils_notifications = invenio_app_ils.notifications.views:get_notifications_blueprint
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2018-
|
|
3
|
+
# Copyright (C) 2018-2025 CERN.
|
|
4
4
|
#
|
|
5
5
|
# invenio-app-ils is free software; you can redistribute it and/or modify it
|
|
6
6
|
# under the terms of the MIT License; see LICENSE file for more details.
|
|
@@ -249,15 +249,29 @@ def test_self_checkout_search(app, client, json_headers, users, testdata):
|
|
|
249
249
|
assert res.status_code == 400
|
|
250
250
|
|
|
251
251
|
# test that an error is returned when the item cannot circulate
|
|
252
|
-
|
|
252
|
+
in_binding_item_barcode = "123456789-74"
|
|
253
253
|
url = url_for("invenio_app_ils_circulation.loan_self_checkout")
|
|
254
|
-
res = client.get(f"{url}?barcode={
|
|
254
|
+
res = client.get(f"{url}?barcode={in_binding_item_barcode}", headers=json_headers)
|
|
255
255
|
assert res.status_code == 400
|
|
256
256
|
# assert that the payload will contain the key error with a msg
|
|
257
257
|
response = res.get_json()
|
|
258
258
|
assert LoanSelfCheckoutItemInvalidStatus.description in response["message"]
|
|
259
259
|
assert LoanSelfCheckoutItemInvalidStatus.supportCode in response["supportCode"]
|
|
260
260
|
|
|
261
|
+
# test that no error is returned when the item is marked as missing
|
|
262
|
+
missing_item_barcode = "123456789-1"
|
|
263
|
+
missing_item_pid = "itemid-1"
|
|
264
|
+
url = url_for("invenio_app_ils_circulation.loan_self_checkout")
|
|
265
|
+
res = client.get(f"{url}?barcode={missing_item_barcode}", headers=json_headers)
|
|
266
|
+
assert res.status_code == 200
|
|
267
|
+
|
|
268
|
+
# assert item is no longer marked as missing
|
|
269
|
+
response = res.get_json()
|
|
270
|
+
item_pid = response["metadata"]["pid"]
|
|
271
|
+
assert item_pid == missing_item_pid
|
|
272
|
+
item = Item.get_record_by_pid(item_pid)
|
|
273
|
+
assert item["status"] == "CAN_CIRCULATE"
|
|
274
|
+
|
|
261
275
|
# create a loan on the same patron, and another one on another patron
|
|
262
276
|
user_login(client, "librarian", users)
|
|
263
277
|
url = url_for("invenio_app_ils_circulation.loan_checkout")
|
|
@@ -326,6 +340,7 @@ def test_self_checkout(app, client, json_headers, users, testdata):
|
|
|
326
340
|
current_search.flush_and_refresh(index="*")
|
|
327
341
|
|
|
328
342
|
def _self_checkout(patron, item_pid, document_pid):
|
|
343
|
+
url = url_for("invenio_app_ils_circulation.loan_self_checkout")
|
|
329
344
|
params = deepcopy(NEW_LOAN)
|
|
330
345
|
params["document_pid"] = document_pid
|
|
331
346
|
params["item_pid"] = dict(type="pitmid", value=item_pid)
|
|
@@ -394,3 +409,14 @@ def test_self_checkout(app, client, json_headers, users, testdata):
|
|
|
394
409
|
assert res.status_code == 202
|
|
395
410
|
response = res.get_json()
|
|
396
411
|
assert response["metadata"]["delivery"]["method"] == "SELF-CHECKOUT"
|
|
412
|
+
|
|
413
|
+
# test self-checkout with item marked as missing raises no error and marks the item as CAN_CIRCULATE
|
|
414
|
+
missing_item_pid = "itemid-1"
|
|
415
|
+
app.config["ILS_SELF_CHECKOUT_ENABLED"] = True
|
|
416
|
+
patron2 = user_login(client, "patron2", users)
|
|
417
|
+
res = _self_checkout(patron2, missing_item_pid, "docid-1")
|
|
418
|
+
assert res.status_code == 202
|
|
419
|
+
response = res.get_json()
|
|
420
|
+
assert response["metadata"]["delivery"]["method"] == "SELF-CHECKOUT"
|
|
421
|
+
item = Item.get_record_by_pid(missing_item_pid)
|
|
422
|
+
assert item["status"] == "CAN_CIRCULATE"
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import json
|
|
11
11
|
|
|
12
12
|
import arrow
|
|
13
|
+
import pytest
|
|
13
14
|
from flask import url_for
|
|
14
15
|
|
|
15
16
|
from invenio_app_ils.closures.api import find_next_open_date
|
|
@@ -21,6 +22,7 @@ _LOCATION_PID = "locid-1"
|
|
|
21
22
|
_LOCATION_NAME = "Location name"
|
|
22
23
|
_ITEM_ENDPOINT = "invenio_records_rest.locid_item"
|
|
23
24
|
_LIST_ENDPOINT = "invenio_records_rest.locid_list"
|
|
25
|
+
_CLOSURE_PERIODS_ENDPOINT = "invenio_app_ils_closures.location_closure_periods"
|
|
24
26
|
_WEEKDAYS = [
|
|
25
27
|
"monday",
|
|
26
28
|
"tuesday",
|
|
@@ -261,7 +263,8 @@ def test_location_validation(client, json_headers, users, testdata):
|
|
|
261
263
|
)
|
|
262
264
|
|
|
263
265
|
|
|
264
|
-
|
|
266
|
+
@pytest.fixture
|
|
267
|
+
def location_closures_testdata(db, testdata):
|
|
265
268
|
def _update_location_closures_data(closed_weekdays, exceptions):
|
|
266
269
|
Location = current_app_ils.location_record_cls
|
|
267
270
|
record = Location.get_record_by_pid(_LOCATION_PID)
|
|
@@ -273,13 +276,6 @@ def test_find_next_open_date(app, db, testdata):
|
|
|
273
276
|
|
|
274
277
|
return record
|
|
275
278
|
|
|
276
|
-
def _test(start_date, expected_next_open_date):
|
|
277
|
-
next_open = find_next_open_date(_LOCATION_PID, _date_from_string(start_date))
|
|
278
|
-
if expected_next_open_date:
|
|
279
|
-
assert next_open == _date_from_string(expected_next_open_date)
|
|
280
|
-
else:
|
|
281
|
-
assert next_open is None
|
|
282
|
-
|
|
283
279
|
"""
|
|
284
280
|
Mon. Tue. Wed. Thu. Fri. Sat. Sun.
|
|
285
281
|
27 28 29 30 31 -01 -02
|
|
@@ -300,6 +296,15 @@ def test_find_next_open_date(app, db, testdata):
|
|
|
300
296
|
]
|
|
301
297
|
_update_location_closures_data(closed_weekdays, exceptions)
|
|
302
298
|
|
|
299
|
+
|
|
300
|
+
def test_find_next_open_date(app, location_closures_testdata):
|
|
301
|
+
def _test(start_date, expected_next_open_date):
|
|
302
|
+
next_open = find_next_open_date(_LOCATION_PID, _date_from_string(start_date))
|
|
303
|
+
if expected_next_open_date:
|
|
304
|
+
assert next_open == _date_from_string(expected_next_open_date)
|
|
305
|
+
else:
|
|
306
|
+
assert next_open is None
|
|
307
|
+
|
|
303
308
|
_test("2000-01-01", "2000-01-06")
|
|
304
309
|
_test("2000-01-04", "2000-01-06")
|
|
305
310
|
_test("2000-01-06", "2000-01-06")
|
|
@@ -313,3 +318,36 @@ def test_find_next_open_date(app, db, testdata):
|
|
|
313
318
|
_test("2000-01-30", "2000-01-30")
|
|
314
319
|
|
|
315
320
|
_test("2000-02-05", "2000-02-07")
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
def test_get_closure_periods(client, location_closures_testdata, json_headers):
|
|
324
|
+
"""Test get closure periods."""
|
|
325
|
+
url = url_for(
|
|
326
|
+
_CLOSURE_PERIODS_ENDPOINT,
|
|
327
|
+
pid_value=_LOCATION_PID,
|
|
328
|
+
year=2000,
|
|
329
|
+
)
|
|
330
|
+
res = client.get(url, headers=json_headers)
|
|
331
|
+
assert res.status_code in _HTTP_OK
|
|
332
|
+
|
|
333
|
+
hits = json.loads(res.data.decode("utf-8"))["closure_periods"]
|
|
334
|
+
hits = [
|
|
335
|
+
(_date_from_string(hit["start"]), _date_from_string(hit["end"])) for hit in hits
|
|
336
|
+
]
|
|
337
|
+
|
|
338
|
+
def _is_in_interval(date, interval):
|
|
339
|
+
return interval[0] <= date <= interval[1]
|
|
340
|
+
|
|
341
|
+
def _test(date, closed):
|
|
342
|
+
date = _date_from_string(date)
|
|
343
|
+
assert (
|
|
344
|
+
any(_is_in_interval(date, hit) for hit in hits) == closed
|
|
345
|
+
), f"Date {date} is wrongfully marked as {'Open' if closed else 'Closed'}"
|
|
346
|
+
|
|
347
|
+
_test("2000-01-01", True)
|
|
348
|
+
_test("2000-01-06", False)
|
|
349
|
+
_test("2000-01-22", True)
|
|
350
|
+
_test("2000-01-23", True)
|
|
351
|
+
_test("2000-01-30", False)
|
|
352
|
+
_test("2000-02-01", False)
|
|
353
|
+
_test("2000-02-05", True)
|
|
@@ -289,5 +289,16 @@
|
|
|
289
289
|
"medium": "NOT_SPECIFIED",
|
|
290
290
|
"status": "CAN_CIRCULATE",
|
|
291
291
|
"document": {}
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"pid": "itemid-74",
|
|
295
|
+
"created_by": { "type": "script", "value": "demo" },
|
|
296
|
+
"barcode": "123456789-74",
|
|
297
|
+
"document_pid": "docid-17",
|
|
298
|
+
"internal_location_pid": "ilocid-1",
|
|
299
|
+
"circulation_restriction": "NO_RESTRICTION",
|
|
300
|
+
"medium": "NOT_SPECIFIED",
|
|
301
|
+
"status": "IN_BINDING",
|
|
302
|
+
"document": {}
|
|
292
303
|
}
|
|
293
304
|
]
|