invenio-app-rdm 14.0.0b1.dev5__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.
@@ -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.0b2.dev0"
21
21
 
22
22
  __all__ = ("__version__",)
@@ -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.title_l10n is defined %}
217
- {% set search_url = field | custom_fields_search(values.title_l10n, field_cfg) %}
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.title_l10n }}{{ ", " if not loop.last }}
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 identifier_schemes(self):
293
- """Dump identifiers scheme (fake) vocabulary.
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("RDM_RECORDS_IDENTIFIERS_SCHEMES", {})
296
+ for scheme in current_app.config.get(config_key, {})
300
297
  ]
301
298
 
302
- def identifiers(self):
303
- """Dump related identifiers vocabulary."""
304
- self._vocabularies["identifiers"] = {
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.identifier_schemes(),
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
- 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):
@@ -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) + f".{localised_title}.{locale}"
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", q=f"custom_fields.{namespace_string}:{field_value}"
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
  />
@@ -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
- {%- extends "invenio_theme/page.html" -%}
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()
@@ -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.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<22.0.0,>=21.0.0
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,15 @@ 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
+
104
113
  Version v14.0.0b1.dev5 (released 2025-10-14)
105
114
 
106
115
  - 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=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
@@ -82,7 +82,7 @@ invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details
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=2H6A4YzS8-4LRcPwyU04HsvnvieseVrrf_kndZl92zI,10622
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=qr92epXPVORk6z8TpB_KT7CaRQQNtmVRGmDDxKCe9U4,25397
94
- invenio_app_rdm/records_ui/views/filters.py,sha256=zKuqjM_Yb9MmBmloStjasASYCwVG7mUe0eolI2MtPXg,6998
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=oTCQkmr7j6FwVsOfM6hsKrPHfadW7m9IurrqYVDgxDw,3628
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=lYsI7O5Z8ZMwzImx_VZ25PKx2SyRgFezAOdEeTOM4as,1278
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
@@ -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=KkfcHLi4vx-Pd4K0ZZvgPBx6lGK5l9xCLV3hkklvYVw,394
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.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,,
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,,