invenio-app-rdm 5.0.0.dev0__py2.py3-none-any.whl → 14.0.0b4.dev4__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 (540) hide show
  1. invenio_app_rdm/__init__.py +13 -4
  2. invenio_app_rdm/administration/__init__.py +8 -0
  3. invenio_app_rdm/administration/audit_logs/__init__.py +12 -0
  4. invenio_app_rdm/administration/audit_logs/audit_logs.py +81 -0
  5. invenio_app_rdm/administration/domains/__init__.py +22 -0
  6. invenio_app_rdm/administration/domains/domains.py +159 -0
  7. invenio_app_rdm/administration/moderation/__init__.py +11 -0
  8. invenio_app_rdm/administration/moderation/requests.py +175 -0
  9. invenio_app_rdm/administration/records/__init__.py +15 -0
  10. invenio_app_rdm/administration/records/records.py +163 -0
  11. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/audit_logs.html +14 -0
  12. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/domains_search.html +13 -0
  13. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/records/drafts.html +14 -0
  14. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/records/records.html +14 -0
  15. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests.html +14 -0
  16. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests_details.html +93 -0
  17. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/user_moderation.html +14 -0
  18. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/user_moderation_details.html +14 -0
  19. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/users_search.html +14 -0
  20. invenio_app_rdm/administration/user_moderation/__init__.py +11 -0
  21. invenio_app_rdm/administration/user_moderation/user_moderation.py +175 -0
  22. invenio_app_rdm/administration/users/__init__.py +12 -0
  23. invenio_app_rdm/administration/users/users.py +130 -0
  24. invenio_app_rdm/administration/views/__init__.py +11 -0
  25. invenio_app_rdm/administration/views/ui.py +21 -0
  26. invenio_app_rdm/cli.py +95 -0
  27. invenio_app_rdm/communities_ui/__init__.py +9 -0
  28. invenio_app_rdm/communities_ui/searchapp.py +27 -0
  29. invenio_app_rdm/communities_ui/sitemap.py +63 -0
  30. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/collections/collection.html +60 -0
  31. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/collections/macros.html +43 -0
  32. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/details/browse/index.html +59 -0
  33. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/records/index.html +24 -0
  34. invenio_app_rdm/communities_ui/views/__init__.py +13 -0
  35. invenio_app_rdm/communities_ui/views/communities.py +206 -0
  36. invenio_app_rdm/communities_ui/views/ui.py +93 -0
  37. invenio_app_rdm/config.py +1167 -100
  38. invenio_app_rdm/ext.py +157 -0
  39. invenio_app_rdm/fixtures/__init__.py +56 -0
  40. invenio_app_rdm/fixtures/data/oai_sets.yaml +6 -0
  41. invenio_app_rdm/fixtures/oai_sets.py +20 -0
  42. invenio_app_rdm/fixtures/pages/.gitkeep +1 -0
  43. invenio_app_rdm/fixtures/pages.py +76 -0
  44. invenio_app_rdm/records_ui/previewer/__init__.py +9 -0
  45. invenio_app_rdm/records_ui/previewer/iiif_simple.py +51 -0
  46. invenio_app_rdm/records_ui/searchapp.py +70 -0
  47. invenio_app_rdm/records_ui/sitemap.py +44 -0
  48. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html +64 -15
  49. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html +417 -172
  50. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/access-form.html +64 -0
  51. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/citation.html +7 -9
  52. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/contact.html +2 -1
  53. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/creatibutors.html +51 -0
  54. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/description.html +13 -2
  55. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/details.html +330 -22
  56. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/doi.html +5 -23
  57. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/meta.html +36 -0
  58. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/citations.html +6 -0
  59. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/communities.html +34 -0
  60. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/details.html +36 -0
  61. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/export.html +34 -0
  62. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/external_resources.html +55 -0
  63. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/keywords_subjects.html +20 -0
  64. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/licenses.html +78 -0
  65. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/locations.html +23 -0
  66. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html +42 -0
  67. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/metrics.html +16 -0
  68. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/technical_metadata.html +21 -0
  69. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/versions.html +26 -0
  70. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar.html +4 -45
  71. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/stats.html +112 -90
  72. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/subjects.html +37 -7
  73. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/draft_not_found.html +17 -0
  74. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/export.html +9 -8
  75. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/iiif_preview.html +3 -7
  76. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/creatibutors.html +98 -39
  77. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html +280 -43
  78. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/doi.html +36 -0
  79. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/files.html +176 -71
  80. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/locations.html +62 -0
  81. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/stats_popup.html +21 -0
  82. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/version.html +3 -2
  83. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/restricted_with_doi_tombstone.html +33 -0
  84. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/search.html +3 -89
  85. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/tombstone.html +55 -12
  86. invenio_app_rdm/records_ui/utils.py +127 -2
  87. invenio_app_rdm/records_ui/views/__init__.py +123 -38
  88. invenio_app_rdm/records_ui/views/decorators.py +414 -120
  89. invenio_app_rdm/records_ui/views/deposits.py +569 -75
  90. invenio_app_rdm/records_ui/views/filters.py +125 -34
  91. invenio_app_rdm/records_ui/views/records.py +425 -76
  92. invenio_app_rdm/redirector/__init__.py +8 -0
  93. invenio_app_rdm/redirector/resource.py +106 -0
  94. invenio_app_rdm/redirector/views.py +18 -0
  95. invenio_app_rdm/requests_ui/__init__.py +9 -0
  96. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-inclusion/index.html +14 -0
  97. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-invitation/community_dashboard.html +38 -0
  98. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-invitation/user_dashboard.html +26 -0
  99. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-submission/index.html +129 -0
  100. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/file-modification/index.html +88 -0
  101. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/guest-access-request/index.html +66 -0
  102. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/macros/request_header.html +78 -0
  103. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/record-deletion/index.html +95 -0
  104. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/subcommunity/index.html +49 -0
  105. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/subcommunity-invitation/index.html +49 -0
  106. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/user-access-request/index.html +59 -0
  107. invenio_app_rdm/requests_ui/views/__init__.py +13 -0
  108. invenio_app_rdm/requests_ui/views/requests.py +374 -0
  109. invenio_app_rdm/requests_ui/views/ui.py +72 -0
  110. invenio_app_rdm/tasks.py +45 -0
  111. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/AuditLogActions.js +136 -0
  112. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewJson.js +35 -0
  113. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewRecentChanges.js +119 -0
  114. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/index.js +31 -0
  115. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/SearchResultItemLayout.js +87 -0
  116. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/index.js +9 -0
  117. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js +89 -0
  118. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUser.js +92 -0
  119. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js +199 -0
  120. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js +80 -0
  121. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js +109 -0
  122. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaForm.js +196 -0
  123. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/index.js +9 -0
  124. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/index.js +27 -0
  125. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/SearchResultItemLayout.js +185 -0
  126. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/index.js +9 -0
  127. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/drafts/index.js +32 -0
  128. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/CompareRevisions.js +129 -0
  129. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordActions.js +75 -0
  130. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordResourceActions.js +185 -0
  131. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RemovalReasonsSelect.js +85 -0
  132. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RestoreConfirmation.js +108 -0
  133. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/TombstoneForm.js +212 -0
  134. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js +38 -0
  135. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/index.js +9 -0
  136. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js +30 -0
  137. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/index.js +40 -0
  138. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/AdministrationSearchLayout.js +56 -0
  139. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/RecordSearchLayout.js +84 -0
  140. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/SearchResultItemLayout.js +171 -0
  141. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/filters/DeletionStatusFilter.js +121 -0
  142. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/filters/index.js +9 -0
  143. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/index.js +10 -0
  144. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchResultItem.js +79 -0
  145. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchbarLayout.js +48 -0
  146. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/index.js +22 -0
  147. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/ModerationActions.js +103 -0
  148. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/index.js +29 -0
  149. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/SearchResultItemLayout.js +151 -0
  150. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/UserModerationBulkActions.js +0 -0
  151. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/UserModerationSearchLayout.js +56 -0
  152. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/index.js +10 -0
  153. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/UserActions.js +263 -0
  154. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/api.js +42 -0
  155. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/index.js +8 -0
  156. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/routes.js +38 -0
  157. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/index.js +30 -0
  158. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/SearchResultItemLayout.js +202 -0
  159. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/UserSearchLayout.js +81 -0
  160. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/filters/UserStatusFilterComponent.js +114 -0
  161. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/filters/index.js +1 -0
  162. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/index.js +10 -0
  163. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/collectionRecordsSearch/index.js +61 -0
  164. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchAppLayout.js +84 -0
  165. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchBarElement.js +44 -0
  166. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSingleSearchBarElement.js +46 -0
  167. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/components.js +3 -0
  168. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/index.js +66 -0
  169. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CompactStats.js +52 -0
  170. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CopyButton.js +142 -0
  171. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/DisplayPartOfCommunities.js +78 -0
  172. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/DisplayVerifiedCommunity.js +54 -0
  173. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/FileModificationUntil.js +45 -0
  174. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionModal.js +354 -0
  175. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionRadioGroup.js +44 -0
  176. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion.js +81 -0
  177. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordsResultsListItem.js +189 -0
  178. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js +795 -440
  179. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/ShareDraftButton.js +65 -0
  180. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/config.js +48 -0
  181. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js +27 -11
  182. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/frontpage/RecordsList.js +165 -0
  183. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/frontpage/index.js +23 -0
  184. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/AccessRequestForm.js +254 -0
  185. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagement.js +179 -0
  186. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagementDropdown.js +186 -0
  187. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/EditButton.js +36 -15
  188. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ExportDropdown.js +68 -0
  189. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageButton.js +140 -0
  190. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageDefaultBrandingAction/ManageDefaultBrandingAction.js +129 -0
  191. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunitiesModal.js +63 -0
  192. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunitiesSearch.js +89 -0
  193. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunityRequestItem.js +33 -0
  194. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCitationField.js +162 -0
  195. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesList.js +150 -0
  196. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesListModal.js +90 -0
  197. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesSearch.js +109 -0
  198. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesSearchItem.js +58 -0
  199. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/index.js +3 -0
  200. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitySubmission/RecordCommunitySubmissionModal.js +171 -0
  201. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js +123 -42
  202. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordVersionsList.js +153 -78
  203. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RemoveFromCommunity/RemoveFromCommunityAction.js +188 -0
  204. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/AccessDropdown.js +93 -0
  205. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/CreateAccessLink.js +111 -0
  206. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchItem.js +170 -0
  207. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchResultContainer.js +236 -0
  208. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksTab.js +106 -0
  209. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessRequests/AccessRequestsTab.js +239 -0
  210. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/AccessUsersGroups.js +178 -0
  211. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/AddUserGroupAccessModal.js +172 -0
  212. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/GroupsTab.js +88 -0
  213. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/PeopleTab.js +88 -0
  214. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/UserGroupAccessSearchResultItem.js +158 -0
  215. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/ShareButton.js +62 -0
  216. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/ShareModal.js +252 -0
  217. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/api/api.js +39 -0
  218. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/access.js +24 -0
  219. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js +102 -28
  220. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/theme.js +131 -0
  221. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/index.js +13 -0
  222. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/mapping.js +12 -0
  223. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/AccessRequestExpiration.js +61 -0
  224. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/index.js +1 -0
  225. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineEdit.js +177 -0
  226. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineRead.js +50 -0
  227. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/overrides/TimelineFeedHeader.js +34 -0
  228. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/components.js +181 -226
  229. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/index.js +50 -16
  230. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/subcommunity/browse.js +28 -0
  231. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/theme.js +164 -0
  232. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/base.js +210 -0
  233. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/communities.js +56 -0
  234. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/requests.js +78 -0
  235. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads.js +210 -0
  236. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/ComputerTabletUploadsItem.js +155 -0
  237. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/MobileUploadsItem.js +154 -0
  238. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js +130 -0
  239. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/file_uploader/uppy.less +37 -0
  240. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/creatibutors.less +54 -0
  241. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/licenses.less +74 -0
  242. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/previewer/iiif_simple.less +16 -0
  243. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/form.overrides +170 -4
  244. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/form.variables +3 -5
  245. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/grid.overrides +113 -14
  246. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/grid.variables +3 -5
  247. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/menu.overrides +395 -4
  248. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/menu.variables +3 -5
  249. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/message.overrides +34 -10
  250. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/message.variables +6 -4
  251. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/table.overrides +185 -0
  252. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/table.variables +1 -0
  253. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/button.overrides +112 -4
  254. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/button.variables +5 -4
  255. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/container.overrides +127 -4
  256. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/container.variables +6 -4
  257. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/header.overrides +61 -4
  258. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/header.variables +3 -5
  259. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/icon.overrides +29 -4
  260. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/icon.variables +3 -5
  261. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/image.overrides +115 -0
  262. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/image.variables +4 -0
  263. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/input.overrides +50 -4
  264. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/input.variables +5 -4
  265. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/label.overrides +116 -0
  266. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/label.variables +0 -0
  267. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/list.overrides +73 -27
  268. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/list.variables +3 -5
  269. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/segment.overrides +86 -4
  270. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/segment.variables +3 -5
  271. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/reset.overrides +3 -5
  272. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/reset.variables +3 -5
  273. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.overrides +560 -4
  274. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.variables +142 -4
  275. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.overrides +161 -0
  276. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.variables +9 -0
  277. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/checkbox.overrides +3 -5
  278. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/checkbox.variables +3 -5
  279. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/dropdown.overrides +116 -12
  280. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/dropdown.variables +10 -0
  281. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/modal.overrides +151 -0
  282. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/modal.variables +5 -0
  283. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/search.overrides +7 -0
  284. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/search.variables +0 -0
  285. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/tab.overrides +3 -0
  286. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/tab.variables +6 -0
  287. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/transition.overrides +67 -0
  288. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/transition.variables +3 -0
  289. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/theme.less +71 -0
  290. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/card.overrides +168 -0
  291. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/card.variables +2 -0
  292. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/feed.overrides +463 -0
  293. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/feed.variables +1 -0
  294. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/item.overrides +175 -0
  295. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/item.variables +0 -0
  296. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next.js +37 -0
  297. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/_generatedTranslations.js +66 -0
  298. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/messages.po +951 -0
  299. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/translations.json +307 -0
  300. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/messages.po +895 -0
  301. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/translations.json +283 -0
  302. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/messages.po +896 -0
  303. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/translations.json +283 -0
  304. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/messages.po +961 -0
  305. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/translations.json +295 -0
  306. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/messages.po +897 -0
  307. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/translations.json +283 -0
  308. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/messages.po +966 -0
  309. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/translations.json +283 -0
  310. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/messages.po +898 -0
  311. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/translations.json +283 -0
  312. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/messages.po +1009 -0
  313. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/translations.json +316 -0
  314. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/messages.po +960 -0
  315. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/translations.json +283 -0
  316. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/messages.po +896 -0
  317. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/translations.json +283 -0
  318. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/messages.po +895 -0
  319. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/translations.json +283 -0
  320. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/messages.po +960 -0
  321. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/translations.json +283 -0
  322. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/messages.po +901 -0
  323. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/translations.json +289 -0
  324. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/messages.po +952 -0
  325. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/translations.json +283 -0
  326. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/index.js +20 -0
  327. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/messages.po +905 -0
  328. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/translations.json +283 -0
  329. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/messages.po +889 -0
  330. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/translations.json +277 -0
  331. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/messages.po +895 -0
  332. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/translations.json +283 -0
  333. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/messages.po +889 -0
  334. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/translations.json +277 -0
  335. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/messages.po +907 -0
  336. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/translations.json +295 -0
  337. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/messages.po +895 -0
  338. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/translations.json +283 -0
  339. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/messages.po +910 -0
  340. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/translations.json +295 -0
  341. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/messages.po +901 -0
  342. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/translations.json +283 -0
  343. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/messages.po +908 -0
  344. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/translations.json +289 -0
  345. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/messages.po +958 -0
  346. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/translations.json +295 -0
  347. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/messages.po +908 -0
  348. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/translations.json +295 -0
  349. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/messages.po +951 -0
  350. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/translations.json +283 -0
  351. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/messages.po +952 -0
  352. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/translations.json +283 -0
  353. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/messages.po +910 -0
  354. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/translations.json +295 -0
  355. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/messages.po +891 -0
  356. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/translations.json +277 -0
  357. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/messages.po +889 -0
  358. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/translations.json +277 -0
  359. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package.json +18 -0
  360. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/translations.pot +1009 -0
  361. invenio_app_rdm/theme/static/icons/licenses/cc-by-icon.svg +52 -0
  362. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-eu-icon.svg +44 -0
  363. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-icon.svg +67 -0
  364. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-nd-eu-icon.svg +57 -0
  365. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-nd-icon.svg +93 -0
  366. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-sa-eu-icon.svg +55 -0
  367. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-sa-icon.svg +55 -0
  368. invenio_app_rdm/theme/static/icons/licenses/cc-by-nd-icon.svg +75 -0
  369. invenio_app_rdm/theme/static/icons/licenses/cc-by-sa-icon.svg +72 -0
  370. invenio_app_rdm/theme/static/icons/licenses/cc-cc0-icon.svg +29 -0
  371. invenio_app_rdm/theme/static/icons/licenses/cc-pddc-icon.svg +25 -0
  372. invenio_app_rdm/theme/static/images/gnd-icon.svg +27 -0
  373. invenio_app_rdm/theme/static/images/ror-icon.svg +14 -0
  374. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/administration_page.html +19 -0
  375. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/default_static_page.html +33 -0
  376. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/files_integrity_report/email/files_integrity_report.html +31 -0
  377. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/footer.html +32 -78
  378. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/frontpage.html +41 -176
  379. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header.html +122 -65
  380. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header_frontpage.html +18 -14
  381. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header_login.html +130 -38
  382. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.de.html +5 -4
  383. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.en.html +13 -8
  384. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.sv.html +254 -0
  385. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/statistics.en.html +197 -0
  386. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/statistics.sv.html +196 -0
  387. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/versioning.en.html +149 -0
  388. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/versioning.sv.html +143 -0
  389. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/intro_section.html +98 -0
  390. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/javascript.html +12 -0
  391. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/macros/records_list.html +50 -0
  392. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/page.html +36 -0
  393. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/page_cover.html +13 -0
  394. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/robots.txt +15 -0
  395. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/searchbar.html +63 -0
  396. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/settings/notifications.html +17 -0
  397. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/site_footer.html +29 -0
  398. invenio_app_rdm/theme/templates/semantic-ui/invenio_communities/default_static_page.html +26 -0
  399. invenio_app_rdm/theme/templates/semantic-ui/invenio_previewer/latest_record.html +18 -0
  400. invenio_app_rdm/theme/templates/semantic-ui/invenio_previewer/rdm_abstract_previewer.html +30 -0
  401. invenio_app_rdm/theme/templates/themes/default/invenio_app_rdm/header.html +147 -0
  402. invenio_app_rdm/theme/templates/themes/default/invenio_app_rdm/site_footer.html +42 -0
  403. invenio_app_rdm/theme/views.py +108 -26
  404. invenio_app_rdm/theme/webpack.py +76 -32
  405. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.mo +0 -0
  406. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.po +1389 -0
  407. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.mo +0 -0
  408. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.po +1361 -0
  409. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.mo +0 -0
  410. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.po +1362 -0
  411. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.mo +0 -0
  412. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.po +1398 -0
  413. invenio_app_rdm/translations/da/LC_MESSAGES/messages.mo +0 -0
  414. invenio_app_rdm/translations/da/LC_MESSAGES/messages.po +1363 -0
  415. invenio_app_rdm/translations/de/LC_MESSAGES/messages.mo +0 -0
  416. invenio_app_rdm/translations/de/LC_MESSAGES/messages.po +1410 -0
  417. invenio_app_rdm/translations/el/LC_MESSAGES/messages.mo +0 -0
  418. invenio_app_rdm/translations/el/LC_MESSAGES/messages.po +1364 -0
  419. invenio_app_rdm/translations/es/LC_MESSAGES/messages.mo +0 -0
  420. invenio_app_rdm/translations/es/LC_MESSAGES/messages.po +1389 -0
  421. invenio_app_rdm/translations/et/LC_MESSAGES/messages.mo +0 -0
  422. invenio_app_rdm/translations/et/LC_MESSAGES/messages.po +1364 -0
  423. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.mo +0 -0
  424. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.po +1361 -0
  425. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.mo +0 -0
  426. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.po +1390 -0
  427. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.mo +0 -0
  428. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.po +1361 -0
  429. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.mo +0 -0
  430. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.po +1402 -0
  431. invenio_app_rdm/translations/it/LC_MESSAGES/messages.mo +0 -0
  432. invenio_app_rdm/translations/it/LC_MESSAGES/messages.po +1366 -0
  433. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.mo +0 -0
  434. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.po +1361 -0
  435. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.mo +0 -0
  436. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.po +1361 -0
  437. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.mo +0 -0
  438. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.po +1361 -0
  439. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.mo +0 -0
  440. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.po +1361 -0
  441. invenio_app_rdm/translations/messages.pot +1371 -51
  442. invenio_app_rdm/translations/no/LC_MESSAGES/messages.mo +0 -0
  443. invenio_app_rdm/translations/no/LC_MESSAGES/messages.po +1361 -0
  444. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.mo +0 -0
  445. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.po +1361 -0
  446. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.mo +0 -0
  447. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.po +1361 -0
  448. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.mo +0 -0
  449. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.po +1391 -0
  450. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.mo +0 -0
  451. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.po +1384 -0
  452. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.mo +0 -0
  453. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.po +1362 -0
  454. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.mo +0 -0
  455. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.po +1400 -0
  456. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.mo +0 -0
  457. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.po +1340 -63
  458. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.mo +0 -0
  459. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.po +1363 -0
  460. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  461. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.po +1363 -0
  462. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  463. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.po +1361 -0
  464. invenio_app_rdm/upgrade_scripts/fix_migrated_records_from_1_0_to_2_0.py +1 -0
  465. invenio_app_rdm/upgrade_scripts/fix_migrated_records_from_8_0_to_9_0.py +90 -0
  466. invenio_app_rdm/upgrade_scripts/migrate_10_0_to_11_0.py +47 -0
  467. invenio_app_rdm/upgrade_scripts/migrate_11_0_to_12_0.py +205 -0
  468. invenio_app_rdm/upgrade_scripts/migrate_12_0_to_13_0.py +235 -0
  469. invenio_app_rdm/upgrade_scripts/migrate_13_0_to_14_0.py +268 -0
  470. invenio_app_rdm/upgrade_scripts/migrate_2_0_to_3_0.py +7 -3
  471. invenio_app_rdm/upgrade_scripts/migrate_3_0_to_4_0.py +26 -10
  472. invenio_app_rdm/upgrade_scripts/migrate_4_0_to_6_0.py +395 -0
  473. invenio_app_rdm/upgrade_scripts/migrate_6_0_to_7_0.py +161 -0
  474. invenio_app_rdm/upgrade_scripts/migrate_7_0_to_8_0.py +153 -0
  475. invenio_app_rdm/upgrade_scripts/migrate_8_0_to_9_0.py +98 -0
  476. invenio_app_rdm/upgrade_scripts/migrate_9_0_to_10_0.py +43 -0
  477. invenio_app_rdm/users/schemas.py +27 -0
  478. invenio_app_rdm/users_ui/__init__.py +9 -0
  479. invenio_app_rdm/users_ui/searchapp.py +53 -0
  480. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/base.html +21 -0
  481. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/communities.html +25 -0
  482. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/header.html +46 -0
  483. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/requests.html +24 -0
  484. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/uploads.html +25 -0
  485. invenio_app_rdm/users_ui/views/__init__.py +14 -0
  486. invenio_app_rdm/users_ui/views/dashboard.py +59 -0
  487. invenio_app_rdm/users_ui/views/ui.py +68 -0
  488. invenio_app_rdm/utils/files.py +120 -0
  489. invenio_app_rdm/views.py +21 -0
  490. invenio_app_rdm-14.0.0b4.dev4.dist-info/METADATA +627 -0
  491. invenio_app_rdm-14.0.0b4.dev4.dist-info/RECORD +508 -0
  492. {invenio_app_rdm-5.0.0.dev0.dist-info → invenio_app_rdm-14.0.0b4.dev4.dist-info}/WHEEL +1 -1
  493. invenio_app_rdm-14.0.0b4.dev4.dist-info/entry_points.txt +44 -0
  494. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/contributors.html +0 -32
  495. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/creators.html +0 -30
  496. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/licenses.html +0 -35
  497. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/search_deposit.html +0 -103
  498. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareButton.js +0 -43
  499. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareModal.js +0 -188
  500. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_records_search/components.js +0 -361
  501. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_records_search/index.js +0 -41
  502. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/deposit.less +0 -126
  503. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/export_page.less +0 -20
  504. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/footer.less +0 -83
  505. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/frontpage.less +0 -95
  506. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page.less +0 -212
  507. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/navbar.less +0 -216
  508. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/search.less +0 -41
  509. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme.less +0 -420
  510. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/variables.less +0 -41
  511. invenio_app_rdm/theme/static/images/logo-bnl.png +0 -0
  512. invenio_app_rdm/theme/static/images/logo-caltechlibrary.png +0 -0
  513. invenio_app_rdm/theme/static/images/logo-cd2h.png +0 -0
  514. invenio_app_rdm/theme/static/images/logo-cern.png +0 -0
  515. invenio_app_rdm/theme/static/images/logo-cottagelabs.png +0 -0
  516. invenio_app_rdm/theme/static/images/logo-data-futures.png +0 -0
  517. invenio_app_rdm/theme/static/images/logo-eko-konnect.png +0 -0
  518. invenio_app_rdm/theme/static/images/logo-geo.svg +0 -1337
  519. invenio_app_rdm/theme/static/images/logo-hzdr.png +0 -0
  520. invenio_app_rdm/theme/static/images/logo-infn.svg +0 -28
  521. invenio_app_rdm/theme/static/images/logo-jrc.svg +0 -1905
  522. invenio_app_rdm/theme/static/images/logo-northwestern-university.png +0 -0
  523. invenio_app_rdm/theme/static/images/logo-openaire.png +0 -0
  524. invenio_app_rdm/theme/static/images/logo-tind.png +0 -0
  525. invenio_app_rdm/theme/static/images/logo-tu-graz.svg +0 -25
  526. invenio_app_rdm/theme/static/images/logo-tu-wien.svg +0 -23
  527. invenio_app_rdm/theme/static/images/logo-tubitak.svg +0 -49
  528. invenio_app_rdm/theme/static/images/logo-uni-hamburg.png +0 -0
  529. invenio_app_rdm/theme/static/images/logo-uni-munster.png +0 -0
  530. invenio_app_rdm/theme/static/images/logo-wacren.png +0 -0
  531. invenio_app_rdm/translations/en/LC_MESSAGES/messages.mo +0 -0
  532. invenio_app_rdm/translations/en/LC_MESSAGES/messages.po +0 -29
  533. invenio_app_rdm/version.py +0 -23
  534. invenio_app_rdm-5.0.0.dev0.dist-info/AUTHORS.rst +0 -11
  535. invenio_app_rdm-5.0.0.dev0.dist-info/METADATA +0 -75
  536. invenio_app_rdm-5.0.0.dev0.dist-info/RECORD +0 -138
  537. invenio_app_rdm-5.0.0.dev0.dist-info/entry_points.txt +0 -13
  538. /invenio_app_rdm/{translations/.gitkeep → fixtures/data/pages.yaml} +0 -0
  539. {invenio_app_rdm-5.0.0.dev0.dist-info → invenio_app_rdm-14.0.0b4.dev4.dist-info/licenses}/LICENSE +0 -0
  540. {invenio_app_rdm-5.0.0.dev0.dist-info → invenio_app_rdm-14.0.0b4.dev4.dist-info}/top_level.txt +0 -0
