invenio-app-ils 4.4.0__tar.gz → 4.6.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.
Files changed (588) hide show
  1. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/CHANGES.rst +9 -0
  2. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/PKG-INFO +12 -3
  3. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/__init__.py +1 -1
  4. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/api.py +11 -6
  5. invenio_app_ils-4.6.0/invenio_app_ils/closures/api.py +134 -0
  6. invenio_app_ils-4.6.0/invenio_app_ils/closures/serializers/__init__.py +16 -0
  7. invenio_app_ils-4.6.0/invenio_app_ils/closures/serializers/response.py +35 -0
  8. invenio_app_ils-4.6.0/invenio_app_ils/closures/serializers/schema.py +28 -0
  9. invenio_app_ils-4.6.0/invenio_app_ils/closures/views.py +66 -0
  10. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils.egg-info/PKG-INFO +12 -3
  11. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils.egg-info/SOURCES.txt +4 -0
  12. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils.egg-info/entry_points.txt +1 -0
  13. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils.egg-info/requires.txt +0 -1
  14. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/run-tests.sh +2 -2
  15. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/setup.cfg +1 -1
  16. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_checkout.py +29 -3
  17. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_closures.py +46 -8
  18. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/items.json +11 -0
  19. invenio_app_ils-4.4.0/invenio_app_ils/closures/api.py +0 -66
  20. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/.editorconfig +0 -0
  21. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/.git-blame-ignore-revs +0 -0
  22. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/AUTHORS.rst +0 -0
  23. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/CONTRIBUTING.rst +0 -0
  24. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/INSTALL.rst +0 -0
  25. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/LICENSE +0 -0
  26. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/MANIFEST.in +0 -0
  27. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/README.rst +0 -0
  28. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/backend/Dockerfile +0 -0
  29. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/frontend/Dockerfile +0 -0
  30. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/frontend/conf.d/default.conf +0 -0
  31. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/frontend/nginx.conf +0 -0
  32. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/frontend/test.crt +0 -0
  33. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/frontend/test.key +0 -0
  34. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/lb/Dockerfile +0 -0
  35. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/lb/haproxy.cfg +0 -0
  36. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker/lb/haproxy_cert.pem +0 -0
  37. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker-compose.full.yml +0 -0
  38. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker-compose.yml +0 -0
  39. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docker-services.yml +0 -0
  40. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/Makefile +0 -0
  41. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/authors.rst +0 -0
  42. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/changes.rst +0 -0
  43. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/conf.py +0 -0
  44. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/configuration.rst +0 -0
  45. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/contributing.rst +0 -0
  46. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/index.rst +0 -0
  47. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/installation.rst +0 -0
  48. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/license.rst +0 -0
  49. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/make.bat +0 -0
  50. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/requirements.txt +0 -0
  51. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/docs/usage.rst +0 -0
  52. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/__init__.py +0 -0
  53. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/api.py +0 -0
  54. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/config.py +0 -0
  55. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/errors.py +0 -0
  56. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/ext.py +0 -0
  57. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/jsonresolvers/__init__.py +0 -0
  58. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/jsonresolvers/order_order_lines.py +0 -0
  59. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/jsonresolvers/order_provider.py +0 -0
  60. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/loaders/__init__.py +0 -0
  61. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/loaders/jsonschemas/__init__.py +0 -0
  62. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/loaders/jsonschemas/order.py +0 -0
  63. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/mappings/__init__.py +0 -0
  64. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/mappings/os-v1/__init__.py +0 -0
  65. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/mappings/os-v1/acq_orders/order-v1.0.0.json +0 -0
  66. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/mappings/os-v2/__init__.py +0 -0
  67. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/mappings/os-v2/acq_orders/order-v1.0.0.json +0 -0
  68. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/mappings/v7/__init__.py +0 -0
  69. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/mappings/v7/acq_orders/order-v1.0.0.json +0 -0
  70. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/proxies.py +0 -0
  71. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/schemas/__init__.py +0 -0
  72. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/schemas/acq_orders/order-v1.0.0.json +0 -0
  73. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/acquisition/search.py +0 -0
  74. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/__init__.py +0 -0
  75. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/config.py +0 -0
  76. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/indexer.py +0 -0
  77. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/jsonresolvers/__init__.py +0 -0
  78. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/jsonresolvers/loan.py +0 -0
  79. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/__init__.py +0 -0
  80. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/schemas/__init__.py +0 -0
  81. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/schemas/json/__init__.py +0 -0
  82. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/schemas/json/base.py +0 -0
  83. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/schemas/json/bulk_extend.py +0 -0
  84. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_checkout.py +0 -0
  85. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +0 -0
  86. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_self_checkout.py +0 -0
  87. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_update_dates.py +0 -0
  88. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/notifications/__init__.py +0 -0
  89. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/notifications/api.py +0 -0
  90. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/notifications/messages.py +0 -0
  91. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/notifications/tasks.py +0 -0
  92. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/receivers.py +0 -0
  93. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/search.py +0 -0
  94. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/serializers/__init__.py +0 -0
  95. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/serializers/csv.py +0 -0
  96. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/serializers/custom_fields.py +0 -0
  97. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/serializers/json.py +0 -0
  98. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/serializers/response.py +0 -0
  99. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/stats/__init__.py +0 -0
  100. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/stats/api.py +0 -0
  101. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/stats/views.py +0 -0
  102. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/tasks.py +0 -0
  103. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/bulk_extend.html +0 -0
  104. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/cancel.html +0 -0
  105. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkin.html +0 -0
  106. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkout.html +0 -0
  107. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/extend.html +0 -0
  108. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/overdue_reminder.html +0 -0
  109. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request.html +0 -0
  110. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request_no_items.html +0 -0
  111. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/self_checkout.html +0 -0
  112. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/will_expire_in_reminder.html +0 -0
  113. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/transitions/__init__.py +0 -0
  114. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/transitions/transitions.py +0 -0
  115. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/utils.py +0 -0
  116. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/circulation/views.py +0 -0
  117. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/cli.py +0 -0
  118. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/closures/__init__.py +0 -0
  119. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/closures/tasks.py +0 -0
  120. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/config.py +0 -0
  121. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/demo_data/documents.json +0 -0
  122. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/demo_data/items.json +0 -0
  123. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/__init__.py +0 -0
  124. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/api.py +0 -0
  125. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/indexer.py +0 -0
  126. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/jsonresolvers/__init__.py +0 -0
  127. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_document.py +0 -0
  128. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_patron.py +0 -0
  129. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/loaders/__init__.py +0 -0
  130. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/loaders/jsonschemas/__init__.py +0 -0
  131. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request.py +0 -0
  132. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_decline.py +0 -0
  133. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_document.py +0 -0
  134. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_provider.py +0 -0
  135. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/mappings/__init__.py +0 -0
  136. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/mappings/os-v1/__init__.py +0 -0
  137. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/mappings/os-v1/document_requests/document_request-v1.0.0.json +0 -0
  138. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/mappings/os-v2/__init__.py +0 -0
  139. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/mappings/os-v2/document_requests/document_request-v1.0.0.json +0 -0
  140. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/mappings/v7/__init__.py +0 -0
  141. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/mappings/v7/document_requests/document_request-v1.0.0.json +0 -0
  142. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/notifications/__init__.py +0 -0
  143. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/notifications/api.py +0 -0
  144. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/notifications/messages.py +0 -0
  145. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/schemas/__init__.py +0 -0
  146. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/schemas/document_requests/document_request-v1.0.0.json +0 -0
  147. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/search.py +0 -0
  148. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_accept.html +0 -0
  149. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_in_catalog.html +0 -0
  150. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_not_found.html +0 -0
  151. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_other.html +0 -0
  152. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_user_cancel.html +0 -0
  153. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/document_requests/views.py +0 -0
  154. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/__init__.py +0 -0
  155. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/api.py +0 -0
  156. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/indexer.py +0 -0
  157. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/jsonresolvers/__init__.py +0 -0
  158. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/jsonresolvers/document_circulation.py +0 -0
  159. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/jsonresolvers/document_eitem.py +0 -0
  160. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/jsonresolvers/document_item.py +0 -0
  161. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/jsonresolvers/document_relations.py +0 -0
  162. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/jsonresolvers/document_stock.py +0 -0
  163. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/loaders/__init__.py +0 -0
  164. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/loaders/jsonschemas/__init__.py +0 -0
  165. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/loaders/jsonschemas/document.py +0 -0
  166. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/__init__.py +0 -0
  167. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/os-v1/__init__.py +0 -0
  168. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v1.0.0.json +0 -0
  169. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v2.0.0.json +0 -0
  170. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/os-v2/__init__.py +0 -0
  171. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v1.0.0.json +0 -0
  172. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v2.0.0.json +0 -0
  173. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/v7/__init__.py +0 -0
  174. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/v7/documents/document-v1.0.0.json +0 -0
  175. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/mappings/v7/documents/document-v2.0.0.json +0 -0
  176. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/schemas/__init__.py +0 -0
  177. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/schemas/documents/document-v1.0.0.json +0 -0
  178. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/schemas/documents/document-v2.0.0.json +0 -0
  179. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/search.py +0 -0
  180. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/documents/utils.py +0 -0
  181. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/__init__.py +0 -0
  182. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/api.py +0 -0
  183. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/indexer.py +0 -0
  184. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/jsonresolvers/__init__.py +0 -0
  185. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/jsonresolvers/eitem_document.py +0 -0
  186. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/jsonresolvers/eitem_files.py +0 -0
  187. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/loaders/__init__.py +0 -0
  188. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/loaders/jsonschemas/__init__.py +0 -0
  189. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/loaders/jsonschemas/eitems.py +0 -0
  190. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/__init__.py +0 -0
  191. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/os-v1/__init__.py +0 -0
  192. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v1.0.0.json +0 -0
  193. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v2.0.0.json +0 -0
  194. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v3.0.0.json +0 -0
  195. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/os-v2/__init__.py +0 -0
  196. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v1.0.0.json +0 -0
  197. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v2.0.0.json +0 -0
  198. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v3.0.0.json +0 -0
  199. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/v7/__init__.py +0 -0
  200. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v1.0.0.json +0 -0
  201. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v2.0.0.json +0 -0
  202. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v3.0.0.json +0 -0
  203. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/schemas/__init__.py +0 -0
  204. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v1.0.0.json +0 -0
  205. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v2.0.0.json +0 -0
  206. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v3.0.0.json +0 -0
  207. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/eitems/search.py +0 -0
  208. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/errors.py +0 -0
  209. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ext.py +0 -0
  210. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/facets.py +0 -0
  211. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/fetchers.py +0 -0
  212. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/files/__init__.py +0 -0
  213. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/files/receivers.py +0 -0
  214. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/files/views.py +0 -0
  215. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/__init__.py +0 -0
  216. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/api.py +0 -0
  217. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/config.py +0 -0
  218. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/errors.py +0 -0
  219. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/ext.py +0 -0
  220. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/jsonresolvers/__init__.py +0 -0
  221. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_document.py +0 -0
  222. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_patron.py +0 -0
  223. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_provider.py +0 -0
  224. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/loaders/__init__.py +0 -0
  225. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/loaders/jsonschemas/__init__.py +0 -0
  226. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/loaders/jsonschemas/borrowing_request.py +0 -0
  227. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_actions.py +0 -0
  228. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_extension_actions.py +0 -0
  229. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/mappings/__init__.py +0 -0
  230. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/mappings/os-v1/__init__.py +0 -0
  231. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/mappings/os-v1/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  232. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/mappings/os-v2/__init__.py +0 -0
  233. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/mappings/os-v2/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  234. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/mappings/v7/__init__.py +0 -0
  235. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/mappings/v7/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  236. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/notifications/__init__.py +0 -0
  237. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/notifications/api.py +0 -0
  238. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/notifications/messages.py +0 -0
  239. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/proxies.py +0 -0
  240. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/schemas/__init__.py +0 -0
  241. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/schemas/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  242. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/search.py +0 -0
  243. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/serializers/__init__.py +0 -0
  244. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/serializers/csv.py +0 -0
  245. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/serializers/custom_fields.py +0 -0
  246. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/serializers/json.py +0 -0
  247. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_accept.html +0 -0
  248. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_decline.html +0 -0
  249. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_request.html +0 -0
  250. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/ill/views.py +0 -0
  251. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/indexer.py +0 -0
  252. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/__init__.py +0 -0
  253. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/api.py +0 -0
  254. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/indexer.py +0 -0
  255. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/jsonresolvers/__init__.py +0 -0
  256. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/jsonresolvers/internal_location.py +0 -0
  257. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/loaders/__init__.py +0 -0
  258. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/__init__.py +0 -0
  259. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/internal_location.py +0 -0
  260. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/mappings/__init__.py +0 -0
  261. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/mappings/os-v1/__init__.py +0 -0
  262. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/mappings/os-v1/internal_locations/internal_location-v1.0.0.json +0 -0
  263. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/mappings/os-v2/__init__.py +0 -0
  264. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/mappings/os-v2/internal_locations/internal_location-v1.0.0.json +0 -0
  265. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/mappings/v7/__init__.py +0 -0
  266. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/mappings/v7/internal_locations/internal_location-v1.0.0.json +0 -0
  267. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/schemas/__init__.py +0 -0
  268. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/schemas/internal_locations/internal_location-v1.0.0.json +0 -0
  269. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/internal_locations/search.py +0 -0
  270. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/__init__.py +0 -0
  271. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/api.py +0 -0
  272. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/indexer.py +0 -0
  273. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/jsonresolvers/__init__.py +0 -0
  274. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/jsonresolvers/item_document.py +0 -0
  275. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/jsonresolvers/item_internal_location.py +0 -0
  276. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/jsonresolvers/item_loan.py +0 -0
  277. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/loaders/__init__.py +0 -0
  278. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/loaders/jsonschemas/__init__.py +0 -0
  279. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/loaders/jsonschemas/items.py +0 -0
  280. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/__init__.py +0 -0
  281. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/os-v1/__init__.py +0 -0
  282. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/os-v1/items/item-v1.0.0.json +0 -0
  283. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/os-v1/items/item-v2.0.0.json +0 -0
  284. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/os-v2/__init__.py +0 -0
  285. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/os-v2/items/item-v1.0.0.json +0 -0
  286. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/os-v2/items/item-v2.0.0.json +0 -0
  287. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/v7/__init__.py +0 -0
  288. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/v7/items/item-v1.0.0.json +0 -0
  289. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/mappings/v7/items/item-v2.0.0.json +0 -0
  290. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/schemas/__init__.py +0 -0
  291. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/schemas/items/item-v1.0.0.json +0 -0
  292. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/schemas/items/item-v2.0.0.json +0 -0
  293. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/search.py +0 -0
  294. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/serializers/__init__.py +0 -0
  295. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/items/serializers/item.py +0 -0
  296. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/literature/__init__.py +0 -0
  297. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/literature/api.py +0 -0
  298. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/literature/covers_builder.py +0 -0
  299. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/literature/search.py +0 -0
  300. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/literature/serializers/__init__.py +0 -0
  301. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/literature/serializers/csv.py +0 -0
  302. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/literature/serializers/custom_fields.py +0 -0
  303. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/literature/serializers/json.py +0 -0
  304. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/__init__.py +0 -0
  305. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/api.py +0 -0
  306. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/indexer.py +0 -0
  307. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/loaders/__init__.py +0 -0
  308. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/loaders/jsonschemas/__init__.py +0 -0
  309. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/loaders/jsonschemas/location.py +0 -0
  310. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/mappings/__init__.py +0 -0
  311. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/mappings/os-v1/__init__.py +0 -0
  312. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/mappings/os-v1/locations/location-v1.0.0.json +0 -0
  313. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/mappings/os-v2/__init__.py +0 -0
  314. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/mappings/os-v2/locations/location-v1.0.0.json +0 -0
  315. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/mappings/v7/__init__.py +0 -0
  316. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/mappings/v7/locations/location-v1.0.0.json +0 -0
  317. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/receivers.py +0 -0
  318. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/schemas/__init__.py +0 -0
  319. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/schemas/locations/location-v1.0.0.json +0 -0
  320. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/locations/search.py +0 -0
  321. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/minters.py +0 -0
  322. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/__init__.py +0 -0
  323. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/admin.py +0 -0
  324. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/api.py +0 -0
  325. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/backends/__init__.py +0 -0
  326. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/backends/mail.py +0 -0
  327. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/messages.py +0 -0
  328. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/models.py +0 -0
  329. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/tasks.py +0 -0
  330. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/notifications/views.py +0 -0
  331. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/__init__.py +0 -0
  332. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/anonymization.py +0 -0
  333. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/api.py +0 -0
  334. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/cli.py +0 -0
  335. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/indexer.py +0 -0
  336. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/mappings/__init__.py +0 -0
  337. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/mappings/os-v1/__init__.py +0 -0
  338. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/mappings/os-v1/patrons/patron-v1.0.0.json +0 -0
  339. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/mappings/os-v2/__init__.py +0 -0
  340. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/mappings/os-v2/patrons/patron-v1.0.0.json +0 -0
  341. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/mappings/v7/__init__.py +0 -0
  342. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/mappings/v7/patrons/patron-v1.0.0.json +0 -0
  343. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/search.py +0 -0
  344. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/patrons/views.py +0 -0
  345. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/permissions.py +0 -0
  346. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/__init__.py +0 -0
  347. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/api.py +0 -0
  348. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/config.py +0 -0
  349. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/errors.py +0 -0
  350. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/ext.py +0 -0
  351. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/indexer.py +0 -0
  352. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/loaders/__init__.py +0 -0
  353. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/loaders/jsonschemas/__init__.py +0 -0
  354. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/loaders/jsonschemas/provider.py +0 -0
  355. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/mappings/__init__.py +0 -0
  356. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/mappings/os-v1/__init__.py +0 -0
  357. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/mappings/os-v1/providers/provider-v1.0.0.json +0 -0
  358. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/mappings/os-v2/__init__.py +0 -0
  359. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/mappings/os-v2/providers/provider-v1.0.0.json +0 -0
  360. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/mappings/v7/__init__.py +0 -0
  361. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/mappings/v7/providers/provider-v1.0.0.json +0 -0
  362. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/proxies.py +0 -0
  363. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/schemas/__init__.py +0 -0
  364. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/schemas/providers/provider-v1.0.0.json +0 -0
  365. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/providers/search.py +0 -0
  366. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/proxies.py +0 -0
  367. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/__init__.py +0 -0
  368. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/api.py +0 -0
  369. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/jsonresolvers/__init__.py +0 -0
  370. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/jsonresolvers/api.py +0 -0
  371. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/listeners.py +0 -0
  372. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/loaders/__init__.py +0 -0
  373. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/loaders/schemas/__init__.py +0 -0
  374. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/loaders/schemas/changed_by.py +0 -0
  375. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/loaders/schemas/identifiers.py +0 -0
  376. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/loaders/schemas/preserve_cover_metadata.py +0 -0
  377. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/loaders/schemas/price.py +0 -0
  378. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/metadata_extensions.py +0 -0
  379. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/permissions.py +0 -0
  380. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/receivers.py +0 -0
  381. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/schemas/__init__.py +0 -0
  382. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/schemas/json.py +0 -0
  383. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/serializers/__init__.py +0 -0
  384. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records/views.py +0 -0
  385. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records_relations/__init__.py +0 -0
  386. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records_relations/api.py +0 -0
  387. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records_relations/indexer.py +0 -0
  388. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records_relations/retriever.py +0 -0
  389. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/records_relations/views.py +0 -0
  390. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/relations/__init__.py +0 -0
  391. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/relations/api.py +0 -0
  392. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/relations/nodes.py +0 -0
  393. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/search_permissions.py +0 -0
  394. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/__init__.py +0 -0
  395. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/api.py +0 -0
  396. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/indexer.py +0 -0
  397. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/jsonresolvers/__init__.py +0 -0
  398. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/jsonresolvers/series_relations.py +0 -0
  399. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/loaders/__init__.py +0 -0
  400. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/loaders/jsonschemas/__init__.py +0 -0
  401. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/loaders/jsonschemas/series.py +0 -0
  402. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/__init__.py +0 -0
  403. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/os-v1/__init__.py +0 -0
  404. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/os-v1/series/series-v1.0.0.json +0 -0
  405. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/os-v1/series/series-v2.0.0.json +0 -0
  406. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/os-v2/__init__.py +0 -0
  407. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/os-v2/series/series-v1.0.0.json +0 -0
  408. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/os-v2/series/series-v2.0.0.json +0 -0
  409. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/v7/__init__.py +0 -0
  410. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/v7/series/series-v1.0.0.json +0 -0
  411. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/mappings/v7/series/series-v2.0.0.json +0 -0
  412. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/schemas/__init__.py +0 -0
  413. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/schemas/series/series-v1.0.0.json +0 -0
  414. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/schemas/series/series-v2.0.0.json +0 -0
  415. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/series/search.py +0 -0
  416. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/signals.py +0 -0
  417. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/static/images/placeholder.png +0 -0
  418. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/static_pages/search_guide.html +0 -0
  419. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/__init__.py +0 -0
  420. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/aggregations/__init__.py +0 -0
  421. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/aggregations/aggr_file_download/__init__.py +0 -0
  422. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/__init__.py +0 -0
  423. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/aggr-file-download-v1.json +0 -0
  424. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/__init__.py +0 -0
  425. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/aggr-file-download-v1.json +0 -0
  426. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/__init__.py +0 -0
  427. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/aggr-file-download-v1.json +0 -0
  428. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/file_download/__init__.py +0 -0
  429. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/file_download/os-v1/__init__.py +0 -0
  430. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/file_download/os-v1/file-download-v1.json +0 -0
  431. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/file_download/os-v2/__init__.py +0 -0
  432. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/file_download/os-v2/file-download-v1.json +0 -0
  433. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/file_download/v7/__init__.py +0 -0
  434. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/stats/file_download/v7/file-download-v1.json +0 -0
  435. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/templates/invenio_app_ils/mail/footer.html +0 -0
  436. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/templates/invenio_app_ils/notifications/footer.html +0 -0
  437. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/templates/logged_out.html +0 -0
  438. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/translations/.gitkeep +0 -0
  439. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/views.py +0 -0
  440. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/__init__.py +0 -0
  441. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/api.py +0 -0
  442. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/cli.py +0 -0
  443. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/__init__.py +0 -0
  444. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/acq_mediums.json +0 -0
  445. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/acq_order_line_payment_modes.json +0 -0
  446. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/acq_order_line_purchase_types.json +0 -0
  447. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/acq_payment_modes.json +0 -0
  448. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/acq_recipients.json +0 -0
  449. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/affiliation_identifier_schemes.json +0 -0
  450. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/alternative_identifier_schemes.json +0 -0
  451. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/alternative_title_types.json +0 -0
  452. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/author_identifier_schemes.json +0 -0
  453. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/author_roles.json +0 -0
  454. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/author_types.json +0 -0
  455. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/conference_identifier_schemes.json +0 -0
  456. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/countries.json +0 -0
  457. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/currencies.json +0 -0
  458. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/docreq_payment_method.json +0 -0
  459. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/docreq_request_type.json +0 -0
  460. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/document_identifiers_materials.json +0 -0
  461. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/document_requests_mediums.json +0 -0
  462. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/document_subjects.json +0 -0
  463. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/eitem_sources.json +0 -0
  464. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/identifier_schemes.json +0 -0
  465. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/ill_item_types.json +0 -0
  466. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/ill_payment_modes.json +0 -0
  467. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/item_mediums.json +0 -0
  468. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/provider_types.json +0 -0
  469. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/series_identifier_schemes.json +0 -0
  470. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/series_url_access_restrictions.json +0 -0
  471. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/data/tags.json +0 -0
  472. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/indexer.py +0 -0
  473. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/jsonresolvers/__init__.py +0 -0
  474. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/jsonresolvers/licenses.py +0 -0
  475. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/mappings/__init__.py +0 -0
  476. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/mappings/os-v1/__init__.py +0 -0
  477. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
  478. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/mappings/os-v2/__init__.py +0 -0
  479. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
  480. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/mappings/v7/__init__.py +0 -0
  481. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
  482. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/schemas/__init__.py +0 -0
  483. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/schemas/vocabularies/vocabulary-v1.0.0.json +0 -0
  484. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/search.py +0 -0
  485. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/sources/__init__.py +0 -0
  486. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/sources/base.py +0 -0
  487. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/sources/json.py +0 -0
  488. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils/vocabularies/sources/opendefinition.py +0 -0
  489. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils.egg-info/dependency_links.txt +0 -0
  490. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils.egg-info/not-zip-safe +0 -0
  491. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/invenio_app_ils.egg-info/top_level.txt +0 -0
  492. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/pyproject.toml +0 -0
  493. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/scripts/bootstrap +0 -0
  494. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/scripts/build_assets +0 -0
  495. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/scripts/celery +0 -0
  496. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/scripts/console +0 -0
  497. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/scripts/server +0 -0
  498. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/scripts/setup +0 -0
  499. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/scripts/update +0 -0
  500. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/setup.py +0 -0
  501. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/__init__.py +0 -0
  502. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/__init__.py +0 -0
  503. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/acquisition/__init__.py +0 -0
  504. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/acquisition/test_acq_orders_crud.py +0 -0
  505. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/acquisition/test_acq_orders_permissions.py +0 -0
  506. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/acquisition/test_acq_providers_permissions.py +0 -0
  507. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/__init__.py +0 -0
  508. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_expired_loans.py +0 -0
  509. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_bulk_extend.py +0 -0
  510. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_default_durations.py +0 -0
  511. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_document_resolver.py +0 -0
  512. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_extend.py +0 -0
  513. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_item_permissions.py +0 -0
  514. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_item_resolver.py +0 -0
  515. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_list_permissions.py +0 -0
  516. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_patron_resolver.py +0 -0
  517. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_request.py +0 -0
  518. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_loan_update.py +0 -0
  519. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/circulation/test_notifications.py +0 -0
  520. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/conftest.py +0 -0
  521. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/document_requests/__init__.py +0 -0
  522. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/document_requests/test_document_requests.py +0 -0
  523. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/document_requests/test_document_requests_permissions.py +0 -0
  524. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/document_requests/test_notifications_filter.py +0 -0
  525. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ill/__init__.py +0 -0
  526. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ill/test_ill_brw_crud.py +0 -0
  527. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ill/test_ill_brw_reqs_patron_loan_create_action.py +0 -0
  528. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ill/test_ill_brw_reqs_patron_loan_extension_actions.py +0 -0
  529. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ill/test_ill_brw_reqs_permissions.py +0 -0
  530. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ill/test_ill_providers_permissions.py +0 -0
  531. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/__init__.py +0 -0
  532. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/documents/__init__.py +0 -0
  533. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/documents/test_document_crud.py +0 -0
  534. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/documents/test_document_permissions.py +0 -0
  535. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/documents/test_document_resolvers.py +0 -0
  536. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/eitems/__init__.py +0 -0
  537. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/eitems/test_eitems_crud.py +0 -0
  538. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/eitems/test_eitems_permissions.py +0 -0
  539. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/eitems/test_files.py +0 -0
  540. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/items/__init__.py +0 -0
  541. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/items/test_apis.py +0 -0
  542. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/items/test_items_crud.py +0 -0
  543. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/items/test_items_permissions.py +0 -0
  544. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/records_relations/__init__.py +0 -0
  545. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/records_relations/helpers.py +0 -0
  546. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/records_relations/test_records_relations_parentchild.py +0 -0
  547. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/records_relations/test_records_relations_sequence.py +0 -0
  548. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/records_relations/test_records_relations_siblings.py +0 -0
  549. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/series/__init__.py +0 -0
  550. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/series/test_series_permissions.py +0 -0
  551. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_anonymization.py +0 -0
  552. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_apis.py +0 -0
  553. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_errors.py +0 -0
  554. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_facets.py +0 -0
  555. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_internal_locations.py +0 -0
  556. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_loaders.py +0 -0
  557. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_metadata_extensions.py +0 -0
  558. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_notifications.py +0 -0
  559. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_notifications_mails.py +0 -0
  560. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_notifications_permissions.py +0 -0
  561. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_patrons.py +0 -0
  562. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_record_delete.py +0 -0
  563. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_record_permissions.py +0 -0
  564. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_resolvers.py +0 -0
  565. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_stats.py +0 -0
  566. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_tasks.py +0 -0
  567. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/api/ils/test_vocabularies.py +0 -0
  568. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/conftest.py +0 -0
  569. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/acq_orders.json +0 -0
  570. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/acq_providers.json +0 -0
  571. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/document_requests.json +0 -0
  572. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/documents.json +0 -0
  573. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/eitems.json +0 -0
  574. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/ill_borrowing_requests.json +0 -0
  575. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/ill_providers.json +0 -0
  576. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/internal_locations.json +0 -0
  577. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/loans.json +0 -0
  578. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/loans_most_loaned.json +0 -0
  579. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/locations.json +0 -0
  580. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/data/series.json +0 -0
  581. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/helpers.py +0 -0
  582. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/templates/notifications/blank.html +0 -0
  583. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/templates/notifications/title_body.html +0 -0
  584. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/templates/notifications/title_body_html.html +0 -0
  585. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/templates/notifications/title_body_html_ctx.html +0 -0
  586. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/templates/notifications/title_only.html +0 -0
  587. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/test_post_logout_redirect.py +0 -0
  588. {invenio_app_ils-4.4.0 → invenio_app_ils-4.6.0}/tests/test_version.py +0 -0
