invenio-app-ils 5.1.0__tar.gz → 6.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/CHANGES.rst +13 -0
  2. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/MANIFEST.in +1 -0
  3. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/PKG-INFO +14 -1
  4. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/__init__.py +1 -1
  5. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/config.py +7 -3
  6. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/config.py +2 -2
  7. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/cli.py +11 -0
  8. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/closures/views.py +2 -2
  9. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/config.py +127 -13
  10. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/api.py +1 -1
  11. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/config.py +2 -2
  12. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/notifications/views.py +2 -2
  13. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/anonymization.py +3 -1
  14. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/permissions.py +24 -2
  15. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/config.py +6 -3
  16. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/permissions.py +8 -2
  17. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/views.py +2 -2
  18. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/search_permissions.py +3 -3
  19. invenio_app_ils-6.1.0/invenio_app_ils/stats/event_builders.py +73 -0
  20. invenio_app_ils-6.1.0/invenio_app_ils/stats/processors.py +30 -0
  21. invenio_app_ils-6.1.0/invenio_app_ils/stats/templates/aggregations/__init__.py +8 -0
  22. invenio_app_ils-6.1.0/invenio_app_ils/stats/templates/aggregations/ils_record_changes/__init__.py +8 -0
  23. invenio_app_ils-6.1.0/invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/__init__.py +8 -0
  24. invenio_app_ils-6.1.0/invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/aggr-ils-record-changes-v1.json +41 -0
  25. invenio_app_ils-6.1.0/invenio_app_ils/stats/templates/events/__init__.py +8 -0
  26. invenio_app_ils-6.1.0/invenio_app_ils/stats/templates/events/ils_record_changes/__init__.py +8 -0
  27. invenio_app_ils-6.1.0/invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/__init__.py +8 -0
  28. invenio_app_ils-6.1.0/invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/ils-record-changes-v1.json +41 -0
  29. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils.egg-info/PKG-INFO +14 -1
  30. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils.egg-info/SOURCES.txt +10 -0
  31. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils.egg-info/entry_points.txt +1 -0
  32. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/setup.cfg +1 -0
  33. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/.editorconfig +0 -0
  34. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/.git-blame-ignore-revs +0 -0
  35. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/AUTHORS.rst +0 -0
  36. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/CONTRIBUTING.rst +0 -0
  37. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/INSTALL.rst +0 -0
  38. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/LICENSE +0 -0
  39. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/README.rst +0 -0
  40. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/backend/Dockerfile +0 -0
  41. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/frontend/Dockerfile +0 -0
  42. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/frontend/conf.d/default.conf +0 -0
  43. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/frontend/nginx.conf +0 -0
  44. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/frontend/test.crt +0 -0
  45. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/frontend/test.key +0 -0
  46. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/lb/Dockerfile +0 -0
  47. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/lb/haproxy.cfg +0 -0
  48. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker/lb/haproxy_cert.pem +0 -0
  49. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker-compose.full.yml +0 -0
  50. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker-compose.yml +0 -0
  51. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/docker-services.yml +0 -0
  52. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/__init__.py +0 -0
  53. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/api.py +0 -0
  54. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/errors.py +0 -0
  55. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/ext.py +0 -0
  56. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/jsonresolvers/__init__.py +0 -0
  57. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/jsonresolvers/order_order_lines.py +0 -0
  58. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/jsonresolvers/order_provider.py +0 -0
  59. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/loaders/__init__.py +0 -0
  60. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/loaders/jsonschemas/__init__.py +0 -0
  61. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/loaders/jsonschemas/order.py +0 -0
  62. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/mappings/__init__.py +0 -0
  63. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/mappings/os-v1/__init__.py +0 -0
  64. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/mappings/os-v1/acq_orders/order-v1.0.0.json +0 -0
  65. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/mappings/os-v2/__init__.py +0 -0
  66. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/mappings/os-v2/acq_orders/order-v1.0.0.json +0 -0
  67. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/mappings/v7/__init__.py +0 -0
  68. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/mappings/v7/acq_orders/order-v1.0.0.json +0 -0
  69. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/proxies.py +0 -0
  70. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/schemas/__init__.py +0 -0
  71. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/schemas/acq_orders/order-v1.0.0.json +0 -0
  72. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/acquisition/search.py +0 -0
  73. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/assets/semantic-ui/less/theme.config +0 -0
  74. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/assets/semantic-ui/templates/.gitkeep +0 -0
  75. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/__init__.py +0 -0
  76. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/api.py +0 -0
  77. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/indexer.py +0 -0
  78. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/jsonresolvers/__init__.py +0 -0
  79. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/jsonresolvers/loan.py +0 -0
  80. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/__init__.py +0 -0
  81. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/schemas/__init__.py +0 -0
  82. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/schemas/json/__init__.py +0 -0
  83. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/schemas/json/base.py +0 -0
  84. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/schemas/json/bulk_extend.py +0 -0
  85. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_checkout.py +0 -0
  86. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +0 -0
  87. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_self_checkout.py +0 -0
  88. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_update_dates.py +0 -0
  89. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/notifications/__init__.py +0 -0
  90. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/notifications/api.py +0 -0
  91. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/notifications/messages.py +0 -0
  92. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/notifications/tasks.py +0 -0
  93. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/receivers.py +0 -0
  94. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/search.py +0 -0
  95. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/serializers/__init__.py +0 -0
  96. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/serializers/csv.py +0 -0
  97. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/serializers/custom_fields.py +0 -0
  98. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/serializers/json.py +0 -0
  99. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/serializers/response.py +0 -0
  100. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/stats/__init__.py +0 -0
  101. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/stats/api.py +0 -0
  102. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/stats/views.py +0 -0
  103. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/tasks.py +0 -0
  104. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/bulk_extend.html +0 -0
  105. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/cancel.html +0 -0
  106. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkin.html +0 -0
  107. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkout.html +0 -0
  108. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/extend.html +0 -0
  109. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/overdue_reminder.html +0 -0
  110. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request.html +0 -0
  111. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request_no_items.html +0 -0
  112. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/self_checkout.html +0 -0
  113. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/update_dates.html +0 -0
  114. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/will_expire_in_reminder.html +0 -0
  115. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/transitions/__init__.py +0 -0
  116. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/transitions/transitions.py +0 -0
  117. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/utils.py +0 -0
  118. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/circulation/views.py +0 -0
  119. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/closures/__init__.py +0 -0
  120. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/closures/api.py +0 -0
  121. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/closures/serializers/__init__.py +0 -0
  122. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/closures/serializers/response.py +0 -0
  123. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/closures/serializers/schema.py +0 -0
  124. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/closures/tasks.py +0 -0
  125. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/demo_data/documents.json +0 -0
  126. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/demo_data/items.json +0 -0
  127. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/__init__.py +0 -0
  128. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/api.py +0 -0
  129. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/indexer.py +0 -0
  130. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/jsonresolvers/__init__.py +0 -0
  131. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_document.py +0 -0
  132. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_patron.py +0 -0
  133. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/loaders/__init__.py +0 -0
  134. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/__init__.py +0 -0
  135. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request.py +0 -0
  136. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_decline.py +0 -0
  137. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_document.py +0 -0
  138. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_provider.py +0 -0
  139. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/mappings/__init__.py +0 -0
  140. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/mappings/os-v1/__init__.py +0 -0
  141. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/mappings/os-v1/document_requests/document_request-v1.0.0.json +0 -0
  142. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/mappings/os-v2/__init__.py +0 -0
  143. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/mappings/os-v2/document_requests/document_request-v1.0.0.json +0 -0
  144. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/mappings/v7/__init__.py +0 -0
  145. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/mappings/v7/document_requests/document_request-v1.0.0.json +0 -0
  146. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/notifications/__init__.py +0 -0
  147. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/notifications/api.py +0 -0
  148. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/notifications/messages.py +0 -0
  149. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/schemas/__init__.py +0 -0
  150. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/schemas/document_requests/document_request-v1.0.0.json +0 -0
  151. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/search.py +0 -0
  152. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_accept.html +0 -0
  153. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_in_catalog.html +0 -0
  154. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_not_found.html +0 -0
  155. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_other.html +0 -0
  156. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_user_cancel.html +0 -0
  157. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/document_requests/views.py +0 -0
  158. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/__init__.py +0 -0
  159. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/api.py +0 -0
  160. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/indexer.py +0 -0
  161. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/jsonresolvers/__init__.py +0 -0
  162. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/jsonresolvers/document_circulation.py +0 -0
  163. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/jsonresolvers/document_eitem.py +0 -0
  164. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/jsonresolvers/document_item.py +0 -0
  165. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/jsonresolvers/document_relations.py +0 -0
  166. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/jsonresolvers/document_stock.py +0 -0
  167. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/loaders/__init__.py +0 -0
  168. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/loaders/jsonschemas/__init__.py +0 -0
  169. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/loaders/jsonschemas/document.py +0 -0
  170. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/__init__.py +0 -0
  171. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/os-v1/__init__.py +0 -0
  172. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v1.0.0.json +0 -0
  173. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v2.0.0.json +0 -0
  174. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/os-v2/__init__.py +0 -0
  175. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v1.0.0.json +0 -0
  176. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v2.0.0.json +0 -0
  177. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/v7/__init__.py +0 -0
  178. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/v7/documents/document-v1.0.0.json +0 -0
  179. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/mappings/v7/documents/document-v2.0.0.json +0 -0
  180. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/schemas/__init__.py +0 -0
  181. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/schemas/documents/document-v1.0.0.json +0 -0
  182. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/schemas/documents/document-v2.0.0.json +0 -0
  183. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/search.py +0 -0
  184. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/documents/utils.py +0 -0
  185. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/__init__.py +0 -0
  186. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/indexer.py +0 -0
  187. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/jsonresolvers/__init__.py +0 -0
  188. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/jsonresolvers/eitem_document.py +0 -0
  189. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/jsonresolvers/eitem_files.py +0 -0
  190. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/loaders/__init__.py +0 -0
  191. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/loaders/jsonschemas/__init__.py +0 -0
  192. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/loaders/jsonschemas/eitems.py +0 -0
  193. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/__init__.py +0 -0
  194. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/os-v1/__init__.py +0 -0
  195. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v1.0.0.json +0 -0
  196. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v2.0.0.json +0 -0
  197. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v3.0.0.json +0 -0
  198. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/os-v2/__init__.py +0 -0
  199. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v1.0.0.json +0 -0
  200. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v2.0.0.json +0 -0
  201. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v3.0.0.json +0 -0
  202. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/v7/__init__.py +0 -0
  203. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v1.0.0.json +0 -0
  204. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v2.0.0.json +0 -0
  205. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v3.0.0.json +0 -0
  206. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/schemas/__init__.py +0 -0
  207. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v1.0.0.json +0 -0
  208. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v2.0.0.json +0 -0
  209. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v3.0.0.json +0 -0
  210. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/eitems/search.py +0 -0
  211. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/errors.py +0 -0
  212. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ext.py +0 -0
  213. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/facets.py +0 -0
  214. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/fetchers.py +0 -0
  215. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/files/__init__.py +0 -0
  216. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/files/receivers.py +0 -0
  217. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/files/views.py +0 -0
  218. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/__init__.py +0 -0
  219. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/api.py +0 -0
  220. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/errors.py +0 -0
  221. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/ext.py +0 -0
  222. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/jsonresolvers/__init__.py +0 -0
  223. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_document.py +0 -0
  224. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_patron.py +0 -0
  225. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_provider.py +0 -0
  226. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/loaders/__init__.py +0 -0
  227. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/loaders/jsonschemas/__init__.py +0 -0
  228. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/loaders/jsonschemas/borrowing_request.py +0 -0
  229. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_actions.py +0 -0
  230. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_extension_actions.py +0 -0
  231. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/mappings/__init__.py +0 -0
  232. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/mappings/os-v1/__init__.py +0 -0
  233. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/mappings/os-v1/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  234. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/mappings/os-v2/__init__.py +0 -0
  235. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/mappings/os-v2/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  236. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/mappings/v7/__init__.py +0 -0
  237. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/mappings/v7/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  238. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/notifications/__init__.py +0 -0
  239. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/notifications/api.py +0 -0
  240. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/notifications/messages.py +0 -0
  241. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/proxies.py +0 -0
  242. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/schemas/__init__.py +0 -0
  243. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/schemas/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  244. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/search.py +0 -0
  245. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/serializers/__init__.py +0 -0
  246. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/serializers/csv.py +0 -0
  247. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/serializers/custom_fields.py +0 -0
  248. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/serializers/json.py +0 -0
  249. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_accept.html +0 -0
  250. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_decline.html +0 -0
  251. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_request.html +0 -0
  252. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/ill/views.py +0 -0
  253. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/indexer.py +0 -0
  254. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/__init__.py +0 -0
  255. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/api.py +0 -0
  256. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/indexer.py +0 -0
  257. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/jsonresolvers/__init__.py +0 -0
  258. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/jsonresolvers/internal_location.py +0 -0
  259. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/loaders/__init__.py +0 -0
  260. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/__init__.py +0 -0
  261. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/internal_location.py +0 -0
  262. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/mappings/__init__.py +0 -0
  263. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/mappings/os-v1/__init__.py +0 -0
  264. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/mappings/os-v1/internal_locations/internal_location-v1.0.0.json +0 -0
  265. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/mappings/os-v2/__init__.py +0 -0
  266. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/mappings/os-v2/internal_locations/internal_location-v1.0.0.json +0 -0
  267. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/mappings/v7/__init__.py +0 -0
  268. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/mappings/v7/internal_locations/internal_location-v1.0.0.json +0 -0
  269. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/schemas/__init__.py +0 -0
  270. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/schemas/internal_locations/internal_location-v1.0.0.json +0 -0
  271. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/internal_locations/search.py +0 -0
  272. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/__init__.py +0 -0
  273. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/api.py +0 -0
  274. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/indexer.py +0 -0
  275. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/jsonresolvers/__init__.py +0 -0
  276. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/jsonresolvers/item_document.py +0 -0
  277. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/jsonresolvers/item_internal_location.py +0 -0
  278. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/jsonresolvers/item_loan.py +0 -0
  279. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/loaders/__init__.py +0 -0
  280. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/loaders/jsonschemas/__init__.py +0 -0
  281. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/loaders/jsonschemas/items.py +0 -0
  282. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/__init__.py +0 -0
  283. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/os-v1/__init__.py +0 -0
  284. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/os-v1/items/item-v1.0.0.json +0 -0
  285. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/os-v1/items/item-v2.0.0.json +0 -0
  286. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/os-v2/__init__.py +0 -0
  287. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/os-v2/items/item-v1.0.0.json +0 -0
  288. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/os-v2/items/item-v2.0.0.json +0 -0
  289. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/v7/__init__.py +0 -0
  290. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/v7/items/item-v1.0.0.json +0 -0
  291. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/mappings/v7/items/item-v2.0.0.json +0 -0
  292. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/schemas/__init__.py +0 -0
  293. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/schemas/items/item-v1.0.0.json +0 -0
  294. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/schemas/items/item-v2.0.0.json +0 -0
  295. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/search.py +0 -0
  296. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/serializers/__init__.py +0 -0
  297. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/items/serializers/item.py +0 -0
  298. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/literature/__init__.py +0 -0
  299. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/literature/api.py +0 -0
  300. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/literature/covers_builder.py +0 -0
  301. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/literature/search.py +0 -0
  302. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/literature/serializers/__init__.py +0 -0
  303. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/literature/serializers/csv.py +0 -0
  304. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/literature/serializers/custom_fields.py +0 -0
  305. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/literature/serializers/json.py +0 -0
  306. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/__init__.py +0 -0
  307. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/api.py +0 -0
  308. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/indexer.py +0 -0
  309. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/loaders/__init__.py +0 -0
  310. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/loaders/jsonschemas/__init__.py +0 -0
  311. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/loaders/jsonschemas/location.py +0 -0
  312. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/mappings/__init__.py +0 -0
  313. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/mappings/os-v1/__init__.py +0 -0
  314. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/mappings/os-v1/locations/location-v1.0.0.json +0 -0
  315. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/mappings/os-v2/__init__.py +0 -0
  316. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/mappings/os-v2/locations/location-v1.0.0.json +0 -0
  317. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/mappings/v7/__init__.py +0 -0
  318. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/mappings/v7/locations/location-v1.0.0.json +0 -0
  319. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/receivers.py +0 -0
  320. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/schemas/__init__.py +0 -0
  321. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/schemas/locations/location-v1.0.0.json +0 -0
  322. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/locations/search.py +0 -0
  323. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/minters.py +0 -0
  324. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/notifications/__init__.py +0 -0
  325. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/notifications/api.py +0 -0
  326. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/notifications/backends/__init__.py +0 -0
  327. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/notifications/backends/mail.py +0 -0
  328. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/notifications/messages.py +0 -0
  329. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/notifications/models.py +0 -0
  330. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/notifications/tasks.py +0 -0
  331. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/__init__.py +0 -0
  332. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/api.py +0 -0
  333. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/cli.py +0 -0
  334. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/indexer.py +0 -0
  335. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/mappings/__init__.py +0 -0
  336. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/mappings/os-v1/__init__.py +0 -0
  337. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/mappings/os-v1/patrons/patron-v1.0.0.json +0 -0
  338. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/mappings/os-v2/__init__.py +0 -0
  339. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/mappings/os-v2/patrons/patron-v1.0.0.json +0 -0
  340. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/mappings/v7/__init__.py +0 -0
  341. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/mappings/v7/patrons/patron-v1.0.0.json +0 -0
  342. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/search.py +0 -0
  343. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/patrons/views.py +0 -0
  344. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/__init__.py +0 -0
  345. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/api.py +0 -0
  346. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/errors.py +0 -0
  347. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/ext.py +0 -0
  348. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/indexer.py +0 -0
  349. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/loaders/__init__.py +0 -0
  350. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/loaders/jsonschemas/__init__.py +0 -0
  351. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/loaders/jsonschemas/provider.py +0 -0
  352. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/mappings/__init__.py +0 -0
  353. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/mappings/os-v1/__init__.py +0 -0
  354. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/mappings/os-v1/providers/provider-v1.0.0.json +0 -0
  355. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/mappings/os-v2/__init__.py +0 -0
  356. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/mappings/os-v2/providers/provider-v1.0.0.json +0 -0
  357. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/mappings/v7/__init__.py +0 -0
  358. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/mappings/v7/providers/provider-v1.0.0.json +0 -0
  359. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/proxies.py +0 -0
  360. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/schemas/__init__.py +0 -0
  361. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/schemas/providers/provider-v1.0.0.json +0 -0
  362. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/providers/search.py +0 -0
  363. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/proxies.py +0 -0
  364. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/__init__.py +0 -0
  365. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/api.py +0 -0
  366. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/jsonresolvers/__init__.py +0 -0
  367. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/jsonresolvers/api.py +0 -0
  368. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/listeners.py +0 -0
  369. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/loaders/__init__.py +0 -0
  370. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/loaders/schemas/__init__.py +0 -0
  371. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/loaders/schemas/changed_by.py +0 -0
  372. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/loaders/schemas/identifiers.py +0 -0
  373. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/loaders/schemas/preserve_cover_metadata.py +0 -0
  374. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/loaders/schemas/price.py +0 -0
  375. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/metadata_extensions.py +0 -0
  376. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/receivers.py +0 -0
  377. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/schemas/__init__.py +0 -0
  378. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/schemas/json.py +0 -0
  379. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records/serializers/__init__.py +0 -0
  380. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records_relations/__init__.py +0 -0
  381. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records_relations/api.py +0 -0
  382. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records_relations/indexer.py +0 -0
  383. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records_relations/retriever.py +0 -0
  384. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/records_relations/views.py +0 -0
  385. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/relations/__init__.py +0 -0
  386. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/relations/api.py +0 -0
  387. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/relations/nodes.py +0 -0
  388. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/__init__.py +0 -0
  389. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/api.py +0 -0
  390. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/indexer.py +0 -0
  391. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/jsonresolvers/__init__.py +0 -0
  392. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/jsonresolvers/series_relations.py +0 -0
  393. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/loaders/__init__.py +0 -0
  394. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/loaders/jsonschemas/__init__.py +0 -0
  395. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/loaders/jsonschemas/series.py +0 -0
  396. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/__init__.py +0 -0
  397. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/os-v1/__init__.py +0 -0
  398. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/os-v1/series/series-v1.0.0.json +0 -0
  399. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/os-v1/series/series-v2.0.0.json +0 -0
  400. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/os-v2/__init__.py +0 -0
  401. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/os-v2/series/series-v1.0.0.json +0 -0
  402. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/os-v2/series/series-v2.0.0.json +0 -0
  403. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/v7/__init__.py +0 -0
  404. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/v7/series/series-v1.0.0.json +0 -0
  405. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/mappings/v7/series/series-v2.0.0.json +0 -0
  406. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/schemas/__init__.py +0 -0
  407. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/schemas/series/series-v1.0.0.json +0 -0
  408. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/schemas/series/series-v2.0.0.json +0 -0
  409. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/series/search.py +0 -0
  410. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/signals.py +0 -0
  411. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/static/images/placeholder.png +0 -0
  412. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/static_pages/search_guide.html +0 -0
  413. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/__init__.py +0 -0
  414. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/aggregations/__init__.py +0 -0
  415. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/__init__.py +0 -0
  416. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/__init__.py +0 -0
  417. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/aggr-file-download-v1.json +0 -0
  418. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/__init__.py +0 -0
  419. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/aggr-file-download-v1.json +0 -0
  420. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/__init__.py +0 -0
  421. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/aggr-file-download-v1.json +0 -0
  422. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/file_download/__init__.py +0 -0
  423. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/file_download/os-v1/__init__.py +0 -0
  424. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/file_download/os-v1/file-download-v1.json +0 -0
  425. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/file_download/os-v2/__init__.py +0 -0
  426. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/file_download/os-v2/file-download-v1.json +0 -0
  427. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/file_download/v7/__init__.py +0 -0
  428. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/stats/file_download/v7/file-download-v1.json +0 -0
  429. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/templates/invenio_app_ils/mail/footer.html +0 -0
  430. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/templates/invenio_app_ils/notifications/footer.html +0 -0
  431. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/templates/logged_out.html +0 -0
  432. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/translations/.gitkeep +0 -0
  433. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/views.py +0 -0
  434. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/__init__.py +0 -0
  435. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/api.py +0 -0
  436. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/cli.py +0 -0
  437. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/__init__.py +0 -0
  438. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/acq_mediums.json +0 -0
  439. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/acq_order_line_payment_modes.json +0 -0
  440. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/acq_order_line_purchase_types.json +0 -0
  441. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/acq_payment_modes.json +0 -0
  442. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/acq_recipients.json +0 -0
  443. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/affiliation_identifier_schemes.json +0 -0
  444. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/alternative_identifier_schemes.json +0 -0
  445. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/alternative_title_types.json +0 -0
  446. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/author_identifier_schemes.json +0 -0
  447. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/author_roles.json +0 -0
  448. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/author_types.json +0 -0
  449. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/conference_identifier_schemes.json +0 -0
  450. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/countries.json +0 -0
  451. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/currencies.json +0 -0
  452. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/docreq_payment_method.json +0 -0
  453. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/docreq_request_type.json +0 -0
  454. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/document_identifiers_materials.json +0 -0
  455. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/document_requests_mediums.json +0 -0
  456. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/document_subjects.json +0 -0
  457. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/eitem_sources.json +0 -0
  458. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/identifier_schemes.json +0 -0
  459. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/ill_item_types.json +0 -0
  460. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/ill_payment_modes.json +0 -0
  461. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/item_mediums.json +0 -0
  462. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/provider_types.json +0 -0
  463. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/series_identifier_schemes.json +0 -0
  464. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/series_url_access_restrictions.json +0 -0
  465. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/data/tags.json +0 -0
  466. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/indexer.py +0 -0
  467. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/jsonresolvers/__init__.py +0 -0
  468. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/jsonresolvers/licenses.py +0 -0
  469. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/mappings/__init__.py +0 -0
  470. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/mappings/os-v1/__init__.py +0 -0
  471. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
  472. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/mappings/os-v2/__init__.py +0 -0
  473. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
  474. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/mappings/v7/__init__.py +0 -0
  475. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
  476. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/schemas/__init__.py +0 -0
  477. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/schemas/vocabularies/vocabulary-v1.0.0.json +0 -0
  478. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/search.py +0 -0
  479. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/sources/__init__.py +0 -0
  480. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/sources/base.py +0 -0
  481. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/sources/json.py +0 -0
  482. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/vocabularies/sources/opendefinition.py +0 -0
  483. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils/webpack.py +0 -0
  484. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils.egg-info/dependency_links.txt +0 -0
  485. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils.egg-info/not-zip-safe +0 -0
  486. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils.egg-info/requires.txt +0 -0
  487. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/invenio_app_ils.egg-info/top_level.txt +0 -0
  488. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/pyproject.toml +0 -0
  489. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/run-tests.sh +0 -0
  490. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/scripts/bootstrap +0 -0
  491. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/scripts/build_assets +0 -0
  492. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/scripts/celery +0 -0
  493. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/scripts/console +0 -0
  494. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/scripts/server +0 -0
  495. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/scripts/setup +0 -0
  496. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/scripts/update +0 -0
  497. {invenio_app_ils-5.1.0 → invenio_app_ils-6.1.0}/setup.py +0 -0