invenio_app_rdm/config.py CHANGED
@@ -1,7 +1,10 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2019-2020 CERN.
3
+ # Copyright (C) 2019-2025 CERN.
4
4
  # Copyright (C) 2019-2020 Northwestern University.
5
+ # Copyright (C) 2021-2025 Graz University of Technology.
6
+ # Copyright (C) 2022-2025 KTH Royal Institute of Technology.
7
+ # Copyright (C) 2023 TU Wien
5
8
  #
6
9
  # Invenio App RDM is free software; you can redistribute it and/or modify it
7
10
  # under the terms of the MIT License; see LICENSE file for more details.
@@ -30,16 +33,148 @@ WARNING: An instance should NOT install multiple flavour extensions since
30
33
 
31
34
  from datetime import datetime, timedelta
32
35
 
36
+ import invenio_communities.notifications.builders as community_notifications
37
+ from celery.schedules import crontab
33
38
  from flask_principal import Denial
39
+ from flask_resources import HTTPJSONException, create_error_handler
34
40
  from invenio_access.permissions import any_user
41
+ from invenio_communities.communities.resources.config import community_error_handlers
42
+ from invenio_communities.notifications.builders import (
43
+ CommunityInvitationAcceptNotificationBuilder,
44
+ CommunityInvitationCancelNotificationBuilder,
45
+ CommunityInvitationDeclineNotificationBuilder,
46
+ CommunityInvitationExpireNotificationBuilder,
47
+ CommunityInvitationSubmittedNotificationBuilder,
48
+ )
49
+ from invenio_notifications.backends import EmailNotificationBackend
50
+ from invenio_rdm_records.notifications.builders import (
51
+ CommunityInclusionAcceptNotificationBuilder,
52
+ CommunityInclusionCancelNotificationBuilder,
53
+ CommunityInclusionDeclineNotificationBuilder,
54
+ CommunityInclusionExpireNotificationBuilder,
55
+ CommunityInclusionSubmittedNotificationBuilder,
56
+ GrantUserAccessNotificationBuilder,
57
+ GuestAccessRequestAcceptNotificationBuilder,
58
+ GuestAccessRequestCancelNotificationBuilder,
59
+ GuestAccessRequestDeclineNotificationBuilder,
60
+ GuestAccessRequestSubmitNotificationBuilder,
61
+ GuestAccessRequestSubmittedNotificationBuilder,
62
+ GuestAccessRequestTokenCreateNotificationBuilder,
63
+ RecordDeletionAcceptNotificationBuilder,
64
+ RecordDeletionDeclineNotificationBuilder,
65
+ UserAccessRequestAcceptNotificationBuilder,
66
+ UserAccessRequestCancelNotificationBuilder,
67
+ UserAccessRequestDeclineNotificationBuilder,
68
+ UserAccessRequestSubmitNotificationBuilder,
69
+ )
70
+ from invenio_rdm_records.proxies import current_rdm_records_service
71
+ from invenio_rdm_records.requests.entity_resolvers import (
72
+ EmailResolver,
73
+ RDMRecordServiceResultResolver,
74
+ )
75
+ from invenio_rdm_records.resources.stats.event_builders import build_record_unique_id
76
+ from invenio_rdm_records.services.communities.components import (
77
+ CommunityServiceComponents,
78
+ )
79
+ from invenio_rdm_records.services.errors import (
80
+ InvalidAccessRestrictions,
81
+ InvalidCommunityVisibility,
82
+ )
83
+ from invenio_rdm_records.services.github.release import RDMGithubRelease
84
+ from invenio_rdm_records.services.permissions import RDMRequestsPermissionPolicy
85
+ from invenio_rdm_records.services.stats import permissions_policy_lookup_factory
86
+ from invenio_rdm_records.services.tasks import StatsRDMReindexTask
87
+ from invenio_records_resources.references.entity_resolvers import ServiceResultResolver
88
+ from invenio_requests.notifications.builders import (
89
+ CommentRequestEventCreateNotificationBuilder,
90
+ CommentRequestEventReplyNotificationBuilder,
91
+ )
92
+ from invenio_requests.resources.requests.config import request_error_handlers
93
+ from invenio_requests.services.requests import facets
94
+ from invenio_stats.aggregations import StatAggregator
95
+ from invenio_stats.contrib.event_builders import build_file_unique_id
96
+ from invenio_stats.processors import (
97
+ EventsIndexer,
98
+ anonymize_user,
99
+ filter_robots,
100
+ flag_machines,
101
+ )
102
+ from invenio_stats.queries import TermsQuery
103
+ from invenio_stats.tasks import StatsAggregationTask, StatsEventTask
104
+ from invenio_vocabularies.config import (
105
+ VOCABULARIES_DATASTREAM_READERS,
106
+ VOCABULARIES_DATASTREAM_TRANSFORMERS,
107
+ VOCABULARIES_DATASTREAM_WRITERS,
108
+ )
109
+ from invenio_vocabularies.contrib.affiliations.datastreams import (
110
+ VOCABULARIES_DATASTREAM_READERS as AFFILIATIONS_READERS,
111
+ )
112
+ from invenio_vocabularies.contrib.affiliations.datastreams import (
113
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as AFFILIATIONS_TRANSFORMERS,
114
+ )
115
+ from invenio_vocabularies.contrib.affiliations.datastreams import (
116
+ VOCABULARIES_DATASTREAM_WRITERS as AFFILIATIONS_WRITERS,
117
+ )
118
+ from invenio_vocabularies.contrib.awards.datastreams import (
119
+ VOCABULARIES_DATASTREAM_READERS as AWARDS_READERS,
120
+ )
121
+ from invenio_vocabularies.contrib.awards.datastreams import (
122
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as AWARDS_TRANSFORMERS,
123
+ )
124
+ from invenio_vocabularies.contrib.awards.datastreams import (
125
+ VOCABULARIES_DATASTREAM_WRITERS as AWARDS_WRITERS,
126
+ )
127
+ from invenio_vocabularies.contrib.common.openaire.datastreams import (
128
+ VOCABULARIES_DATASTREAM_READERS as COMMON_OPENAIRE_READERS,
129
+ )
130
+ from invenio_vocabularies.contrib.common.openaire.datastreams import (
131
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as COMMON_OPENAIRE_TRANSFORMERS,
132
+ )
133
+ from invenio_vocabularies.contrib.common.openaire.datastreams import (
134
+ VOCABULARIES_DATASTREAM_WRITERS as COMMON_OPENAIRE_WRITERS,
135
+ )
136
+ from invenio_vocabularies.contrib.common.ror.datastreams import (
137
+ VOCABULARIES_DATASTREAM_READERS as COMMON_ROR_READERS,
138
+ )
139
+ from invenio_vocabularies.contrib.common.ror.datastreams import (
140
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as COMMON_ROR_TRANSFORMERS,
141
+ )
142
+ from invenio_vocabularies.contrib.common.ror.datastreams import (
143
+ VOCABULARIES_DATASTREAM_WRITERS as COMMON_ROR_WRITERS,
144
+ )
145
+ from invenio_vocabularies.contrib.funders.datastreams import (
146
+ VOCABULARIES_DATASTREAM_READERS as FUNDERS_READERS,
147
+ )
148
+ from invenio_vocabularies.contrib.funders.datastreams import (
149
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as FUNDERS_TRANSFORMERS,
150
+ )
151
+ from invenio_vocabularies.contrib.funders.datastreams import (
152
+ VOCABULARIES_DATASTREAM_WRITERS as FUNDERS_WRITERS,
153
+ )
154
+ from invenio_vocabularies.contrib.names.datastreams import (
155
+ VOCABULARIES_DATASTREAM_READERS as NAMES_READERS,
156
+ )
157
+ from invenio_vocabularies.contrib.names.datastreams import (
158
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as NAMES_TRANSFORMERS,
159
+ )
160
+ from invenio_vocabularies.contrib.names.datastreams import (
161
+ VOCABULARIES_DATASTREAM_WRITERS as NAMES_WRITERS,
162
+ )
163
+ from invenio_vocabularies.contrib.subjects.datastreams import (
164
+ VOCABULARIES_DATASTREAM_READERS as SUBJECTS_READERS,
165
+ )
166
+ from invenio_vocabularies.contrib.subjects.datastreams import (
167
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as SUBJECTS_TRANSFORMERS,
168
+ )
169
+ from invenio_vocabularies.contrib.subjects.datastreams import (
170
+ VOCABULARIES_DATASTREAM_WRITERS as SUBJECTS_WRITERS,
171
+ )
172
+ from werkzeug.local import LocalProxy
35
173
 