@@ -8,6 +8,15 @@
8
8
  Changes
9
9
  =======
10
10
 
11
+ Version 4.6.0 (released 2025-06-25)
12
+
13
+ - installation: remove breaking package version constraints
14
+
15
+ Version 4.5.0 (released 2025-06-04)
16
+
17
+ - closures: added endpoint for closure periods in a year
18
+ - circulation: self-checkout of MISSING items marks them as CAN_CIRCULATE
19
+ - tests: Fix comment on running tests by bumping Postgres & adding param
11
20
 
12
21
  Version 4.4.0 (released 2025-02-21)
13
22
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: invenio-app-ils
3
- Version: 4.4.0
3
+ Version: 4.6.0
4
4
  Summary: Invenio Integrated Library System.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-app-ils
6
6
  Author: CERN
@@ -47,7 +47,6 @@ Requires-Dist: invenio-stats<5.0.0,>=4.0.0
47
47
  Requires-Dist: Flask-Debugtoolbar<1.0.0,>=0.10.1
48
48
  Requires-Dist: pycountry<23.0.0,>=20.0.0
49
49
  Requires-Dist: simplejson<4.0.0,>=3.8.1
50
- Requires-Dist: pluggy<1.0.0,>=0.13.1
51
50
  Requires-Dist: jsonschema<5.0.0,>=4.3.0