@@ -8,6 +8,19 @@
8
8
  Changes
9
9
  =======
10
10
 
11
+ Version 6.1.0 (released 2025-10-05)
12
+
13
+ - fix: make terms query that gets eitems by creator use correct keyword
14
+ - stats: record change ids only contain `user_id` when it is not None
15
+ - global: include python files inside invenio_app_ils in manifest
16
+ - stats: move file `test_stats` into folder for stats
17
+ - stats: add stats to track ILSRecord insertions, deletions and updates
18
+
19
+ Version 6.0.0 (released 2025-10-03)
20
+
21
+ - breaking change: permissions: turn permission that checks if user can see notifications into read permission
22
+ - permissions: add backoffice readonly action
23
+
11
24
  Version 5.1.0 (released 2025-09-24)
12
25
 
13
26
  - eitem: add api methods to get eitems by `created_by` and `source` fields
@@ -64,6 +64,7 @@ recursive-include invenio_app_ils *.ttf
64
64
  recursive-include invenio_app_ils *.woff
65
65
  recursive-include invenio_app_ils *.woff2
66
66
  recursive-include invenio_app_ils *.config
67
+ recursive-include invenio_app_ils *.py
67
68
  recursive-include tests *.py
68
69
  recursive-include tests *.json
69
70
  recursive-include tests *.html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invenio-app-ils
