invenio-app-rdm 13.0.0b2.dev3__py2.py3-none-any.whl → 13.0.0b2.dev5__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 (30) hide show
  1. invenio_app_rdm/__init__.py +1 -1
  2. invenio_app_rdm/config.py +2 -0
  3. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html +3 -3
  4. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/communities.html +0 -1
  5. invenio_app_rdm/records_ui/views/decorators.py +17 -5
  6. invenio_app_rdm/records_ui/views/deposits.py +6 -0
  7. invenio_app_rdm/tasks.py +6 -2
  8. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js +6 -0
  9. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js +5 -0
  10. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/CompareRevisions.js +10 -9
  11. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagement.js +2 -4
  12. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchItem.js +1 -1
  13. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchResultContainer.js +2 -2
  14. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/UserGroupAccessSearchResultItem.js +1 -1
  15. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js +0 -6
  16. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/base.js +39 -6
  17. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/communities.js +1 -0
  18. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads.js +8 -21
  19. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/ComputerTabletUploadsItem.js +14 -12
  20. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/MobileUploadsItem.js +10 -10
  21. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.en.html +1 -1
  22. invenio_app_rdm/urls.py +11 -1
  23. invenio_app_rdm/users_ui/searchapp.py +7 -1
  24. {invenio_app_rdm-13.0.0b2.dev3.dist-info → invenio_app_rdm-13.0.0b2.dev5.dist-info}/METADATA +15 -1
  25. {invenio_app_rdm-13.0.0b2.dev3.dist-info → invenio_app_rdm-13.0.0b2.dev5.dist-info}/RECORD +30 -30
  26. {invenio_app_rdm-13.0.0b2.dev3.dist-info → invenio_app_rdm-13.0.0b2.dev5.dist-info}/WHEEL +1 -1
  27. tests/ui/test_signposting_ui.py +29 -9
  28. {invenio_app_rdm-13.0.0b2.dev3.dist-info → invenio_app_rdm-13.0.0b2.dev5.dist-info}/LICENSE +0 -0
  29. {invenio_app_rdm-13.0.0b2.dev3.dist-info → invenio_app_rdm-13.0.0b2.dev5.dist-info}/entry_points.txt +0 -0
  30. {invenio_app_rdm-13.0.0b2.dev3.dist-info → invenio_app_rdm-13.0.0b2.dev5.dist-info}/top_level.txt +0 -0
@@ -17,6 +17,6 @@
17
17
  #
18
18
  # See PEP 0440 for details - https://www.python.org/dev/peps/pep-0440
19
19
 
20
- __version__ = "13.0.0b2.dev3"
20
+ __version__ = "13.0.0b2.dev5"
21
21
 
22
22
  __all__ = ("__version__",)
invenio_app_rdm/config.py CHANGED
@@ -964,6 +964,8 @@ APP_RDM_DEPOSIT_FORM_PUBLISH_MODAL_EXTRA = ""
964
964
 
965
965
  APP_RDM_RECORD_LANDING_PAGE_TEMPLATE = "invenio_app_rdm/records/detail.html"
966
966
 
967
+ APP_RDM_RECORD_LANDING_PAGE_FAIR_SIGNPOSTING_LEVEL_1_ENABLED = False
968
+
967
969
  APP_RDM_RECORD_THUMBNAIL_SIZES = [10, 50, 100, 250, 750, 1200]
968
970
  """Allowed record thumbnail sizes."""
969
971
 
@@ -25,11 +25,11 @@
25
25
  {%- set title = record.metadata.title %}
26
26
  {%- set metadata = record.metadata %}
27
27
 
28
- {%- set can_manage_record = permissions is defined and (permissions.can_edit or permissions.can_review) %}
28
+ {%- set can_curate_record = permissions is defined and (permissions.can_edit or permissions.can_review) %}
29
29
 
30
30
  <!-- preview_submission_request is set to true when coming from a community submission request -->
31
31
  {%- set is_preview_submission_request = preview_submission_request or false %}
32
- {%- set show_record_management_menu = can_manage_record and (not is_preview or is_preview_submission_request) %}
32
+ {%- set show_record_management_menu = can_curate_record and (not is_preview or is_preview_submission_request) %}
33
33
 
34
34
  {%- if record.parent.access.settings %}
35
35
  {%- set allow_user_requests = not current_user.is_anonymous and record.parent.access.settings.allow_user_requests %}
@@ -175,7 +175,7 @@
175
175
 
176
176
  {%- block record_header_button -%}
177
177
 
178
- {% if is_preview and not is_preview_submission_request and can_manage_record and is_draft %}
178
+ {% if is_preview and not is_preview_submission_request and can_curate_record and is_draft %}
179
179
  <nav class="back-navigation rel-pb-2 pl-0"
180
180
  aria-label="{{ _('Back-navigation') }}">
181
181
  {%- set back_page = url_for('invenio_app_rdm_records.deposit_edit', pid_value=record.id) -%}
@@ -4,7 +4,6 @@
4
4
  data-record-community-endpoint="{{ record.links.communities }}"
5
5
  data-record-community-search-endpoint="{{ record.links['communities-suggestions'] }}"
6
6
  data-record-user-community-search-endpoint="{{ record.links['user-communities-suggestions'] }}"
7
- data-can-manage-record='{{ can_manage_record |tojson }}'
8
7
  data-pending-communities-search-config='{{ search_app_rdm_record_requests_config(app_id="InvenioAppRdm.RecordRequests", endpoint=record.links.requests) | tojson }}'
9
8
  data-record-community-search-config='{{ search_app_rdm_record_communities_config(app_id="InvenioAppRdm.RecordCommunitiesSuggestions", endpoint=record.links["communities-suggestions"]) | tojson }}'
10
9
  data-record-user-community-search-config='{{ search_app_rdm_record_user_communities_config(app_id="InvenioAppRdm.RecordUserCommunitiesSuggestions", endpoint=record.links["communities-suggestions"]) | tojson }}'
@@ -398,13 +398,25 @@ def add_signposting_landing_page(f):
398
398
  response = make_response(f(*args, **kwargs))
399
399
 
400
400
  # Relies on other decorators having operated before it
401
- record = kwargs["record"]
401
+ if current_app.config[
402
+ "APP_RDM_RECORD_LANDING_PAGE_FAIR_SIGNPOSTING_LEVEL_1_ENABLED"
403
+ ]:
404
+ record = kwargs["record"]
405
+
406
+ signposting_headers = (
407
+ FAIRSignpostingProfileLvl1Serializer().serialize_object(
408
+ record.to_dict()
409
+ )
410
+ )
402
411
 
403
- signposting_headers = FAIRSignpostingProfileLvl1Serializer().serialize_object(
404
- record.to_dict()
405
- )
412
+ response.headers["Link"] = signposting_headers
413
+ else:
414
+ pid_value = kwargs["pid_value"]
415
+ signposting_link = record_url_for(_app="api", pid_value=pid_value)
406
416
 
407
- response.headers["Link"] = signposting_headers
417
+ response.headers["Link"] = (
418
+ f'<{signposting_link}> ; rel="linkset" ; type="application/linkset+json"' # fmt: skip
419
+ )
408
420
 
409
421
  return response
410
422
 
@@ -444,6 +444,7 @@ def deposit_create(community=None):
444
444
  .get("doi", {})
445
445
  .get("required")