52
51
  Requires-Dist: itsdangerous<2.1,>=1.1
53
52
  Requires-Dist: SQLAlchemy<2.0.0,>=1.3.0
@@ -66,6 +65,7 @@ Requires-Dist: lorem>=0.1.1; extra == "lorem"
66
65
  Provides-Extra: opensearch2
67
66
  Requires-Dist: invenio-search[opensearch2]<3.0.0,>=2.0.0; extra == "opensearch2"
68
67
  Provides-Extra: docs
68
+ Dynamic: license-file
69
69
 
70
70
  ..
71
71
  Copyright (C) 2018-2020 CERN.
@@ -101,6 +101,15 @@ https://invenioils.docs.cern.ch
101
101
  Changes
102
102
  =======
103
103
 
104
+ Version 4.6.0 (released 2025-06-25)
105
+
106
+ - installation: remove breaking package version constraints
107
+
108
+ Version 4.5.0 (released 2025-06-04)
109
+
110
+ - closures: added endpoint for closure periods in a year
111
+ - circulation: self-checkout of MISSING items marks them as CAN_CIRCULATE
112
+ - tests: Fix comment on running tests by bumping Postgres & adding param
104
113
 
105
114
  Version 4.4.0 (released 2025-02-21)
106
115
 
@@ -7,6 +7,6 @@
7
7
 