36
- from .records_ui.utils import previewer_record_file_factory
37
-
38
- # PIDSTORE_RECID_FIELD
39
- # RECORDS_PERMISSIONS_RECORD_POLICY
40
- # RECORDS_REST_DEFAULT_SORT
41
- # RECORDS_REST_FACETS
42
- # RECORDS_REST_SORT_OPTIONS
174
+ from .communities_ui.sitemap import SitemapSectionOfCommunities
175
+ from .records_ui.sitemap import SitemapSectionOfRDMRecords
176
+ from .theme.views import notification_settings
177
+ from .users.schemas import NotificationsUserSchema, UserPreferencesNotificationsSchema
43
178
 
44
179
  # TODO: Remove when records-rest is out of communities and files
45
180
  RECORDS_REST_ENDPOINTS = {}
@@ -55,7 +190,7 @@ def _(x):
55
190
  # =====
56
191
  # See https://flask.palletsprojects.com/en/1.1.x/config/
57
192
 
58
- APP_ALLOWED_HOSTS = ['0.0.0.0', 'localhost', '127.0.0.1']
193
+ TRUSTED_HOSTS = ["0.0.0.0", "localhost", "127.0.0.1"]
59
194
  """Allowed hosts.
60
195
 
61
196
  Since HAProxy and Nginx route all requests no matter the host header
@@ -85,21 +220,24 @@ SESSION_COOKIE_SAMESITE = "Lax"
85
220
  # =============
86
221
  # https://flask-limiter.readthedocs.io/en/stable/#configuration
87
222
 
88
- RATELIMIT_STORAGE_URL = "redis://localhost:6379/3"
223
+ RATELIMIT_STORAGE_URI = "redis://localhost:6379/3"
89
224
  """Storage for ratelimiter."""
90
225
 
226
+ # Increase defaults
227
+ RATELIMIT_AUTHENTICATED_USER = "25000 per hour;1000 per minute"
228
+
229
+ RATELIMIT_GUEST_USER = "5000 per hour;500 per minute"
91
230
 
92
231
  # Flask-Babel
93
232
  # ===========
94
233
  # See https://pythonhosted.org/Flask-Babel/#configuration
95
234
 
96
- BABEL_DEFAULT_LOCALE = 'en'
235
+ BABEL_DEFAULT_LOCALE = "en"
97
236
  """Default locale (language)."""
98
237
 
99
- BABEL_DEFAULT_TIMEZONE = 'Europe/Zurich'
238
+ BABEL_DEFAULT_TIMEZONE = "Europe/Zurich"
100
239
  """Default time zone."""
101
240
 
102
-
103
241
  # Invenio-I18N
104
242
  # ============
105
243
  # See https://invenio-i18n.readthedocs.io/en/latest/configuration.html
@@ -114,51 +252,79 @@ BABEL_DEFAULT_TIMEZONE = 'Europe/Zurich'
114
252
  # =============
115
253
  # See https://invenio-theme.readthedocs.io/en/latest/configuration.html
116
254
 
117
- APP_THEME = ['semantic-ui']
255
+ APP_THEME = ["semantic-ui"]
118
256
  """Application theme."""
119
257
 
120
- BASE_TEMPLATE = 'invenio_theme/page.html'
258
+ BASE_TEMPLATE = "invenio_app_rdm/page.html"
121
259
  """Global base template."""
122
260
 
123
- COVER_TEMPLATE = 'invenio_theme/page_cover.html'
261
+ COVER_TEMPLATE = "invenio_app_rdm/page_cover.html"
124
262
  """Cover page base template (used for e.g. login/sign-up)."""
125
263
 
126
- SETTINGS_TEMPLATE = 'invenio_theme/page_settings.html'
264
+ SETTINGS_TEMPLATE = "invenio_theme/page_settings.html"
127
265
  """Settings base template."""
128
266
 
129
- THEME_FOOTER_TEMPLATE = 'invenio_app_rdm/footer.html'
267
+ THEME_FOOTER_TEMPLATE = "invenio_app_rdm/footer.html"
130
268
  """Footer base template."""
131
269
 
132
270
  THEME_FRONTPAGE = False
133
271
  """Use default frontpage."""
134
272
 
135
- THEME_FRONTPAGE_TITLE = _('The turn-key research data management repository')
273
+ THEME_FRONTPAGE_TITLE = _("The turn-key research data management repository")
136
274
  """Frontpage title."""
137
275
 
138
- THEME_HEADER_TEMPLATE = 'invenio_app_rdm/header.html'
276
+ THEME_HEADER_TEMPLATE = "invenio_app_rdm/header.html"
139
277
  """Header base template."""
140
278
 
141
- THEME_HEADER_LOGIN_TEMPLATE = 'invenio_app_rdm/header_login.html'
279
+ THEME_FRONTPAGE_TEMPLATE = "invenio_app_rdm/frontpage.html"
280
+ """Frontpage template."""
281
+
282
+ THEME_HEADER_LOGIN_TEMPLATE = "invenio_app_rdm/header_login.html"
142
283
  """Header login base template."""
143
284
 
144
- THEME_LOGO = 'images/invenio-rdm.svg'
285
+
286
+ def _get_package_version():
287
+ from importlib.metadata import PackageNotFoundError, version
288
+
289
+ from packaging.version import Version
290
+
291
+ try:
292
+ package_version = version("invenio-app-rdm")
293
+ parsed_version = Version(package_version)
294
+ major_minor_version = (
295
+ f"InvenioRDM {parsed_version.major}.{parsed_version.minor}"
296
+ )
297
+ return major_minor_version
298
+ except PackageNotFoundError:
299
+ # default without any version
300
+ return "InvenioRDM"
301
+
302
+
303
+ THEME_GENERATOR = _get_package_version()
304
+ """Generator meta tag to identify the software that generated the page.
305
+
306
+ Set it to `None` to disable the tag.
307
+ """
308
+
309
+ THEME_LOGO = "images/invenio-rdm.svg"
145
310
  """Theme logo."""
146
311
 
147
- THEME_SITENAME = _('InvenioRDM')
312
+ THEME_SITENAME = _("InvenioRDM")
148
313
  """Site name."""
149
314
 
315
+ THEME_TWITTERHANDLE = ""
316
+ """Twitter handle."""
150
317
 
151
- # Invenio-Communities
152
- # ===================
153
-
154
- COMMUNITIES_ENABLED = False
155
- """Control if community views and endpoints are enabled."""
318
+ THEME_SHOW_FRONTPAGE_INTRO_SECTION = True
319
+ """Front page intro section visibility"""
156
320
 
321
+ THEME_JAVASCRIPT_TEMPLATE = "invenio_app_rdm/javascript.html"
157
322
 
158
323
  # Invenio-Files-REST
159
324
  # ==================
160
325
  # See https://invenio-files-rest.readthedocs.io/en/latest/configuration.html
161
326
 
327
+
162
328
  def files_rest_permission_factory(obj, action):
163
329
  """Generate a denying permission."""
164
330
  return Denial(any_user)
@@ -167,41 +333,31 @@ def files_rest_permission_factory(obj, action):
167
333
  FILES_REST_PERMISSION_FACTORY = files_rest_permission_factory
168
334
  """Set default files permission factory."""
169
335
 
336
+ FILES_REST_CHECKSUM_VERIFICATION_URI_PREFIXES = []
337
+ """URI prefixes of files their checksums should be verified"""
170
338
 
171
- # Invenio-IIIF
172
- # =================
173
- # See https://invenio-iiif.readthedocs.io/en/latest/configuration.html
174
-
175
- IIIF_PREVIEW_TEMPLATE = "invenio_app_rdm/landing_page/iiif_preview.html"
176
- """Template for IIIF image preview."""
339
+ # Storage classes
340
+ FILES_REST_STORAGE_CLASS_LIST = {
341
+ "L": "Local",
342
+ "F": "Fetch",
343
+ "R": "Remote",
344
+ }
177
345
 
178
- # Invenio-Previewer
179
- # =================
180
- # See https://github.com/inveniosoftware/invenio-previewer/blob/master/invenio_previewer/config.py # noqa
346
+ FILES_REST_DEFAULT_STORAGE_CLASS = "L"
181
347
 
182
- PREVIEWER_PREFERENCE = [
183
- 'csv_dthreejs',
184
- # TODO: IIIF checks bucket-level permissions, and thus won't work
185
- # 'iiif_image',
186
- 'simple_image',
187
- 'json_prismjs',
188
- 'xml_prismjs',
189
- 'mistune',
190
- 'pdfjs',
191
- 'ipynb',
192
- 'zip',
193
- ]
194
- """Preferred previewers."""
348
+ FILES_REST_DEFAULT_QUOTA_SIZE = 10**10
349
+ """Default quota size is 10Gb."""
195
350
 
196
- # PREVIEWER_RECORD_FILE_FACOTRY = previewer_record_file_factory
351
+ FILES_REST_DEFAULT_MAX_FILE_SIZE = FILES_REST_DEFAULT_QUOTA_SIZE
352
+ """Default maximum file size for a bucket in bytes."""
197
353
 
198
354
  # Invenio-Formatter
199
355
  # =================
200
356
 
201
- FORMATTER_BADGES_ALLOWED_TITLES = ['DOI', 'doi']
357
+ FORMATTER_BADGES_ALLOWED_TITLES = ["DOI", "doi"]
202
358
  """List of allowed titles in badges."""
203
359
 
204
- FORMATTER_BADGES_TITLE_MAPPING = {'doi': 'DOI'}
360
+ FORMATTER_BADGES_TITLE_MAPPING = {"doi": "DOI"}
205
361
  """Mapping of titles."""
206
362
 
207
363
  # Invenio-Mail / Flask-Mail
@@ -211,22 +367,26 @@ FORMATTER_BADGES_TITLE_MAPPING = {'doi': 'DOI'}
211
367
  MAIL_SUPPRESS_SEND = True
212
368
  """Disable email sending by default."""
213
369
 
370
+ MAIL_DEFAULT_SENDER = "info@inveniosoftware.org"
371
+ """Email address used as sender of account registration emails.
372
+
373
+ `SECURITY_EMAIL_SENDER` will default to this value.
374
+ """
214
375
 
215
376
  # Flask-Collect
216
377
  # =============
217
378
  # See https://github.com/klen/Flask-Collect#setup
218
379
 
219
- COLLECT_STORAGE = 'flask_collect.storage.file'
380
+ COLLECT_STORAGE = "flask_collect.storage.file"
220
381
  """Static files collection method (defaults to copying files)."""
221
382
 
222
-
223
383
  # Invenio-Accounts
224
384
  # ================
225
385
  # (Flask-Security, Flask-Login, Flask-Principal, Flask-KVSession)
226
386
  # See https://invenio-accounts.readthedocs.io/en/latest/configuration.html
227
387
  # See https://flask-security.readthedocs.io/en/3.0.0/configuration.html
228
388
 
229
- ACCOUNTS_SESSION_REDIS_URL = 'redis://localhost:6379/1'
389
+ ACCOUNTS_SESSION_REDIS_URL = "redis://localhost:6379/1"
230
390
  """Redis session storage URL."""
231
391
 
232
392
  ACCOUNTS_USERINFO_HEADERS = True
@@ -237,12 +397,21 @@ MUST ensure that NGINX (or other proxies) removes these headers again before
237
397
  sending the response to the client. Set to False, in case of doubt.
238
398
  """
