invenio-app-rdm 14.0.0b1.dev4__py2.py3-none-any.whl → 14.0.0b2.dev0__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.
- invenio_app_rdm/__init__.py +1 -1
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html +2 -0
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html +19 -8
- invenio_app_rdm/records_ui/views/deposits.py +18 -10
- invenio_app_rdm/records_ui/views/filters.py +18 -4
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CompactStats.js +3 -2
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineEdit.js +5 -5
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineRead.js +2 -2
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js +9 -0
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/administration_page.html +6 -2
- invenio_app_rdm/upgrade_scripts/migrate_13_0_to_14_0.py +191 -0
- {invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/METADATA +24 -2
- {invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/RECORD +17 -16
- {invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/WHEEL +0 -0
- {invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/entry_points.txt +0 -0
- {invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/licenses/LICENSE +0 -0
- {invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/top_level.txt +0 -0
invenio_app_rdm/__init__.py
CHANGED
|
@@ -20,6 +20,8 @@ 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
|
+
{% else %}
|
|
24
|
+
data-record-deletion='{{ {} | tojson }}'
|
|
23
25
|
{% endif %}
|
|
24
26
|
{% if config.RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE %}
|
|
25
27
|
{% include config.RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE %}
|
|
@@ -212,17 +212,28 @@
|
|
|
212
212
|
{% endfor %}
|
|
213
213
|
{% endmacro %}
|
|
214
214
|
|
|
215
|
+
|
|
216
|
+
{% macro _vocabulary_search_url(field, value, field_cfg) %}
|
|
217
|
+
{% if field_cfg.landing_page_search_attr and field_cfg.landing_page_search_attr in field_cfg %}
|
|
218
|
+
{% set search_text = value[field_cfg.landing_page_search_attr] %}
|
|
219
|
+
{% else %}
|
|
220
|
+
{% set search_text = value.title_l10n %}
|
|
221
|
+
{% endif %}
|
|
222
|
+
{% set search_url = field | custom_fields_search(search_text, field_cfg) %}
|
|
223
|
+
{% if search_url %}
|
|
224
|
+
<a href="{{ search_url }}">{{ value.title_l10n | safe }}</a>
|
|
225
|
+
{% else %}
|
|
226
|
+
{{ value.title_l10n }}
|
|
227
|
+
{% endif %}
|
|
228
|
+
{% endmacro %}
|
|
229
|
+
|
|
230
|
+
|
|
215
231
|
{% macro list_vocabulary_values(field, values, field_cfg) %}
|
|
216
|
-
{% if values
|
|
217
|
-
{
|
|
218
|
-
{% if search_url %}
|
|
219
|
-
<a href="{{ search_url }}">{{ values.title_l10n | safe }}</a>
|
|
220
|
-
{% else %}
|
|
221
|
-
{{ values.title_l10n }}
|
|
222
|
-
{% endif %}
|
|
232
|
+
{% if values is mapping %}
|
|
233
|
+
{{ _vocabulary_search_url(field, values, field_cfg) }}
|
|
223
234
|
{% else %}
|
|
224
235
|
{% for value in values %}
|
|
225
|
-
{{ value
|
|
236
|
+
{{ _vocabulary_search_url(field, value, field_cfg) }}{{ ", " if not loop.last }}
|
|
226
237
|
{% endfor %}
|
|
227
238
|
{% endif %}
|
|
228
239
|
{% endmacro %}
|
|
@@ -289,24 +289,31 @@ class VocabulariesOptions:
|
|
|
289
289
|
"""Dump linkable resource type vocabulary."""
|
|
290
290
|
return self._resource_types(dsl.Q("term", tags="linkable"))
|
|
291
291
|
|
|
292
|
-
def
|
|
293
|
-
"""Dump
|
|
294
|
-
|
|
295
|
-
"Fake" because identifiers scheme is not a vocabulary.
|
|
296
|
-
"""
|
|
292
|
+
def _dump_identifier_schemes(self, config_key):
|
|
293
|
+
"""Dump identifier schemes from a given config key."""
|
|
297
294
|
return [
|
|
298
295
|
{"text": get_scheme_label(scheme), "value": scheme}
|
|
299
|
-
for scheme in current_app.config.get(
|
|
296
|
+
for scheme in current_app.config.get(config_key, {})
|
|
300
297
|
]
|
|
301
298
|
|
|
302
|
-
def
|
|
303
|
-
"""Dump
|
|
304
|
-
self._vocabularies[
|
|
299
|
+
def _dump_identifiers(self, vocab_key, config_key):
|
|
300
|
+
"""Dump identifiers vocabulary for a given vocab/config key pair."""
|
|
301
|
+
self._vocabularies[vocab_key] = {
|
|
305
302
|
"relations": self.relation_types(),
|
|
306
303
|
"resource_type": self.linkable_resource_types(),
|
|
307
|
-
"scheme": self.
|
|
304
|
+
"scheme": self._dump_identifier_schemes(config_key),
|
|
308
305
|
}
|
|
309
306
|
|
|
307
|
+
def identifiers(self):
|
|
308
|
+
"""Dump identifiers vocabulary."""
|
|
309
|
+
self._dump_identifiers("identifiers", "RDM_RECORDS_IDENTIFIERS_SCHEMES")
|
|
310
|
+
|
|
311
|
+
def related_identifiers(self):
|
|
312
|
+
"""Dump related identifiers vocabulary."""
|
|
313
|
+
self._dump_identifiers(
|
|
314
|
+
"related_identifiers", "RDM_RECORDS_RELATED_IDENTIFIERS_SCHEMES"
|
|
315
|
+
)
|
|
316
|
+
|
|
310
317
|
def removal_reasons(self):
|
|
311
318
|
"""Dump removal reasons vocabulary."""
|
|
312
319
|
self._vocabularies["removal_reasons"] = self._dump_vocabulary_w_basic_fields(
|
|
@@ -325,6 +332,7 @@ class VocabulariesOptions:
|
|
|
325
332
|
self.contributor_roles()
|
|
326
333
|
self.subjects()
|
|
327
334
|
self.identifiers()
|
|
335
|
+
self.related_identifiers()
|
|
328
336
|
self.removal_reasons()
|
|
329
337
|
# We removed
|
|
330
338
|
# vocabularies["relation_type"] = _dump_relation_types_vocabulary()
|
|
@@ -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
|
-
|
|
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
|
|
135
|
+
return scheme
|
|
129
136
|
|
|
130
137
|
|
|
131
138
|
def localize_number(value):
|
|
@@ -187,12 +194,19 @@ def custom_fields_search(field, field_value, field_cfg=None):
|
|
|
187
194
|
# the \ is necessary for the lucene syntax but produces a SyntaxWarning.
|
|
188
195
|
# The r marks the string as raw and prevents the warning
|
|
189
196
|
# https://docs.python.org/3/reference/lexical_analysis.html#escape-sequences
|
|
190
|
-
namespace_string = r"\:".join(namespace_array) +
|
|
197
|
+
namespace_string = r"\:".join(namespace_array) + rf".{localised_title}.{locale}"
|
|
191
198
|
else:
|
|
192
199
|
namespace_string = r"\:".join(namespace_array)
|
|
200
|
+
# Check if the field config has a landing page search attribute to search by
|
|
201
|
+
landing_page_search_attr = (field_cfg or {}).get(
|
|
202
|
+
"landing_page_search_attr", False
|
|
203
|
+
)
|
|
204
|
+
if landing_page_search_attr:
|
|
205
|
+
namespace_string += rf".{landing_page_search_attr}"
|
|
193
206
|
|
|
194
207
|
return url_for(
|
|
195
|
-
"invenio_search_ui.search",
|
|
208
|
+
"invenio_search_ui.search",
|
|
209
|
+
q=f'custom_fields.{namespace_string}:"{field_value}"',
|
|
196
210
|
)
|
|
197
211
|
|
|
198
212
|
|
|
@@ -8,6 +8,7 @@ import { i18next } from "@translations/invenio_app_rdm/i18next";
|
|
|
8
8
|
import PropTypes from "prop-types";
|
|
9
9
|
import React from "react";
|
|
10
10
|
import { Icon, Label, Popup } from "semantic-ui-react";
|
|
11
|
+
import { localizedFormatNumber } from "../utils";
|
|
11
12
|
|
|
12
13
|
export const CompactStats = ({ uniqueViews, uniqueDownloads }) => {
|
|
13
14
|
return (
|
|
@@ -19,7 +20,7 @@ export const CompactStats = ({ uniqueViews, uniqueDownloads }) => {
|
|
|
19
20
|
trigger={
|
|
20
21
|
<Label className="transparent">
|
|
21
22
|
<Icon name="eye" />
|
|
22
|
-
{uniqueViews}
|
|
23
|
+
{localizedFormatNumber(uniqueViews)}
|
|
23
24
|
</Label>
|
|
24
25
|
}
|
|
25
26
|
/>
|
|
@@ -31,7 +32,7 @@ export const CompactStats = ({ uniqueViews, uniqueDownloads }) => {
|
|
|
31
32
|
trigger={
|
|
32
33
|
<Label className="transparent">
|
|
33
34
|
<Icon name="download" />
|
|
34
|
-
{uniqueDownloads}
|
|
35
|
+
{localizedFormatNumber(uniqueDownloads)}
|
|
35
36
|
</Label>
|
|
36
37
|
}
|
|
37
38
|
/>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// This file is part of InvenioRDM
|
|
2
|
-
// Copyright (C) 2023 CERN.
|
|
2
|
+
// Copyright (C) 2023-2025 CERN.
|
|
3
3
|
//
|
|
4
4
|
// Invenio App RDM 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.
|
|
@@ -46,7 +46,7 @@ export class AccessRequestTimelineEdit extends Component {
|
|
|
46
46
|
links: { self: selfLink },
|
|
47
47
|
} = request;
|
|
48
48
|
const { secret_link_expiration: secretLinkExpiration } = values;
|
|
49
|
-
if (secretLinkExpiration === null) {
|
|
49
|
+
if (secretLinkExpiration === null || secretLinkExpiration === "") {
|
|
50
50
|
payload["secret_link_expiration"] = "0";
|
|
51
51
|
} else {
|
|
52
52
|
const date = DateTime.fromISO(secretLinkExpiration);
|
|
@@ -76,17 +76,17 @@ export class AccessRequestTimelineEdit extends Component {
|
|
|
76
76
|
initFormValues = () => {
|
|
77
77
|
const {
|
|
78
78
|
request: {
|
|
79
|
-
payload: { secret_link_expiration },
|
|
79
|
+
payload: { secret_link_expiration: secretLinkExpiration },
|
|
80
80
|
},
|
|
81
81
|
} = this.props;
|
|
82
82
|
|
|
83
|
-
if (parseInt(
|
|
83
|
+
if (parseInt(secretLinkExpiration) === 0 || secretLinkExpiration === "NaN") {
|
|
84
84
|
return {
|
|
85
85
|
secret_link_expiration: "",
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
88
|
const dateFromDays = DateTime.now().plus({
|
|
89
|
-
days: parseInt(
|
|
89
|
+
days: parseInt(secretLinkExpiration),
|
|
90
90
|
});
|
|
91
91
|
return {
|
|
92
92
|
secret_link_expiration: dateFromDays.toISODate(),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// This file is part of InvenioRDM
|
|
2
|
-
// Copyright (C) 2023 CERN.
|
|
2
|
+
// Copyright (C) 2023-2025 CERN.
|
|
3
3
|
//
|
|
4
4
|
// Invenio App RDM 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.
|
|
@@ -20,7 +20,7 @@ export class AccessRequestTimelineRead extends Component {
|
|
|
20
20
|
} = this.props;
|
|
21
21
|
|
|
22
22
|
const expirationDate =
|
|
23
|
-
secretLinkExpiration === 0
|
|
23
|
+
parseInt(secretLinkExpiration) === 0
|
|
24
24
|
? i18next.t("Never")
|
|
25
25
|
: DateTime.fromISO(updated)
|
|
26
26
|
.plus({
|
|
@@ -119,3 +119,12 @@ export function SearchItemCreators({ creators, className, othersLink }) {
|
|
|
119
119
|
*/
|
|
120
120
|
export const timestampToRelativeTime = (timestamp) =>
|
|
121
121
|
DateTime.fromISO(timestamp).setLocale(i18next.language).toRelative();
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Returns a string-formatted number in the user's locale (e.g. 1,000 in en-GB but 1.000 in de-DE)
|
|
125
|
+
*
|
|
126
|
+
* @param {Number} number
|
|
127
|
+
* @returns string
|
|
128
|
+
*/
|
|
129
|
+
export const localizedFormatNumber = (number) =>
|
|
130
|
+
new Intl.NumberFormat(i18next.language).format(number);
|
|
@@ -7,9 +7,13 @@
|
|
|
7
7
|
under the terms of the MIT License; see LICENSE file for more details.
|
|
8
8
|
#}
|
|
9
9
|
|
|
10
|
-
{
|
|
10
|
+
{% if base_template|default(false) %}
|
|
11
|
+
{%- extends base_template %}
|
|
12
|
+
{% else %}
|
|
13
|
+
{%- extends config.BASE_TEMPLATE %}
|
|
14
|
+
{% endif %}
|
|
11
15
|
|
|
12
16
|
{%- block css %}
|
|
13
17
|
{{ super()}}
|
|
14
18
|
<link rel="stylesheet" href="/static/css/json-diff-kit.css">
|
|
15
|
-
{%- endblock css %}
|
|
19
|
+
{%- endblock css %}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2025 CERN.
|
|
4
|
+
#
|
|
5
|
+
# Invenio-App-RDM is free software; you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the MIT License; see LICENSE file for more details.
|
|
7
|
+
|
|
8
|
+
"""Record migration script from InvenioRDM 13.0 to 14.0.
|
|
9
|
+
|
|
10
|
+
Disclaimer: This script is intended to be executed *only once*, namely when
|
|
11
|
+
upgrading from InvenioRDM 13.0 to 14.0!
|
|
12
|
+
If this script is executed at any other time, probably the best case scenario
|
|
13
|
+
is that nothing happens!
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
This script has been tested for the following scenarios:
|
|
17
|
+
1. Draft with resource type publication-thesis
|
|
18
|
+
2. Record with resource type publication-thesis with a DOI and no draft
|
|
19
|
+
3. Record with resource type publication-thesis with a no DOI and an existing draft
|
|
20
|
+
4. Records with multiple versions
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import time
|
|
24
|
+
|
|
25
|
+
from click import secho
|
|
26
|
+
from invenio_access.permissions import system_identity
|
|
27
|
+
from invenio_db import db
|
|
28
|
+
from invenio_drafts_resources.resources.records.errors import DraftNotCreatedError
|
|
29
|
+
from invenio_rdm_records.proxies import current_rdm_records_service as records_service
|
|
30
|
+
from invenio_search.engine import dsl
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def run_upgrade(has, migrate_record, migrate_draft):
|
|
34
|
+
"""Run upgrade on selected records and drafts.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
has (dsl.Q): Query filter to select records/drafts to update.
|
|
38
|
+
migrate_record (callable): Function to migrate a record.
|
|
39
|
+
migrate_draft (callable): Function to migrate a draft.
|
|
40
|
+
"""
|
|
41
|
+
# Handle published records
|
|
42
|
+
published_records = records_service.scan(
|
|
43
|
+
identity=system_identity,
|
|
44
|
+
params={"allversions": True},
|
|
45
|
+
extra_filter=has,
|
|
46
|
+
)
|
|
47
|
+
for result in published_records.hits:
|
|
48
|
+
try:
|
|
49
|
+
migrate_record(result)
|
|
50
|
+
except Exception as error:
|
|
51
|
+
secho(f"> Error {repr(error)}", fg="red")
|
|
52
|
+
error = f"Record {result['id']} failed to update"
|
|
53
|
+
|
|
54
|
+
# Handle draft records
|
|
55
|
+
draft_records = records_service._search(
|
|
56
|
+
identity=system_identity,
|
|
57
|
+
action="scan",
|
|
58
|
+
params={"allversions": True},
|
|
59
|
+
search_preference=None,
|
|
60
|
+
record_cls=records_service.draft_cls,
|
|
61
|
+
search_opts=records_service.config.search_drafts,
|
|
62
|
+
extra_filter=has,
|
|
63
|
+
permission_action="read_draft",
|
|
64
|
+
).scan()
|
|
65
|
+
for result in draft_records:
|
|
66
|
+
try:
|
|
67
|
+
migrate_draft(result)
|
|
68
|
+
except Exception as error:
|
|
69
|
+
secho(f"> Error {repr(error)}", fg="red")
|
|
70
|
+
error = f"Draft {result['id']} failed to update"
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def run_update_for_resource_type():
|
|
74
|
+
"""Run update for resource type."""
|
|
75
|
+
|
|
76
|
+
def migrate_resource_type_in_record(hit_result):
|
|
77
|
+
"""
|
|
78
|
+
Update resource type from publication-thesis to publication-dissertation.
|
|
79
|
+
|
|
80
|
+
We go through the service layer to automatically trigger the DOI update and re-indexing.
|
|
81
|
+
"""
|
|
82
|
+
secho(f"Updating resource type for record {hit_result['id']}", fg="yellow")
|
|
83
|
+
record = records_service.read(system_identity, hit_result["id"])
|
|
84
|
+
if record.data["metadata"]["resource_type"]["id"] != "publication-thesis":
|
|
85
|
+
secho(
|
|
86
|
+
f"Skipping record <{record.id}> because it doesn't have resource-type 'publication-thesis'!",
|
|
87
|
+
fg="yellow",
|
|
88
|
+
)
|
|
89
|
+
return
|
|
90
|
+
|
|
91
|
+
try:
|
|
92
|
+
draft = records_service.read_draft(system_identity, record.id)
|
|
93
|
+
# Step 1: Update the resource type in the record via low-level API
|
|
94
|
+
# We need to make sure we don't publish the record with different metadata
|
|
95
|
+
secho(
|
|
96
|
+
f"Record <{record.id}> has an existing draft <{draft.id}>! Updating record via low-level API.",
|
|
97
|
+
fg="yellow",
|
|
98
|
+
)
|
|
99
|
+
# Update the record directly without affecting the draft
|
|
100
|
+
record._record["metadata"]["resource_type"][
|
|
101
|
+
"id"
|
|
102
|
+
] = "publication-dissertation"
|
|
103
|
+
# Save the record changes and reindex
|
|
104
|
+
record._record.commit()
|
|
105
|
+
db.session.commit()
|
|
106
|
+
records_service.indexer.index(record._record)
|
|
107
|
+
# Update DOI metadata if record has DOI
|
|
108
|
+
if hasattr(record, "pids") and record.pids.get("doi", None):
|
|
109
|
+
records_service.pids.register_or_update(
|
|
110
|
+
system_identity, record.id, "doi", parent=False
|
|
111
|
+
)
|
|
112
|
+
# Step 2: Update the resource type in the draft
|
|
113
|
+
secho(f"Updating resource type for draft {draft.id}", fg="yellow")
|
|
114
|
+
draft.data["metadata"]["resource_type"]["id"] = "publication-dissertation"
|
|
115
|
+
# After updating the record, update the draft's fork_version_id to match the record's new version_id, to avoid conflicts when publishing
|
|
116
|
+
draft._record.fork_version_id = record._record.revision_id
|
|
117
|
+
updated_draft = records_service.update_draft(
|
|
118
|
+
system_identity, draft.id, draft.data
|
|
119
|
+
)
|
|
120
|
+
secho(f"Draft {draft.id} has been updated successfully.", fg="green")
|
|
121
|
+
except DraftNotCreatedError:
|
|
122
|
+
# If the draft didn't exist, we simply edit and publish the record
|
|
123
|
+
draft = records_service.edit(system_identity, record.id)
|
|
124
|
+
draft.data["metadata"]["resource_type"]["id"] = "publication-dissertation"
|
|
125
|
+
updated_draft = records_service.update_draft(
|
|
126
|
+
system_identity, draft.id, draft.data
|
|
127
|
+
)
|
|
128
|
+
record = records_service.publish(system_identity, updated_draft.id)
|
|
129
|
+
|
|
130
|
+
secho(f"Record <{record.id}> has been updated successfully.", fg="green")
|
|
131
|
+
|
|
132
|
+
def migrate_resource_type_in_draft(hit_result):
|
|
133
|
+
"""
|
|
134
|
+
Update resource type from publication-thesis to publication-dissertation.
|
|
135
|
+
|
|
136
|
+
We go through the service layer to automatically trigger the DOI update and re-indexing.
|
|
137
|
+
"""
|
|
138
|
+
secho(f"Updating resource type for draft {hit_result['id']}", fg="yellow")
|
|
139
|
+
draft = records_service.edit(system_identity, hit_result["id"])
|
|
140
|
+
if draft.data["metadata"]["resource_type"]["id"] != "publication-thesis":
|
|
141
|
+
secho(
|
|
142
|
+
f"Skipping draft <{draft.id}> because it doesn't have resource-type 'publication-thesis'!",
|
|
143
|
+
fg="yellow",
|
|
144
|
+
)
|
|
145
|
+
return
|
|
146
|
+
|
|
147
|
+
draft.data["metadata"]["resource_type"]["id"] = "publication-dissertation"
|
|
148
|
+
updated_draft = records_service.update_draft(
|
|
149
|
+
system_identity, draft.id, draft.data
|
|
150
|
+
)
|
|
151
|
+
secho(f"Draft <{updated_draft.id}> has been updated successfully.", fg="green")
|
|
152
|
+
|
|
153
|
+
# Query records/drafts with resource type publication-thesis
|
|
154
|
+
has_resource_type = dsl.Q(
|
|
155
|
+
"query_string", query="metadata.resource_type.id:publication-thesis"
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
secho("Resource type update has started.", fg="green")
|
|
159
|
+
|
|
160
|
+
run_upgrade(
|
|
161
|
+
has_resource_type,
|
|
162
|
+
migrate_resource_type_in_record,
|
|
163
|
+
migrate_resource_type_in_draft,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
secho("Resource type update has finished.", fg="green")
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def execute_upgrade():
|
|
170
|
+
"""Execute the upgrade from InvenioRDM 13.0 to 14.0.
|
|
171
|
+
|
|
172
|
+
Please read the disclaimer on this module before thinking about executing
|
|
173
|
+
this function!
|
|
174
|
+
THIS MODULE IS WORK IN PROGRESS, UNTIL official v14 release
|
|
175
|
+
|
|
176
|
+
NOTE:
|
|
177
|
+
since the data upgrade steps are more selective now, the approach how to do
|
|
178
|
+
it has been changed. now the records/drafts which should be updated are
|
|
179
|
+
searched by a filter and then the updates are applied to those
|
|
180
|
+
records/drafts explicitly. this should improve speed and should make it
|
|
181
|
+
easier to upgrade large instances
|
|
182
|
+
|
|
183
|
+
"""
|
|
184
|
+
secho("Starting data migration...", fg="green")
|
|
185
|
+
|
|
186
|
+
run_update_for_resource_type()
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
# if the script is executed on its own, perform the upgrade
|
|
190
|
+
if __name__ == "__main__":
|
|
191
|
+
execute_upgrade()
|
{invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invenio-app-rdm
|
|
3
|
-
Version: 14.0.
|
|
3
|
+
Version: 14.0.0b2.dev0
|
|
4
4
|
Summary: Invenio Research Data Management.
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-app-rdm
|
|
6
6
|
Author: CERN
|
|
@@ -42,7 +42,7 @@ Requires-Dist: invenio-previewer<4.0.0,>=3.0.0
|
|
|
42
42
|
Requires-Dist: invenio-records-files<2.0.0,>=1.2.1
|
|
43
43
|
Requires-Dist: invenio-collections<3.0.0,>=1.0.0
|
|
44
44
|
Requires-Dist: invenio-communities<22.0.0,>=21.0.0
|
|
45
|
-
Requires-Dist: invenio-rdm-records<
|
|
45
|
+
Requires-Dist: invenio-rdm-records<23.0.0,>=22.0.0
|
|
46
46
|
Requires-Dist: CairoSVG<3.0.0,>=2.5.2
|
|
47
47
|
Requires-Dist: invenio-banners<6.0.0,>=5.0.0
|
|
48
48
|
Requires-Dist: invenio-pages<8.0.0,>=7.0.0
|
|
@@ -101,6 +101,28 @@ https://inveniordm.docs.cern.ch
|
|
|
101
101
|
Changes
|
|
102
102
|
=======
|
|
103
103
|
|
|
104
|
+
Version v14.0.0b2.dev0 (released 2025-10-21)
|
|
105
|
+
|
|
106
|
+
- installation: bump invenio-rdm-records
|
|
107
|
+
- upgrade_scripts: Add v13 to v14 migration script
|
|
108
|
+
- ui: add new related identifiers to vocabulary
|
|
109
|
+
- ui: format numbers in CompactStats
|
|
110
|
+
- fix(macros): Fix custom fields vocabularies links on landing page
|
|
111
|
+
- fix(admin): use configured base template instead of hard-coded value
|
|
112
|
+
|
|
113
|
+
Version v14.0.0b1.dev5 (released 2025-10-14)
|
|
114
|
+
|
|
115
|
+
- fix(community-submission): add missing var in side bar template
|
|
116
|
+
- fix(guest-access-request): handle broken expiration date payload value
|
|
117
|
+
* this extra check prevents the request timeline UI from breaking when a
|
|
118
|
+
request payload has a broken value, to make recovery easier
|
|
119
|
+
* also, make eslint happy with a camel case variable name
|
|
120
|
+
- fix(guest-access-request): handle more possible expiration date values
|
|
121
|
+
* when the expiration date gets submitted, the value of the empty input
|
|
122
|
+
field is typically the empty string rather than `null`
|
|
123
|
+
* on the reading side, handle the case that the expiration date is set
|
|
124
|
+
as a string value (since request payloads are generally strings)
|
|
125
|
+
|
|
104
126
|
Version v14.0.0b1.dev4 (released 2025-10-03)
|
|
105
127
|
|
|
106
128
|
- installation: relax invenio-collections dependency requirements
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
invenio_app_rdm/__init__.py,sha256=
|
|
1
|
+
invenio_app_rdm/__init__.py,sha256=rftFwLZQBavorJuS42orukO4FhdhOpaBr2rQV7-uXow,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
|
|
@@ -77,12 +77,12 @@ 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=
|
|
80
|
+
invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html,sha256=BPAaDG_OhCkKaIUSqyBfjMFK8gMnweHzZtyNdwI0T4k,1516
|
|
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
|
|
84
84
|
invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/creatibutors.html,sha256=N53nwtlEZjxweCx70qFJa1s6uL1pPSzWZgk8p1vodE4,4277
|
|
85
|
-
invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html,sha256=
|
|
85
|
+
invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html,sha256=_FFg0KwxG0PSCqvpFUq2-MNU4r301J4A6_s8elLbThk,10999
|
|
86
86
|
invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/doi.html,sha256=32Yknq5PgvJpYg9Z3Brod9wui9yrpDNE11_esG-20jw,1656
|
|
87
87
|
invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/files.html,sha256=6OIavFXP1BeV1Xozkv-2SOea9M5RUwjRI6gEGzBUle4,9564
|
|
88
88
|
invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/locations.html,sha256=27-KyPqb05pu-yRXHvxCgZWRSi5bFP6xf7XBn91sbeA,1741
|
|
@@ -90,8 +90,8 @@ 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=
|
|
94
|
-
invenio_app_rdm/records_ui/views/filters.py,sha256=
|
|
93
|
+
invenio_app_rdm/records_ui/views/deposits.py,sha256=_7pyI3xk46m2bo1w8PVrP8PHKj_g4wh4hiUX-yuaS5A,25785
|
|
94
|
+
invenio_app_rdm/records_ui/views/filters.py,sha256=dtAjJ5NmPvxEYZJeldW5oxrj0D0AYXobNelii57Tfdo,7455
|
|
95
95
|
invenio_app_rdm/records_ui/views/records.py,sha256=vLuenTEoTV9ZB9suUGI4ct1ml2iModZqhdlVfK5dIRc,17811
|
|
96
96
|
invenio_app_rdm/redirector/__init__.py,sha256=AYCTGmfbmkHW3YJXMqXlWBXcBrUsta-QmL9ULX2bjwA,243
|
|
97
97
|
invenio_app_rdm/redirector/resource.py,sha256=XuH6ZK0HVE5LdXoorlm8aI3deizvnZ5gFa9d1ihYosk,3312
|
|
@@ -114,7 +114,7 @@ invenio_app_rdm/theme/__init__.py,sha256=QbkxNjjOmGKRlie96HfTXgnFeVQjOX0GdiZnHP7
|
|
|
114
114
|
invenio_app_rdm/theme/views.py,sha256=mrcxejY9PlYwEqh8f0ojKX4CtmD9jz4f9rU-5aLZszU,4457
|
|
115
115
|
invenio_app_rdm/theme/webpack.py,sha256=s1JafSwXmAc5fRMsdFZflfhkqQplYhjnr5BmJHaf1B0,5390
|
|
116
116
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/theme.js,sha256=LIgneJY0lNGB4ePpEvGL1KFcUKVsOjNctP45uWVc3wE,4875
|
|
117
|
-
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js,sha256=
|
|
117
|
+
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js,sha256=N1LocxIDSbtQnoR_nTjhc_14ghHgfbE_36ArhdIbvh0,3891
|
|
118
118
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/AuditLogActions.js,sha256=ugQ-0b_6_O5rDeP7JUlNJ5SLGGlip_tP3OoTT4hRcak,3984
|
|
119
119
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewJson.js,sha256=UX4-c4gtXOih4T7GQ1c_9zvlAEa0ljTiz22GU8A05Ps,955
|
|
120
120
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewRecentChanges.js,sha256=M-vgjjroSGlo7TTTIW9UqCxRkMalCVmGBDTzOP2ZPSE,3279
|
|
@@ -173,7 +173,7 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSear
|
|
|
173
173
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSingleSearchBarElement.js,sha256=_CJ_zmhrHJRqZ0SP0rOGCP5YHzwV8ifbzLvQP2D6oGQ,1285
|
|
174
174
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/components.js,sha256=k26jDWt0BWIrhnuGF-t0iNmudXdniO8YPkquF8VK7gk,271
|
|
175
175
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/index.js,sha256=8Ev-tdRIWl2HhB7Y8YR30dXK-A4ePyShOsb9A9X-GhQ,2193
|
|
176
|
-
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CompactStats.js,sha256=
|
|
176
|
+
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CompactStats.js,sha256=_QNFYvYQJQgAjAWidxxGTX5YxAGhIUvZnOMxAKBnYxA,1374
|
|
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
|
|
@@ -228,8 +228,8 @@ invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/
|
|
|
228
228
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/mapping.js,sha256=kRIVYx1pkzq6kNry3M6Cn5hykDkNJAaG7sQ0BdwGSj8,434
|
|
229
229
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/AccessRequestExpiration.js,sha256=rakfZqfulHvuW60i3oTF0ptQvFChDoacPEw5iJkMq9U,1721
|
|
230
230
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/index.js,sha256=FZ_XVB-5V7k_wOYeiI06RXQn3aIeh7beyBhcK5AIvCg,75
|
|
231
|
-
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineEdit.js,sha256=
|
|
232
|
-
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineRead.js,sha256=
|
|
231
|
+
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineEdit.js,sha256=xd0uVbKLC23Y3RHlHDs0NdQ2vq9PNhimPwANkEtLSJ8,5727
|
|
232
|
+
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineRead.js,sha256=CN_IIXwIeMDFxBxsal070uPVrpDH1_Rh7DSJi4hSjXA,1404
|
|
233
233
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/overrides/TimelineFeedHeader.js,sha256=vU_D4F5jabAghjfPtpC3JvErrBVy39Je-PARgqwMD4w,1164
|
|
234
234
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/components.js,sha256=HfGLz_FZYePPEnS4fJ9-CVa8BzHPOgRi1_d21FgVrFg,7234
|
|
235
235
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/index.js,sha256=xvc8dtcPsTABiSpbt8azBVuZJuhXi39Nj4N8mPiFd40,2190
|
|
@@ -383,7 +383,7 @@ invenio_app_rdm/theme/static/images/icons8-web-design-80.png,sha256=lRi5Dfc01unG
|
|
|
383
383
|
invenio_app_rdm/theme/static/images/invenio-rdm.svg,sha256=UPCbTYMkSmnFj0SqQ2o_oJdybZtH_Q4HguqS0x-FS2U,6831
|
|
384
384
|
invenio_app_rdm/theme/static/images/orcid.svg,sha256=D79IRA7Ul2mfO9deW-Xocz_FTR-Ol5q3Nepya34pjWY,1117
|
|
385
385
|
invenio_app_rdm/theme/static/images/ror-icon.svg,sha256=aIth5_-aYB7yx1nswjM6XgHAFW6dvJc5khkR9khWCZM,3712
|
|
386
|
-
invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/administration_page.html,sha256=
|
|
386
|
+
invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/administration_page.html,sha256=9AKvzldVAhInYLCeWgvhWga5RyvnfQOulsP7JZPUdAA,483
|
|
387
387
|
invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/default_static_page.html,sha256=Un6KtaKmNlM-R7Qu1eeh0FFckgym3mq1zHV-AOew5pY,1178
|
|
388
388
|
invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/footer.html,sha256=I6Y9xoTe7J2aLOSU9ZDBOb-jbFr-Cd_ZbqnwyjE3AB0,2193
|
|
389
389
|
invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/frontpage.html,sha256=l-u25QOE2OkkPt-f7Cce469u4W2TnBdB_HVXpSZx3DE,1605
|
|
@@ -475,6 +475,7 @@ invenio_app_rdm/upgrade_scripts/fix_migrated_records_from_8_0_to_9_0.py,sha256=p
|
|
|
475
475
|
invenio_app_rdm/upgrade_scripts/migrate_10_0_to_11_0.py,sha256=TX6FCWXY4qM4z7IYzDO5qaMTheo3zAjFrmR1sXaEf4U,1333
|
|
476
476
|
invenio_app_rdm/upgrade_scripts/migrate_11_0_to_12_0.py,sha256=Tp7jfT2JHrYCFzF2qIYqG7yr7k-GhX2zkw61CWJGA78,6941
|
|
477
477
|
invenio_app_rdm/upgrade_scripts/migrate_12_0_to_13_0.py,sha256=pyO68jyGyKXVTcja8tpi2XgNx_FxXk7JhgDTV-wx3xM,8205
|
|
478
|
+
invenio_app_rdm/upgrade_scripts/migrate_13_0_to_14_0.py,sha256=TGq3Sfze6Sn97d45TloD7iyNHuaLK-O8O8tXJJiJytQ,7715
|
|
478
479
|
invenio_app_rdm/upgrade_scripts/migrate_1_0_records_to_2_0.py,sha256=mRDv_Ao5zMgA6X0aogMfvhspO1CIApKtDW_ziJp5fjI,3325
|
|
479
480
|
invenio_app_rdm/upgrade_scripts/migrate_2_0_to_3_0.py,sha256=jL_2I61Q9qt3fjBzYYueeT4EMQ9FlNPxYE4nzDQbLEY,2698
|
|
480
481
|
invenio_app_rdm/upgrade_scripts/migrate_3_0_to_4_0.py,sha256=BNjGufwLBvLHnu0gz5b_Are-FuxYjXlCtkLgNQckV3U,4768
|
|
@@ -495,9 +496,9 @@ invenio_app_rdm/users_ui/views/__init__.py,sha256=SMdY2NJj9GICfr3Xuok7qdNYVtA2bJ
|
|
|
495
496
|
invenio_app_rdm/users_ui/views/dashboard.py,sha256=iUn2PrODAwb8ugmMosJKAjPhUzjCiWiAWoXQr9RUFuc,1793
|
|
496
497
|
invenio_app_rdm/users_ui/views/ui.py,sha256=W_eXM8dLVIrNHQB2UEh37C9BYoHauft6RyvcDNFHovA,1742
|
|
497
498
|
invenio_app_rdm/utils/files.py,sha256=CruDyO2gDVadSlWEJD-WHpWHeOQ0juh-Ei9jz3D9yjc,3923
|
|
498
|
-
invenio_app_rdm-14.0.
|
|
499
|
-
invenio_app_rdm-14.0.
|
|
500
|
-
invenio_app_rdm-14.0.
|
|
501
|
-
invenio_app_rdm-14.0.
|
|
502
|
-
invenio_app_rdm-14.0.
|
|
503
|
-
invenio_app_rdm-14.0.
|
|
499
|
+
invenio_app_rdm-14.0.0b2.dev0.dist-info/licenses/LICENSE,sha256=AZXFHRrZa5s4m9DV7zZr4bPGTMUvcEPCodeV_AmFI8k,1204
|
|
500
|
+
invenio_app_rdm-14.0.0b2.dev0.dist-info/METADATA,sha256=OQUQ1--th1mO4RSNaKWtut5wx6W4opHntrwi_r4qhd4,19246
|
|
501
|
+
invenio_app_rdm-14.0.0b2.dev0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
|
502
|
+
invenio_app_rdm-14.0.0b2.dev0.dist-info/entry_points.txt,sha256=MwtT1SN5saWOgTYhNb5y0YGA9VGAi0kXN0cykIfsb4U,2405
|
|
503
|
+
invenio_app_rdm-14.0.0b2.dev0.dist-info/top_level.txt,sha256=quZejDUw2vLfKQboNIuVLJ9fxZifdnCT_s2PNf1dfmk,16
|
|
504
|
+
invenio_app_rdm-14.0.0b2.dev0.dist-info/RECORD,,
|
|
File without changes
|
{invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{invenio_app_rdm-14.0.0b1.dev4.dist-info → invenio_app_rdm-14.0.0b2.dev0.dist-info}/top_level.txt
RENAMED
|
File without changes
|