8
8
  """invenio-app-ils."""
9
9
 
10
- __version__ = "4.4.0"
10
+ __version__ = "4.6.0"
11
11
 
12
12
  __all__ = ("__version__",)
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2018-2020 CERN.
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(item_pid):
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(item_pid["value"])
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(item_pid):
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(item_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.2
1
+ Metadata-Version: 2.4
2
2
  Name: invenio-app-ils
3
- Version: 4.4.0
3
+ Version: 4.6.0
4
4
  Summary: Invenio Integrated Library System.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-app-ils
6
6
  Author: CERN
@@ -47,7 +47,6 @@ Requires-Dist: invenio-stats<5.0.0,>=4.0.0
47
47
  Requires-Dist: Flask-Debugtoolbar<1.0.0,>=0.10.1
48
48
  Requires-Dist: pycountry<23.0.0,>=20.0.0
49
49
  Requires-Dist: simplejson<4.0.0,>=3.8.1
50
- Requires-Dist: pluggy<1.0.0,>=0.13.1
51
50
  Requires-Dist: jsonschema<5.0.0,>=4.3.0
52
51
  Requires-Dist: itsdangerous<2.1,>=1.1
53
52
  Requires-Dist: SQLAlchemy<2.0.0,>=1.3.0
@@ -66,6 +65,7 @@ Requires-Dist: lorem>=0.1.1; extra == "lorem"
66
65
  Provides-Extra: opensearch2
67
66
  Requires-Dist: invenio-search[opensearch2]<3.0.0,>=2.0.0; extra == "opensearch2"
68
67
  Provides-Extra: docs
68
+ Dynamic: license-file
69
69
 
70
70
  ..
71
71
  Copyright (C) 2018-2020 CERN.
@@ -101,6 +101,15 @@ https://invenioils.docs.cern.ch
101
101
  Changes
102
102
  =======
103
103
 
104
+ Version 4.6.0 (released 2025-06-25)
105
+
106
+ - installation: remove breaking package version constraints
107
+
108
+ Version 4.5.0 (released 2025-06-04)
109
+
110
+ - closures: added endpoint for closure periods in a year
111
+ - circulation: self-checkout of MISSING items marks them as CAN_CIRCULATE
112
+ - tests: Fix comment on running tests by bumping Postgres & adding param
104
113
 
105
114
  Version 4.4.0 (released 2025-02-21)
106
115
 
@@ -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
@@ -33,7 +33,6 @@ invenio-stats<5.0.0,>=4.0.0
33
33
  Flask-Debugtoolbar<1.0.0,>=0.10.1
34
34
  pycountry<23.0.0,>=20.0.0
35
35
  simplejson<4.0.0,>=3.8.1
36
- pluggy<1.0.0,>=0.13.1
37
36
  jsonschema<5.0.0,>=4.3.0
38
37
  itsdangerous<2.1,>=1.1
39
38
  SQLAlchemy<2.0.0,>=1.3.0
@@ -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 postgresql12 --search opensearch2 --cache redis --env)"
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
 
