invenio-app-ils 1.0.0a54__py2.py3-none-any.whl → 6.1.0__py2.py3-none-any.whl

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 (331) hide show
  1. invenio_app_ils/__init__.py +2 -2
  2. invenio_app_ils/acquisition/api.py +3 -1
  3. invenio_app_ils/acquisition/config.py +10 -21
  4. invenio_app_ils/acquisition/jsonresolvers/order_order_lines.py +1 -0
  5. invenio_app_ils/acquisition/mappings/os-v1/acq_orders/order-v1.0.0.json +364 -0
  6. invenio_app_ils/acquisition/mappings/os-v2/__init__.py +0 -0
  7. invenio_app_ils/acquisition/mappings/os-v2/acq_orders/order-v1.0.0.json +364 -0
  8. invenio_app_ils/acquisition/mappings/v7/acq_orders/order-v1.0.0.json +14 -0
  9. invenio_app_ils/acquisition/search.py +5 -15
  10. invenio_app_ils/assets/semantic-ui/less/theme.config +103 -0
  11. invenio_app_ils/assets/semantic-ui/templates/.gitkeep +0 -0
  12. invenio_app_ils/circulation/api.py +153 -67
  13. invenio_app_ils/circulation/config.py +29 -25
  14. invenio_app_ils/circulation/indexer.py +14 -19
  15. invenio_app_ils/circulation/loaders/__init__.py +2 -0
  16. invenio_app_ils/circulation/loaders/schemas/json/loan_checkout.py +2 -3
  17. invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +82 -16
  18. invenio_app_ils/circulation/loaders/schemas/json/loan_self_checkout.py +19 -0
  19. invenio_app_ils/circulation/notifications/api.py +23 -19
  20. invenio_app_ils/circulation/notifications/messages.py +6 -6
  21. invenio_app_ils/circulation/notifications/tasks.py +1 -2
  22. invenio_app_ils/circulation/receivers.py +2 -5
  23. invenio_app_ils/circulation/search.py +23 -22
  24. invenio_app_ils/circulation/serializers/__init__.py +2 -2
  25. invenio_app_ils/circulation/serializers/csv.py +1 -3
  26. invenio_app_ils/circulation/serializers/custom_fields.py +5 -9
  27. invenio_app_ils/circulation/serializers/json.py +2 -6
  28. invenio_app_ils/circulation/serializers/response.py +12 -12
  29. invenio_app_ils/circulation/stats/views.py +5 -15
  30. invenio_app_ils/circulation/tasks.py +2 -6
  31. invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/self_checkout.html +19 -0
  32. invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/update_dates.html +19 -0
  33. invenio_app_ils/circulation/utils.py +23 -17
  34. invenio_app_ils/circulation/views.py +103 -39
  35. invenio_app_ils/cli.py +220 -260
  36. invenio_app_ils/closures/api.py +72 -7
  37. invenio_app_ils/closures/serializers/__init__.py +16 -0
  38. invenio_app_ils/closures/serializers/response.py +35 -0
  39. invenio_app_ils/closures/serializers/schema.py +28 -0
  40. invenio_app_ils/closures/tasks.py +4 -11
  41. invenio_app_ils/closures/views.py +66 -0
  42. invenio_app_ils/config.py +207 -150
  43. invenio_app_ils/document_requests/api.py +6 -21
  44. invenio_app_ils/document_requests/loaders/__init__.py +4 -12
  45. invenio_app_ils/document_requests/mappings/{v6 → os-v1}/__init__.py +2 -2
  46. invenio_app_ils/document_requests/mappings/os-v1/document_requests/document_request-v1.0.0.json +196 -0
  47. invenio_app_ils/document_requests/mappings/os-v2/__init__.py +8 -0
  48. invenio_app_ils/document_requests/mappings/os-v2/document_requests/document_request-v1.0.0.json +196 -0
  49. invenio_app_ils/document_requests/notifications/api.py +2 -7
  50. invenio_app_ils/document_requests/notifications/messages.py +3 -7
  51. invenio_app_ils/document_requests/search.py +2 -6
  52. invenio_app_ils/document_requests/views.py +4 -10
  53. invenio_app_ils/documents/api.py +19 -25
  54. invenio_app_ils/documents/indexer.py +13 -20
  55. invenio_app_ils/documents/jsonresolvers/document_circulation.py +11 -33
  56. invenio_app_ils/documents/jsonresolvers/document_eitem.py +1 -0
  57. invenio_app_ils/documents/jsonresolvers/document_item.py +8 -9
  58. invenio_app_ils/documents/jsonresolvers/document_stock.py +7 -7
  59. invenio_app_ils/documents/loaders/jsonschemas/document.py +3 -14
  60. invenio_app_ils/documents/mappings/{v6 → os-v1}/__init__.py +1 -1
  61. invenio_app_ils/documents/mappings/os-v1/documents/document-v1.0.0.json +932 -0
  62. invenio_app_ils/documents/mappings/os-v1/documents/document-v2.0.0.json +1066 -0
  63. invenio_app_ils/documents/mappings/os-v2/__init__.py +8 -0
  64. invenio_app_ils/documents/mappings/os-v2/documents/document-v1.0.0.json +932 -0
  65. invenio_app_ils/documents/mappings/os-v2/documents/document-v2.0.0.json +1066 -0
  66. invenio_app_ils/documents/mappings/v7/documents/document-v1.0.0.json +102 -11
  67. invenio_app_ils/documents/mappings/v7/documents/document-v2.0.0.json +1066 -0
  68. invenio_app_ils/documents/schemas/documents/document-v2.0.0.json +732 -0
  69. invenio_app_ils/eitems/api.py +41 -7
  70. invenio_app_ils/eitems/loaders/jsonschemas/eitems.py +6 -6
  71. invenio_app_ils/eitems/mappings/{v6 → os-v1}/__init__.py +1 -1
  72. invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v1.0.0.json +139 -0
  73. invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v2.0.0.json +142 -0
  74. invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v3.0.0.json +179 -0
  75. invenio_app_ils/{series/mappings/v6 → eitems/mappings/os-v2}/__init__.py +1 -1
  76. invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v1.0.0.json +139 -0
  77. invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v2.0.0.json +142 -0
  78. invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v3.0.0.json +179 -0
  79. invenio_app_ils/eitems/mappings/v7/eitems/eitem-v1.0.0.json +12 -2
  80. invenio_app_ils/eitems/mappings/v7/eitems/eitem-v2.0.0.json +142 -0
  81. invenio_app_ils/eitems/mappings/v7/eitems/eitem-v3.0.0.json +179 -0
  82. invenio_app_ils/eitems/schemas/eitems/eitem-v2.0.0.json +120 -0
  83. invenio_app_ils/eitems/schemas/eitems/eitem-v3.0.0.json +120 -0
  84. invenio_app_ils/eitems/search.py +3 -9
  85. invenio_app_ils/errors.py +119 -6
  86. invenio_app_ils/ext.py +15 -18
  87. invenio_app_ils/facets.py +13 -15
  88. invenio_app_ils/files/receivers.py +1 -1
  89. invenio_app_ils/files/views.py +1 -2
  90. invenio_app_ils/ill/api.py +1 -2
  91. invenio_app_ils/ill/config.py +10 -16
  92. invenio_app_ils/ill/jsonresolvers/borrowing_request_document.py +2 -3
  93. invenio_app_ils/ill/jsonresolvers/borrowing_request_patron.py +1 -3
  94. invenio_app_ils/ill/jsonresolvers/borrowing_request_provider.py +1 -3
  95. invenio_app_ils/ill/loaders/__init__.py +3 -9
  96. invenio_app_ils/ill/loaders/jsonschemas/patron_loan_actions.py +1 -8
  97. invenio_app_ils/ill/loaders/jsonschemas/patron_loan_extension_actions.py +3 -8
  98. invenio_app_ils/ill/mappings/{v6 → os-v1}/__init__.py +1 -1
  99. invenio_app_ils/ill/mappings/os-v1/ill_borrowing_requests/borrowing_request-v1.0.0.json +254 -0
  100. invenio_app_ils/{acquisition/mappings/v6 → ill/mappings/os-v2}/__init__.py +1 -1
  101. invenio_app_ils/ill/mappings/os-v2/ill_borrowing_requests/borrowing_request-v1.0.0.json +254 -0
  102. invenio_app_ils/ill/mappings/v7/ill_borrowing_requests/borrowing_request-v1.0.0.json +14 -0
  103. invenio_app_ils/ill/notifications/api.py +1 -4
  104. invenio_app_ils/ill/search.py +3 -9
  105. invenio_app_ils/ill/serializers/__init__.py +1 -3
  106. invenio_app_ils/ill/views.py +2 -4
  107. invenio_app_ils/internal_locations/api.py +1 -4
  108. invenio_app_ils/internal_locations/mappings/{v6 → os-v1}/__init__.py +1 -1
  109. invenio_app_ils/internal_locations/mappings/os-v1/internal_locations/internal_location-v1.0.0.json +108 -0
  110. invenio_app_ils/internal_locations/mappings/os-v2/__init__.py +8 -0
  111. invenio_app_ils/internal_locations/mappings/os-v2/internal_locations/internal_location-v1.0.0.json +108 -0
  112. invenio_app_ils/internal_locations/search.py +1 -3
  113. invenio_app_ils/items/api.py +18 -15
  114. invenio_app_ils/items/indexer.py +1 -3
  115. invenio_app_ils/items/jsonresolvers/item_document.py +1 -1
  116. invenio_app_ils/items/jsonresolvers/item_internal_location.py +2 -6
  117. invenio_app_ils/items/loaders/jsonschemas/items.py +2 -0
  118. {tests/api/circulation → invenio_app_ils/items/mappings/os-v1}/__init__.py +1 -1
  119. invenio_app_ils/items/mappings/os-v1/items/item-v1.0.0.json +285 -0
  120. invenio_app_ils/items/mappings/os-v1/items/item-v2.0.0.json +326 -0
  121. {tests/api/ill → invenio_app_ils/items/mappings/os-v2}/__init__.py +1 -1
  122. invenio_app_ils/items/mappings/os-v2/items/item-v1.0.0.json +285 -0
  123. invenio_app_ils/items/mappings/os-v2/items/item-v2.0.0.json +326 -0
  124. invenio_app_ils/items/mappings/v7/items/item-v1.0.0.json +11 -0
  125. invenio_app_ils/items/mappings/v7/items/item-v2.0.0.json +326 -0
  126. invenio_app_ils/items/schemas/items/item-v1.0.0.json +22 -0
  127. invenio_app_ils/items/schemas/items/item-v2.0.0.json +172 -0
  128. invenio_app_ils/items/search.py +18 -11
  129. invenio_app_ils/items/serializers/item.py +7 -6
  130. invenio_app_ils/literature/api.py +1 -3
  131. invenio_app_ils/literature/search.py +3 -5
  132. invenio_app_ils/literature/serializers/csv.py +1 -3
  133. invenio_app_ils/literature/serializers/json.py +1 -3
  134. invenio_app_ils/locations/api.py +2 -4
  135. invenio_app_ils/locations/indexer.py +3 -9
  136. invenio_app_ils/locations/loaders/__init__.py +1 -3
  137. invenio_app_ils/locations/loaders/jsonschemas/location.py +4 -11
  138. invenio_app_ils/locations/mappings/{v6 → os-v1}/__init__.py +1 -1
  139. invenio_app_ils/locations/mappings/os-v1/locations/location-v1.0.0.json +90 -0
  140. invenio_app_ils/locations/mappings/os-v2/__init__.py +8 -0
  141. invenio_app_ils/locations/mappings/os-v2/locations/location-v1.0.0.json +90 -0
  142. invenio_app_ils/notifications/messages.py +4 -3
  143. invenio_app_ils/notifications/tasks.py +1 -3
  144. invenio_app_ils/notifications/views.py +2 -2
  145. invenio_app_ils/patrons/anonymization.py +53 -32
  146. invenio_app_ils/patrons/api.py +3 -5
  147. invenio_app_ils/patrons/cli.py +1 -2
  148. invenio_app_ils/patrons/indexer.py +4 -13
  149. invenio_app_ils/patrons/mappings/os-v1/__init__.py +8 -0
  150. invenio_app_ils/patrons/mappings/os-v1/patrons/patron-v1.0.0.json +42 -0
  151. invenio_app_ils/patrons/mappings/os-v2/__init__.py +8 -0
  152. invenio_app_ils/patrons/mappings/os-v2/patrons/patron-v1.0.0.json +42 -0
  153. invenio_app_ils/patrons/views.py +4 -14
  154. invenio_app_ils/permissions.py +93 -35
  155. invenio_app_ils/providers/api.py +2 -6
  156. invenio_app_ils/providers/config.py +11 -19
  157. invenio_app_ils/providers/indexer.py +2 -6
  158. invenio_app_ils/providers/mappings/{v6 → os-v1}/__init__.py +1 -1
  159. invenio_app_ils/providers/mappings/os-v1/providers/provider-v1.0.0.json +57 -0
  160. invenio_app_ils/providers/mappings/os-v2/__init__.py +8 -0
  161. invenio_app_ils/providers/mappings/os-v2/providers/provider-v1.0.0.json +57 -0
  162. invenio_app_ils/providers/mappings/v7/__init__.py +1 -1
  163. invenio_app_ils/providers/proxies.py +1 -3
  164. invenio_app_ils/records/api.py +3 -9
  165. invenio_app_ils/records/loaders/schemas/changed_by.py +1 -3
  166. invenio_app_ils/records/loaders/schemas/identifiers.py +23 -0
  167. invenio_app_ils/records/metadata_extensions.py +1 -4
  168. invenio_app_ils/records/permissions.py +8 -2
  169. invenio_app_ils/records/serializers/__init__.py +1 -4
  170. invenio_app_ils/records/views.py +4 -7
  171. invenio_app_ils/records_relations/api.py +11 -34
  172. invenio_app_ils/records_relations/indexer.py +1 -3
  173. invenio_app_ils/records_relations/retriever.py +14 -9
  174. invenio_app_ils/records_relations/views.py +16 -50
  175. invenio_app_ils/relations/api.py +17 -16
  176. invenio_app_ils/search_permissions.py +24 -24
  177. invenio_app_ils/series/api.py +10 -12
  178. invenio_app_ils/series/loaders/jsonschemas/series.py +3 -2
  179. invenio_app_ils/{items/mappings/v6 → series/mappings/os-v1}/__init__.py +1 -1
  180. invenio_app_ils/series/mappings/os-v1/series/series-v1.0.0.json +324 -0
  181. invenio_app_ils/series/mappings/os-v1/series/series-v2.0.0.json +396 -0
  182. {tests/api/acquisition → invenio_app_ils/series/mappings/os-v2}/__init__.py +1 -1
  183. invenio_app_ils/series/mappings/os-v2/series/series-v1.0.0.json +324 -0
  184. invenio_app_ils/series/mappings/os-v2/series/series-v2.0.0.json +396 -0
  185. invenio_app_ils/series/mappings/v7/series/series-v1.0.0.json +35 -3
  186. invenio_app_ils/series/mappings/v7/series/series-v2.0.0.json +396 -0
  187. invenio_app_ils/series/schemas/series/series-v2.0.0.json +354 -0
  188. invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/aggr-file-download-v1.json +60 -0
  189. invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/__init__.py +9 -0
  190. invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/aggr-file-download-v1.json +60 -0
  191. invenio_app_ils/stats/event_builders.py +73 -0
  192. invenio_app_ils/stats/file_download/os-v1/file-download-v1.json +72 -0
  193. invenio_app_ils/stats/file_download/os-v2/__init__.py +9 -0
  194. invenio_app_ils/stats/file_download/os-v2/file-download-v1.json +72 -0
  195. invenio_app_ils/stats/processors.py +30 -0
  196. invenio_app_ils/stats/templates/aggregations/__init__.py +8 -0
  197. invenio_app_ils/stats/templates/aggregations/ils_record_changes/__init__.py +8 -0
  198. invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/__init__.py +8 -0
  199. invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/aggr-ils-record-changes-v1.json +41 -0
  200. {tests → invenio_app_ils/stats/templates/events}/__init__.py +2 -2
  201. invenio_app_ils/stats/templates/events/ils_record_changes/__init__.py +8 -0
  202. invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/__init__.py +8 -0
  203. invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/ils-record-changes-v1.json +41 -0
  204. invenio_app_ils/templates/logged_out.html +12 -0
  205. invenio_app_ils/views.py +18 -4
  206. invenio_app_ils/vocabularies/api.py +1 -1
  207. invenio_app_ils/vocabularies/cli.py +6 -18
  208. invenio_app_ils/vocabularies/data/acq_order_line_payment_modes.json +5 -0
  209. invenio_app_ils/vocabularies/data/identifier_schemes.json +5 -0
  210. invenio_app_ils/vocabularies/indexer.py +1 -4
  211. invenio_app_ils/vocabularies/jsonresolvers/licenses.py +2 -11
  212. invenio_app_ils/vocabularies/mappings/os-v1/__init__.py +8 -0
  213. invenio_app_ils/vocabularies/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +23 -0
  214. invenio_app_ils/vocabularies/mappings/os-v2/__init__.py +8 -0
  215. invenio_app_ils/vocabularies/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +23 -0
  216. invenio_app_ils/vocabularies/sources/base.py +1 -3
  217. invenio_app_ils/webpack.py +27 -0
  218. invenio_app_ils-6.1.0.dist-info/METADATA +627 -0
  219. {invenio_app_ils-1.0.0a54.dist-info → invenio_app_ils-6.1.0.dist-info}/RECORD +227 -249
  220. {invenio_app_ils-1.0.0a54.dist-info → invenio_app_ils-6.1.0.dist-info}/WHEEL +1 -1
  221. {invenio_app_ils-1.0.0a54.dist-info → invenio_app_ils-6.1.0.dist-info}/entry_points.txt +9 -5
  222. {invenio_app_ils-1.0.0a54.dist-info → invenio_app_ils-6.1.0.dist-info}/top_level.txt +0 -1
  223. invenio_app_ils/acquisition/mappings/v6/acq_orders/order-v1.0.0.json +0 -352
  224. invenio_app_ils/document_requests/mappings/v6/document_requests/document_request-v1.0.0.json +0 -199
  225. invenio_app_ils/documents/mappings/v6/documents/document-v1.0.0.json +0 -843
  226. invenio_app_ils/eitems/mappings/v6/eitems/eitem-v1.0.0.json +0 -131
  227. invenio_app_ils/ill/mappings/v6/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -242
  228. invenio_app_ils/internal_locations/mappings/v6/internal_locations/internal_location-v1.0.0.json +0 -110
  229. invenio_app_ils/items/mappings/v6/items/item-v1.0.0.json +0 -276
  230. invenio_app_ils/locations/mappings/v6/locations/location-v1.0.0.json +0 -92
  231. invenio_app_ils/notifications/admin.py +0 -57
  232. invenio_app_ils/patrons/mappings/v6/__init__.py +0 -8
  233. invenio_app_ils/patrons/mappings/v6/patrons/patron-v1.0.0.json +0 -44
  234. invenio_app_ils/providers/mappings/v6/providers/provider-v1.0.0.json +0 -59
  235. invenio_app_ils/series/mappings/v6/series/series-v1.0.0.json +0 -298
  236. invenio_app_ils/stats/aggregations/aggr_file_download/v6/aggr-file-download-v1.json +0 -59
  237. invenio_app_ils/stats/file_download/v6/file-download-v1.json +0 -74
  238. invenio_app_ils/version.py +0 -14
  239. invenio_app_ils/vocabularies/mappings/v6/__init__.py +0 -8
  240. invenio_app_ils/vocabularies/mappings/v6/vocabularies/vocabulary-v1.0.0.json +0 -25
  241. invenio_app_ils-1.0.0a54.dist-info/METADATA +0 -95
  242. tests/api/__init__.py +0 -8
  243. tests/api/acquisition/test_acq_orders_crud.py +0 -102
  244. tests/api/acquisition/test_acq_orders_permissions.py +0 -104
  245. tests/api/acquisition/test_acq_providers_permissions.py +0 -83
  246. tests/api/circulation/test_expired_loans.py +0 -88
  247. tests/api/circulation/test_loan_checkout.py +0 -216
  248. tests/api/circulation/test_loan_default_durations.py +0 -57
  249. tests/api/circulation/test_loan_document_resolver.py +0 -18
  250. tests/api/circulation/test_loan_extend.py +0 -132
  251. tests/api/circulation/test_loan_item_permissions.py +0 -139
  252. tests/api/circulation/test_loan_item_resolver.py +0 -26
  253. tests/api/circulation/test_loan_list_permissions.py +0 -104
  254. tests/api/circulation/test_loan_patron_resolver.py +0 -38
  255. tests/api/circulation/test_loan_request.py +0 -234
  256. tests/api/circulation/test_loan_update.py +0 -150
  257. tests/api/circulation/test_notifications.py +0 -229
  258. tests/api/conftest.py +0 -236
  259. tests/api/document_requests/__init__.py +0 -8
  260. tests/api/document_requests/test_document_requests.py +0 -131
  261. tests/api/document_requests/test_document_requests_permissions.py +0 -177
  262. tests/api/document_requests/test_notifications_filter.py +0 -36
  263. tests/api/ill/test_ill_brw_crud.py +0 -84
  264. tests/api/ill/test_ill_brw_reqs_patron_loan_create_action.py +0 -207
  265. tests/api/ill/test_ill_brw_reqs_patron_loan_extension_actions.py +0 -298
  266. tests/api/ill/test_ill_brw_reqs_permissions.py +0 -169
  267. tests/api/ill/test_ill_providers_permissions.py +0 -82
  268. tests/api/ils/__init__.py +0 -8
  269. tests/api/ils/documents/__init__.py +0 -8
  270. tests/api/ils/documents/test_document_crud.py +0 -57
  271. tests/api/ils/documents/test_document_permissions.py +0 -106
  272. tests/api/ils/documents/test_document_resolvers.py +0 -35
  273. tests/api/ils/eitems/__init__.py +0 -8
  274. tests/api/ils/eitems/test_eitems_crud.py +0 -41
  275. tests/api/ils/eitems/test_eitems_permissions.py +0 -84
  276. tests/api/ils/eitems/test_files.py +0 -172
  277. tests/api/ils/items/__init__.py +0 -8
  278. tests/api/ils/items/test_apis.py +0 -43
  279. tests/api/ils/items/test_items_crud.py +0 -60
  280. tests/api/ils/items/test_items_permissions.py +0 -107
  281. tests/api/ils/items/test_items_update.py +0 -47
  282. tests/api/ils/records_relations/__init__.py +0 -8
  283. tests/api/ils/records_relations/helpers.py +0 -115
  284. tests/api/ils/records_relations/test_records_relations_parentchild.py +0 -560
  285. tests/api/ils/records_relations/test_records_relations_sequence.py +0 -302
  286. tests/api/ils/records_relations/test_records_relations_siblings.py +0 -678
  287. tests/api/ils/series/__init__.py +0 -8
  288. tests/api/ils/series/test_series_permissions.py +0 -95
  289. tests/api/ils/test_anonymization.py +0 -189
  290. tests/api/ils/test_apis.py +0 -76
  291. tests/api/ils/test_closures.py +0 -324
  292. tests/api/ils/test_errors.py +0 -126
  293. tests/api/ils/test_facets.py +0 -84
  294. tests/api/ils/test_internal_locations.py +0 -96
  295. tests/api/ils/test_loaders.py +0 -55
  296. tests/api/ils/test_metadata_extensions.py +0 -205
  297. tests/api/ils/test_notifications.py +0 -183
  298. tests/api/ils/test_notifications_mails.py +0 -39
  299. tests/api/ils/test_notifications_permissions.py +0 -55
  300. tests/api/ils/test_patrons.py +0 -106
  301. tests/api/ils/test_record_delete.py +0 -46
  302. tests/api/ils/test_record_permissions.py +0 -135
  303. tests/api/ils/test_resolvers.py +0 -207
  304. tests/api/ils/test_stats.py +0 -160
  305. tests/api/ils/test_tasks.py +0 -211
  306. tests/api/ils/test_vocabularies.py +0 -35
  307. tests/conftest.py +0 -123
  308. tests/data/acq_orders.json +0 -89
  309. tests/data/acq_providers.json +0 -12
  310. tests/data/document_requests.json +0 -77
  311. tests/data/documents.json +0 -237
  312. tests/data/eitems.json +0 -66
  313. tests/data/ill_borrowing_requests.json +0 -77
  314. tests/data/ill_providers.json +0 -12
  315. tests/data/internal_locations.json +0 -22
  316. tests/data/items.json +0 -271
  317. tests/data/loans.json +0 -133
  318. tests/data/loans_most_loaned.json +0 -128
  319. tests/data/locations.json +0 -20
  320. tests/data/series.json +0 -33
  321. tests/helpers.py +0 -104
  322. tests/templates/notifications/title_body.html +0 -8
  323. tests/templates/notifications/title_body_html.html +0 -13
  324. tests/templates/notifications/title_body_html_ctx.html +0 -13
  325. tests/templates/notifications/title_only.html +0 -3
  326. tests/test_version.py +0 -17
  327. /tests/templates/notifications/blank.html → /invenio_app_ils/acquisition/mappings/os-v1/__init__.py +0 -0
  328. /invenio_app_ils/stats/aggregations/aggr_file_download/{v6 → os-v1}/__init__.py +0 -0
  329. /invenio_app_ils/stats/file_download/{v6 → os-v1}/__init__.py +0 -0
  330. {invenio_app_ils-1.0.0a54.dist-info → invenio_app_ils-6.1.0.dist-info/licenses}/AUTHORS.rst +0 -0
  331. {invenio_app_ils-1.0.0a54.dist-info → invenio_app_ils-6.1.0.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,354 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "title": "Series",
4
+ "type": "object",
5
+ "required": ["$schema", "pid", "title", "mode_of_issuance"],
6
+ "properties": {
7
+ "$schema": {
8
+ "type": "string"
9
+ },
10
+ "abstract": {
11
+ "type": "string",
12
+ "description": ""
13
+ },
14
+ "access_urls": {
15
+ "items": {
16
+ "additionalProperties": false,
17
+ "properties": {
18
+ "access_restriction": {
19
+ "items": {
20
+ "title": "Access restriction type",
21
+ "type": "string"
22
+ },
23
+ "title": "List of access restriction types (Vocabulary)",
24
+ "type": "array",
25
+ "uniqueItems": true
26
+ },
27
+ "open_access": {
28
+ "type": "boolean",
29
+ "title": "Indicate if the access to this URL is open or not",
30
+ "default": true
31
+ },
32
+ "description": {
33
+ "minLength": 1,
34
+ "type": "string"
35
+ },
36
+ "login_required": {
37
+ "type": "boolean",
38
+ "title": "Indicate if the access to this link requires login",
39
+ "default": false
40
+ },
41
+ "value": {
42
+ "format": "uri",
43
+ "minLength": 1,
44
+ "type": "string"
45
+ }
46
+ },
47
+ "required": ["value"],
48
+ "title": "URL of external resource",
49
+ "type": "object"
50
+ },
51
+ "minItems": 1,
52
+ "type": "array",
53
+ "uniqueItems": true
54
+ },
55
+ "alternative_titles": {
56
+ "description": "Alternative titles of the document",
57
+ "items": {
58
+ "additionalProperties": false,
59
+ "properties": {
60
+ "language": {
61
+ "maxLength": 3,
62
+ "minLength": 3,
63
+ "title": "ISO 639-3 language code (Vocabulary)",
64
+ "type": "string"
65
+ },
66
+ "value": {
67
+ "minLength": 1,
68
+ "type": "string"
69
+ },
70
+ "type": {
71
+ "type": "string",
72
+ "title": "Type of alternative title (Vocabulary)"
73
+ }
74
+ },
75
+ "required": ["value"],
76
+ "type": "object"
77
+ },
78
+ "minItems": 1,
79
+ "type": "array",
80
+ "uniqueItems": true
81
+ },
82
+ "authors": {
83
+ "items": {
84
+ "type": "string"
85
+ },
86
+ "type": "array",
87
+ "description": ""
88
+ },
89
+ "created_by": {
90
+ "properties": {
91
+ "type": {
92
+ "type": "string"
93
+ },
94
+ "value": {
95
+ "type": "string"
96
+ }
97
+ },
98
+ "type": "object"
99
+ },
100
+ "edition": {
101
+ "type": "string",
102
+ "description": "Edition"
103
+ },
104
+ "extensions": {
105
+ "additionalProperties": {
106
+ "anyOf": [
107
+ {
108
+ "type": "array",
109
+ "items": {
110
+ "type": ["boolean", "number", "string"]
111
+ }
112
+ },
113
+ { "type": "boolean" },
114
+ { "type": "number" },
115
+ { "type": "string" }
116
+ ]
117
+ }
118
+ },
119
+ "identifiers": {
120
+ "items": {
121
+ "properties": {
122
+ "material": {
123
+ "type": "string",
124
+ "title": "Material to which the identifiers refers to."
125
+ },
126
+ "scheme": {
127
+ "title": "Scheme of the identifier (Vocabulary)",
128
+ "type": "string"
129
+ },
130
+ "value": {
131
+ "title": "Value of the identifier",
132
+ "type": "string"
133
+ }
134
+ },
135
+ "required": ["value", "scheme"]
136
+ },
137
+ "title": "List of Identifiers of the record",
138
+ "type": "array"
139
+ },
140
+ "internal_notes": {
141
+ "items": {
142
+ "additionalProperties": false,
143
+ "description": "Visible only for Librarians",
144
+ "properties": {
145
+ "field": {
146
+ "title": "Field to which the note refers to",
147
+ "type": "string"
148
+ },
149
+ "user": {
150
+ "type": "string",
151
+ "title": "User who has composed the note."
152
+ },
153
+ "value": {
154
+ "title": "Note",
155
+ "type": "string"
156
+ }
157
+ },
158
+ "required": ["value"]
159
+ },
160
+ "minItems": 1,
161
+ "title": "List of internal notes",
162
+ "type": "array",
163
+ "uniqueItems": true
164
+ },
165
+ "keywords": {
166
+ "items": {
167
+ "additionalProperties": false,
168
+ "properties": {
169
+ "source": {
170
+ "type": "string"
171
+ },
172
+ "value": {
173
+ "type": "string"
174
+ }
175
+ }
176
+ },
177
+ "title": "Keywords of the series",
178
+ "type": "array"
179
+ },
180
+ "languages": {
181
+ "items": {
182
+ "maxLength": 3,
183
+ "minLength": 3,
184
+ "title": "ISO 639-3 language code",
185
+ "type": "string"
186
+ },
187
+ "type": "array",
188
+ "title": "List of languages of the series (Vocabulary)",
189
+ "description": ""
190
+ },
191
+ "mode_of_issuance": {
192
+ "title": "Mode of issuance",
193
+ "type": "string",
194
+ "enum": ["MULTIPART_MONOGRAPH", "SERIAL"],
195
+ "description": ""
196
+ },
197
+ "note": {
198
+ "title": "Note for the series",
199
+ "type": "string"
200
+ },
201
+ "pid": {
202
+ "title": "Series PID",
203
+ "type": "string"
204
+ },
205
+ "publication_year": {
206
+ "minLength": 1,
207
+ "title": "Year of the publication of the series",
208
+ "type": "string"
209
+ },
210
+ "publisher": {
211
+ "type": "string",
212
+ "title": "Publisher name"
213
+ },
214
+ "relations": {
215
+ "type": "object",
216
+ "properties": {
217
+ "$ref": {
218
+ "type": "string"
219
+ }
220
+ }
221
+ },
222
+ "relations_metadata": {
223
+ "type": "object",
224
+ "title": "Metadata to describe relations",
225
+ "properties": {
226
+ "multipart_monograph": {
227
+ "type": "array",
228
+ "items": {
229
+ "type": "object",
230
+ "properties": {
231
+ "pid": {
232
+ "type": "string"
233
+ },
234
+ "pid_type": {
235
+ "type": "string"
236
+ },
237
+ "volume": {
238
+ "type": "string"
239
+ }
240
+ }
241
+ }
242
+ },
243
+ "serial": {
244
+ "type": "array",
245
+ "items": {
246
+ "type": "object",
247
+ "properties": {
248
+ "pid": {
249
+ "type": "string"
250
+ },
251
+ "pid_type": {
252
+ "type": "string"
253
+ },
254
+ "volume": {
255
+ "type": "string"
256
+ }
257
+ }
258
+ }
259
+ },
260
+ "other": {
261
+ "type": "array",
262
+ "items": {
263
+ "type": "object",
264
+ "properties": {
265
+ "pid": {
266
+ "type": "string"
267
+ },
268
+ "pid_type": {
269
+ "type": "string"
270
+ },
271
+ "note": {
272
+ "type": "string"
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+ },
279
+ "series_type": {
280
+ "title": "Series type",
281
+ "type": "string"
282
+ },
283
+ "tags": {
284
+ "items": {
285
+ "title": "Tag name",
286
+ "type": "string"
287
+ },
288
+ "title": "List of tags of the series (Vocabulary)",
289
+ "type": "array",
290
+ "uniqueItems": true
291
+ },
292
+ "title": {
293
+ "type": "string"
294
+ },
295
+ "updated_by": {
296
+ "properties": {
297
+ "type": {
298
+ "type": "string"
299
+ },
300
+ "value": {
301
+ "type": "string"
302
+ }
303
+ },
304
+ "title": "Last update entity information",
305
+ "type": "object"
306
+ },
307
+ "urls": {
308
+ "items": {
309
+ "additionalProperties": false,
310
+ "properties": {
311
+ "description": {
312
+ "minLength": 1,
313
+ "type": "string"
314
+ },
315
+ "value": {
316
+ "format": "uri",
317
+ "minLength": 1,
318
+ "type": "string"
319
+ },
320
+ "meta": {
321
+ "type": "string",
322
+ "description": "System information about the url."
323
+ }
324
+ },
325
+ "required": ["value"],
326
+ "title": "URL of external resource",
327
+ "type": "object"
328
+ },
329
+ "minItems": 1,
330
+ "type": "array",
331
+ "uniqueItems": true
332
+ },
333
+ "physical_volumes": {
334
+ "items": {
335
+ "additionalProperties": false,
336
+ "properties": {
337
+ "description": {
338
+ "minLength": 1,
339
+ "type": "string"
340
+ },
341
+ "location": {
342
+ "minLength": 1,
343
+ "type": "string"
344
+ }
345
+ },
346
+ "title": "Physical volumes description and location",
347
+ "type": "object"
348
+ },
349
+ "minItems": 1,
350
+ "type": "array",
351
+ "uniqueItems": true
352
+ }
353
+ }
354
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "index_patterns": ["__SEARCH_INDEX_PREFIX__stats-file-download-*"],
3
+ "settings": {
4
+ "index": {
5
+ "refresh_interval": "1m"
6
+ }
7
+ },
8
+ "mappings": {
9
+ "date_detection": false,
10
+ "dynamic": false,
11
+ "dynamic_templates": [
12
+ {
13
+ "date_fields": {
14
+ "match_mapping_type": "date",
15
+ "mapping": {
16
+ "type": "date",
17
+ "format": "date_optional_time"
18
+ }
19
+ }
20
+ }
21
+ ],
22
+ "numeric_detection": false,
23
+ "properties": {
24
+ "bucket_id": {
25
+ "type": "keyword"
26
+ },
27
+ "collection": {
28
+ "type": "keyword"
29
+ },
30
+ "count": {
31
+ "type": "integer"
32
+ },
33
+ "document_pid": {
34
+ "type": "keyword"
35
+ },
36
+ "eitem_pid": {
37
+ "type": "keyword"
38
+ },
39
+ "file_id": {
40
+ "type": "keyword"
41
+ },
42
+ "file_key": {
43
+ "type": "keyword"
44
+ },
45
+ "timestamp": {
46
+ "type": "date",
47
+ "format": "date_optional_time"
48
+ },
49
+ "unique_count": {
50
+ "type": "integer"
51
+ },
52
+ "unique_id": {
53
+ "type": "keyword"
54
+ }
55
+ }
56
+ },
57
+ "aliases": {
58
+ "__SEARCH_INDEX_PREFIX__stats-file-download": {}
59
+ }
60
+ }
@@ -0,0 +1,9 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file is part of Invenio.
4
+ # Copyright (C) 2019 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
+ """File download aggregations Elasticsearch index templates."""
@@ -0,0 +1,60 @@
1
+ {
2
+ "index_patterns": ["__SEARCH_INDEX_PREFIX__stats-file-download-*"],
3
+ "settings": {
4
+ "index": {
5
+ "refresh_interval": "1m"
6
+ }
7
+ },
8
+ "mappings": {
9
+ "date_detection": false,
10
+ "dynamic": false,
11
+ "dynamic_templates": [
12
+ {
13
+ "date_fields": {
14
+ "match_mapping_type": "date",
15
+ "mapping": {
16
+ "type": "date",
17
+ "format": "date_optional_time"
18
+ }
19
+ }
20
+ }
21
+ ],
22
+ "numeric_detection": false,
23
+ "properties": {
24
+ "bucket_id": {
25
+ "type": "keyword"
26
+ },
27
+ "collection": {
28
+ "type": "keyword"
29
+ },
30
+ "count": {
31
+ "type": "integer"
32
+ },
33
+ "document_pid": {
34
+ "type": "keyword"
35
+ },
36
+ "eitem_pid": {
37
+ "type": "keyword"
38
+ },
39
+ "file_id": {
40
+ "type": "keyword"
41
+ },
42
+ "file_key": {
43
+ "type": "keyword"
44
+ },
45
+ "timestamp": {
46
+ "type": "date",
47
+ "format": "date_optional_time"
48
+ },
49
+ "unique_count": {
50
+ "type": "integer"
51
+ },
52
+ "unique_id": {
53
+ "type": "keyword"
54
+ }
55
+ }
56
+ },
57
+ "aliases": {
58
+ "__SEARCH_INDEX_PREFIX__stats-file-download": {}
59
+ }
60
+ }
@@ -0,0 +1,73 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file is part of Invenio.
4
+ # Copyright (C) 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
+ """ILS stats event builders."""
10
+
11
+ import datetime
12
+
13
+ from flask import g
14
+ from flask_login import current_user
15
+
16
+ from invenio_app_ils.permissions import backoffice_permission
17
+ from invenio_app_ils.records.api import IlsRecord
18
+
19
+
20
+ def ils_record_changed_event_builder(
21
+ event, sender_app, method=None, record=None, **kwargs
22
+ ):
23
+ """Build an event for ILS record changes."""
24
+
25
+ if not method:
26
+ raise ValueError("Method must be provided to the event builder.")
27
+ if not record:
28
+ raise ValueError("Record must be provided to the event builder.")
29
+ if not isinstance(record, IlsRecord):
30
+ return None
31
+
32
+ # We have to get the pid_type directly through the private accessor,
33
+ # as the pid might not be registered directly after the record creation.
34
+ pid_type = record._pid_type
35
+
36
+ event_data = {
37
+ "timestamp": datetime.datetime.now(datetime.timezone.utc)
38
+ .replace(tzinfo=None)
39
+ .isoformat(),
40
+ "pid_type": pid_type,
41
+ "method": method,
42
+ }
43
+
44
+ event.update(event_data)
45
+ return event
46
+
47
+
48
+ def add_librarian_user_id_to_event(event, sender_app, **kwargs):
49
+ """Add the user_id of the librarian performing the action to the event."""
50
+
51
+ user_id = None
52
+ if (
53
+ current_user
54
+ and current_user.is_authenticated
55
+ and backoffice_permission().allows(g.identity)
56
+ ):
57
+ user_id = current_user.get_id()
58
+
59
+ event.update({"user_id": user_id})
60
+
61
+ return event
62
+
63
+
64
+ def add_record_pid_to_event(event, sender_app, record=None, **kwargs):
65
+ """Add the record pid to the event."""
66
+ if not record:
67
+ raise ValueError("Record must be provided to the event builder.")
68
+
69
+ # We have to get the pid directly from the record,
70
+ # as the pid might not yet be registered (e.g. after record creation).
71
+ event.update({"pid_value": record.get("pid")})
72
+
73
+ return event
@@ -0,0 +1,72 @@
1
+ {
2
+ "index_patterns": ["__SEARCH_INDEX_PREFIX__events-stats-file-download-*"],
3
+ "settings": {
4
+ "index": {
5
+ "refresh_interval": "5s"
6
+ }
7
+ },
8
+ "mappings": {
9
+ "date_detection": false,
10
+ "dynamic": false,
11
+ "dynamic_templates": [
12
+ {
13
+ "date_fields": {
14
+ "match_mapping_type": "date",
15
+ "mapping": {
16
+ "type": "date",
17
+ "format": "strict_date_hour_minute_second"
18
+ }
19
+ }
20
+ }
21
+ ],
22
+ "numeric_detection": false,
23
+ "properties": {
24
+ "bucket_id": {
25
+ "type": "keyword"
26
+ },
27
+ "collection": {
28
+ "type": "keyword"
29
+ },
30
+ "country": {
31
+ "type": "keyword"
32
+ },
33
+ "document_pid": {
34
+ "type": "keyword"
35
+ },
36
+ "eitem_pid": {
37
+ "type": "keyword"
38
+ },
39
+ "file_id": {
40
+ "type": "keyword"
41
+ },
42
+ "file_key": {
43
+ "type": "keyword"
44
+ },
45
+ "is_robot": {
46
+ "type": "boolean"
47
+ },
48
+ "size": {
49
+ "type": "double"
50
+ },
51
+ "timestamp": {
52
+ "type": "date",
53
+ "format": "strict_date_hour_minute_second"
54
+ },
55
+ "updated_timestamp": {
56
+ "type": "date"
57
+ },
58
+ "unique_id": {
59
+ "type": "keyword"
60
+ },
61
+ "unique_session_id": {
62
+ "type": "keyword"
63
+ },
64
+ "visitor_id": {
65
+ "type": "keyword"
66
+ }
67
+ }
68
+ },
69
+ "aliases": {
70
+ "__SEARCH_INDEX_PREFIX__events-stats-file-download": {}
71
+ }
72
+ }
@@ -0,0 +1,9 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file is part of Invenio.
4
+ # Copyright (C) 2019 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
+ """File download event Elasticsearch index templates."""