invenio-app-rdm 14.0.0b1.dev5__py2.py3-none-any.whl → 14.0.0b1.dev7__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 (21) hide show
  1. invenio_app_rdm/__init__.py +1 -1
  2. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests_details.html +3 -1
  3. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html +1 -4
  4. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html +2 -0
  5. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/tombstone.html +6 -1
  6. invenio_app_rdm/records_ui/utils.py +46 -2
  7. invenio_app_rdm/records_ui/views/deposits.py +29 -54
  8. invenio_app_rdm/records_ui/views/filters.py +10 -3
  9. invenio_app_rdm/records_ui/views/records.py +13 -37
  10. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/record-deletion/index.html +3 -1
  11. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion.js +0 -1
  12. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js +4 -1
  13. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageButton.js +4 -27
  14. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js +3 -0
  15. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js +3 -0
  16. {invenio_app_rdm-14.0.0b1.dev5.dist-info → invenio_app_rdm-14.0.0b1.dev7.dist-info}/METADATA +16 -1
  17. {invenio_app_rdm-14.0.0b1.dev5.dist-info → invenio_app_rdm-14.0.0b1.dev7.dist-info}/RECORD +21 -21
  18. {invenio_app_rdm-14.0.0b1.dev5.dist-info → invenio_app_rdm-14.0.0b1.dev7.dist-info}/WHEEL +0 -0
  19. {invenio_app_rdm-14.0.0b1.dev5.dist-info → invenio_app_rdm-14.0.0b1.dev7.dist-info}/entry_points.txt +0 -0
  20. {invenio_app_rdm-14.0.0b1.dev5.dist-info → invenio_app_rdm-14.0.0b1.dev7.dist-info}/licenses/LICENSE +0 -0
  21. {invenio_app_rdm-14.0.0b1.dev5.dist-info → invenio_app_rdm-14.0.0b1.dev7.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__ = "14.0.0b1.dev5"
20
+ __version__ = "14.0.0b1.dev7"
21
21
 
22
22
  __all__ = ("__version__",)
@@ -31,7 +31,9 @@ under the terms of the MIT License; see LICENSE file for more details.
31
31
 
32
32
  <div class="twelve wide column mt-10">
33
33
  <p><strong>{{ _("Reason:") }}</strong> {{ invenio_request["payload"]["reason_label"] }}</p>
34
- <p><strong>{{ _("Justification:") }}</strong> {{ invenio_request["payload"]["comment"] }}</p>
34
+ {%- if invenio_request["payload"]["comment"] %}
35
+ <p><strong>{{ _("Justification:") }}</strong> {{ invenio_request["payload"]["comment"] }}</p>
36
+ {%- endif %}
35
37
  </div>
36
38
 
37
39
  <div class="ui divider"></div>
@@ -1,5 +1,5 @@
1
1
  {#
2
- Copyright (C) 2020-2024 CERN.
2
+ Copyright (C) 2020-2025 CERN.
3
3
  Copyright (C) 2020-2021 Northwestern University.
4
4
  Copyright (C) 2021-2023 TU Wien.
5
5
  Copyright (C) 2021 Graz University of Technology.
@@ -203,9 +203,6 @@
203
203
  <div id="recordManagementMobile"
204
204
  role="dialog"
205
205
  class="ui flowing popup transition hidden"
206
- data-record='{{ record_ui | tojson }}'
207
- data-permissions='{{ permissions | tojson }}'
208
- data-is-draft="{{ is_draft | tojson }}"
209
206
  {% if config.RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE %}
210
207
  {% include config.RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE %}
211
208
  {% endif %}
@@ -20,8 +20,10 @@ it under the terms of the MIT License; see LICENSE file for more details.
20
20
  data-groups-enabled='{{ config.USERS_RESOURCES_GROUPS_ENABLED | tojson }}'
21
21
  {% if record_deletion %}
22
22
  data-record-deletion='{{ record_deletion | tojson }}'
23
+ data-record-deletion-options='{{ record_deletion_options | tojson }}'
23
24
  {% else %}
24
25
  data-record-deletion='{{ {} | tojson }}'
26
+ data-record-deletion-options='{{ [] | tojson }}'
25
27
  {% endif %}
26
28
  {% if config.RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE %}
27
29
  {% include config.RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE %}
@@ -1,5 +1,5 @@
1
1
  {#
2
- Copyright (C) 2021 CERN.
2
+ Copyright (C) 2021-2025 CERN.
3
3
  Copyright (C) 2023 TU Wien.
4
4
 
5
5
  Invenio App RDM is free software; you can redistribute it and/or modify it
@@ -37,6 +37,11 @@
37
37
  <p>
38
38
  <strong>{{ _("Removed by:") }}</strong> {{ record.ui.tombstone.removed_by }}
39
39
  </p>
40
+ {%- if record.ui.tombstone.deletion_policy %}
41
+ <p>
42
+ <strong>{{ _("Deletion Policy:") }}</strong> {{ record.ui.tombstone.deletion_policy }}
43
+ </p>
44
+ {%- endif %}
40
45
  {%- if record.ui.tombstone.note %}
41
46
  <p>
42
47
  <strong>{{ _("Removal note:") }}</strong> {{ record.ui.tombstone.note }}
@@ -13,7 +13,9 @@ from itertools import chain
13
13
 
14
14
  from flask import current_app
15
15
  from invenio_access.permissions import system_identity
16
+ from invenio_rdm_records.records.api import RDMRecord
16
17
  from invenio_rdm_records.requests.record_deletion import RecordDeletion
18
+ from invenio_rdm_records.services.config import RDMRecordDeletionPolicy
17
19
  from invenio_records.dictutils import dict_set
18
20
  from invenio_records.errors import MissingModelError
19
21
  from invenio_records_files.api import FileObject
@@ -95,7 +97,7 @@ def dump_external_resource(
95
97
 
96
98
 
97
99
  def get_existing_deletion_request(record_id):
98
- """Return existing open deletion requests for the record."""
100
+ """Return the self HTML link of the existing open deletion request for the record."""
99
101
  existing_requests = current_requests_service.search(
100
102
  system_identity,
101
103
  extra_filter=dsl.Q(
@@ -108,4 +110,46 @@ def get_existing_deletion_request(record_id):
108
110
  ),
109
111
  )
110
112
  if existing_requests.total > 0:
111
- return list(existing_requests)[0]
113
+ return list(existing_requests)[0]["links"]["self_html"]
114
+
115
+
116
+ def evaluate_record_deletion(record: RDMRecord, identity):
117
+ """Evaluate whether a given record can be deleted by an identity."""
118
+ rec_del = RDMRecordDeletionPolicy().evaluate(identity, record)
119
+
120
+ immediate, request = rec_del["immediate_deletion"], rec_del["request_deletion"]
121
+ rd_enabled = immediate.enabled or request.enabled
122
+ rd_valid_user = (
123
+ rec_del["immediate_deletion"].valid_user
124
+ or rec_del["request_deletion"].valid_user
125
+ )
126
+ rd_allowed = immediate.allowed or request.allowed
127
+
128
+ if rd_allowed:
129
+ record_deletion = {
130
+ "enabled": rd_enabled,
131
+ "valid_user": rd_valid_user,
132
+ "allowed": rd_allowed,
133
+ "recordDeletion": rec_del,
134
+ "checklist": (
135
+ current_app.config["RDM_IMMEDIATE_RECORD_DELETION_CHECKLIST"]
136
+ if immediate.allowed
137
+ else current_app.config["RDM_REQUEST_RECORD_DELETION_CHECKLIST"]
138
+ ),
139
+ "context": {
140
+ "files": record.files.count,
141
+ "internalDoi": record.pids.get("doi", {}).get("provider") != "external",
142
+ },
143
+ }
144
+ else:
145
+ record_deletion = {
146
+ "enabled": rd_enabled,
147
+ "valid_user": rd_valid_user,
148
+ "allowed": rd_allowed,
149
+ }
150
+ record_deletion["existing_request"] = (
151
+ # We show existing requests to valid users (even if they are not allowed to delete a record anymore).
152
+ get_existing_deletion_request(record.pid.pid_value) if rd_valid_user else None
153
+ )
154
+
155
+ return record_deletion
@@ -26,7 +26,6 @@ from invenio_i18n.ext import current_i18n
26
26
  from invenio_rdm_records.proxies import current_rdm_records
27
27
  from invenio_rdm_records.records.api import get_files_quota
28
28
  from invenio_rdm_records.resources.serializers import UIJSONSerializer
29
- from invenio_rdm_records.services.config import RDMRecordDeletionPolicy
30
29
  from invenio_rdm_records.services.schemas import RDMRecordSchema
31
30
  from invenio_rdm_records.services.schemas.utils import dump_empty
32
31
  from invenio_rdm_records.views import file_transfer_type
@@ -38,7 +37,7 @@ from invenio_vocabularies.records.models import VocabularyScheme
38
37
  from marshmallow_utils.fields.babel import gettext_from_dict
39
38
  from sqlalchemy.orm import load_only
40
39
 
41
- from ..utils import get_existing_deletion_request, set_default_value
40
+ from ..utils import evaluate_record_deletion, set_default_value
42
41
  from .decorators import (
43
42
  no_cache_response,
44
43
  pass_draft,
@@ -289,30 +288,39 @@ class VocabulariesOptions:
289
288
  """Dump linkable resource type vocabulary."""
290
289
  return self._resource_types(dsl.Q("term", tags="linkable"))
291
290
 
292
- def identifier_schemes(self):
293
- """Dump identifiers scheme (fake) vocabulary.
294
-
295
- "Fake" because identifiers scheme is not a vocabulary.
296
- """
291
+ def _dump_identifier_schemes(self, config_key):
292
+ """Dump identifier schemes from a given config key."""
297
293
  return [
298
294
  {"text": get_scheme_label(scheme), "value": scheme}
299
- for scheme in current_app.config.get("RDM_RECORDS_IDENTIFIERS_SCHEMES", {})
295
+ for scheme in current_app.config.get(config_key, {})
300
296
  ]
301
297
 
302
- def identifiers(self):
303
- """Dump related identifiers vocabulary."""
304
- self._vocabularies["identifiers"] = {
298
+ def _dump_identifiers(self, vocab_key, config_key):
299
+ """Dump identifiers vocabulary for a given vocab/config key pair."""
300
+ self._vocabularies[vocab_key] = {
305
301
  "relations": self.relation_types(),
306
302
  "resource_type": self.linkable_resource_types(),
307
- "scheme": self.identifier_schemes(),
303
+ "scheme": self._dump_identifier_schemes(config_key),
308
304
  }
309
305
 
310
- def removal_reasons(self):
311
- """Dump removal reasons vocabulary."""
312
- self._vocabularies["removal_reasons"] = self._dump_vocabulary_w_basic_fields(
313
- "removalreasons", extra_filter=dsl.Q("term", tags="deletion-request")
306
+ def identifiers(self):
307
+ """Dump identifiers vocabulary."""
308
+ self._dump_identifiers("identifiers", "RDM_RECORDS_IDENTIFIERS_SCHEMES")
309
+
310
+ def related_identifiers(self):
311
+ """Dump related identifiers vocabulary."""
312
+ self._dump_identifiers(
313
+ "related_identifiers", "RDM_RECORDS_RELATED_IDENTIFIERS_SCHEMES"
314
+ )
315
+
316
+ def deletion_request_removal_reasons(self):
317
+ """Dump deletion request removal reasons vocabulary."""
318
+ self._vocabularies["deletion_request_removal_reasons"] = (
319
+ self._dump_vocabulary_w_basic_fields(
320
+ "removalreasons", extra_filter=dsl.Q("term", tags="deletion-request")
321
+ )
314
322
  )
315
- return self._vocabularies["removal_reasons"]
323
+ return self._vocabularies["deletion_request_removal_reasons"]
316
324
 
317
325
  def dump(self):
318
326
  """Dump into dict."""
@@ -325,7 +333,8 @@ class VocabulariesOptions:
325
333
  self.contributor_roles()
326
334
  self.subjects()
327
335
  self.identifiers()
328
- self.removal_reasons()
336
+ self.related_identifiers()
337
+ self.deletion_request_removal_reasons()
329
338
  # We removed
330
339
  # vocabularies["relation_type"] = _dump_relation_types_vocabulary()
331
340
  return self._vocabularies
@@ -542,42 +551,8 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
542
551
  )
543
552
  published_record = ui_serializer.dump_obj(published_record_result.to_dict())
544
553
 
545
- rec_del = RDMRecordDeletionPolicy().evaluate(
546
- g.identity, published_record_result._record
547
- )
548
- immediate, request = rec_del["immediate_deletion"], rec_del["request_deletion"]
549
- rd_enabled = immediate.enabled or request.enabled
550
- rd_valid_user = (
551
- rec_del["immediate_deletion"].valid_user
552
- or rec_del["request_deletion"].valid_user
553
- )
554
- rd_allowed = immediate.allowed or request.allowed
555
- existing_request = get_existing_deletion_request(record.get("id"))
556
-
557
- if rd_allowed:
558
- record_deletion = {
559
- "enabled": rd_enabled,
560
- "valid_user": rd_valid_user,
561
- "allowed": rd_allowed,
562
- "recordDeletion": rec_del,
563
- "checklist": (
564
- current_app.config["RDM_IMMEDIATE_RECORD_DELETION_CHECKLIST"]
565
- if immediate.allowed
566
- else current_app.config["RDM_REQUEST_RECORD_DELETION_CHECKLIST"]
567
- ),
568
- "context": {
569
- "files": draft._record.files.count,
570
- "internalDoi": draft._record.pids["doi"]["provider"] != "external",
571
- },
572
- }
573
- else:
574
- record_deletion = {
575
- "enabled": rd_enabled,
576
- "valid_user": rd_valid_user,
577
- "allowed": rd_allowed,
578
- }
579
- record_deletion["existing_request"] = (
580
- existing_request["links"]["self_html"] if existing_request else None
554
+ record_deletion = evaluate_record_deletion(
555
+ published_record_result._record, g.identity
581
556
  )
582
557
  else:
583
558
  record_deletion = {}
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2019-2024 CERN.
3
+ # Copyright (C) 2019-2025 CERN.
4
4
  # Copyright (C) 2019-2020 Northwestern University.
5
5
  # Copyright (C) 2021 TU Wien.
6
6
  # Copyright (C) 2024 Graz University of Technology.
@@ -123,9 +123,16 @@ def order_entries(files):
123
123
 
124
124
  def get_scheme_label(scheme):
125
125
  """Convert backend scheme to frontend label."""
126
- scheme_to_label = current_app.config.get("RDM_RECORDS_IDENTIFIERS_SCHEMES", {})
126
+ configs = [
127
+ current_app.config.get("RDM_RECORDS_IDENTIFIERS_SCHEMES", {}),
128
+ current_app.config.get("RDM_RECORDS_RELATED_IDENTIFIERS_SCHEMES", {}),
129
+ ]
130
+
131
+ for cfg in configs:
132
+ if scheme in cfg:
133
+ return cfg[scheme].get("label", scheme)
127
134
 
128
- return scheme_to_label.get(scheme, {}).get("label", scheme)
135
+ return scheme
129
136
 
130
137
 
131
138
  def localize_number(value):
@@ -29,7 +29,6 @@ from invenio_rdm_records.records.systemfields.access.access_settings import (
29
29
  AccessSettings,
30
30
  )
31
31
  from invenio_rdm_records.resources.serializers import UIJSONSerializer
32
- from invenio_rdm_records.services.config import RDMRecordDeletionPolicy
33
32
  from invenio_stats.proxies import current_stats
34
33
  from invenio_users_resources.proxies import current_user_resources
35
34
  from marshmallow import ValidationError
@@ -38,7 +37,7 @@ from invenio_app_rdm.records_ui.previewer.iiif_simple import (
38
37
  previewable_extensions as image_extensions,
39
38
  )
40
39
 
41
- from ..utils import get_existing_deletion_request, get_external_resources
40
+ from ..utils import evaluate_record_deletion, get_external_resources
42
41
  from .decorators import (
43
42
  add_signposting_content_resources,
44
43
  add_signposting_landing_page,
@@ -53,7 +52,11 @@ from .decorators import (
53
52
  pass_record_media_files,
54
53
  pass_record_or_draft,
55
54
  )
56
- from .deposits import get_user_communities_memberships, load_custom_fields
55
+ from .deposits import (
56
+ VocabulariesOptions,
57
+ get_user_communities_memberships,
58
+ load_custom_fields,
59
+ )
57
60
 
58
61
 
59
62
  def get_record_community(record):
@@ -158,41 +161,13 @@ def record_detail(
158
161
 
159
162
  record_ui = UIJSONSerializer().dump_obj(record.to_dict())
160
163
 
161
- rec_del = RDMRecordDeletionPolicy().evaluate(g.identity, record._record)
164
+ record_deletion = evaluate_record_deletion(record._record, g.identity)
162
165
 
163
- immediate, request = rec_del["immediate_deletion"], rec_del["request_deletion"]
164
- rd_enabled = immediate.enabled or request.enabled
165
- rd_valid_user = (
166
- rec_del["immediate_deletion"].valid_user
167
- or rec_del["request_deletion"].valid_user
168
- )
169
- rd_allowed = immediate.allowed or request.allowed
170
- existing_request = get_existing_deletion_request(record.id)
171
-
172
- if rd_allowed:
173
- record_deletion = {
174
- "enabled": rd_enabled,
175
- "valid_user": rd_valid_user,
176
- "allowed": rd_allowed,
177
- "recordDeletion": rec_del,
178
- "checklist": (
179
- current_app.config["RDM_IMMEDIATE_RECORD_DELETION_CHECKLIST"]
180
- if immediate.allowed
181
- else current_app.config["RDM_REQUEST_RECORD_DELETION_CHECKLIST"]
182
- ),
183
- "context": {
184
- "files": record._record.files.count,
185
- "internalDoi": record._record.pids["doi"]["provider"] != "external",
186
- },
187
- }
188
- else:
189
- record_deletion = {
190
- "enabled": rd_enabled,
191
- "valid_user": rd_valid_user,
192
- "allowed": rd_allowed,
193
- }
194
- record_deletion["existing_request"] = (
195
- existing_request["links"]["self_html"] if existing_request else None
166
+ # The deletion options are only needed if the user is allowed to delete the given record.
167
+ record_deletion_options = (
168
+ VocabulariesOptions().deletion_request_removal_reasons()
169
+ if record_deletion["allowed"]
170
+ else []
196
171
  )
197
172
 
198
173
  is_draft = record_ui["is_draft"]
@@ -295,6 +270,7 @@ def record_detail(
295
270
  external_resources=get_external_resources(record),
296
271
  user_avatar=avatar,
297
272
  record_deletion=record_deletion,
273
+ record_deletion_options=record_deletion_options,
298
274
  )
299
275
 
300
276
 
@@ -25,7 +25,9 @@
25
25
 
26
26
  <div class="twelve wide column mt-10">
27
27
  <p><strong>{{ _("Reason:") }}</strong> {{ invenio_request["payload"]["reason_label"] }}</p>
28
- <p><strong>{{ _("Justification:") }}</strong> {{ invenio_request["payload"]["comment"] }}</p>
28
+ {%- if invenio_request["payload"]["comment"] %}
29
+ <p><strong>{{ _("Justification:") }}</strong> {{ invenio_request["payload"]["comment"] }}</p>
30
+ {%- endif %}
29
31
  </div>
30
32
  {%- endblock request_header %}
31
33
 
@@ -33,7 +33,6 @@ export const RecordDeletion = ({
33
33
  fluid
34
34
  as="a"
35
35
  href={recordDeletion.existing_request}
36
- disabled={disabled}
37
36
  className="basic"
38
37
  color="red"
39
38
  aria-haspopup="dialog"
@@ -774,7 +774,10 @@ export class RDMDepositForm extends Component {
774
774
  record={record}
775
775
  permissions={permissions}
776
776
  recordDeletion={recordDeletion}
777
- options={this.vocabularies.metadata.removal_reasons}
777
+ options={
778
+ this.vocabularies.metadata
779
+ .deletion_request_removal_reasons
780
+ }
778
781
  disabled={!recordDeletion["allowed"]}
779
782
  />
780
783
  </Grid.Column>
@@ -4,7 +4,7 @@
4
4
  // Invenio RDM Records is free software; you can redistribute it and/or modify it
5
5
  // under the terms of the MIT License; see LICENSE file for more details.
6
6
 
7
- import React, { useEffect, useState } from "react";
7
+ import React from "react";
8
8
  import { Dropdown, Modal, Button, Message } from "semantic-ui-react";
9
9
  import { i18next } from "@translations/invenio_app_rdm/i18next";
10
10
  import PropTypes from "prop-types";
@@ -12,37 +12,13 @@ import { http } from "react-invenio-forms";
12
12
  import { APIRoutes } from "../administration/users/api/routes";
13
13
  import { RecordDeletion } from "../components/RecordDeletion";
14
14
 
15
- const fetchOptions = async () => {
16
- const url = "/api/vocabularies/removalreasons?q=tags:deletion-request";
17
- const req = http.get(url);
18
- try {
19
- const response = await req;
20
- const data = response.data.hits.hits;
21
-
22
- const options = data.map((x) => {
23
- return {
24
- text: x["title_l10n"],
25
- value: x["id"],
26
- };
27
- });
28
- return options;
29
- } catch (e) {
30
- console.error(e);
31
- }
32
- };
33
-
34
15
  export const ManageButton = ({
35
16
  record,
36
17
  recordOwnerID,
37
18
  permissions,
38
19
  recordDeletion,
20
+ recordDeletionOptions,
39
21
  }) => {
40
- const [options, setOptions] = useState([]);
41
-
42
- useEffect(() => {
43
- fetchOptions().then(setOptions);
44
- }, []);
45
-
46
22
  return (
47
23
  <Dropdown
48
24
  fluid
@@ -61,7 +37,7 @@ export const ManageButton = ({
61
37
  record={record}
62
38
  permissions={permissions}
63
39
  recordDeletion={recordDeletion}
64
- options={options}
40
+ options={recordDeletionOptions}
65
41
  disabled={!recordDeletion["allowed"]}
66
42
  />
67
43
  </Dropdown.Item>
@@ -99,6 +75,7 @@ ManageButton.propTypes = {
99
75
  recordOwnerID: PropTypes.string.isRequired,
100
76
  permissions: PropTypes.object.isRequired,
101
77
  recordDeletion: PropTypes.object.isRequired,
78
+ recordDeletionOptions: PropTypes.object.isRequired,
102
79
  };
103
80
 
104
81
  const BlockUserItem = ({ recordOwnerID }) => {
@@ -35,6 +35,7 @@ export class RecordManagement extends Component {
35
35
  recordOwnerID,
36
36
  groupsEnabled,
37
37
  recordDeletion,
38
+ recordDeletionOptions,
38
39
  } = this.props;
39
40
  const { error } = this.state;
40
41
  const { id: recid } = record;
@@ -52,6 +53,7 @@ export class RecordManagement extends Component {
52
53
  recordOwnerID={recordOwnerID}
53
54
  permissions={permissions}
54
55
  recordDeletion={recordDeletion}
56
+ recordDeletionOptions={recordDeletionOptions}
55
57
  />
56
58
  </Grid.Column>
57
59
  )}
@@ -127,4 +129,5 @@ RecordManagement.propTypes = {
127
129
  currentUserId: PropTypes.string.isRequired,
128
130
  recordOwnerID: PropTypes.string.isRequired,
129
131
  recordDeletion: PropTypes.object.isRequired,
132
+ recordDeletionOptions: PropTypes.object.isRequired,
130
133
  };
@@ -40,6 +40,9 @@ function renderRecordManagement(element) {
40
40
  recordOwnerID={record.parent.access.owned_by.user}
41
41
  groupsEnabled={JSON.parse(recordManagementAppDiv.dataset.groupsEnabled)}
42
42
  recordDeletion={JSON.parse(recordManagementAppDiv.dataset.recordDeletion)}
43
+ recordDeletionOptions={JSON.parse(
44
+ recordManagementAppDiv.dataset.recordDeletionOptions
45
+ )}
43
46
  />
44
47
  </OverridableContext.Provider>,
45
48
  element
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invenio-app-rdm
3
- Version: 14.0.0b1.dev5
3
+ Version: 14.0.0b1.dev7
4
4
  Summary: Invenio Research Data Management.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-app-rdm
6
6
  Author: CERN
@@ -101,6 +101,21 @@ https://inveniordm.docs.cern.ch
101
101
  Changes
102
102
  =======
103
103
 
104
+ Version v14.0.0b1.dev7 (released 2025-11-14)
105
+
106
+ - fix(views): pass API record to evaluate record deletion
107
+
108
+ Version v14.0.0b1.dev6 (released 2025-11-13)
109
+
110
+ - tombstone: add deletion policy
111
+ - fix(deletion-request): never disable the existing deletion request link
112
+ - fix(deletion-request): fetch existing request only for valid users
113
+ - fix(deletion-request): removal reasons in landing page data attribute
114
+ - vocab: add deletion_request prefix to removal_reasons vocabulary
115
+ - ui: added related identifiers to vocabulary
116
+ - views: remove unused data attributes from recordManagementMobile
117
+ - requests: ui: only show justification if present
118
+
104
119
  Version v14.0.0b1.dev5 (released 2025-10-14)
105
120
 
106
121
  - fix(community-submission): add missing var in side bar template
@@ -1,4 +1,4 @@
1
- invenio_app_rdm/__init__.py,sha256=drRr2Ud4Kk45t5ZZDgxg7Bu_I8rsDI9Kq3QU_e_q6is,704
1
+ invenio_app_rdm/__init__.py,sha256=IhX4oovOmTSKNBhH2dME17O5Q0qQttX328Zqe8ZC2zY,704
2
2
  invenio_app_rdm/cli.py,sha256=G6QqNU2W6n6ICtTMnpeKFXIsdorncDmVXwwwsGH5F2k,2746
3
3
  invenio_app_rdm/config.py,sha256=kxAliLtzXLRysO8qxWxoSt1FhOjuDfzUi8xr40BBIYE,53632
4
4
  invenio_app_rdm/ext.py,sha256=K7syn5CU5If7yOclFeNOCZX_u5q6VB7NJEQVm41mlng,5286
@@ -16,7 +16,7 @@ invenio_app_rdm/administration/records/records.py,sha256=6nVyDwYLdipIDSnlXMRe6Ju
16
16
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/audit_logs.html,sha256=kLP3lfZiwLB8N-78_xINymnD8TIjGMzeJIO1a1zO130,346
17
17
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/domains_search.html,sha256=NP8HPfOQPIR9psNDMFRXJH8fjok2AbXCentD_3Q1wWw,338
18
18
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests.html,sha256=kvM8b3m8p_yVJ0i1aCuNNj1-9KHJk4EsEI-Zxd8B2zo,340
19
- invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests_details.html,sha256=0eTICmdnDZEW6JeftRkiUV2N3v-Dha5RMh804c0DeQs,3102
19
+ invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests_details.html,sha256=PMUVAHU3Pqqlfz9YepNJXPn-6IGRmUfirkWeybKCplA,3185
20
20
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/user_moderation.html,sha256=koXd8lV_KBgAl1Wll7aM3xR0NgYcOl2PiFqD2Xkcp2w,348
21
21
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/user_moderation_details.html,sha256=g6YZh9yWqDfzd5kMgIrO4c5k4iKa61y04RsuT_ZbMJI,350
22
22
  invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/users_search.html,sha256=BtuBmQ3RqRZ-bzYWRsToC3m7ULd-T2vMCLSwrTLwWF8,337
@@ -47,17 +47,17 @@ invenio_app_rdm/fixtures/pages/.gitkeep,sha256=1HVs32jZTGcMkk-dV9RHGPZm5FdydwFIZ
47
47
  invenio_app_rdm/records_ui/__init__.py,sha256=c4_HH3R7fTOp7AnNQSF4P9h_mwOvL0SE9tkpo6SBnT8,327
48
48
  invenio_app_rdm/records_ui/searchapp.py,sha256=QD5fTdimVUC5K4ERVBjgXHZdbC3ZkgcR8LSIxFTPBQY,2697
49
49
  invenio_app_rdm/records_ui/sitemap.py,sha256=erWpwi8lx17ATicBo3dTwMiEEwHTilL8xTAkNCC3J4U,1619
50
- invenio_app_rdm/records_ui/utils.py,sha256=04Q_mI3SvfuNlmSziIJldr94UI2EKXZIdHAm4qHrEN0,3469
50
+ invenio_app_rdm/records_ui/utils.py,sha256=7mA150g4TXpiTn3zQE2JWaGUtatsQeNu3pSSE3EW4os,5217
51
51
  invenio_app_rdm/records_ui/previewer/__init__.py,sha256=T32i_ssGKONDpNB3gECpn20ubHvGYYVrNuIgCADioOM,267
52
52
  invenio_app_rdm/records_ui/previewer/iiif_simple.py,sha256=lGxB3g0hNVJDWnq5jV_KrKPwC-LR1C51DMjas1-UpBM,1589
53
53
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html,sha256=jdtme926G943raYhGa-evTK9NfWdyDOWEoONLtb-o2Q,2791
54
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html,sha256=RXUfOAKKEcljINo1b6irPgHqmnNDt0BNWpTk6lTs_nY,20865
54
+ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html,sha256=_Wvz_sgOckoj--cQRPWUypVIwrwnxMLxKangM-VyXW8,20671
55
55
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/draft_not_found.html,sha256=_FPflgqVZ556Xw349mHPSFb0FOhxYkIHfmUUTX53_LU,624
56
56
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/export.html,sha256=2h-FGJvNKS9ASZ0mErL2vz5jXQYiLL8u8rTO2_D3FVQ,1166
57
57
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/iiif_preview.html,sha256=RningdsVBXsJ8qnQjzurf0Ty8R5Tq08eS31s53c3DNE,444
58
58
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/restricted_with_doi_tombstone.html,sha256=d2_LrLbWG_vQuR-Gz8P2nrgGuBZONk36kGBMT6iW3uE,987
59
59
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/search.html,sha256=MdDMzWNIqvZRH-7Blvb9lBdJCA-TK0MXdPpyVWjjBo8,606
60
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/tombstone.html,sha256=oXt0IHIF_AL3b0zLfBgl_meMBzDupNBwFaRGD2EIofY,1902
60
+ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/tombstone.html,sha256=QyFJ1q9NsECLpktZxPtR4X62uJ6X8-gymq0g2CKsFwI,2094
61
61
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/access-form.html,sha256=rLkoNmouAMV8S6fAU3_PtGuqDjFTACniyiosGAKjcN0,2317
62
62
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/citation.html,sha256=QBbRNCBBdE7JJirLrIdCWlhcmR37qh_2QXg7AnTtwdw,576
63
63
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/contact.html,sha256=czuC-Ec5zJaKzFOaqhz7JqhWiCS3U3NKaQmPw9-rzks,403
@@ -77,7 +77,7 @@ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details
77
77
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/keywords_subjects.html,sha256=8FTUt6MVRvEsj89qDxP6eK2feyv2UI0fgICoT99cUIU,717
78
78
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/licenses.html,sha256=8VfF1BJCvjc3MPPGDg5cm2M6_zbkz2HybJuRU5a2gXc,3172
79
79
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/locations.html,sha256=6o5nQyXP0V158KMBsOpKMeuLGcw_lAhnZIyGpaogbMk,721
80
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html,sha256=BPAaDG_OhCkKaIUSqyBfjMFK8gMnweHzZtyNdwI0T4k,1516
80
+ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html,sha256=t7Ux3nZpaMMQkGfT7IWZKXzKyJVzs_vBTv1ctGFz7TA,1659
81
81
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/metrics.html,sha256=6aS28YC8U7VDWn2vI2ckYtzm9wVWacGZ4a7Pu5D3BBI,526
82
82
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/technical_metadata.html,sha256=ptS8h6orgDhFFGXeZBCNBltELy_g9fUtS1bMTzieCPk,676
83
83
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/versions.html,sha256=fIa8R0blN2rWkrP0K43qvSTye4Gt6-5yo3HN5FLdLTA,935
@@ -90,9 +90,9 @@ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/
90
90
  invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/version.html,sha256=eA8-n81XUezkwPXvcG5v2sgLPQNTgr7hB36-_Gr-tVI,758
91
91
  invenio_app_rdm/records_ui/views/__init__.py,sha256=9DaDls04IQv7fYttDjLofIWGsRRjk-FwUYnIfxV3OWk,5840
92
92
  invenio_app_rdm/records_ui/views/decorators.py,sha256=-GdyPh2qIxV_wacAv5uChNx-HW2LiKjHQiRujiu42B4,16510
93
- invenio_app_rdm/records_ui/views/deposits.py,sha256=qr92epXPVORk6z8TpB_KT7CaRQQNtmVRGmDDxKCe9U4,25397
94
- invenio_app_rdm/records_ui/views/filters.py,sha256=zKuqjM_Yb9MmBmloStjasASYCwVG7mUe0eolI2MtPXg,6998
95
- invenio_app_rdm/records_ui/views/records.py,sha256=vLuenTEoTV9ZB9suUGI4ct1ml2iModZqhdlVfK5dIRc,17811
93
+ invenio_app_rdm/records_ui/views/deposits.py,sha256=Ds9cck40PQVth9Xz-tA-G9UNl4EVP_JU_DBOt3RaCMo,24393
94
+ invenio_app_rdm/records_ui/views/filters.py,sha256=hyQ1gsYi3ux5vH4-K85uTk0Se-91BQ5B1uXAI7rcajw,7143
95
+ invenio_app_rdm/records_ui/views/records.py,sha256=H1lZaKzr1QdX8QKvlm_-p4lPXMy6nQqHcB4NIlSYyAQ,16785
96
96
  invenio_app_rdm/redirector/__init__.py,sha256=AYCTGmfbmkHW3YJXMqXlWBXcBrUsta-QmL9ULX2bjwA,243
97
97
  invenio_app_rdm/redirector/resource.py,sha256=XuH6ZK0HVE5LdXoorlm8aI3deizvnZ5gFa9d1ihYosk,3312
98
98
  invenio_app_rdm/redirector/views.py,sha256=CTJ3EGEFKfc0lFwNb9pwH7MbMLiqaWnF8LA3xGIwahc,563
@@ -103,7 +103,7 @@ invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-inv
103
103
  invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-submission/index.html,sha256=nJIHevyCGQua_H67IV0mnFiQjNjcQYsZTieQgvP48JY,3452
104
104
  invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/guest-access-request/index.html,sha256=RXtoMrLFvEGHuy2YgoyCkpjEJmUVehFbmXvX1_7qGtY,1978
105
105
  invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/macros/request_header.html,sha256=Iado6BmcFFswmvQ9IrdtgSyAzJr5AIT2BP2IDg-B-8U,2695
106
- invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/record-deletion/index.html,sha256=av7g0h7A1V7KBpdP9ogkHIjhBhZzhRTJwv9fCEsOJYo,2745
106
+ invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/record-deletion/index.html,sha256=JzLATsMOLpHMfxlXeBPXgC2VMydCYa9TDjPHAuLPbU4,2820
107
107
  invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/subcommunity/index.html,sha256=eEYjTnVL-L30Dm_1LvSNKSx3QEHRoxMGHLupvu_1nMM,1453
108
108
  invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/subcommunity-invitation/index.html,sha256=347Saf8Fv78uevCbK2nFiOtNFUT0QyZSZS7lgoNzHdQ,1448
109
109
  invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/user-access-request/index.html,sha256=ltSP9sYPnpmCKMDYpZYU25Wxr3Dfqe2RNDxm6bVjX_I,1779
@@ -177,11 +177,11 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CompactSt
177
177
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CopyButton.js,sha256=uBcEXzGJYZ7dPIdQBxPqxLvwP6Z5QVg1x-YRncRDW3k,3550
178
178
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/DisplayPartOfCommunities.js,sha256=bSmhuwSWk4CW80mqa4ZZbjfa-_NsiJ1IxQ9veDy6sAM,2751
179
179
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/DisplayVerifiedCommunity.js,sha256=m3rT8jJ3440ZX22zZog8bHatWltYXwvmw_tu6tJUM9k,1506
180
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion.js,sha256=0rAS8mGVKNqJtBdWoGa1G1FMnY3QaKAs1Gd--91JqIA,2297
180
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion.js,sha256=9ywSA48X-WZlpZ1krtAwzOYRodXYTLt4UJhpqxduF90,2261
181
181
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordsResultsListItem.js,sha256=RTSQBlGQY7ww7fVGHDvDfWQNyJ07mnEoyboTGIcCgD4,6694
182
182
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionModal.js,sha256=kXME7Lr51ygS6PdA355Q2gh7bVcHLOBBW1ZClI_R4_E,12131
183
183
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionRadioGroup.js,sha256=qMFdPQkVQQsaS0P9KdPyFcuunZmGlEALjfABPueuoVU,1227
184
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js,sha256=rAgh5BvzsBBCUJPZWYfOAHm628Irg-CnD9_qlPE7yZM,34472
184
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js,sha256=zpyvVwcOUTDNW_BO0z_gKZOHJfDE7Lf3_4C2rjRknIo,34606
185
185
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/ShareDraftButton.js,sha256=ICMV4Ixe-nTe6q7COZ0oyAQf2nVp2cez_-iUZobwUD0,1998
186
186
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/config.js,sha256=rd2wqiwmYOkh4kWe8AiGWJar2kA8R8TkGMnX5XZvihs,1473
187
187
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js,sha256=r9MvsucIXEyW7Bbb8vuEP2ZTRMzA-GJCn7GEpvqO0tY,1710
@@ -192,13 +192,13 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/Communi
192
192
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagementDropdown.js,sha256=qocsinvtbWEqAi8kgqNqx7c0X-_evRmCz2bPTaMQlcI,5953
193
193
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/EditButton.js,sha256=WJ5lNpbPcd_Kymn_TYklSTfkCJRPhpFeT6cWcR48mSQ,1452
194
194
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ExportDropdown.js,sha256=fDqs5sel6Zo1oPkJT1XbR3dtHXvvgVuDhe_sg_-D690,1969
195
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageButton.js,sha256=Lx9zHYxuqNKLPdOsPM019HgO_hqo2p3auqSpaPyRveg,4287
195
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageButton.js,sha256=OGxcPvhFrm2vv_hzDP7ONdJtezCLjnz13Wo4BWC0Sfk,3828
196
196
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCitationField.js,sha256=XYfXsQejNeC1R0spndn0qDrqvz6w3bj5UlPEIgT4U24,4757
197
197
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesList.js,sha256=wORVCOjlyX2mIsDU9J0MwWFE4Zw9CCL5inWpV7m8lsM,4004
198
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js,sha256=N4_pyfqVY698DmVv2oJMMgzvgNvVNm4ptoSSONfAR64,4106
198
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js,sha256=62TbXu96jXUSRxdXOnhu6eSl_tpYTydni4WtdBBQOe8,4249
199
199
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordVersionsList.js,sha256=ZJaD4fW2z00tcektXVz0eLXu6oGLLW-NUjV86neuDjM,7141
200
200
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/access.js,sha256=FVcpKl22zMi1GssbLZAj1pO98c6Em_wg_yBIdfBJor0,938
201
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js,sha256=2gwIJGItno7I0U_avhYQ6wNzMZ9w5zqWnWam_EvX50I,5060
201
+ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js,sha256=ETWFzdM61Uy94bUwT2uzjM11aIk6Lt2MOzxmPswrjoA,5177
202
202
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/theme.js,sha256=TieqbbmJrxVKlkD5Kvsw6F-sbpucxSV9dv30Y6pXKjI,3144
203
203
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageDefaultBrandingAction/ManageDefaultBrandingAction.js,sha256=qNWpe3KyZ8NDHKocG6XKJzb6w3fIQk3muWN126pUo9w,3529
204
204
  invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunitiesModal.js,sha256=G9OwLxKqX73w_7D1k7BHOzMeLmokowMfJQg5Km7J8RA,1797
@@ -495,9 +495,9 @@ invenio_app_rdm/users_ui/views/__init__.py,sha256=SMdY2NJj9GICfr3Xuok7qdNYVtA2bJ
495
495
  invenio_app_rdm/users_ui/views/dashboard.py,sha256=iUn2PrODAwb8ugmMosJKAjPhUzjCiWiAWoXQr9RUFuc,1793
496
496
  invenio_app_rdm/users_ui/views/ui.py,sha256=W_eXM8dLVIrNHQB2UEh37C9BYoHauft6RyvcDNFHovA,1742
497
497
  invenio_app_rdm/utils/files.py,sha256=CruDyO2gDVadSlWEJD-WHpWHeOQ0juh-Ei9jz3D9yjc,3923
498
- invenio_app_rdm-14.0.0b1.dev5.dist-info/licenses/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
499
- invenio_app_rdm-14.0.0b1.dev5.dist-info/METADATA,sha256=SRxeu1SVjn3g-LgtNP2PZM9aU5oQEBafxMhy4tgeNkY,18883
500
- invenio_app_rdm-14.0.0b1.dev5.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
501
- invenio_app_rdm-14.0.0b1.dev5.dist-info/entry_points.txt,sha256=MwtT1SN5saWOgTYhNb5y0YGA9VGAi0kXN0cykIfsb4U,2405
502
- invenio_app_rdm-14.0.0b1.dev5.dist-info/top_level.txt,sha256=quZejDUw2vLfKQboNIuVLJ9fxZifdnCT_s2PNf1dfmk,16
503
- invenio_app_rdm-14.0.0b1.dev5.dist-info/RECORD,,
498
+ invenio_app_rdm-14.0.0b1.dev7.dist-info/licenses/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
499
+ invenio_app_rdm-14.0.0b1.dev7.dist-info/METADATA,sha256=q5QK6GHtZI5fCdY04sLOW5_EreejJSCPC2OlpJoaGqg,19514
500
+ invenio_app_rdm-14.0.0b1.dev7.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
501
+ invenio_app_rdm-14.0.0b1.dev7.dist-info/entry_points.txt,sha256=MwtT1SN5saWOgTYhNb5y0YGA9VGAi0kXN0cykIfsb4U,2405
502
+ invenio_app_rdm-14.0.0b1.dev7.dist-info/top_level.txt,sha256=quZejDUw2vLfKQboNIuVLJ9fxZifdnCT_s2PNf1dfmk,16
503
+ invenio_app_rdm-14.0.0b1.dev7.dist-info/RECORD,,