446
446
  )
447
+
447
448
  return render_community_theme_template(
448
449
  current_app.config["APP_RDM_DEPOSIT_FORM_TEMPLATE"],
449
450
  theme=community_theme,
@@ -483,7 +484,12 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
483
484
  can_edit_draft = service.check_permission(
484
485
  g.identity, "update_draft", record=draft._record
485
486
  )
487
+ can_preview_draft = service.check_permission(
488
+ g.identity, "preview", record=draft._record
489
+ )
486
490
  if not can_edit_draft:
491
+ if can_preview_draft:
492
+ return redirect(draft["links"]["preview_html"])
487
493
  raise PermissionDeniedError()
488
494
 
489
495
  files_dict = None if draft_files is None else draft_files.to_dict()
invenio_app_rdm/tasks.py CHANGED
@@ -18,7 +18,10 @@ from .utils.files import send_integrity_report_email
18
18
  def file_integrity_report():
19
19
  """Send a report of uhealthy/missing files to system admins."""
20
20
  # First retry verifying files that errored during their last check
21
- files = FileInstance.query.filter(FileInstance.last_check.is_(None))
21
+ files = FileInstance.query.filter(
22
+ FileInstance.last_check.is_(None),
23
+ FileInstance.uri.is_not(None),
24
+ )
22
25
  for f in files:
23
26
  try:
24
27
  f.clear_last_check()
@@ -32,7 +35,8 @@ def file_integrity_report():
32
35
  FileInstance.query.filter(
33
36
  sa.or_(
34
37
  FileInstance.last_check.is_(None), FileInstance.last_check.is_(False)
35
- )
38
+ ),
39
+ FileInstance.uri.is_not(None),
36
40
  )
37
41
  .order_by(FileInstance.created.desc())
38
42
  .all()
@@ -1,6 +1,7 @@
1
1
  /*
2
2
  * // This file is part of Invenio-App-Rdm
3
3
  * // Copyright (C) 2025 CERN.
4
+ * // Copyright (C) 2025 Graz University of Technology.
4
5
  * //
5
6
  * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
7
  * // under the terms of the MIT License; see LICENSE file for more details.
@@ -81,3 +82,8 @@ CompareRevisionsDropdown.propTypes = {
81
82
  srcRevision: PropTypes.object,
82
83
  targetRevision: PropTypes.object,
83
84
  };
85
+
86
+ CompareRevisionsDropdown.defaultProps = {
87
+ srcRevision: 0,
88
+ targetRevision: 0,
89
+ };
@@ -1,6 +1,7 @@
1
1
  /*
2
2
  * // This file is part of Invenio-App-Rdm
3
3
  * // Copyright (C) 2025 CERN.
4
+ * // Copyright (C) 2025 Graz University of Technology.
4
5
  * //
5
6
  * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
7
  * // under the terms of the MIT License; see LICENSE file for more details.
@@ -75,3 +76,7 @@ RevisionsDiffViewer.propTypes = {
75
76
  diff: PropTypes.object,
76
77
  viewerProps: PropTypes.object.isRequired,
77
78
  };
79
+
80
+ RevisionsDiffViewer.defaultProps = {
81
+ diff: {},
82
+ };
@@ -1,6 +1,7 @@
1
1
  /*
2
2
  * // This file is part of Invenio-App-Rdm
3
3
  * // Copyright (C) 2025 CERN.
4
+ * // Copyright (C) 2025 Graz University of Technology.
4
5
  * //
5
6
  * // Invenio-App-Rdm is free software; you can redistribute it and/or modify it
6
7
  * // under the terms of the MIT License; see LICENSE file for more details.
@@ -28,6 +29,14 @@ export class CompareRevisions extends Component {
28
29
  };
29
30
  }
30
31
 
32
+ componentDidMount() {
33
+ this.fetchRevisions();
34
+ }
35
+
36
+ componentWillUnmount() {
37
+ this.cancellableAction && this.cancellableAction.cancel();
38
+ }
39
+
31
40
  async fetchRevisions() {
32
41
  const { resource } = this.props;
33
42
  this.setState({ loading: true });
@@ -50,14 +59,6 @@ export class CompareRevisions extends Component {
50
59
  }
51
60
  }
52
61
 
53
- componentDidMount() {
54
- this.fetchRevisions();
55
- }
56
-
57
- componentWillUnmount() {
58
- this.cancellableAction && this.cancellableAction.cancel();
59
- }
60
-
61
62
  handleModalClose = () => {
62
63
  const { actionCancelCallback } = this.props;
63
64
  actionCancelCallback();
@@ -100,7 +101,7 @@ export class CompareRevisions extends Component {
100
101
  </Modal.Content>
101
102
  )}
102
103
  <Modal.Content scrolling>
103
- <RevisionsDiffViewer diff={this.state.diff} />
104
+ <RevisionsDiffViewer diff={diff} />
104
105
  </Modal.Content>
105
106
  </Modal.Content>
106
107
  <Modal.Actions>
@@ -88,7 +88,6 @@ export class CommunitiesManagement extends Component {
88
88
  const {
89
89
  recordCommunitySearchConfig,
90
90
  permissions,
91
- canManageRecord,
92
91
  userCommunitiesMemberships,
93
92
  recordCommunityEndpoint,
94
93
  recordUserCommunitySearchConfig,
@@ -97,7 +96,7 @@ export class CommunitiesManagement extends Component {
97
96
  } = this.props;
98
97
  const { communities, loading, error, manageCommunitiesModalOpen } = this.state;
99
98
  return (
100
- (!_isEmpty(communities) || canManageRecord) && (
99
+ (!_isEmpty(communities) || permissions.can_manage) && (
101
100
  <>
102
101
  <Header
103
102
  size="medium"
@@ -106,7 +105,7 @@ export class CommunitiesManagement extends Component {
106
105
  attached="top"
107
106
  >
108
107
  {i18next.t("Communities")}
109
- {canManageRecord && (
108
+ {permissions.can_manage && (
110
109
  <CommunitiesManagementDropdown
111
110
  actionSucceed={this.handleRefresh}
112
111
  userCommunitiesMemberships={userCommunitiesMemberships}
@@ -166,7 +165,6 @@ CommunitiesManagement.propTypes = {
166
165
  recordCommunityEndpoint: PropTypes.string.isRequired,
167
166
  recordUserCommunitySearchConfig: PropTypes.object.isRequired,
168
167
  permissions: PropTypes.object.isRequired,
169
- canManageRecord: PropTypes.bool.isRequired,
170
168
  userCommunitiesMemberships: PropTypes.object.isRequired,
171
169
  searchConfig: PropTypes.object.isRequired,
172
170
  record: PropTypes.object.isRequired,
@@ -73,7 +73,7 @@ export const LinksSearchItem = ({
73
73
  selfLink = `${record.links.record_html || record.links.self_html}?`;
74
74
  } else if (result?.permission === "preview") {
75
75
  // point to `/records/<id>?preview=1` even for published records
76
- selfLink = `${record.links.record_html || record.links.self_html}?preview=1&`;
76
+ selfLink = `${record.links.preview_html}&`;
77
77
  } else if (result?.permission === "edit") {
78
78
  selfLink = `${record.links.self_html}?`;
79
79
  }
@@ -33,7 +33,7 @@ export const dropdownOptions = [
33
33
  title: i18next.t("Can preview drafts"),
34
34
  value: "preview",
35
35
  description: i18next.t(
36
- "Can view drafts and restricted files of all versions of this record."
36
+ "Can view drafts, restricted files, and comment on associated draft requests of all versions of this record."
37
37
  ),
38
38
  },
39
39
  {
@@ -43,7 +43,7 @@ export const dropdownOptions = [
43
43
  title: i18next.t("Can edit"),
44
44
  value: "edit",
45
45
  description: i18next.t(
46
- "Can edit drafts and view restricted files of all versions of this record."
46
+ "Can edit drafts, view restricted files, and comment on associated draft requests of all versions of this record."
47
47
  ),
48
48
  },
49
49
  ];
@@ -25,7 +25,7 @@ export const accessDropdownOptions = [
25
25
  title: i18next.t("Can manage"),
26
26
  value: "manage",
27
27
  description: i18next.t(
28
- "Can manage access, edit drafts and view restricted files of all versions of this record."
28
+ "Can manage access, edit drafts, view restricted files, and comment on associated draft requests of all versions of this record."
29
29
  ),
30
30
  },
31
31
  ];
@@ -100,9 +100,6 @@ if (sidebarCommunitiesManageDiv) {
100
100
  recordUserCommunitySearchConfig={JSON.parse(
101
101
  sidebarCommunitiesManageDiv.dataset.recordUserCommunitySearchConfig
102
102
  )}
103
- canManageRecord={JSON.parse(
104
- sidebarCommunitiesManageDiv.dataset.canManageRecord
105
- )}
106
103
  recordCommunitySearchConfig={recordCommunitySearchConfig}
107
104
  permissions={JSON.parse(sidebarCommunitiesManageDiv.dataset.permissions)}
108
105
  searchConfig={JSON.parse(pendingCommunitiesSearchConfig)}
@@ -118,9 +115,6 @@ if (sidebarCommunitiesManageDiv) {
118
115
  recordUserCommunitySearchConfig={JSON.parse(
119
116
  sidebarCommunitiesManageDiv.dataset.recordUserCommunitySearchConfig
120
117
  )}
121
- canManageRecord={JSON.parse(
122
- sidebarCommunitiesManageDiv.dataset.canManageRecord
123
- )}
124
118
  recordCommunitySearchConfig={recordCommunitySearchConfig}
125
119
  permissions={JSON.parse(sidebarCommunitiesManageDiv.dataset.permissions)}
126
120
  searchConfig={JSON.parse(pendingCommunitiesSearchConfig)}
@@ -12,6 +12,8 @@ import {
12
12
  SearchAppResultsPane,
13
13
  InvenioSearchPagination,
14
14
  } from "@js/invenio_search_ui/components";
15
+ import { SharedOrMineFilter } from "@js/invenio_requests/components/SharedOrMineFilter";
16
+
15
17
  import { i18next } from "@translations/invenio_app_rdm/i18next";
16
18
  import React from "react";
17
19
  import { ResultsList, SearchBar, Sort, buildUID } from "react-searchkit";
@@ -75,6 +77,7 @@ DashboardResultView.defaultProps = {
75
77
  export const DashboardSearchLayoutHOC = ({
76
78
  searchBarPlaceholder = "",
77
79
  appName = undefined,
80
+ showSharedFilters = false,
78
81
  }) => {
79
82
  const DashboardUploadsSearchLayout = (props) => {
80
83
  const [sidebarVisible, setSidebarVisible] = React.useState(false);
@@ -100,7 +103,7 @@ export const DashboardSearchLayoutHOC = ({
100
103
  </Grid.Column>
101
104
  <Grid.Column
102
105
  mobile={14}
103
- tablet={10}
106
+ tablet={14}
104
107
  verticalAlign="middle"
105
108
  floated="right"
106
109
  >
@@ -108,8 +111,32 @@ export const DashboardSearchLayoutHOC = ({
108
111
  </Grid.Column>
109
112
  </Grid.Row>
110
113
 
111
- <Grid.Row className="mobile tablet only">
112
- <Grid.Column width={16} textAlign="right">
114
+ <Grid.Row className="tablet only">
115
+ <Grid.Column tablet={6} floated="right">
116
+ <SharedOrMineFilter mineLabel={i18next.t("My uploads")} />
117
+ </Grid.Column>
118
+ <Grid.Column tablet={10} textAlign="right">
119
+ {config.sortOptions && (
120
+ <Sort
121
+ values={config.sortOptions}
122
+ label={(cmp) => (
123
+ <>
124
+ <label className="mr-10">{i18next.t("Sort by")}</label>
125
+ {cmp}
126
+ </>
127
+ )}
128
+ />
129
+ )}
130
+ </Grid.Column>
131
+ </Grid.Row>
132
+
133
+ <Grid.Row className="mobile only">
134
+ <Grid.Column width={16}>
135
+ <SharedOrMineFilter mineLabel={i18next.t("My uploads")} />
136
+ </Grid.Column>
137
+ </Grid.Row>
138
+ <Grid.Row className="mobile only">
139
+ <Grid.Column textAlign="right">
113
140
  {config.sortOptions && (
114
141
  <Sort
115
142
  values={config.sortOptions}
@@ -127,11 +154,17 @@ export const DashboardSearchLayoutHOC = ({
127
154
 
128
155
  {/* Desktop search header */}