3
- Version: 5.1.0
3
+ Version: 6.1.0
4
4
  Summary: Invenio Integrated Library System.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-app-ils
6
6
  Author: CERN
@@ -103,6 +103,19 @@ https://invenioils.docs.cern.ch
103
103
  Changes
104
104
  =======
105
105
 
106
+ Version 6.1.0 (released 2025-10-05)
107
+
108
+ - fix: make terms query that gets eitems by creator use correct keyword
109
+ - stats: record change ids only contain `user_id` when it is not None
110
+ - global: include python files inside invenio_app_ils in manifest
111
+ - stats: move file `test_stats` into folder for stats
112
+ - stats: add stats to track ILSRecord insertions, deletions and updates
113
+
114
+ Version 6.0.0 (released 2025-10-03)
115
+
116
+ - breaking change: permissions: turn permission that checks if user can see notifications into read permission
117
+ - permissions: add backoffice readonly action
118
+
106
119
  Version 5.1.0 (released 2025-09-24)
107
120
 
108
121
  - eitem: add api methods to get eitems by `created_by` and `source` fields
@@ -7,6 +7,6 @@
7
7
 
8
8
  """invenio-app-ils."""
9
9
 
10
- __version__ = "5.1.0"
10
+ __version__ = "6.1.0"
11
11
 