@@ -53,7 +53,6 @@ install_requires =
53
53
  Flask-Debugtoolbar>=0.10.1,<1.0.0
54
54
  pycountry>=20.0.0,<23.0.0
55
55
  simplejson>=3.8.1,<4.0.0
56
- pluggy>=0.13.1,<1.0.0
57
56
  jsonschema>=4.3.0,<5.0.0
58
57
  itsdangerous>=1.1,<2.1
59
58
  SQLAlchemy>=1.3.0,<2.0.0
@@ -106,6 +105,7 @@ invenio_base.api_blueprints =
106
105
  ils_relations = invenio_app_ils.records_relations.views:create_relations_blueprint
107
106
  ils_document_request = invenio_app_ils.document_requests.views:create_document_request_action_blueprint
108
107
  ils_document_stats = invenio_app_ils.records.views:create_document_stats_blueprint
108
+ ils_closures = invenio_app_ils.closures.views:create_closures_blueprint
109
109
  ils_files = invenio_app_ils.files.views:create_files_blueprint
110
110
  ils_patrons = invenio_app_ils.patrons.views:get_user_loan_information_blueprint
111
111
  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-2020 CERN.
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
- missing_item_barcode = "123456789-1"
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={missing_item_barcode}", headers=json_headers)
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
- def test_find_next_open_date(app, db, testdata):
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
  ]