239
399
 
240
- SECURITY_EMAIL_SENDER = "info@inveniosoftware.org"
241
- """Email address used as sender of account registration emails."""
400
+
401
+ ACCOUNTS_USER_PREFERENCES_SCHEMA = UserPreferencesNotificationsSchema()
402
+ """The schema to use for validation of the user preferences."""
403
+
404
+ # Invenio-Security-Invenio
405
+ # ========================
242
406
 
243
407
  SECURITY_EMAIL_SUBJECT_REGISTER = _("Welcome to Invenio App RDM!")
244
408
  """Email subject for account registration emails."""
245
409
 
410
+ # Invenio-UserProfiles
411
+ # ================
412
+
413
+ USERPROFILES_EXTEND_SECURITY_FORMS = True
414
+ """Extend the registration form with profile fields (name, affiliations)."""
246
415
 
247
416
  # Invenio-Celery / Celery / Flask-Celeryext
248
417
  # =========================================
@@ -254,18 +423,82 @@ BROKER_URL = "amqp://guest:guest@localhost:5672/"
254
423
  """URL of message broker for Celery 3 (default is RabbitMQ)."""
255
424
 
256
425
  CELERY_BEAT_SCHEDULE = {
257
- 'indexer': {
258
- 'task': 'invenio_indexer.tasks.process_bulk_queue',
259
- 'schedule': timedelta(minutes=5),
426
+ "indexer": {
427
+ "task": "invenio_records_resources.tasks.manage_indexer_queues",
428
+ "schedule": timedelta(seconds=10),
429
+ },
430
+ "accounts_sessions": {
431
+ "task": "invenio_accounts.tasks.clean_session_table",
432
+ "schedule": timedelta(minutes=60),
433
+ },
434
+ "accounts_ips": {
435
+ "task": "invenio_accounts.tasks.delete_ips",
436
+ "schedule": timedelta(hours=6),
437
+ },
438
+ "update_domain_status": {
439
+ "task": "invenio_accounts.tasks.update_domain_status",
440
+ "schedule": timedelta(hours=4),
441
+ },
442
+ "draft_resources": {
443
+ "task": ("invenio_drafts_resources.services.records.tasks.cleanup_drafts"),
444
+ "schedule": timedelta(minutes=60),
445
+ },
446
+ "rdm_records": {
447
+ "task": "invenio_rdm_records.services.tasks.update_expired_embargos",
448
+ "schedule": crontab(minute=2, hour=0),
260
449
  },
261
- 'accounts': {
262
- 'task': 'invenio_accounts.tasks.clean_session_table',
263
- 'schedule': timedelta(minutes=60),
450
+ "expire_requests": {
451
+ "task": "invenio_requests.tasks.check_expired_requests",
452
+ "schedule": crontab(minute=3, hour=0),
453
+ },
454
+ "file-checks": {
455
+ "task": "invenio_files_rest.tasks.schedule_checksum_verification",
456
+ "schedule": timedelta(hours=1),
457
+ "kwargs": {
458
+ "batch_interval": {"hours": 1},
459
+ "frequency": {"days": 14},
460
+ "max_count": 0,
461
+ # Query taking into account only files with URI prefixes defined by
462
+ # the FILES_REST_CHECKSUM_VERIFICATION_URI_PREFIXES config variable
463
+ "files_query": "invenio_app_rdm.utils.files.checksum_verification_files_query",
464
+ },
465
+ },
466
+ "file-integrity-report": {
467
+ "task": "invenio_app_rdm.tasks.file_integrity_report",
468
+ "schedule": crontab(minute=0, hour=7), # Every day at 07:00 UTC
469
+ },
470
+ # indexing of statistics events & aggregations
471
+ "stats-process-events": {
472
+ **StatsEventTask,
473
+ "schedule": crontab(minute="25,55"), # Every hour at minute 25 and 55
474
+ },
475
+ "stats-aggregate-events": {
476
+ **StatsAggregationTask,
477
+ "schedule": crontab(minute=0), # Every hour at minute 0
478
+ },
479
+ "reindex-stats": StatsRDMReindexTask, # Every hour at minute 10
480
+ # Invenio communities provides some caching that has the potential to be never removed,
481
+ # therefore, we need a cronjob to ensure that at least once per day we clear the cache
482
+ "clear-cache": {
483
+ "task": "invenio_communities.tasks.clear_cache",
484
+ "schedule": crontab(minute=0, hour=1), # Every day at 01:00 UTC
485
+ },
486
+ "clean-access-request-tokens": {
487
+ "task": "invenio_rdm_records.requests.access.tasks.clean_expired_request_access_tokens",
488
+ "schedule": crontab(minute=4, hour=0),
489
+ },
490
+ "delete-job-logs": {
491
+ "task": "invenio_jobs.logging.tasks.delete_logs",
492
+ "schedule": crontab(minute=5, hour=0),
493
+ },
494
+ "update_sitemap": {
495
+ "task": "invenio_sitemap.tasks.update_sitemap_cache",
496
+ "schedule": crontab(minute=0, hour=2),
497
+ },
498
+ "update-collections-size": {
499
+ "task": "invenio_collections.tasks.update_collections_size",
500
+ "schedule": timedelta(hours=1),
264
501
  },
265
- 'draft_resources': {
266
- 'task': 'invenio_draft_resources.tasks.cleanup_drafts',
267
- 'schedule': timedelta(minutes=60),
268
- }
269
502
  }
270
503
  """Scheduled tasks configuration (aka cronjobs)."""
271
504
 
@@ -275,14 +508,13 @@ CELERY_BROKER_URL = BROKER_URL
275
508
  CELERY_RESULT_BACKEND = "redis://localhost:6379/2"
276
509
  """URL of backend for result storage (default is Redis)."""
277
510
 
278
-
279
511
  # Flask-SQLAlchemy
280
512
  # ================
281
513
  # See https://flask-sqlalchemy.palletsprojects.com/en/2.x/config/
282
514
 
283
- SQLALCHEMY_DATABASE_URI = \
284
- 'postgresql+psycopg2://invenio-app-rdm:invenio-app-rdm@localhost/' \
285
- 'invenio-app-rdm'
515
+ SQLALCHEMY_DATABASE_URI = (
516
+ "postgresql+psycopg2://invenio-app-rdm:invenio-app-rdm@localhost/invenio-app-rdm"
517
+ )
286
518
  """Database URI including user and password.
287
519
 
288
520
  Default value is provided to make module testing easier.
@@ -291,7 +523,6 @@ Default value is provided to make module testing easier.
291
523
  SQLALCHEMY_ECHO = False
292
524
  """Enable to see all SQL queries."""
293
525
 
294
-
295
526
  SQLALCHEMY_ENGINE_OPTIONS = {
296
527
  "pool_pre_ping": False,
297
528
  "pool_recycle": 3600,
@@ -355,7 +586,6 @@ See https://docs.sqlalchemy.org/en/latest/core/engines.html.
355
586
  # setting.
356
587
  DB_VERSIONING_USER_MODEL = None
357
588
 
358
-
359
589
  # Invenio-JSONSchemas/Invenio-Records
360
590
  # ===================================
361
591
  # See https://invenio-jsonschemas.readthedocs.io/en/latest/configuration.html
@@ -366,7 +596,7 @@ JSONSCHEMAS_REGISTER_ENDPOINTS_API = False
366
596
  JSONSCHEMAS_REGISTER_ENDPOINTS_UI = False
367
597
  """Don't' register schema endpoints."""
368
598
 
369
- JSONSCHEMAS_HOST = 'unused'
599
+ JSONSCHEMAS_HOST = "unused"
370
600
  # This variable is set to something different than localhost to avoid a warning
371
601
  # being issued. The value is however not used, because of the two variables
372
602
  # set below.
@@ -378,9 +608,7 @@ Note that when using a custom ref resolver class you should also set
378
608
  ``RECORDS_REFRESOLVER_STORE`` to point to a JSONSchema ref resolver store.
379
609
  """
380
610
 
381
- RECORDS_REFRESOLVER_STORE = (
382
- "invenio_jsonschemas.proxies.current_refresolver_store"
383
- )
611
+ RECORDS_REFRESOLVER_STORE = "invenio_jsonschemas.proxies.current_refresolver_store"
384
612
  """JSONSchemas ref resolver store.
385
613
 
386
614
  Used together with ``RECORDS_REFRESOLVER_CLS`` to provide a specific
@@ -392,9 +620,78 @@ ref resolver store.
392
620
  # See https://github.com/inveniosoftware/invenio-oaiserver/blob/master/invenio_oaiserver/config.py # noqa
393
621
  # (Using GitHub because documentation site out-of-sync at time of writing)
394
622
 
395
- OAISERVER_ID_PREFIX = 'oai:invenio-app-rdm.org:'
623
+ OAISERVER_ID_PREFIX = "oai:invenio-app-rdm.org:"
396
624
  """The prefix that will be applied to the generated OAI-PMH ids."""
397
625
 
626
+ OAISERVER_SEARCH_CLS = "invenio_rdm_records.oai:OAIRecordSearch"
627
+ """Class for record search."""
628
+
629
+ OAISERVER_ID_FETCHER = "invenio_rdm_records.oai:oaiid_fetcher"
630
+ """OAI ID fetcher function."""
631
+
632
+ OAISERVER_METADATA_FORMATS = {
633
+ "marcxml": {
634
+ "serializer": "invenio_rdm_records.oai:marcxml_etree",
635
+ "schema": "https://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd",
636
+ "namespace": "https://www.loc.gov/standards/marcxml/",
637
+ },
638
+ "oai_dc": {
639
+ "serializer": "invenio_rdm_records.oai:dublincore_etree",
640
+ "schema": "http://www.openarchives.org/OAI/2.0/oai_dc.xsd",
641
+ "namespace": "http://www.openarchives.org/OAI/2.0/oai_dc/",
642
+ },
643
+ "dcat": {
644
+ "serializer": "invenio_rdm_records.oai:dcat_etree",
645
+ "schema": "http://schema.datacite.org/meta/kernel-4/metadata.xsd",
646
+ "namespace": "https://www.w3.org/ns/dcat",
647
+ },
648
+ "marc21": {
649
+ "serializer": "invenio_rdm_records.oai:marcxml_etree",
650
+ "schema": "https://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd",
651
+ "namespace": "https://www.loc.gov/standards/marcxml/",
652
+ },
653
+ "datacite": {
654
+ "serializer": "invenio_rdm_records.oai:datacite_etree",
655
+ "schema": "http://schema.datacite.org/meta/kernel-4.5/metadata.xsd",
656
+ "namespace": "http://datacite.org/schema/kernel-4",
657
+ },
658
+ "oai_datacite": {
659
+ "serializer": "invenio_rdm_records.oai:oai_datacite_etree",
660
+ "schema": "http://schema.datacite.org/oai/oai-1.1/oai.xsd",
661
+ "namespace": "http://schema.datacite.org/oai/oai-1.1/",
662
+ },
663
+ "datacite4": {
664
+ "serializer": "invenio_rdm_records.oai:datacite_etree",
665
+ "schema": "http://schema.datacite.org/meta/kernel-4.5/metadata.xsd",
666
+ "namespace": "http://datacite.org/schema/kernel-4",
667
+ },
668
+ "oai_datacite4": {
669
+ "serializer": ("invenio_rdm_records.oai:oai_datacite_etree"),
670
+ "schema": "http://schema.datacite.org/oai/oai-1.1/oai.xsd",
671
+ "namespace": "http://schema.datacite.org/oai/oai-1.1/",
672
+ },
673
+ }
674
+
675
+ OAISERVER_LAST_UPDATE_KEY = "updated"
676
+ """Record update key."""
677
+
678
+ OAISERVER_CREATED_KEY = "created"
679
+ """Record created key."""
680
+
681
+ OAISERVER_RECORD_CLS = "invenio_rdm_records.records.api:RDMRecord"
682
+ """Record retrieval class."""
683
+
684
+ OAISERVER_RECORD_SETS_FETCHER = "invenio_oaiserver.percolator:find_sets_for_record"
685
+ """Record's OAI sets function."""
686
+
687
+ OAISERVER_RECORD_INDEX = LocalProxy(
688
+ lambda: current_rdm_records_service.record_cls.index._name
689
+ )
690
+
691
+ """Specify a search index with records that should be exposed via OAI-PMH."""
692
+
693
+ OAISERVER_GETRECORD_FETCHER = "invenio_rdm_records.oai:getrecord_fetcher"
694
+ """Record data fetcher for serialization."""
398
695
 
399
696
  # Flask-DebugToolbar
400
697
  # ==================
@@ -405,7 +702,6 @@ OAISERVER_ID_PREFIX = 'oai:invenio-app-rdm.org:'
405
702
  DEBUG_TB_INTERCEPT_REDIRECTS = False
406
703
  """Switches off incept of redirects by Flask-DebugToolbar."""
407
704
 
408
-
409
705
  # Flask-Caching
410
706
  # =============
411
707
  # See https://flask-caching.readthedocs.io/en/latest/index.html#configuring-flask-caching # noqa
@@ -416,6 +712,10 @@ CACHE_REDIS_URL = "redis://localhost:6379/0"
416
712
  CACHE_TYPE = "flask_caching.backends.redis"
417
713
  """Use Redis caching object."""
418
714
 
715
+ # Invenio-Access
716
+ # ==============
717
+ # See https://invenio-access.readthedocs.io/en/latest/configuration.html
718
+
419
719
  ACCESS_CACHE = "invenio_cache:current_cache"
420
720
  """Use the cache for permmissions caching."""
421
721
 
@@ -423,9 +723,8 @@ ACCESS_CACHE = "invenio_cache:current_cache"
423
723
  # ==============
424
724
  # See https://invenio-search.readthedocs.io/en/latest/configuration.html
425
725
 
426
- SEARCH_ELASTIC_HOSTS = [{"host": "localhost", "port": 9200}]
427
- """Elasticsearch hosts."""
428
-
726
+ SEARCH_HOSTS = [{"host": "localhost", "port": 9200}]
727
+ """Search hosts."""
429
728
 
430
729
  # Invenio-Base
431
730
  # ============
@@ -434,24 +733,84 @@ SEARCH_ELASTIC_HOSTS = [{"host": "localhost", "port": 9200}]
434
733
  WSGI_PROXIES = 2
435
734
  """Correct number of proxies in front of your application."""
436
735
 
736
+ # Invenio-REST
737
+ # ============
738
+
739
+ REST_CSRF_ENABLED = True
740
+
741
+ # Invenio-Vocabularies
742
+ # ====================
743
+
744
+ VOCABULARIES_DATASTREAM_READERS = {
745
+ **VOCABULARIES_DATASTREAM_READERS,
746
+ **NAMES_READERS,
747
+ **COMMON_OPENAIRE_READERS,
748
+ **COMMON_ROR_READERS,
749
+ **AWARDS_READERS,
750
+ **FUNDERS_READERS,
751
+ **AFFILIATIONS_READERS,
752
+ **SUBJECTS_READERS,
753
+ }
754
+ """Data Streams readers."""
755
+
756
+ VOCABULARIES_DATASTREAM_TRANSFORMERS = {
757
+ **VOCABULARIES_DATASTREAM_TRANSFORMERS,
758
+ **NAMES_TRANSFORMERS,
759
+ **COMMON_OPENAIRE_TRANSFORMERS,
760
+ **COMMON_ROR_TRANSFORMERS,
761
+ **AWARDS_TRANSFORMERS,
762
+ **FUNDERS_TRANSFORMERS,
763
+ **AFFILIATIONS_TRANSFORMERS,
764
+ **SUBJECTS_TRANSFORMERS,
765
+ }
766
+ """Data Streams transformers."""
767
+
768
+ VOCABULARIES_DATASTREAM_WRITERS = {
769
+ **VOCABULARIES_DATASTREAM_WRITERS,
770
+ **NAMES_WRITERS,
771
+ **FUNDERS_WRITERS,
772
+ **AWARDS_WRITERS,
773
+ **AFFILIATIONS_WRITERS,
774
+ **COMMON_OPENAIRE_WRITERS,
775
+ **COMMON_ROR_WRITERS,
776
+ **SUBJECTS_WRITERS,
777
+ }
778
+ """Data Streams writers."""
437
779
 
438
780
  # Invenio-APP-RDM
439
781
  # ===============
440
782
 
441
- SEARCH_UI_SEARCH_TEMPLATE = 'invenio_app_rdm/records/search.html'
442
- """Search page's base template."""
783
+ SEARCH_UI_SEARCH_TEMPLATE = "invenio_app_rdm/records/search.html"
784
+ """Search page's base template.
785
+
786
+ Previous invenio-search-ui, now is picked by the instance records/ext.py.
787
+ """
788
+
789
+ APP_RDM_DEPOSIT_FORM_TEMPLATE = "invenio_app_rdm/records/deposit.html"
790
+ """Deposit page's form template."""
791
+
792
+ APP_RDM_USER_DASHBOARD_ROUTES = {
793
+ "uploads": "/me/uploads",
794
+ "communities": "/me/communities",
795
+ "requests": "/me/requests",
796
+ }
443
797
 
444
798
  APP_RDM_ROUTES = {
445
799
  "index": "/",
800
+ "robots": "/robots.txt",
446
801
  "help_search": "/help/search",
447
- "record_search": "/search2",
802
+ "help_statistics": "/help/statistics",
803
+ "help_versioning": "/help/versioning",
804
+ "record_search": "/search",
448
805
  "record_detail": "/records/<pid_value>",
449
806
  "record_export": "/records/<pid_value>/export/<export_format>",
450
807
  "record_file_preview": "/records/<pid_value>/preview/<path:filename>",
451
808
  "record_file_download": "/records/<pid_value>/files/<path:filename>",
809
+ "record_thumbnail": "/records/<pid_value>/thumb<int:size>",
810
+ "record_media_file_download": "/records/<pid_value>/media-files/<path:filename>",
452
811
  "record_from_pid": "/<any({schemes}):pid_scheme>/<path:pid_value>",
453
812
  "record_latest": "/records/<pid_value>/latest",
454
- "deposit_search": "/uploads",
813
+ "dashboard_home": "/me",
455
814
  "deposit_create": "/uploads/new",
456
815
  "deposit_edit": "/uploads/<pid_value>",
457
816
  }
@@ -459,28 +818,146 @@ APP_RDM_ROUTES = {
459
818
  APP_RDM_RECORD_EXPORTERS = {
460
819
  "json": {
461
820
  "name": _("JSON"),
462
- "serializer": ("invenio_rdm_records.resources.serializers:"
463
- "UIJSONSerializer")
821
+ "serializer": ("flask_resources.serializers:JSONSerializer"),
822
+ "params": {"options": {"indent": 2, "sort_keys": True}},
823
+ "content-type": "application/json",
824
+ "filename": "{id}.json",
825
+ },
826
+ "json-ld": {
827
+ "name": _("JSON-LD"),
828
+ "serializer": (
829
+ "invenio_rdm_records.resources.serializers:SchemaorgJSONLDSerializer"
830
+ ),
831
+ "content-type": "application/ld+json",
832
+ "filename": "{id}.json",
833
+ },
834
+ "csl": {
835
+ "name": _("CSL"),
836
+ "serializer": ("invenio_rdm_records.resources.serializers:CSLJSONSerializer"),
837
+ "params": {"options": {"indent": 2, "sort_keys": True}},
838
+ "content-type": "application/vnd.citationstyles.csl+json",
839
+ "filename": "{id}.json",
840
+ },
841
+ "datacite-json": {
842
+ "name": _("DataCite JSON"),
843
+ "serializer": (
844
+ "invenio_rdm_records.resources.serializers:DataCite45JSONSerializer"
845
+ ),
846
+ "params": {"options": {"indent": 2, "sort_keys": True}},
847
+ "content-type": "application/vnd.datacite.datacite+json",
848
+ "filename": "{id}.json",
849
+ },
850
+ "datacite-xml": {
851
+ "name": _("DataCite XML"),
852
+ "serializer": (
853
+ "invenio_rdm_records.resources.serializers:DataCite45XMLSerializer"
854
+ ),
855
+ "params": {},
856
+ "content-type": "application/vnd.datacite.datacite+xml",
857
+ "filename": "{id}.xml",
858
+ },
859
+ "dublincore": {
860
+ "name": _("Dublin Core XML"),
861
+ "serializer": (
862
+ "invenio_rdm_records.resources.serializers:DublinCoreXMLSerializer"
863
+ ),
864
+ "params": {},
865
+ "content-type": "application/x-dc+xml",
866
+ "filename": "{id}.xml",
867
+ },
868
+ "marcxml": {
869
+ "name": _("MARCXML"),
870
+ "serializer": ("invenio_rdm_records.resources.serializers:MARCXMLSerializer"),
871
+ "params": {},
872
+ "content-type": "application/marcxml+xml",
873
+ "filename": "{id}.xml",
874
+ },
875
+ "bibtex": {
876
+ "name": _("BibTeX"),
877
+ "serializer": ("invenio_rdm_records.resources.serializers:BibtexSerializer"),
878
+ "params": {},
879
+ "content-type": "application/x-bibtex",
880
+ "filename": "{id}.bib",
881
+ },
882
+ "geojson": {
883
+ "name": _("GeoJSON"),
884
+ "serializer": ("invenio_rdm_records.resources.serializers:GeoJSONSerializer"),
885
+ "params": {"options": {"indent": 2, "sort_keys": True}},
886
+ "content-type": "application/vnd.geo+json",
887
+ "filename": "{id}.geojson",
888
+ },
889
+ "dcat-ap": {
890
+ "name": _("DCAT"),
891
+ "serializer": "invenio_rdm_records.resources.serializers:DCATSerializer",
892
+ "params": {},
893
+ "content-type": "application/dcat+xml",
894
+ "filename": "{id}.xml",
895
+ },
896
+ "codemeta": {
897
+ "name": _("Codemeta"),
898
+ "serializer": "invenio_rdm_records.resources.serializers:CodemetaSerializer",
899
+ "params": {},
900
+ "content-type": "application/ld+json",
901
+ "filename": "{id}.json",
902
+ },
903
+ "cff": {
904
+ "name": _("Citation File Format"),
905
+ "serializer": "invenio_rdm_records.resources.serializers:CFFSerializer",
906
+ "params": {},
907
+ "content-type": "application/x-yaml",
908
+ "filename": "{id}.yaml",
909
+ },
910
+ "datapackage": {
911
+ "name": _("Data Package JSON"),
912
+ "serializer": "invenio_rdm_records.resources.serializers:DataPackageSerializer",
913
+ "params": {},
914
+ "content-type": "application/ld+json",
915
+ "filename": "{id}.json",
916
+ },
917
+ }
918
+
919
+ APP_RDM_RECORD_LANDING_PAGE_EXTERNAL_LINKS = []
920
+ """ Default format used for adding badges to a record.
921
+
922
+ Make sure the 'render' field points to a valid render function in invenio_app_rdm.records_ui.utils.
923
+ Example implementation can also be found in invenio_app_rdm.records_ui.utils.
924
+
925
+ APP_RDM_RECORD_LANDING_PAGE_EXTERNAL_LINKS = [
926
+ {
927
+ "id": "github",
928
+ "render": github_link_render,
929
+ },
930
+ {
931
+ "id": "openaire",
932
+ "render": openaire_link_render,
464
933
  },
465
- "datacite": {
466
- "name": _("DataCite JSON"),
467
- "serializer": ("invenio_rdm_records.resources.serializers:"
468
- "DataCite43JSONSerializer")
469
- }
470
934
  }
471
935
 
936
+ def github_link_render(record):
937
+ ...
938
+ """
939
+
472
940
  APP_RDM_RECORDS_EXPORT_URL = "/records/<pid_value>/export/<export_format>"
473
941
 
942
+ APP_RDM_DEPOSIT_NG_FILES_UI_ENABLED = False
943
+ """
944
+ Feature toggle to enable the next-generation (NG) file uploader UI in the deposit form.
945
+
946
+ When enabled, the deposit form will use the new Uppy.io-based file uploader, replacing the current file upload interface.
947
+ """
948
+
474
949
  APP_RDM_DEPOSIT_FORM_DEFAULTS = {
475
950
  "publication_date": lambda: datetime.now().strftime("%Y-%m-%d"),
476
951
  "rights": [
477
952
  {
478
953
  "id": "cc-by-4.0",
479
954
  "title": "Creative Commons Attribution 4.0 International",
480
- "description": ("The Creative Commons Attribution license allows "
481
- "re-distribution and re-use of a licensed work "
482
- "on the condition that the creator is "
483
- "appropriately credited."),
955
+ "description": (
956
+ "The Creative Commons Attribution license allows "
957
+ "re-distribution and re-use of a licensed work "
958
+ "on the condition that the creator is "
959
+ "appropriately credited."
960
+ ),
484
961
  "link": "https://creativecommons.org/licenses/by/4.0/legalcode",
485
962
  }
486
963
  ],
@@ -494,9 +971,599 @@ If the value is callable, its return value will be used for the field
494
971
  (e.g. lambda/function for dynamic calculation of values).
495
972
  """
496
973
 
974
+ APP_RDM_DEPOSIT_FORM_AUTOCOMPLETE_NAMES = "search"
975
+ """Behavior for autocomplete names search field for creators/contributors.
497
976
 
498
- # Invenio-IIIF
977
+ Available options:
978
+
979
+ - ``search`` (default): Show search field and form always.
980
+ - ``search_only``: Only show search field. Form displayed after selection or
981
+ explicit "manual" entry.
982
+ - ``off``: Only show person form (no search field).
983
+ """
984
+
985
+ APP_RDM_DEPOSIT_FORM_QUOTA = {
986
+ "maxFiles": 100,
987
+ "maxStorage": FILES_REST_DEFAULT_QUOTA_SIZE,
988
+ }
989
+ """Deposit file upload quota """
990
+
991
+ APP_RDM_DISPLAY_DECIMAL_FILE_SIZES = True
992
+ """Display the file sizes in powers of 1000 (KB, ...) or 1024 (KiB, ...)."""
993
+
994
+ APP_RDM_DEPOSIT_FORM_PUBLISH_MODAL_EXTRA = ""
995
+ """Additional text/html to be displayed in the publish and submit for review modal."""
996
+
997
+ APP_RDM_RECORD_LANDING_PAGE_TEMPLATE = "invenio_app_rdm/records/detail.html"
998
+
999
+ APP_RDM_RECORD_LANDING_PAGE_FAIR_SIGNPOSTING_LEVEL_1_ENABLED = False
1000
+
1001
+ APP_RDM_RECORD_THUMBNAIL_SIZES = [10, 50, 100, 250, 750, 1200]
1002
+ """Allowed record thumbnail sizes."""
1003
+
1004
+ APP_RDM_DETAIL_SIDE_BAR_TEMPLATES = [
1005
+ "invenio_app_rdm/records/details/side_bar/manage_menu.html",
1006
+ "invenio_app_rdm/records/details/side_bar/metrics.html",
1007
+ "invenio_app_rdm/records/details/side_bar/versions.html",
1008
+ "invenio_app_rdm/records/details/side_bar/external_resources.html",
1009
+ "invenio_app_rdm/records/details/side_bar/communities.html",
1010
+ "invenio_app_rdm/records/details/side_bar/keywords_subjects.html",
1011
+ "invenio_app_rdm/records/details/side_bar/details.html",
1012
+ "invenio_app_rdm/records/details/side_bar/locations.html",
1013
+ "invenio_app_rdm/records/details/side_bar/licenses.html",
1014
+ "invenio_app_rdm/records/details/side_bar/citations.html",
1015
+ "invenio_app_rdm/records/details/side_bar/export.html",
1016
+ "invenio_app_rdm/records/details/side_bar/technical_metadata.html",
1017
+ ]
1018
+ """Template names for detail view sidebar components"""
1019
+
1020
+ APP_RDM_FILES_INTEGRITY_REPORT_TEMPLATE = (
1021
+ "invenio_app_rdm/files_integrity_report/email/files_integrity_report.html"
1022
+ )
1023
+ """Files integrity report template"""
1024
+
1025
+ APP_RDM_FILES_INTEGRITY_REPORT_SUBJECT = "Files integrity report"
1026
+ """Files integrity report subject"""
1027
+
1028
+ APP_RDM_ADMIN_EMAIL_RECIPIENT = "info@inveniosoftware.org"
1029
+ """Admin e-mail"""
1030
+
1031
+ APP_RDM_IDENTIFIER_SCHEMES_UI = {
1032
+ "orcid": {
1033
+ "url_prefix": "http://orcid.org/",
1034
+ "icon": "images/orcid.svg",
1035
+ "label": "ORCID",
1036
+ },
1037
+ "ror": {
1038
+ "url_prefix": "https://ror.org/",
1039
+ "icon": "images/ror-icon.svg",
1040
+ "label": "ROR",
1041
+ },
1042
+ "gnd": {
1043
+ "url_prefix": "http://d-nb.info/gnd/",
1044
+ "icon": "images/gnd-icon.svg",
1045
+ "label": "GND",
1046
+ },
1047
+ }
1048
+ """Identifier Schemes UI config"""
1049
+
1050
+ # Invenio-Communities
499
1051
  # ===================
500
1052
 
1053
+ COMMUNITIES_SERVICE_COMPONENTS = CommunityServiceComponents
1054
+
1055
+ COMMUNITIES_ERROR_HANDLERS = {
1056
+ **community_error_handlers,
1057
+ InvalidCommunityVisibility: create_error_handler(
1058
+ lambda e: HTTPJSONException(
1059
+ code=400,
1060
+ description=e.reason,
1061
+ )
1062
+ ),
1063
+ }
1064
+
1065
+ COMMUNITIES_RECORDS_SEARCH = {
1066
+ "facets": ["access_status", "resource_type", "language"],
1067
+ "sort": ["bestmatch", "newest", "oldest", "version"],
1068
+ }
1069
+ """Community requests search configuration (i.e list of community requests)"""
1070
+
1071
+ COMMUNITIES_SHOW_BROWSE_MENU_ENTRY = False
1072
+ """Toggle to show or hide the 'Browse' menu entry for communities."""
1073
+
1074
+ # Invenio-RDM-Records
1075
+ # ===================
1076
+
1077
+ RDM_REQUESTS_ROUTES = {
1078
+ "user-dashboard-request-details": "/me/requests/<uuid:request_pid_value>",
1079
+ "community-dashboard-request-details": "/communities/<pid_value>/requests/<uuid:request_pid_value>",
1080
+ "community-dashboard-invitation-details": "/communities/<pid_value>/invitations/<uuid:request_pid_value>",
1081
+ }
1082
+
1083
+ RDM_COMMUNITIES_ROUTES = {
1084
+ "community-detail": "/communities/<pid_value>/records",
1085
+ "community-home": "/communities/<pid_value>/",
1086
+ "community-browse": "/communities/<pid_value>/browse",
1087
+ "community-static-page": "/communities/<pid_value>/pages/<path:page_slug>",
1088
+ "community-collection": "/communities/<pid_value>/collections/<tree_slug>/<collection_slug>",
1089
+ }
1090
+
1091
+ RDM_SEARCH_USER_COMMUNITIES = {
1092
+ "facets": ["visibility", "type"],
1093
+ "sort": ["bestmatch", "newest", "oldest"],
1094
+ }
1095
+ """User communities search configuration (i.e list of user communities)"""
1096
+
1097
+ RDM_SEARCH_USER_REQUESTS = {
1098
+ "facets": ["type", "status"],
1099
+ "sort": ["bestmatch", "newest", "oldest", "newestactivity", "oldestactivity"],
1100
+ }
1101
+ """User requests search configuration (i.e list of user requests)"""
1102
+
1103
+ # citation
1104
+
1105
+ RDM_CITATION_STYLES = [
1106
+ ("apa", _("APA")),
1107
+ ("harvard-cite-them-right", _("Harvard")),
1108
+ ("modern-language-association", _("MLA")),
1109
+ ("vancouver", _("Vancouver")),
1110
+ ("chicago-fullnote-bibliography", _("Chicago")),
1111
+ ("ieee", _("IEEE")),
1112
+ ]
1113
+ """List of citation style """
1114
+
1115
+ RDM_CITATION_STYLES_DEFAULT = "apa"
1116
+ """Default citation style"""
1117
+
1118
+ # Invenio-IIIF
1119
+ # ============
1120
+ # See https://invenio-iiif.readthedocs.io/en/latest/configuration.html
1121
+
1122
+ IIIF_PREVIEW_TEMPLATE = "invenio_app_rdm/records/iiif_preview.html"
1123
+ """Template for IIIF image preview."""
1124
+
501
1125
  IIIF_API_DECORATOR_HANDLER = None
502
- IIIF_IMAGE_OPENER_HANDLER = "invenio_rdm_records.resources.iiif:image_opener"
1126
+
1127
+ IIIF_SIMPLE_PREVIEWER_NATIVE_EXTENSIONS = ["gif", "png"]
1128
+ """Images are converted to JPEG for preview, unless listed here."""
1129
+
1130
+ IIIF_SIMPLE_PREVIEWER_SIZE = "!800,800"
1131
+ """Size of image in IIIF preview window. Must be a valid IIIF Image API size parameter."""
1132
+
1133
+ IIIF_FORMATS = {
1134
+ "pdf": "application/pdf",
1135
+ "gif": "image/gif",
1136
+ "jp2": "image/jp2",
1137
+ "jpeg": "image/jpeg",
1138
+ "jpg": "image/jpeg",
1139
+ "png": "image/png",
1140
+ "tif": "image/tiff",
1141
+ "tiff": "image/tiff",
1142
+ }
1143
+ """Controls which formats are supported by the Flask-IIIF server."""
1144
+
1145
+ IIIF_FORMATS_PIL_MAP = {
1146
+ "gif": "gif",
1147
+ "jp2": "jpeg2000",
1148
+ "jpeg": "jpeg",
1149
+ "jpg": "jpeg",
1150
+ "png": "png",
1151
+ "tif": "tiff",
1152
+ "tiff": "tiff",
1153
+ }
1154
+ """Mapping of IIIF formats to PIL-compatible formats."""
1155
+
1156
+ # Invenio-Previewer
1157
+ # =================
1158
+ # See https://github.com/inveniosoftware/invenio-previewer/blob/master/invenio_previewer/config.py # noqa
1159
+
1160
+ PREVIEWER_PREFERENCE = [
1161
+ "csv_papaparsejs",
1162
+ "pdfjs",
1163
+ "iiif_simple",
1164
+ "simple_image",
1165
+ "json_prismjs",
1166
+ "xml_prismjs",
1167
+ "mistune",
1168
+ "video_videojs",
1169
+ "audio_videojs",
1170
+ "ipynb",
1171
+ "zip",
1172
+ "txt",
1173
+ ]
1174
+ """Preferred previewers."""
1175
+
1176
+ PREVIEWER_ABSTRACT_TEMPLATE = "invenio_previewer/rdm_abstract_previewer.html"
1177
+ """Override the abstract template with an RDM-specific one."""
1178
+
1179
+ RECORDS_RESOURCES_IMAGE_FORMATS = ["." + ext for ext in IIIF_FORMATS.keys()]
1180
+ """RECORDS_RESOURCES_IMAGE_FORMATS must contain all possible IIIF formats to ensure their metadata is extracted."""
1181
+
1182
+ # Invenio-Pages
1183
+ # =============
1184
+ # See https://invenio-pages.readthedocs.io/en/latest/configuration.html
1185
+
1186
+ PAGES_DEFAULT_TEMPLATE = "invenio_app_rdm/default_static_page.html"
1187
+ """Default template to render."""
1188
+
1189
+ PAGES_TEMPLATES = [
1190
+ ("invenio_app_rdm/default_static_page.html", "Default"),
1191
+ ("invenio_communities/default_static_page.html", "Community"),
1192
+ ]
1193
+ """List of available templates for pages."""
1194
+
1195
+ APP_RDM_PAGES = {}
1196
+ """Register static pages with predefined initial content from 'pages.yaml' file.
1197
+
1198
+ Example:
1199
+ {
1200
+ "about": "/about",
1201
+ "terms": "/terms",
1202
+ "privacy-policy": "/privacy-policy",
1203
+ }
1204
+ """
1205
+
1206
+ # Invenio-Stats
1207
+ # =============
1208
+ # See https://invenio-stats.readthedocs.io/en/latest/configuration.html
1209
+
1210
+
1211
+ STATS_EVENTS = {
1212
+ "file-download": {
1213
+ "templates": "invenio_rdm_records.records.stats.templates.events.file_download",
1214
+ "event_builders": [
1215
+ "invenio_rdm_records.resources.stats.file_download_event_builder",
1216
+ "invenio_rdm_records.resources.stats.check_if_via_api",
1217
+ ],
1218
+ "cls": EventsIndexer,
1219
+ "params": {
1220
+ "preprocessors": [
1221
+ filter_robots,
1222
+ flag_machines,
1223
+ anonymize_user,
1224
+ build_file_unique_id,
1225
+ ]
1226
+ },
1227
+ },
1228
+ "record-view": {
1229
+ "templates": "invenio_rdm_records.records.stats.templates.events.record_view",
1230
+ "event_builders": [
1231
+ "invenio_rdm_records.resources.stats.record_view_event_builder",
1232
+ "invenio_rdm_records.resources.stats.check_if_via_api",
1233
+ "invenio_rdm_records.resources.stats.drop_if_via_api",
1234
+ ],
1235
+ "cls": EventsIndexer,
1236
+ "params": {
1237
+ "preprocessors": [
1238
+ filter_robots,
1239
+ flag_machines,
1240
+ anonymize_user,
1241
+ build_record_unique_id,
1242
+ ],
1243
+ },
1244
+ },
1245
+ }
1246
+
1247
+ STATS_AGGREGATIONS = {
1248
+ "file-download-agg": {
1249
+ "templates": "invenio_rdm_records.records.stats.templates.aggregations.aggr_file_download",
1250
+ "cls": StatAggregator,
1251
+ "params": {
1252
+ "event": "file-download",
1253
+ "field": "unique_id",
1254
+ "interval": "day",
1255
+ "index_interval": "month",
1256
+ "copy_fields": {
1257
+ "file_id": "file_id",
1258
+ "file_key": "file_key",
1259
+ "bucket_id": "bucket_id",
1260
+ "recid": "recid",
1261
+ "parent_recid": "parent_recid",
1262
+ },
1263
+ "metric_fields": {
1264
+ "unique_count": (
1265
+ "cardinality",
1266
+ "unique_session_id",
1267
+ {"precision_threshold": 1000},
1268
+ ),
1269
+ "volume": ("sum", "size", {}),
1270
+ },
1271
+ },
1272
+ },
1273
+ "record-view-agg": {
1274
+ "templates": "invenio_rdm_records.records.stats.templates.aggregations.aggr_record_view",
1275
+ "cls": StatAggregator,
1276
+ "params": {
1277
+ "event": "record-view",
1278
+ "field": "unique_id",
1279
+ "interval": "day",
1280
+ "index_interval": "month",
1281
+ "copy_fields": {
1282
+ "recid": "recid",
1283
+ "parent_recid": "parent_recid",
1284
+ "via_api": "via_api",
1285
+ },
1286
+ "metric_fields": {
1287
+ "unique_count": (
1288
+ "cardinality",
1289
+ "unique_session_id",
1290
+ {"precision_threshold": 1000},
1291
+ ),
1292
+ },
1293
+ "query_modifiers": [lambda query, **_: query.filter("term", via_api=False)],
1294
+ },
1295
+ },
1296
+ }
1297
+
1298
+ STATS_QUERIES = {
1299
+ "record-view": {
1300
+ "cls": TermsQuery,
1301
+ "permission_factory": None,
1302
+ "params": {
1303
+ "index": "stats-record-view",
1304
+ "doc_type": "record-view-day-aggregation",
1305
+ "copy_fields": {
1306
+ "recid": "recid",
1307
+ "parent_recid": "parent_recid",
1308
+ },
1309
+ "query_modifiers": [],
1310
+ "required_filters": {
1311
+ "recid": "recid",
1312
+ },
1313
+ "metric_fields": {
1314
+ "views": ("sum", "count", {}),
1315
+ "unique_views": ("sum", "unique_count", {}),
1316
+ },
1317
+ },
1318
+ },
1319
+ "record-view-all-versions": {
1320
+ "cls": TermsQuery,
1321
+ "permission_factory": None,
1322
+ "params": {
1323
+ "index": "stats-record-view",
1324
+ "doc_type": "record-view-day-aggregation",
1325
+ "copy_fields": {
1326
+ "parent_recid": "parent_recid",
1327
+ },
1328
+ "query_modifiers": [],
1329
+ "required_filters": {
1330
+ "parent_recid": "parent_recid",
1331
+ },
1332
+ "metric_fields": {
1333
+ "views": ("sum", "count", {}),
1334
+ "unique_views": ("sum", "unique_count", {}),
1335
+ },
1336
+ },
1337
+ },
1338
+ "record-download": {
1339
+ "cls": TermsQuery,
1340
+ "permission_factory": None,
1341
+ "params": {
1342
+ "index": "stats-file-download",
1343
+ "doc_type": "file-download-day-aggregation",
1344
+ "copy_fields": {
1345
+ "recid": "recid",
1346
+ "parent_recid": "parent_recid",
1347
+ },
1348
+ "query_modifiers": [],
1349
+ "required_filters": {
1350
+ "recid": "recid",
1351
+ },
1352
+ "metric_fields": {
1353
+ "downloads": ("sum", "count", {}),
1354
+ "unique_downloads": ("sum", "unique_count", {}),
1355
+ "data_volume": ("sum", "volume", {}),
1356
+ },
1357
+ },
1358
+ },
1359
+ "record-download-all-versions": {
1360
+ "cls": TermsQuery,
1361
+ "permission_factory": None,
1362
+ "params": {
1363
+ "index": "stats-file-download",
1364
+ "doc_type": "file-download-day-aggregation",
1365
+ "copy_fields": {
1366
+ "parent_recid": "parent_recid",
1367
+ },
1368
+ "query_modifiers": [],
1369
+ "required_filters": {
1370
+ "parent_recid": "parent_recid",
1371
+ },
1372
+ "metric_fields": {
1373
+ "downloads": ("sum", "count", {}),
1374
+ "unique_downloads": ("sum", "unique_count", {}),
1375
+ "data_volume": ("sum", "volume", {}),
1376
+ },
1377
+ },
1378
+ },
1379
+ }
1380
+
1381
+ STATS_PERMISSION_FACTORY = permissions_policy_lookup_factory
1382
+
1383
+
1384
+ # Invenio-Notifications
1385
+ # =================
1386
+ # See https://github.com/inveniosoftware/invenio-notifications/blob/master/invenio_notifications/config.py # noqa
1387
+
1388
+
1389
+ NOTIFICATIONS_BACKENDS = {
1390
+ EmailNotificationBackend.id: EmailNotificationBackend(),
1391
+ }
1392
+ """Notification backends."""
1393
+
1394
+
1395
+ NOTIFICATIONS_BUILDERS = {
1396
+ # Access request
1397
+ GuestAccessRequestTokenCreateNotificationBuilder.type: GuestAccessRequestTokenCreateNotificationBuilder,
1398
+ GuestAccessRequestAcceptNotificationBuilder.type: GuestAccessRequestAcceptNotificationBuilder,
1399
+ GuestAccessRequestSubmitNotificationBuilder.type: GuestAccessRequestSubmitNotificationBuilder,
1400
+ GuestAccessRequestSubmittedNotificationBuilder.type: GuestAccessRequestSubmittedNotificationBuilder,
1401
+ GuestAccessRequestCancelNotificationBuilder.type: GuestAccessRequestCancelNotificationBuilder,
1402
+ GuestAccessRequestDeclineNotificationBuilder.type: GuestAccessRequestDeclineNotificationBuilder,
1403
+ UserAccessRequestAcceptNotificationBuilder.type: UserAccessRequestAcceptNotificationBuilder,
1404
+ UserAccessRequestSubmitNotificationBuilder.type: UserAccessRequestSubmitNotificationBuilder,
1405
+ UserAccessRequestDeclineNotificationBuilder.type: UserAccessRequestDeclineNotificationBuilder,
1406
+ UserAccessRequestCancelNotificationBuilder.type: UserAccessRequestCancelNotificationBuilder,
1407
+ # Grant user access
1408
+ GrantUserAccessNotificationBuilder.type: GrantUserAccessNotificationBuilder,
1409
+ # Comment request event
1410
+ CommentRequestEventCreateNotificationBuilder.type: CommentRequestEventCreateNotificationBuilder,
1411
+ CommentRequestEventReplyNotificationBuilder.type: CommentRequestEventReplyNotificationBuilder,
1412
+ community_notifications.SubComReqCommentNotificationBuilder.type: community_notifications.SubComReqCommentNotificationBuilder,
1413
+ community_notifications.SubComInvCommentNotificationBuilder.type: community_notifications.SubComInvCommentNotificationBuilder,
1414
+ # Community inclusion
1415
+ CommunityInclusionAcceptNotificationBuilder.type: CommunityInclusionAcceptNotificationBuilder,
1416
+ CommunityInclusionCancelNotificationBuilder.type: CommunityInclusionCancelNotificationBuilder,
1417
+ CommunityInclusionDeclineNotificationBuilder.type: CommunityInclusionDeclineNotificationBuilder,
1418
+ CommunityInclusionExpireNotificationBuilder.type: CommunityInclusionExpireNotificationBuilder,
1419
+ CommunityInclusionSubmittedNotificationBuilder.type: CommunityInclusionSubmittedNotificationBuilder,
1420
+ # Community invitation
1421
+ CommunityInvitationAcceptNotificationBuilder.type: CommunityInvitationAcceptNotificationBuilder,
1422
+ CommunityInvitationCancelNotificationBuilder.type: CommunityInvitationCancelNotificationBuilder,
1423
+ CommunityInvitationDeclineNotificationBuilder.type: CommunityInvitationDeclineNotificationBuilder,
1424
+ CommunityInvitationExpireNotificationBuilder.type: CommunityInvitationExpireNotificationBuilder,
1425
+ CommunityInvitationSubmittedNotificationBuilder.type: CommunityInvitationSubmittedNotificationBuilder,
1426
+ # Subcommunity request
1427
+ community_notifications.SubCommunityCreate.type: community_notifications.SubCommunityCreate,
1428
+ community_notifications.SubCommunityAccept.type: community_notifications.SubCommunityAccept,
1429
+ community_notifications.SubCommunityDecline.type: community_notifications.SubCommunityDecline,
1430
+ # Subcommunity invitation request
1431
+ community_notifications.SubComInvitationCreate.type: community_notifications.SubComInvitationCreate,
1432
+ community_notifications.SubComInvitationAccept.type: community_notifications.SubComInvitationAccept,
1433
+ community_notifications.SubComInvitationDecline.type: community_notifications.SubComInvitationDecline,
1434
+ community_notifications.SubComInvitationExpire.type: community_notifications.SubComInvitationExpire,
1435
+ # Record deletion
1436
+ RecordDeletionAcceptNotificationBuilder.type: RecordDeletionAcceptNotificationBuilder,
1437
+ RecordDeletionDeclineNotificationBuilder.type: RecordDeletionDeclineNotificationBuilder,
1438
+ }
1439
+ """Notification builders."""
1440
+
1441
+
1442
+ NOTIFICATIONS_ENTITY_RESOLVERS = [
1443
+ EmailResolver(),
1444
+ RDMRecordServiceResultResolver(),
1445
+ ServiceResultResolver(service_id="users", type_key="user"),
1446
+ ServiceResultResolver(service_id="communities", type_key="community"),
1447
+ ServiceResultResolver(service_id="requests", type_key="request"),
1448
+ ServiceResultResolver(service_id="request_events", type_key="request_event"),
1449
+ ServiceResultResolver(service_id="groups", type_key="group"),
1450
+ ]
1451
+ """List of entity resolvers used by notification builders."""
1452
+
1453
+ NOTIFICATIONS_SETTINGS_VIEW_FUNCTION = notification_settings
1454
+ """View function for notification settings."""
1455
+
1456
+
1457
+ # Invenio-Users-Resources
1458
+ # =================
1459
+ # See https://github.com/inveniosoftware/invenio-users-resources/blob/master/invenio_users_resources/config.py # noqa
1460
+
1461
+
1462
+ USERS_RESOURCES_SERVICE_SCHEMA = NotificationsUserSchema
1463
+ """Schema used by the users service."""
1464
+
1465
+
1466
+ # Invenio-Requests
1467
+ # =================
1468
+ # See https://github.com/inveniosoftware/invenio-requests/blob/master/invenio_requests/config.py # noqa
1469
+
1470
+
1471
+ REQUESTS_PERMISSION_POLICY = RDMRequestsPermissionPolicy
1472
+ """The requests permission policy, extended to work with guest access requests."""
1473
+
1474
+
1475
+ REQUESTS_ERROR_HANDLERS = {
1476
+ **request_error_handlers,
1477
+ InvalidAccessRestrictions: create_error_handler(
1478
+ lambda e: HTTPJSONException(
1479
+ code=400,
1480
+ description=e.description,
1481
+ )
1482
+ ),
1483
+ }
1484
+
1485
+
1486
+ # Invenio-Github
1487
+ # =================
1488
+ #
1489
+ GITHUB_RELEASE_CLASS = RDMGithubRelease
1490
+ """Default RDM release class."""
1491
+
1492
+
1493
+ # Flask-Menu
1494
+ # ==========
1495
+ #
1496
+ USER_DASHBOARD_MENU_OVERRIDES = {}
1497
+ """Overrides for "dashboard" menu."""
1498
+
1499
+
1500
+ # Invenio-Administration
1501
+ # ======================
1502
+ #
1503
+ from invenio_app_rdm import __version__
1504
+
1505
+ ADMINISTRATION_DISPLAY_VERSIONS = [("invenio-app-rdm", f"v{__version__}")]
1506
+ """Show the InvenioRDM version in the administration panel."""
1507
+
1508
+ ADMINISTRATION_THEME_BASE_TEMPLATE = "invenio_app_rdm/administration_page.html"
1509
+ """Administration base template."""
1510
+
1511
+
1512
+ APP_RDM_SUBCOMMUNITIES_LABEL = "Subcommunities"
1513
+ """Label for the subcommunities in the community browse page."""
1514
+
1515
+ RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE = None
1516
+ """Side bar manage attributes extension template."""
1517
+
1518
+ # Invenio-Sitemap
1519
+ # ===============
1520
+ # See https://github.com/inveniosoftware/invenio-sitemap/blob/master/invenio_sitemap/config.py # noqa
1521
+ SITEMAP_SECTIONS = [
1522
+ SitemapSectionOfRDMRecords(),
1523
+ SitemapSectionOfCommunities(),
1524
+ ]
1525
+
1526
+
1527
+ # Moderation requests search configuration
1528
+ # ========================================
1529
+ APP_RDM_MODERATION_REQUEST_SEARCH = {
1530
+ "facets": ["status", "is_open"],
1531
+ "sort": ["bestmatch", "newest", "oldest", "newestactivity", "oldestactivity"],
1532
+ }
1533
+ """Moderation requests search configuration."""
1534
+
1535
+ APP_RDM_MODERATION_REQUEST_SORT_OPTIONS = {
1536
+ "bestmatch": dict(
1537
+ title=_("Best match"),
1538
+ fields=["_score"],
1539
+ ),
1540
+ "newest": dict(
1541
+ title=_("Newest"),
1542
+ fields=["-created"],
1543
+ ),
1544
+ "oldest": dict(
1545
+ title=_("Oldest"),
1546
+ fields=["created"],
1547
+ ),
1548
+ "newestactivity": dict(
1549
+ title=_("Newest activity"),
1550
+ fields=["-last_activity_at"],
1551
+ ),
1552
+ "oldestactivity": dict(
1553
+ title=_("Oldest activity"),
1554
+ fields=["last_activity_at"],
1555
+ ),
1556
+ }
1557
+ """Definitions of available record sort options."""
1558
+
1559
+
1560
+ APP_RDM_MODERATION_REQUEST_FACETS = {
1561
+ "status": {
1562
+ "facet": facets.status,
1563
+ "ui": {
1564
+ "field": "status",
1565
+ },
1566
+ },
1567
+ "is_open": {"facet": facets.is_open, "ui": {"field": "is_open"}},
1568
+ }
1569
+ """Available facets defined for this module."""