129
156
  <Grid.Row className="computer only">
130
- <Grid.Column width={8} floated="right">
131
- <SearchBar placeholder={searchBarPlaceholder} />
157
+ <Grid.Column width={4} />
158
+ <Grid.Column width={4}>
159
+ <SharedOrMineFilter mineLabel={i18next.t("My uploads")} />
132
160
  </Grid.Column>
161
+ {showSharedFilters && (
162
+ <Grid.Column width={5} floated="right">
163
+ <SearchBar placeholder={searchBarPlaceholder} />
164
+ </Grid.Column>
165
+ )}
133
166
 
134
- <Grid.Column width={4} textAlign="right">
167
+ <Grid.Column width={3} textAlign="right">
135
168
  {config.sortOptions && (
136
169
  <Sort
137
170
  values={config.sortOptions}
@@ -28,6 +28,7 @@ export const appName = "InvenioAppRdm.DashboardCommunities";
28
28
  export const DashboardCommunitiesSearchLayout = DashboardSearchLayoutHOC({
29
29
  searchBarPlaceholder: i18next.t("Search in my communities..."),
30
30
  appName: appName,
31
+ mineLabel: i18next.t("My communities"),
31
32
  });
32
33
 
33
34
  const DashboardResultViewWAppName = parametrize(DashboardResultView, {
@@ -19,7 +19,6 @@ import {
19
19
  RDMRecordSearchBarElement,
20
20
  RDMToggleComponent,
21
21
  } from "../search/components";
22
- import { http } from "react-invenio-forms";
23
22
  import { DashboardResultView, DashboardSearchLayoutHOC } from "./base";
24
23
  import { createSearchAppInit } from "@js/invenio_search_ui";
25
24
  import { ComputerTabletUploadsItem } from "./uploads_items/ComputerTabletUploadsItem";
@@ -41,24 +40,10 @@ const statuses = {
41
40
  };
42
41
 
43
42
  export const RDMRecordResultsListItem = ({ result }) => {
44
- const editRecord = () => {
45
- http
46
- .post(
47
- `/api/records/${result.id}/draft`,
48
- {},
49
- {
50
- headers: {
51
- "Content-Type": "application/json",
52
- "Accept": "application/vnd.inveniordm.v1+json",
53
- },
54
- }
55
- )
56
- .then(() => {
57
- window.location = `/uploads/${result.id}`;
58
- })
59
- .catch((error) => {
60
- console.error(error.response.data);
61
- });
43
+ const viewDraft = () => {
44
+ // The upload view is responsible to redirect the user to the upload form or
45
+ // the preview page depending on the permissions they have.
46
+ window.location = `/uploads/${result.id}`;
62
47
  };
63
48
 
64
49
  const isPublished = result.is_published;
@@ -97,14 +82,14 @@ export const RDMRecordResultsListItem = ({ result }) => {
97
82
  <>
98
83
  <ComputerTabletUploadsItem
99
84
  result={result}
100
- editRecord={editRecord}
85
+ viewDraft={viewDraft}
101
86
  statuses={statuses}
102
87
  access={access}
103
88
  uiMetadata={uiMetadata}
104
89
  />
105
90
  <MobileUploadsItem
106
91
  result={result}
107
- editRecord={editRecord}
92
+ viewDraft={viewDraft}
108
93
  statuses={statuses}
109
94
  access={access}
110
95
  uiMetadata={uiMetadata}
@@ -185,6 +170,8 @@ export const DashboardUploadsSearchLayout = DashboardSearchLayoutHOC({
185
170
  />
186
171
  ),
187
172
  appName: appName,
173
+ mineLabel: i18next.t("My uploads"),
174
+ showSharedFilters: true,
188
175
  });
189
176
 
190
177
  const ContribSearchAppFacetsWithConfig = parametrize(ContribSearchAppFacets, {
@@ -15,7 +15,7 @@ import { DisplayPartOfCommunities } from "../../components/DisplayPartOfCommunit
15
15
 
16
16
  export const ComputerTabletUploadsItem = ({
17
17
  result,
18
- editRecord,
18
+ viewDraft,
19
19
  statuses,
20
20
  access,
21
21
  uiMetadata,
@@ -69,16 +69,8 @@ export const ComputerTabletUploadsItem = ({
69
69
  <i className={`icon ${accessStatusIcon}`} />
70
70
  {accessStatus}
71
71
  </Label>
72
- <Button
73
- compact
74
- size="small"
75
- floated="right"
76
- onClick={() => editRecord()}
77
- labelPosition="left"
78
- icon="edit"
79
- content={i18next.t("Edit")}
80
- />
81
- {isPublished && (
72
+
73
+ {isPublished ? (
82
74
  <Button
83
75
  compact
84
76
  size="small"
@@ -88,6 +80,16 @@ export const ComputerTabletUploadsItem = ({
88
80
  icon="eye"
89
81
  content={i18next.t("View")}
90
82
  />
83
+ ) : (
84
+ <Button
85
+ compact
86
+ size="small"
87
+ floated="right"
88
+ onClick={() => viewDraft()}
89
+ labelPosition="left"
90
+ icon="eye"
91
+ content={i18next.t("View")}
92
+ />
91
93
  )}
92
94
  </Item.Extra>
93
95
  <Item.Header as="h2">
@@ -146,7 +148,7 @@ export const ComputerTabletUploadsItem = ({
146
148
 
147
149
  ComputerTabletUploadsItem.propTypes = {
148
150
  result: PropTypes.object.isRequired,
149
- editRecord: PropTypes.func.isRequired,
151
+ viewDraft: PropTypes.func.isRequired,
150
152
  statuses: PropTypes.object.isRequired,
151
153
  access: PropTypes.object.isRequired,
152
154
  uiMetadata: PropTypes.object.isRequired,
@@ -15,7 +15,7 @@ import { DisplayPartOfCommunities } from "../../components/DisplayPartOfCommunit
15
15
 
16
16
  export const MobileUploadsItem = ({
17
17
  result,
18
- editRecord,
18
+ viewDraft,
19
19
  statuses,
20
20
  access,
21
21
  uiMetadata,
@@ -122,20 +122,20 @@ export const MobileUploadsItem = ({
122
122
  <Item.Extra>
123
123
  <Dropdown button text={i18next.t("Actions")} labeled className="icon">
124
124
  <Dropdown.Menu>
125
- <Dropdown.Item
126
- onClick={() => editRecord()}
127
- labelposition="left"
128
- icon="edit"
129
- content={i18next.t("Edit")}
130
- />
131
-
132
- {isPublished && (
125
+ {isPublished ? (
133
126
  <Dropdown.Item
134
127
  labelposition="left"
135
128
  href={viewLink}
136
129
  icon="eye"
137
130
  content={i18next.t("View")}
138
131
  />
132
+ ) : (
133
+ <Dropdown.Item
134
+ onClick={() => viewDraft()}
135
+ labelposition="left"
136
+ icon="eye"
137
+ content={i18next.t("View")}
138
+ />
139
139
  )}
140
140
  </Dropdown.Menu>
141
141
  </Dropdown>
@@ -147,7 +147,7 @@ export const MobileUploadsItem = ({
147
147
 
148
148
  MobileUploadsItem.propTypes = {
149
149
  result: PropTypes.object.isRequired,
150
- editRecord: PropTypes.func.isRequired,
150
+ viewDraft: PropTypes.func.isRequired,
151
151
  statuses: PropTypes.object.isRequired,
152
152
  access: PropTypes.object.isRequired,
153
153
  uiMetadata: PropTypes.object.isRequired,
@@ -235,7 +235,7 @@
235
235
  in exactly the same order, and thus for instance would not match a record
236
236
  containing the phrase <em>"open access and science"</em>. A proximity search
237
237
  allows that the terms are not in the exact order and may include other terms
238
- inbetween. The degree of flexiblity is specified by an integer afterwards:
238
+ in between. The degree of flexibility is specified by an integer afterwards:
239
239
  </p>
240
240
  <p>
241
241
  <strong>Example:</strong>
invenio_app_rdm/urls.py CHANGED
@@ -28,6 +28,9 @@ Design decisions:
28
28
  - Generated urls are absolute for now
29
29
  """
30
30
 
31
+ import unicodedata
32
+ from urllib.parse import quote
33
+
31
34
  from flask import current_app
32
35
 
33
36
 
@@ -49,7 +52,14 @@ def record_url_for(_app="ui", pid_value=""):
49
52
 
50
53
  def download_url_for(pid_value="", filename=""):
51
54
  """Return url for download route."""
52
- url_prefix = current_app.config.get(f"SITE_UI_URL", "")
55
+ url_prefix = current_app.config.get("SITE_UI_URL", "")
56
+
57
+ # see https://github.com/pallets/werkzeug/blob/main/src/werkzeug/utils.py#L456-L465
58
+ try:
59
+ filename.encode("ascii")
60
+ except UnicodeEncodeError:
61
+ # safe = RFC 5987 attr-char
62
+ filename = quote(filename, safe="!#$&+-.^_`|~")
53
63
 
54
64
  # We use [] so that this fails and brings to attention the configuration
55
65
  # problem if APP_RDM_ROUTES.record_file_download is missing
@@ -24,6 +24,9 @@ def search_app_context():
24
24
  "/api/user/records",
25
25
  {"Accept": "application/vnd.inveniordm.v1+json"},
26
26
  pagination_options=(10, 20),
27
+ initial_filters=[
28
+ ["shared_with_me", "false"],
29
+ ],
27
30
  ),
28
31
  "search_app_rdm_user_communities_config": partial(
29
32
  search_app_config,
@@ -41,7 +44,10 @@ def search_app_context():
41
44
  current_app.config["RDM_SORT_OPTIONS"],
42
45
  "/api/user/requests",
43
46
  {"Accept": "application/json"},
44
- initial_filters=[["is_open", "true"]],
47
+ initial_filters=[
48
+ ["is_open", "true"],
49
+ ["shared_with_me", "false"],
50
+ ],
45
51
  hidden_params=[["expand", "1"]],
46
52
  ),
47
53
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: invenio-app-rdm
3
- Version: 13.0.0b2.dev3
3
+ Version: 13.0.0b2.dev5
4
4
  Summary: Invenio Research Data Management.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-app-rdm
6
6
  Author: CERN
@@ -96,6 +96,20 @@ https://inveniordm.docs.cern.ch
96
96
  Changes
97
97
  =======
98
98
 
99
+ Version v13.0.0b2.dev5 (released 2025-03-11)
100
+
101
+ - dashboard: use always view button to redirect user to the upload
102
+ - If upload is published redirect user to published record
103
+ - If upload is draft redirect user to upload or preview depending on their permission
104
+ - deposit: use permissions.can_manage for record community management
105
+ - dashboard: split mine and shared with me uploads
106
+
107
+ Version v13.0.0b2.dev4 (released 2025-03-10)
108
+
109
+ - views: FAIR signposting level 1 support (config flag)
110
+ - tasks: skip health checks for files that don't have a uri
111
+ - views: signposting: files: fix filename encoding issues for downloads
112
+
99
113
  Version v13.0.0b2.dev3 (released 2025-02-21)
100
114
 
101
115
  - views: FAIR signposting level 1 support
@@ -1,9 +1,9 @@
1
- invenio_app_rdm/__init__.py,sha256=aMf0xqH7NgrjmJzUlTPJbSy_JBYRqRI67Y8cOfcLVaY,699
1
+ invenio_app_rdm/__init__.py,sha256=2imeLNb2IppGU6GUcbAhK5zjFFA44cuFi9_T2uhnPyU,699
2
2
  invenio_app_rdm/cli.py,sha256=G6QqNU2W6n6ICtTMnpeKFXIsdorncDmVXwwwsGH5F2k,2746
3
- invenio_app_rdm/config.py,sha256=B6WFMqTVF_gb3Ppenun2f8Vw4Ak1ORd4Di27Ty1nOP8,50378
3
+ invenio_app_rdm/config.py,sha256=aQHeG7QxiKx01eDi1Xo7hsOfyAfe_yb8SNrq-CDOYag,50448
4
4
  invenio_app_rdm/ext.py,sha256=PkZhATGJDgYqBJQh41NdvBZWR83mgI3Eej6rj10UVJE,5278
5
- invenio_app_rdm/tasks.py,sha256=XAbl8KeAWaJ5lC_4OUWUPstvCT7lYs5tRR1zSVBDfRk,1275
6
- invenio_app_rdm/urls.py,sha256=VRbpuN3kQ2fcmKvEIGQ5O1EnaSsEE2kyhLwUmONwZO8,2192
5
+ invenio_app_rdm/tasks.py,sha256=FyrIQXVuPjms-dNEnLrVmmdwrX_IykJ87gcSNgOR6O0,1373
6
+ invenio_app_rdm/urls.py,sha256=8S95QSs4yS0rtORsd4veo--rF3LSLwZenoowJ5ubbmM,2496
7
7
  invenio_app_rdm/administration/__init__.py,sha256=8r9LeoE9fNHZSVS5QsCfVhRU7MAiEOWJk9MA3Y--4F8,251
8
8
  invenio_app_rdm/administration/domains/__init__.py,sha256=Qob5kqjRPxpuSE5yDV2tesN6tmaKp5JcxCxGA8Mrcak,487
9
9
  invenio_app_rdm/administration/domains/domains.py,sha256=vafLa-mqkg_tQLjx328E64P_4mksB5kjBlsfunvdatg,5599
@@ -42,7 +42,7 @@ invenio_app_rdm/records_ui/utils.py,sha256=0ljPFPC1dAEY_ySZSIT_LRYka2bfsUyvFk_QQ
42
42
  invenio_app_rdm/records_ui/previewer/__init__.py,sha256=T32i_ssGKONDpNB3gECpn20ubHvGYYVrNuIgCADioOM,267
43
43
  invenio_app_rdm/records_ui/previewer/iiif_simple.py,sha256=lGxB3g0hNVJDWnq5jV_KrKPwC-LR1C51DMjas1-UpBM,1589
44
44
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html,sha256=x1JF-cRmkbSSeroh2SWgKHIwGc34FaPJiaYQlwiUkQw,2413
45
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html,sha256=Q_5jqfPFDaUFHp94GlmRormmDk_gCY6i3SakuwJ-flM,20051
45
+ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html,sha256=JDGwci3iCczFB_sliQRMsNORYG3moGoTXBVju5Hrp1w,20051
46
46
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/draft_not_found.html,sha256=_FPflgqVZ556Xw349mHPSFb0FOhxYkIHfmUUTX53_LU,624
47
47
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/export.html,sha256=Vtg02WXJU0CpCNci7CXWYN7EGwT-IrBTrg_4tfzIbCs,1160
48
48
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/iiif_preview.html,sha256=RningdsVBXsJ8qnQjzurf0Ty8R5Tq08eS31s53c3DNE,444
@@ -61,7 +61,7 @@ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details
61
61
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/stats.html,sha256=74xWPQNHoFbhN1an-p9SEAFUbW-TwCsBEUAaOEyNgWQ,4370
62
62
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/subjects.html,sha256=Wu7MCXzGj41K38-VXi-kStvc8fm3Ck68uJ1egfFK0dw,1509
63
63
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/citations.html,sha256=5Sdg_gwGOgm0qLRv4-CUmDNx7PYlOsa5XPGjDdx7k20,258
64
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/communities.html,sha256=zB35-ZAHEubnqfFpOrmZ17EuENEL0rUVqc2ra1NqCp8,1620
64
+ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/communities.html,sha256=GxxKbXxVg5lKcSEzVeYJXyz7qUL7yhsZnhXY3lE-vNU,1561
65
65
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/details.html,sha256=zQCx5x5AE_T8nywICNBzo-9K4vNtfPSyz_F_7cC6L8Y,1974
66
66
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/export.html,sha256=DoDrQFd_OJcJzqBEQ2FRbcfJpD3TLRjESU68mBLWVyU,1392
67
67
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/external_resources.html,sha256=Ia92YMRlxuGRTMsWU4hQTLJDeRy8BX8bnSSaLXKst4Y,1934
@@ -80,8 +80,8 @@ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/
80
80
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/stats_popup.html,sha256=5SVzfIS15Aro2Itd2BiaLbMXm0cvvwk6ZCdYjuSwhBw,625
81
81
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/version.html,sha256=JpE4e6RpbSR2pQD1rOsfvzD2ur584aRfBWUUap2IMBA,688
82
82
  invenio_app_rdm/records_ui/views/__init__.py,sha256=4NxQNADuvMsblEsGd3zkKXSNR5_4eLMcFEFYvc6NxVc,5718
83
- invenio_app_rdm/records_ui/views/decorators.py,sha256=khRmZBd5oh6Kjt9m431S7z9g-_11PZf7FAH235F2eDU,15296
84
- invenio_app_rdm/records_ui/views/deposits.py,sha256=ZQSlYugqZX1jnS0GFNtJQVq2_KyDS_ECzp1S26qDGAs,21337
83
+ invenio_app_rdm/records_ui/views/decorators.py,sha256=XUSPpstYyh72IdNaIO4wz3sw1fjI_2DNGsKdUu3ueL4,15769
84
+ invenio_app_rdm/records_ui/views/deposits.py,sha256=H7LoSmvPzkjVGfhp3TmjMkQkLpJ7jOdmigjVciLqDvA,21536
85
85
  invenio_app_rdm/records_ui/views/filters.py,sha256=Rm55fXJv97cqq8B_6KCe-3PxxHUH4VRu-jd9fTea6r4,6994
86
86
  invenio_app_rdm/records_ui/views/records.py,sha256=GdxG3JnXrV1QT0KxOqeYWoDGIiZRZ9w5poihPPd-wTo,16428
87
87
  invenio_app_rdm/redirector/__init__.py,sha256=AYCTGmfbmkHW3YJXMqXlWBXcBrUsta-QmL9ULX2bjwA,243
@@ -105,10 +105,10 @@ invenio_app_rdm/theme/views.py,sha256=UJs2_C28BWsXY1JqbRK4_ML1JRtGo1yM2S0_W37JJo
105
105
  invenio_app_rdm/theme/webpack.py,sha256=5ucwIJQgM1y9EFdRcsxv_ThPs7hXRzdmipVBxoU1McI,5090
106
106
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/theme.js,sha256=2-BWDEH3YQPwPt1ey3jUHnMrKTyb0JBPRlydk5_reH8,4151
107
107
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js,sha256=zKROcc3qE64-UhM8ha42K-EDDxAXMupxoocZZ9bjEHo,3452
108
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js,sha256=h7ilYSO4XYwdIqO75R1aREzCdp-EFeHbMbYvQ-Iq41A,2342
108
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js,sha256=BNdMxfFYPhlrGKPg47oc4X8ILllfCngN61L1b7Yt_8Q,2483
109
109
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUser.js,sha256=GmZGEPOylGXr6fyNJxS_0hPwCGdO98F2u6Pn8Qrt9ew,2291
110
110
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js,sha256=qsjNiOsHWx9rrP3uA4nxthUEoY9b82n0IO8PfdObxHQ,6815
111
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js,sha256=N8dEcGupDr1_TG858E6uU64TDtGVR4zJ_mgKiASG90s,1823
111
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js,sha256=-2khcBmWr3zztAjy3mRz4d9gu8b8IAZtWbcnwnD5eAk,1932
112
112
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js,sha256=wwvYfTJ7pBEdoeqcEqmxFLaEwpJnnFW0oRQTyAdDSBw,3038
113
113
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaForm.js,sha256=Ltr03KlCogkg2NjqWc1GkxJlYPWB2LDLHL04w6eJiRU,5749
114
114
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/index.js,sha256=soELMxc1jf_rL62CJ9wtWGVG13yk1PRY7JqseqnKkqU,297
@@ -116,7 +116,7 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domai
116
116
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/SearchResultItemLayout.js,sha256=sWIHw6tSCmRa0dYCHTa-fbxnHr9MhyDhMUiGlGV-HWE,6097
117
117
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/index.js,sha256=uajCJbGiHGjRH_YapCGGXATKtAUlXTr0jirx1UfqjCQ,283
118
118
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/drafts/index.js,sha256=DuPY4wnnwyWF61Oyef1S4SvQrg-DrkZZjjQKlA0DeJo,1159
119
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/CompareRevisions.js,sha256=wqJrxHi5kW83PJhJMinpuX-He1NPBVjRVHyyhBoHoQ4,3723
119
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/CompareRevisions.js,sha256=J-bx3k8PPSAFg669w_rhZVuSFDS2RjcKyyqxZ029FFU,3768
120
120
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordActions.js,sha256=FAjkK7TZ4ebjsQh1ZcFFHkVePP2T8msa1OAIjxktKJo,1935
121
121
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordResourceActions.js,sha256=rrQhCfw1Q8n5SJ9aT-XfZfadEZRK9b1N6hzGkbMAnrU,5528
122
122
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RemovalReasonsSelect.js,sha256=8y1YRo1ZyqDfeQL4aNbO9ig3689YpzEBse8kLf_qI8o,2192
@@ -165,7 +165,7 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js,sha
165
165
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/frontpage/RecordsList.js,sha256=PkLpiCl7sNSlQoCo7xxZ_H6QvWqK_TydoseIiKvtuMw,4176
166
166
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/frontpage/index.js,sha256=X0tsSvLwGPzSFQEf4J1zPZbFRCiYeJq5CnEXr_J5LsU,900
167
167
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/AccessRequestForm.js,sha256=Lc7Pfy0zvD7KzkN3SqtbZMmPIDbd4vJsMKUmnlg6KV0,8413
168
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagement.js,sha256=cYep62H0ToRx642jDWNz1rwejwR6lJAVcpA6-dTkkf4,5754
168
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagement.js,sha256=YnRSutAGqKCN4pWfUcEELpQBzQEvZz7rKRxhkLjnM3g,5699
169
169
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagementDropdown.js,sha256=qocsinvtbWEqAi8kgqNqx7c0X-_evRmCz2bPTaMQlcI,5953
170
170
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/EditButton.js,sha256=WJ5lNpbPcd_Kymn_TYklSTfkCJRPhpFeT6cWcR48mSQ,1452
171
171
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ExportDropdown.js,sha256=wAu7H-CaC8ue_BuYzdf7l6oboArRVoz4lLzR6GDIzlE,1775
@@ -175,7 +175,7 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordC
175
175
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js,sha256=i959fJfHHaBvxYxWZmZMBK-9os7SK_WEA1t1pG524zs,3839
176
176
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordVersionsList.js,sha256=vECGyt1XnoYRXNU7qGk9GMyZWATIXEFH2xV6ibeRcSc,7071
177
177
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/access.js,sha256=FVcpKl22zMi1GssbLZAj1pO98c6Em_wg_yBIdfBJor0,938
178
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js,sha256=0mr3nNUFwNVVMcsgy6QHhC6dsTx3ctVNuS7-CvmjOSk,5255
178
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js,sha256=FkCbK5FrXlSaD_TDO1eUMDORULhBJccf7FEvhmto-GM,5029
179
179
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/theme.js,sha256=ZtPRShCangzFhik1OdcpzfTTUXdtogZyTHkF70o68Ls,3141
180
180
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageDefaultBrandingAction/ManageDefaultBrandingAction.js,sha256=qNWpe3KyZ8NDHKocG6XKJzb6w3fIQk3muWN126pUo9w,3529
181
181
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunitiesModal.js,sha256=G9OwLxKqX73w_7D1k7BHOzMeLmokowMfJQg5Km7J8RA,1797
@@ -191,15 +191,15 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOp
191
191
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/ShareModal.js,sha256=5Gq2TGsOlkvrwg2fURyv7wOaO2QH22_ZWzrjE2nCDiY,6627
192
192
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/AccessDropdown.js,sha256=0-Fune91rH-7B57kYvZxNlIemg-xLgxZ5LIbHGJY2PE,3068
193
193
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/CreateAccessLink.js,sha256=2Lmc9dCjv-83cagHUjdi_SGZkheRTGdywQUZGJxkihg,3368
194
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchItem.js,sha256=G8XI9zRwVkqSwuje2oi51KO0Nfu1T3OvpHEALMQrkI4,5198
195
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchResultContainer.js,sha256=yYjLvaHbSpriTzVrAdzp89zA6LxZDxRgYaMsJxVyjvs,6708
194
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchItem.js,sha256=qNHO_hfrUw93sVHlq1IjF-rO_5o2CkjEDecHJ4V1C1Q,5163
195
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchResultContainer.js,sha256=xr5dfml-v7NU2PzCKIB2_BeYFnFghnsqwKMgLErONQI,6786
196
196
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksTab.js,sha256=Ki1HN02B4_xFNy3YdPp3Mz2YLO-LxUhmNqRKKrvtVlQ,2883
197
197
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessRequests/AccessRequestsTab.js,sha256=tbSeqk7tnApZqLFi7NEegrwAGFKJ0sficF_3DB1Ld-0,8405
198
198
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/AccessUsersGroups.js,sha256=NPKhCbPLU260vFTayQ0QA6x5JuIcEkLZkvvx8zxy5Iw,6885
199
199
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/AddUserGroupAccessModal.js,sha256=qpaeKpIX2FUhztkBJtD03WlZ_YOziE0_1CF4cGwMb6Y,5839
200
200
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/GroupsTab.js,sha256=ZqiuZjjr1SZnTs3cBhX7ZckixAVa2KErEZXKY00A3oE,2358
201
201
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/PeopleTab.js,sha256=yk5anjYE7CNQ9_io3qIAgE_6oeFYvMn0hmc2McpEF_g,2348
202
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/UserGroupAccessSearchResultItem.js,sha256=Zt-7zq7pk2_dGcwe0tJj_6d1NzVHR5iv4IY0AcLMKLI,5710
202
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/UserGroupAccessSearchResultItem.js,sha256=PRAouFDdR560x3-l6My5UjxG4L14wT76Xu5teAIRyDY,5749
203
203
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/api/api.js,sha256=WpRWWdlN_8TqeaMdB7RV2rQJSluetA91qIuJcAddfLY,926
204
204
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/index.js,sha256=xktX9vqs7xPTrKmGD93T-faSmg07LNsmK3GepA9F6j0,424
205
205
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/mapping.js,sha256=kRIVYx1pkzq6kNry3M6Cn5hykDkNJAaG7sQ0BdwGSj8,434
@@ -211,12 +211,12 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/ov
211
211
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/components.js,sha256=vdkahSNMUmM7p4Vg-IUhMXOeEFmn5r7EcYtgkeM0I0o,7309
212
212
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/index.js,sha256=xvc8dtcPsTABiSpbt8azBVuZJuhXi39Nj4N8mPiFd40,2190
213
213
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/subcommunity/browse.js,sha256=N6tCJ4_NBlfQSRaiYfp4K-keHCC6xgFWmh1UCgBTyXA,921
214
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/base.js,sha256=z8ufH1VP2OtwmTErUBdvQ2KU-76rB9R6VUUEi0BoDPI,5582
215
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/communities.js,sha256=HDayQQrpknihpOfuZ5IQMBhmzdrTh1a1bLpPwLVgVx4,2122
214
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/base.js,sha256=ZXwVroxi1LgVYfqbQSJcIRPmBkpp0yh6tlNVVvMlbCI,6833
215
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/communities.js,sha256=5rW9TvCQ_FiDpDaFIm8ansLvxJLX3V29ABVjz9B0OFQ,2164
216
216
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/requests.js,sha256=ivV3UoOF81SLk8e5M-nduIzikYfHhVMYEflXpUxT-6Q,2746
217
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads.js,sha256=MFVg7Hku22JlW3bnq0ZJTG3trMcVkxt1XV7N0aEFT0Q,6992
218
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/ComputerTabletUploadsItem.js,sha256=YwueXl_oqD7JpkQcRho04Lfh4PiRAmRMxHgG7ADujFo,4884
219
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/MobileUploadsItem.js,sha256=NALASRFYDrIl3J82rtgdlEC5umuK4uN7dktUDSHsEGw,5034
217
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads.js,sha256=wnQ810fc5uhuW2tQyYcxwlNUiQXqHGgM8Fi0s802Y3g,6793
218
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/ComputerTabletUploadsItem.js,sha256=XXiBPOtCVz6htS4ita8GlNAePEoKyHQcmEs0yLL5B8A,4914
219
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/MobileUploadsItem.js,sha256=7rwJz0nVwBk4bXOEcWymAZrPyL0pmekBcMeBwNt8OJc,5060
220
220
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/creatibutors.less,sha256=X47WXPv66x2-T2XghG_ibq5vkX_3gxelK9O0mPxzFO8,1113
221
221
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/licenses.less,sha256=SumVdXtD3IBMvOBUk3JiW-wD4Xy5ASEG1v4wwrsPrBI,1352
222
222
  invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/previewer/iiif_simple.less,sha256=EH1nrWuEFjfcrXrsbC82pTQqWQ2xAELSTtIkpRpar8I,326
@@ -396,7 +396,7 @@ invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/searchbar.html,sha25
396
396
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/site_footer.html,sha256=O4914C0hNrKtHreAanMbhRUiCfb8aubr6pV2chXB_BQ,821
397
397
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/files_integrity_report/email/files_integrity_report.html,sha256=27L0XZKP5bkOu4tx0QmMMDwIPdtFU_dyVfTfRk9E5QQ,1063
398
398
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.de.html,sha256=gefXaGv-ylkBUbvXXJe5EcTS66qoY0-v0XesXICX5_E,9310
399
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.en.html,sha256=HwZW7ZcBWV39NaYXhoIbGlep7aYoDO-in36jYSjVJMY,8790
399
+ invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.en.html,sha256=-EZdjhc4JslSq37_QN3KRL01LBwLJENkRtwBJ-PLSzc,8792
400
400
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/statistics.en.html,sha256=gQSJsmsXaLLA8KqEjkyxn7j299Kc0hnjA0sXq0oXeuI,7780
401
401
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/versioning.en.html,sha256=Rfd4-1vpU92VxppMTLGlS7uzqXWZUtGBARJTalUFuxg,6066
402
402
  invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/macros/records_list.html,sha256=GhHhRCn2lD9zyZ7J7_GiLqTQSHGxpWbiuYdZp8ft0bU,1081
@@ -513,7 +513,7 @@ invenio_app_rdm/upgrade_scripts/migrate_8_0_to_9_0.py,sha256=BSAaEoWaIvRraxhZ2oV
513
513
  invenio_app_rdm/upgrade_scripts/migrate_9_0_to_10_0.py,sha256=Ufu5t9iNIsQoG5E0wcFMXxDhhUVTaQXTk-BKKsKVshg,1278
514
514
  invenio_app_rdm/users/schemas.py,sha256=4Y6v0Wcg5GJ7XL0EkCukXCfZvLwEgMrMDZJx4hO5-lc,835
515
515
  invenio_app_rdm/users_ui/__init__.py,sha256=jeCytb7vc72ifjL0a0sVKjNLgj3WFhweGKKUzi0UYWA,285
516
- invenio_app_rdm/users_ui/searchapp.py,sha256=8Ga8hUal2wl4yfNx81CqTcje9InXkH7mu4cPHZL0ZG0,1633
516
+ invenio_app_rdm/users_ui/searchapp.py,sha256=g4Od_HNBIlZg7K5XQ8W96Q3vv2zsGIyr1RueSJ__Eh4,1799
517
517
  invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/base.html,sha256=q2aCBTYv1fT8ZJaJM_u3vmIusps9t-QFu7tWXiv8lwg,572
518
518
  invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/communities.html,sha256=zPlDthqHiCu9-EZ00cEdhcU2ksq_cHsT1Dic3ui1lMM,809
519
519
  invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/header.html,sha256=AReG3RGwR5XZpqC8VFmdxlWrvTmrCXkSAH--4IdiZJI,2041
@@ -552,12 +552,12 @@ tests/ui/conftest.py,sha256=id6A9VbwHQtnr8bzQyQXDBDoKUHx8uufuhRVk02mqbk,3015
552
552
  tests/ui/test_deposits.py,sha256=BehQzo1r3_f4Uc9jcXRddd9bS5GfQ3jRRYOM0AMbi3w,3792
553
553
  tests/ui/test_export_formats.py,sha256=pCXJCTp9ykEWb2oB-ynGjQDhFaVsOs31ym0stwfWCaQ,909
554
554
  tests/ui/test_filters.py,sha256=Q90wsJffjMVir7wNX8taGf2KZleLtPbXZXHLTkBpzLA,284
555
- tests/ui/test_signposting_ui.py,sha256=Z2g63RgGKWbktIYWBqrYQdwhUZn0Q1d8M3h071wslqY,3164
555
+ tests/ui/test_signposting_ui.py,sha256=KCSjQlMD2VKlwQCyZYDwYjtVNL35x3u-ZC4ceD5y21w,3847
556
556
  tests/ui/test_static.py,sha256=vO3OQAOhrQESJifnQfM1pw7JYz3J874O8BAb7Cc_PPA,868
557
557
  tests/ui/test_stats_ui.py,sha256=LHa_0hjvpYvliSk_jknWy-90CO82jVElUfK5Ua_ZmfA,3554
558
- invenio_app_rdm-13.0.0b2.dev3.dist-info/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
559
- invenio_app_rdm-13.0.0b2.dev3.dist-info/METADATA,sha256=ckaiFKCe_NCNweAQWf9LJhjyFbaJF0kZptUDZLKWo98,10347
560
- invenio_app_rdm-13.0.0b2.dev3.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
561
- invenio_app_rdm-13.0.0b2.dev3.dist-info/entry_points.txt,sha256=r1vTqYNABeWqRMWitzyR9FnBsAy-KYZKZCp95IziyLY,2070
562
- invenio_app_rdm-13.0.0b2.dev3.dist-info/top_level.txt,sha256=NqTqrntInEAci7EXcNBvouXFMqwyjVQhEI0b7izYRBY,22
563
- invenio_app_rdm-13.0.0b2.dev3.dist-info/RECORD,,
558
+ invenio_app_rdm-13.0.0b2.dev5.dist-info/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
559
+ invenio_app_rdm-13.0.0b2.dev5.dist-info/METADATA,sha256=HtLkyVjVqw04UQy-fm3Iv-oleen-GmdrG1lE9_1Ksrk,10970
560
+ invenio_app_rdm-13.0.0b2.dev5.dist-info/WHEEL,sha256=SrDKpSbFN1G94qcmBqS9nyHcDMp9cUS9OC06hC0G3G0,109
561
+ invenio_app_rdm-13.0.0b2.dev5.dist-info/entry_points.txt,sha256=r1vTqYNABeWqRMWitzyR9FnBsAy-KYZKZCp95IziyLY,2070
562
+ invenio_app_rdm-13.0.0b2.dev5.dist-info/top_level.txt,sha256=NqTqrntInEAci7EXcNBvouXFMqwyjVQhEI0b7izYRBY,22
563
+ invenio_app_rdm-13.0.0b2.dev5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -13,9 +13,19 @@ import pytest
13
13
 
14
14
 
15
15
  @pytest.mark.parametrize("http_method", ["head", "get"])
16
+ @pytest.mark.parametrize("level_1_enabled", [True, False])
16
17
  def test_link_in_landing_page_response_headers(
17
- running_app, client, record_with_file, http_method
18
+ running_app, app, client, record_with_file, http_method, level_1_enabled
18
19
  ):
20
+ previous_config = app.config[
21
+ "APP_RDM_RECORD_LANDING_PAGE_FAIR_SIGNPOSTING_LEVEL_1_ENABLED"
22
+ ]
23
+
24
+ if level_1_enabled:
25
+ app.config["APP_RDM_RECORD_LANDING_PAGE_FAIR_SIGNPOSTING_LEVEL_1_ENABLED"] = (
26
+ True
27
+ )
28
+
19
29
  client_http_method = getattr(client, http_method)
20
30
  res = client_http_method(f"/records/{record_with_file.id}")
21
31
 
@@ -29,17 +39,27 @@ def test_link_in_landing_page_response_headers(
29
39
  # - a cite-as since it has no DOI.
30
40
  # - a license.
31
41
 
32
- # There should be at least 10 export formats supported (e.g. "application/dcat+xml", "application/x-bibtex", etc.).
33
- assert sum('; rel="describedby" ;' in header for header in link_headers) >= 10
42
+ # There should be at least one link to a linkset (e.g. "application/linkset" and/or "application/linkset+json")
43
+ assert sum('; rel="linkset" ;' in header for header in link_headers) >= 1
34
44
 
35
- # There should be at least one file in the record.
36
- assert sum('; rel="item" ;' in header for header in link_headers) >= 1
45
+ if level_1_enabled:
46
+ # There should be at least 10 export formats supported (e.g. "application/dcat+xml", "application/x-bibtex", etc.).
47
+ assert sum('; rel="describedby" ;' in header for header in link_headers) >= 10
37
48
 
38
- # There should be at least one description of the type of the record (e.g. "https://schema.org/Photograph").
39
- assert sum('; rel="type"' in header for header in link_headers) >= 1
49
+ # There should be at least one file in the record.
50
+ assert sum('; rel="item" ;' in header for header in link_headers) >= 1
40
51
 
41
- # There should be at least one link to a linkset (e.g. "application/linkset" and/or "application/linkset+json")
42
- assert sum('; rel="linkset" ;' in header for header in link_headers) >= 1
52
+ # There should be at least one description of the type of the record (e.g. "https://schema.org/Photograph").
53
+ assert sum('; rel="type"' in header for header in link_headers) >= 1
54
+ else:
55
+ # The only link headers should be linkset headers.
56
+ assert sum('; rel="linkset" ;' in header for header in link_headers) == len(
57
+ link_headers
58
+ )
59
+
60
+ app.config["APP_RDM_RECORD_LANDING_PAGE_FAIR_SIGNPOSTING_LEVEL_1_ENABLED"] = (
61
+ previous_config
62
+ )
43
63
 
44
64
 
45
65
  @pytest.mark.parametrize("http_method", ["head", "get"])