12
12
  __all__ = ("__version__",)
@@ -10,7 +10,11 @@ from invenio_indexer.api import RecordIndexer
10
10
  from invenio_records_rest.facets import terms_filter
11
11
 
12
12
  from invenio_app_ils.config import RECORDS_REST_MAX_RESULT_WINDOW
13
- from invenio_app_ils.permissions import backoffice_permission, superuser_permission
13
+ from invenio_app_ils.permissions import (
14
+ backoffice_permission,
15
+ backoffice_read_permission,
16
+ superuser_permission,
17
+ )
14
18
 
15
19
  from .api import ORDER_PID_FETCHER, ORDER_PID_MINTER, ORDER_PID_TYPE, Order
16
20
  from .search import OrderSearch
@@ -44,8 +48,8 @@ RECORDS_REST_ENDPOINTS = dict(
44
48
  default_media_type="application/json",
45
49
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
46
50
  error_handlers=dict(),
47
- read_permission_factory_imp=backoffice_permission,
48
- list_permission_factory_imp=backoffice_permission,
51
+ read_permission_factory_imp=backoffice_read_permission,
52
+ list_permission_factory_imp=backoffice_read_permission,
49
53
  create_permission_factory_imp=backoffice_permission,
50
54
  update_permission_factory_imp=backoffice_permission,
51
55
  delete_permission_factory_imp=superuser_permission,
@@ -41,7 +41,7 @@ from invenio_app_ils.items.api import (
41
41
  )
42
42
  from invenio_app_ils.patrons.api import patron_exists
43
43
  from invenio_app_ils.permissions import (
44
- PatronOwnerPermission,
44
+ PatronOwnerReadPermission,
45
45
  authenticated_user_permission,
46
46
  backoffice_permission,
47
47
  loan_extend_circulation_permission,
@@ -254,7 +254,7 @@ ILS_CIRCULATION_RECORDS_REST_ENDPOINTS = dict(
254
254
  links_factory_imp="invenio_circulation.links:loan_links_factory",
255
255
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
256
256
  error_handlers=dict(),
257
- read_permission_factory_imp=PatronOwnerPermission,
257
+ read_permission_factory_imp=PatronOwnerReadPermission,
258
258
  # auth via search_factory
259
259
  list_permission_factory_imp=authenticated_user_permission,
260
260
  create_permission_factory_imp=superuser_permission,
@@ -1308,6 +1308,7 @@ def data(
1308
1308
  # Create roles to restrict access
1309
1309
  _run_command("roles create admin", verbose)
1310
1310
  _run_command("roles create librarian", verbose)
1311
+ _run_command("roles create librarian-readonly", verbose)
1311
1312
 
1312
1313
  # Create users
1313
1314
  patron1_profile = {"full_name": "Yannic Vilma"}
@@ -1328,6 +1329,12 @@ def data(
1328
1329
  verbose,
1329
1330
  )
1330
1331
 
1332
+ readonly_profile = {"full_name": "Ro Only"}
1333
+ _run_command(
1334
+ f"users create readonly@test.ch -a --password=123456 --profile '{json.dumps(readonly_profile)}'",
1335
+ verbose,
1336
+ )
1337
+
1331
1338
  patron3_profile = {"full_name": "Medrod Tara"}
1332
1339
  _run_command(
1333
1340
  f"users create patron3@test.ch -a --password=123456 --profile '{json.dumps(patron3_profile)}'",
@@ -1350,6 +1357,7 @@ def data(
1350
1357
 
1351
1358
  # assign roles
1352
1359
  _run_command("roles add librarian@test.ch librarian", verbose)
1360
+ _run_command("roles add readonly@test.ch librarian-readonly", verbose)
1353
1361
 
1354
1362
  # Index vocabularies
1355
1363
  vocabularies_dir = os.path.join(CURRENT_DIR, "vocabularies", "data")
@@ -1368,6 +1376,9 @@ def data(
1368
1376
  # Assign actions
1369
1377
  _run_command("access allow superuser-access role admin", verbose)
1370
1378
  _run_command("access allow ils-backoffice-access role librarian", verbose)
1379
+ _run_command(
1380
+ "access allow ils-backoffice-readonly-access role librarian-readonly", verbose
1381
+ )
1371
1382
 
1372
1383
  # Create demo locations
1373
1384
  click.echo("Creating locations and internal locations...")
@@ -16,7 +16,7 @@ from invenio_rest import ContentNegotiatedMethodView
16
16
  from invenio_app_ils.locations.api import LOCATION_PID_TYPE
17
17
  from invenio_app_ils.closures.serializers import closure_periods_response
18
18
  from invenio_app_ils.closures.api import get_closure_periods
19
- from invenio_app_ils.permissions import backoffice_permission
19
+ from invenio_app_ils.permissions import backoffice_read_permission
20
20
  from invenio_app_ils.records.permissions import RecordPermission
21
21
 
22
22
 
@@ -53,7 +53,7 @@ class LocationClosurePeriodsResource(ContentNegotiatedMethodView):
53
53
  """Get the date ranges for which a location is closure based in the specified year"""
54
54
 
55
55
  factory = RecordPermission(record, "read")
56
- if not factory.is_public() and not backoffice_permission().can():
56
+ if not factory.is_public() and not backoffice_read_permission().can():
57
57
  if not current_user.is_authenticated:
58
58
  abort(401)
59
59
  abort(403)
@@ -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.
@@ -15,6 +15,7 @@ You overwrite and set instance-specific configuration by either:
15
15
 
16
16
  import datetime
17
17
  from datetime import timedelta
18
+ from functools import partial
18
19
 
19
20
  from celery.schedules import crontab
20
21
  from invenio_accounts.config import (
@@ -24,7 +25,7 @@ from invenio_records_rest.facets import terms_filter
24
25
  from invenio_records_rest.utils import allow_all, deny_all
25
26
  from invenio_stats.aggregations import StatAggregator
26
27
  from invenio_stats.processors import EventsIndexer
27
- from invenio_stats.queries import ESTermsQuery
28
+ from invenio_stats.queries import DateHistogramQuery, ESTermsQuery
28
29
 
29
30
  from invenio_app_ils.document_requests.indexer import DocumentRequestIndexer
30
31
  from invenio_app_ils.documents.indexer import DocumentIndexer
@@ -41,6 +42,7 @@ from invenio_app_ils.literature.search import LiteratureSearch
41
42
  from invenio_app_ils.locations.indexer import LocationIndexer
42
43
  from invenio_app_ils.patrons.indexer import PatronIndexer
43
44
  from invenio_app_ils.series.indexer import SeriesIndexer
45
+ from invenio_app_ils.stats.event_builders import ils_record_changed_event_builder
44
46
  from invenio_app_ils.vocabularies.indexer import VocabularyIndexer
45
47
 
46
48
  from .document_requests.api import (
@@ -91,9 +93,11 @@ from .patrons.api import (
91
93
  )
92
94
  from .patrons.search import PatronsSearch
93
95
  from .permissions import (
94
- PatronOwnerPermission,
96
+ PatronOwnerReadPermission,
95
97
  authenticated_user_permission,
96
98
  backoffice_permission,
99
+ backoffice_read_permission,
100
+ superuser_permission,
97
101
  views_permissions_factory,
98
102
  )
99
103
  from .records.permissions import record_read_permission_factory
@@ -233,12 +237,20 @@ CELERY_BEAT_SCHEDULE = {
233
237
  "stats-process-events": {
234
238
  "task": "invenio_stats.tasks.process_events",
235
239
  "schedule": timedelta(minutes=30),
236
- "args": [("record-view", "file-download")],
240
+ "args": [
241
+ (
242
+ "record-view",
243
+ "file-download",
244
+ "ils-record-changes-updates",
245
+ "ils-record-changes-insertions",
246
+ "ils-record-changes-deletions",
247
+ )
248
+ ],
237
249
  },
238
250
  "stats-aggregate-events": {
239
251
  "task": "invenio_stats.tasks.aggregate_events",
240
252
  "schedule": timedelta(hours=3),
241
- "args": [("record-view-agg", "file-download-agg")],
253
+ "args": [("record-view-agg", "file-download-agg", "ils-record-changes-agg")],
242
254
  },
243
255
  "clean_locations_past_closures_exceptions": {
244
256
  "task": (
@@ -395,8 +407,8 @@ RECORDS_REST_ENDPOINTS = dict(
395
407
  default_media_type="application/json",
396
408
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
397
409
  error_handlers=dict(),
398
- read_permission_factory_imp=backoffice_permission,
399
- list_permission_factory_imp=backoffice_permission,
410
+ read_permission_factory_imp=backoffice_read_permission,
411
+ list_permission_factory_imp=backoffice_read_permission,
400
412
  create_permission_factory_imp=backoffice_permission,
401
413
  update_permission_factory_imp=backoffice_permission,
402
414
  delete_permission_factory_imp=backoffice_permission,
@@ -427,8 +439,8 @@ RECORDS_REST_ENDPOINTS = dict(
427
439
  default_media_type="application/json",
428
440
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
429
441
  error_handlers=dict(),
430
- read_permission_factory_imp=backoffice_permission,
431
- list_permission_factory_imp=backoffice_permission,
442
+ read_permission_factory_imp=backoffice_read_permission,
443
+ list_permission_factory_imp=backoffice_read_permission,
432
444
  create_permission_factory_imp=backoffice_permission,
433
445
  update_permission_factory_imp=backoffice_permission,
434
446
  delete_permission_factory_imp=backoffice_permission,
@@ -522,8 +534,8 @@ RECORDS_REST_ENDPOINTS = dict(
522
534
  default_media_type="application/json",
523
535
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
524
536
  error_handlers=dict(),
525
- read_permission_factory_imp=backoffice_permission,
526
- list_permission_factory_imp=backoffice_permission,
537
+ read_permission_factory_imp=backoffice_read_permission,
538
+ list_permission_factory_imp=backoffice_read_permission,
527
539
  create_permission_factory_imp=backoffice_permission,
528
540
  update_permission_factory_imp=backoffice_permission,
529
541
  delete_permission_factory_imp=backoffice_permission,
@@ -552,7 +564,7 @@ RECORDS_REST_ENDPOINTS = dict(
552
564
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
553
565
  error_handlers=dict(),
554
566
  read_permission_factory_imp=deny_all,
555
- list_permission_factory_imp=backoffice_permission,
567
+ list_permission_factory_imp=backoffice_read_permission,
556
568
  create_permission_factory_imp=deny_all,
557
569
  update_permission_factory_imp=deny_all,
558
570
  delete_permission_factory_imp=deny_all,
@@ -584,7 +596,7 @@ RECORDS_REST_ENDPOINTS = dict(
584
596
  default_media_type="application/json",
585
597
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
586
598
  error_handlers=dict(),
587
- read_permission_factory_imp=PatronOwnerPermission,
599
+ read_permission_factory_imp=PatronOwnerReadPermission,
588
600
  # auth via search_factory
589
601
  list_permission_factory_imp=authenticated_user_permission,
590
602
  create_permission_factory_imp=authenticated_user_permission,
@@ -920,6 +932,57 @@ STATS_EVENTS = {
920
932
  "suffix": "%Y-%m",
921
933
  },
922
934
  },
935
+ "ils-record-changes-updates": {
936
+ "signal": "invenio_records.signals.after_record_update",
937
+ "templates": "invenio_app_ils.stats.templates.events.ils_record_changes",
938
+ "event_builders": [
939
+ partial(ils_record_changed_event_builder, method="update"),
940
+ "invenio_app_ils.stats.event_builders.add_librarian_user_id_to_event",
941
+ "invenio_app_ils.stats.event_builders.add_record_pid_to_event",
942
+ ],
943
+ "cls": EventsIndexer,
944
+ "params": {
945
+ "preprocessors": [
946
+ "invenio_app_ils.stats.processors.add_record_change_ids",
947
+ ],
948
+ "double_click_window": 0,
949
+ "suffix": "%Y",
950
+ },
951
+ },
952
+ "ils-record-changes-insertions": {
953
+ "signal": "invenio_records.signals.after_record_insert",
954
+ "templates": "invenio_app_ils.stats.templates.events.ils_record_changes",
955
+ "event_builders": [
956
+ partial(ils_record_changed_event_builder, method="insert"),
957
+ "invenio_app_ils.stats.event_builders.add_librarian_user_id_to_event",
958
+ "invenio_app_ils.stats.event_builders.add_record_pid_to_event",
959
+ ],
960
+ "cls": EventsIndexer,
961
+ "params": {
962
+ "preprocessors": [
963
+ "invenio_app_ils.stats.processors.add_record_change_ids",
964
+ ],
965
+ "double_click_window": 0,
966
+ "suffix": "%Y",
967
+ },
968
+ },
969
+ "ils-record-changes-deletions": {
970
+ "signal": "invenio_records.signals.after_record_delete",
971
+ "templates": "invenio_app_ils.stats.templates.events.ils_record_changes",
972
+ "event_builders": [
973
+ partial(ils_record_changed_event_builder, method="delete"),
974
+ "invenio_app_ils.stats.event_builders.add_librarian_user_id_to_event",
975
+ "invenio_app_ils.stats.event_builders.add_record_pid_to_event",
976
+ ],
977
+ "cls": EventsIndexer,
978
+ "params": {
979
+ "preprocessors": [
980
+ "invenio_app_ils.stats.processors.add_record_change_ids",
981
+ ],
982
+ "double_click_window": 0,
983
+ "suffix": "%Y",
984
+ },
985
+ },
923
986
  }
924
987
 
925
988
  STATS_AGGREGATIONS = {
@@ -966,6 +1029,19 @@ STATS_AGGREGATIONS = {
966
1029
  ),
967
1030
  ),
968
1031
  ),
1032
+ "ils-record-changes-agg": dict(
1033
+ templates="invenio_app_ils.stats.templates.aggregations.ils_record_changes",
1034
+ cls=StatAggregator,
1035
+ params=dict(
1036
+ event="ils-record-changes",
1037
+ field="aggregation_id",
1038
+ interval="day",
1039
+ index_interval="year",
1040
+ copy_fields=dict(pid_type="pid_type", method="method", user_id="user_id"),
1041
+ metric_fields=dict(),
1042
+ query_modifiers=[],
1043
+ ),
1044
+ ),
969
1045
  }
970
1046
 
971
1047
  STATS_QUERIES = {
@@ -1002,6 +1078,44 @@ STATS_QUERIES = {
1002
1078
  ),
1003
1079
  ),
1004
1080
  ),
1081
+ "ils-record-changes": dict(
1082
+ cls=DateHistogramQuery,
1083
+ permission_factory=backoffice_read_permission,
1084
+ params=dict(
1085
+ index="stats-ils-record-changes",
1086
+ copy_fields=dict(
1087
+ pid_type="pid_type",
1088
+ method="method",
1089
+ ),
1090
+ required_filters=dict(
1091
+ pid_type="pid_type",
1092
+ method="method",
1093
+ ),
1094
+ metric_fields=dict(
1095
+ count=("sum", "count", {}),
1096
+ ),
1097
+ ),
1098
+ ),
1099
+ "ils-record-changes-per-user": dict(
1100
+ cls=ESTermsQuery,
1101
+ permission_factory=superuser_permission,
1102
+ params=dict(
1103
+ index="stats-ils-record-changes",
1104
+ copy_fields=dict(
1105
+ pid_type="pid_type",
1106
+ method="method",
1107
+ user_id="user_id",
1108
+ ),
1109
+ required_filters=dict(
1110
+ pid_type="pid_type",
1111
+ method="method",
1112
+ ),
1113
+ metric_fields=dict(
1114
+ count=("sum", "count", {}),
1115
+ ),
1116
+ aggregated_fields=["user_id"],
1117
+ ),
1118
+ ),
1005
1119
  }
1006
1120
 
1007
1121
  # List of available vocabularies
@@ -133,7 +133,7 @@ def get_eitems_for_document_by_creator(document_pid, creator, case_insensitive=F
133
133
  document_pid=document_pid
134
134
  ).filter(
135
135
  "term",
136
- created_by__value={"term": creator, "case_insensitive": case_insensitive},
136
+ created_by__value={"value": creator, "case_insensitive": case_insensitive},
137
137
  )
138
138
 
139
139
  return creator_match
@@ -11,7 +11,7 @@ from invenio_records_rest.facets import terms_filter
11
11
 
12
12
  from invenio_app_ils.config import RECORDS_REST_MAX_RESULT_WINDOW
13
13
  from invenio_app_ils.permissions import (
14
- PatronOwnerPermission,
14
+ PatronOwnerReadPermission,
15
15
  authenticated_user_permission,
16
16
  backoffice_permission,
17
17
  superuser_permission,
@@ -76,7 +76,7 @@ RECORDS_REST_ENDPOINTS = dict(
76
76
  default_media_type="application/json",
77
77
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
78
78
  error_handlers=dict(),
79
- read_permission_factory_imp=PatronOwnerPermission,
79
+ read_permission_factory_imp=PatronOwnerReadPermission,
80
80
  # auth via search_factory
81
81
  list_permission_factory_imp=authenticated_user_permission,
82
82
  create_permission_factory_imp=backoffice_permission,
@@ -38,7 +38,7 @@ def get_notifications_blueprint(_):
38
38
  "size": fields.Int(validate=[validate.Range(min=1, max=100)]),
39
39
  }
40
40
  )
41
- @need_permissions("send-notification-to-patron")
41
+ @need_permissions("get-notifications-sent-to-patron")
42
42
  def get_notifications(
43
43
  recipient_user_id=None,
44
44
  pid_type=None,
@@ -69,7 +69,7 @@ def get_notifications_blueprint(_):
69
69
  return {"hits": notifications, "total": len(notifications)}
70
70
 
71
71
  @blueprint.route("/notifications/<int:id>")
72
- @need_permissions("send-notification-to-patron")
72
+ @need_permissions("get-notifications-sent-to-patron")
73
73
  def get_notification(id):
74
74
  try:
75
75
  notification = NotificationsLogs.query.filter_by(id=id).one()
@@ -170,7 +170,9 @@ def anonymize_patron_data(patron_pid, force=False):
170
170
  borrowing_request["patron"] = anonymous_patron_fields
171
171
  borrowing_request["patron_pid"] = anonymous_patron_fields["pid"]
172
172
  borrowing_request.commit()
173
- anonymized_records[BORROWING_REQUEST_PID_TYPE]["records"].append(borrowing_request)
173
+ anonymized_records[BORROWING_REQUEST_PID_TYPE]["records"].append(
174
+ borrowing_request
175
+ )
174
176
  indices += 1
175
177
 
176
178
  DocumentRequestSearch = current_app_ils.document_request_search_cls
@@ -20,6 +20,7 @@ from invenio_app_ils.errors import InvalidLoanExtendError, LoanCheckoutByPatronF
20
20
  from invenio_app_ils.proxies import current_app_ils
21
21
 
22
22
  backoffice_access_action = action_factory("ils-backoffice-access")
23
+ backoffice_readonly_access_action = action_factory("ils-backoffice-readonly-access")
23
24
 
24
25
 
25
26
  def need_permissions(action):
@@ -62,6 +63,11 @@ def backoffice_permission(*args, **kwargs):
62
63
  return Permission(backoffice_access_action)
63
64
 
64
65
 
66
+ def backoffice_read_permission(*args, **kwargs):
67
+ """Return permission for backoffice (full or read-only) read access."""
68
+ return Permission(backoffice_access_action, backoffice_readonly_access_action)
69
+
70
+
65
71
  def superuser_permission(*args, **kwargs):
66
72
  """Return permission to allow only admins."""
67
73
  return Permission(superuser_access)
@@ -160,6 +166,18 @@ def loan_checkout_permission(*args, **kwargs):
160
166
  raise LoanCheckoutByPatronForbidden(int(loan["patron_pid"]), current_user.id)
161
167
 
162
168
 
169
+ class PatronOwnerReadPermission(Permission):
170
+ """Return Permission to evaluate if the current user owns the record or has backoffice read access."""
171
+
172
+ def __init__(self, record):
173
+ """Constructor."""
174
+ super().__init__(
175
+ UserNeed(int(record["patron_pid"])),
176
+ backoffice_access_action,
177
+ backoffice_readonly_access_action,
178
+ )
179
+
180
+
163
181
  class PatronOwnerPermission(Permission):
164
182
  """Return Permission to evaluate if the current user owns the record."""
165
183
 
@@ -179,13 +197,15 @@ _is_backoffice_permission = [
179
197
  "circulation-loan-update-dates",
180
198
  "relations-create",
181
199
  "relations-delete",
182
- "stats-most-loaned",
183
200
  "document-request-actions",
184
201
  "bucket-create",
185
202
  "ill-brwreq-patron-loan-create",
186
203
  "ill-brwreq-patron-loan-extension-accept",
187
204
  "ill-brwreq-patron-loan-extension-decline",
188
- "send-notification-to-patron",
205
+ ]
206
+ _is_backoffice_read_permission = [
207
+ "stats-most-loaned",
208
+ "get-notifications-sent-to-patron",
189
209
  ]
190
210
  _is_patron_owner_permission = [
191
211
  "document-request-decline",
@@ -199,6 +219,8 @@ def views_permissions_factory(action):
199
219
  return authenticated_user_permission()
200
220
  elif action in _is_backoffice_permission:
201
221
  return backoffice_permission()
222
+ elif action in _is_backoffice_read_permission:
223
+ return backoffice_read_permission()
202
224
  elif action in _is_patron_owner_permission:
203
225
  return PatronOwnerPermission
204
226
  elif action == "circulation-loan-checkout":
@@ -10,7 +10,10 @@
10
10
  from invenio_records_rest.facets import terms_filter
11
11
 
12
12
  from invenio_app_ils.config import RECORDS_REST_MAX_RESULT_WINDOW
13
- from invenio_app_ils.permissions import backoffice_permission
13
+ from invenio_app_ils.permissions import (
14
+ backoffice_permission,
15
+ backoffice_read_permission,
16
+ )
14
17
 
15
18
  from .api import PROVIDER_PID_FETCHER, PROVIDER_PID_MINTER, PROVIDER_PID_TYPE, Provider
16
19
  from .indexer import ProviderIndexer
@@ -47,8 +50,8 @@ RECORDS_REST_ENDPOINTS = dict(
47
50
  default_media_type="application/json",
48
51
  max_result_window=RECORDS_REST_MAX_RESULT_WINDOW,
49
52
  error_handlers=dict(),
50
- read_permission_factory_imp=backoffice_permission,
51
- list_permission_factory_imp=backoffice_permission,
53
+ read_permission_factory_imp=backoffice_read_permission,
54
+ list_permission_factory_imp=backoffice_read_permission,
52
55
  create_permission_factory_imp=backoffice_permission,
53
56
  update_permission_factory_imp=backoffice_permission,
54
57
  delete_permission_factory_imp=backoffice_permission,
@@ -12,7 +12,10 @@ from flask_principal import ActionNeed, RoleNeed, UserNeed
12
12
  from invenio_access import Permission, any_user
13
13
  from six import string_types
14
14
 
15
- from invenio_app_ils.permissions import backoffice_access_action
15
+ from invenio_app_ils.permissions import (
16
+ backoffice_access_action,
17
+ backoffice_readonly_access_action,
18
+ )
16
19
 
17
20
  create_records_action = ActionNeed("create-records")
18
21
 
@@ -68,7 +71,10 @@ class RecordPermission(Permission):
68
71
  if self.is_public():
69
72
  return [any_user]
70
73
  else:
71
- return self.record_needs() + [backoffice_access_action]
74
+ return self.record_needs() + [
75
+ backoffice_readonly_access_action,
76
+ backoffice_access_action,
77
+ ]
72
78
 
73
79
  def record_explicit_restrictions(self):
74
80
  """Return the list of user ids/roles allowed for the given action."""
@@ -17,7 +17,7 @@ from invenio_rest import ContentNegotiatedMethodView
17
17
  from invenio_app_ils.documents.api import DOCUMENT_PID_TYPE
18
18
  from invenio_app_ils.eitems.api import EITEM_PID_TYPE
19
19
  from invenio_app_ils.errors import StatsError
20
- from invenio_app_ils.permissions import backoffice_permission
20
+ from invenio_app_ils.permissions import backoffice_read_permission
21
21
  from invenio_app_ils.records.permissions import RecordPermission
22
22
  from invenio_app_ils.series.api import SERIES_PID_TYPE
23
23
  from invenio_app_ils.signals import file_downloaded, record_viewed
@@ -62,7 +62,7 @@ class DocumentStatsResource(ContentNegotiatedMethodView):
62
62
  def post(self, pid, record, **kwargs):
63
63
  """Send a signal to count record view for the record stats."""
64
64
  factory = RecordPermission(record, "read")
65
- if not factory.is_public() and not backoffice_permission().can():
65
+ if not factory.is_public() and not backoffice_read_permission().can():
66
66
  if not current_user.is_authenticated:
67
67
  abort(401)
68
68
  abort(403)
@@ -13,7 +13,7 @@ from flask import current_app, g, has_request_context, request
13
13
  from invenio_search.engine import dsl
14
14
 
15
15
  from invenio_app_ils.errors import SearchQueryError, UnauthorizedSearchError
16
- from invenio_app_ils.permissions import backoffice_permission
16
+ from invenio_app_ils.permissions import backoffice_read_permission
17
17
 
18
18
 
19
19
  def _get_user_provides():
@@ -30,7 +30,7 @@ def _get_user_provides():
30
30
 
31
31
  def search_filter_record_permissions():
32
32
  """Filter list of results by `_access` and `restricted` fields."""
33
- if not has_request_context() or backoffice_permission().allows(g.identity):
33
+ if not has_request_context() or backoffice_read_permission().allows(g.identity):
34
34
  return dsl.Q()
35
35
 
36
36
  # A record is public if `restricted` field False or missing
@@ -120,7 +120,7 @@ def _filter_by_patron(patron_id, search, query_string=None):
120
120
  def _filter_by_current_patron(search, query_string=None):
121
121
  """Filter search results by patron_pid."""
122
122
  # if the logged in user is not librarian or admin, validate the query
123
- if has_request_context() and not backoffice_permission().allows(g.identity):
123
+ if has_request_context() and not backoffice_read_permission().allows(g.identity):
124
124
  return _filter_by_patron(g.identity.id, search, query_string)
125
125
  return search, query_string
126
126