diff --git a/Pipfile b/Pipfile
index f60483ce..49dca939 100644
--- a/Pipfile
+++ b/Pipfile
@@ -10,14 +10,14 @@ sphinx = ">=4.5"
isort = "<6.0" # Unpin when isort==6.0.0 is released
[packages]
-invenio-app-rdm = {version = "~=13.0.0b1.dev17", extras = ["opensearch2"]}
+invenio-app-rdm = {version = "~=13.0.0b1.dev18", extras = ["opensearch2"]}
invenio-logging = {extras = ["sentry_sdk"], version = "~=2.0"}
sentry-sdk = ">=1.45,<2.0.0"
zenodo_rdm = {editable="True", path="./site"}
zenodo_legacy = {editable="True", path="./legacy"}
# TODO: Remove once we fix PyPI package issues
-invenio-swh = {git = "https://github.com/inveniosoftware/invenio-swh", ref = "v0.10.2"}
+invenio-swh = {git = "https://github.com/inveniosoftware/invenio-swh", ref = "v0.10.3"}
jsonschema = ">=4.17.0,<4.18.0" # due to compatibility issues with alpha
ipython = "!=8.1.0"
uwsgi = ">=2.0"
diff --git a/Pipfile.lock b/Pipfile.lock
index 88b6e9f6..8285f3a9 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "624b582a21b5d836ec50cf631a0f572c49c26f256e8ee1af6ea5d40eddbda9f2"
+ "sha256": "c8773ce002ca56066b6c228f14d3d591c206f55a51b61f51cf6f327b5f228240"
},
"pipfile-spec": 6,
"requires": {
@@ -34,11 +34,11 @@
},
"amqp": {
"hashes": [
- "sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637",
- "sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd"
+ "sha256:43b3319e1b4e7d1251833a93d672b4af1e40f3d632d479b98661a95f117880a2",
+ "sha256:cddc00c725449522023bad949f70fff7b48f0b1ade74d170a6f10ab044739432"
],
"markers": "python_version >= '3.6'",
- "version": "==5.2.0"
+ "version": "==5.3.1"
},
"aniso8601": {
"hashes": [
@@ -526,11 +526,11 @@
},
"deprecated": {
"hashes": [
- "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c",
- "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"
+ "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320",
+ "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==1.2.14"
+ "version": "==1.2.15"
},
"dictdiffer": {
"hashes": [
@@ -602,11 +602,11 @@
},
"faker": {
"hashes": [
- "sha256:4a82b2908cd19f3bba1a4da2060cc4eb18a40410ccdf9350d071d79dc92fe3ce",
- "sha256:aa31b52cdae3673d6a78b4857c7bcdc0e98f201a5cb77d7827fa9e6b5876da94"
+ "sha256:68e5580cb6b4226710886e595eabc13127149d6e71e9d1db65506a7fbe2c7fce",
+ "sha256:9b01019c1ddaf2253ca2308c0472116e993f4ad8fc9905f82fa965e0c6f932e9"
],
"markers": "python_version >= '3.8'",
- "version": "==30.8.2"
+ "version": "==33.0.0"
},
"fastjsonschema": {
"hashes": [
@@ -1038,11 +1038,11 @@
"opensearch2"
],
"hashes": [
- "sha256:44550b0e54278c5c0774d4cce698ea761ef68fc8dd96e08172764d2b43824f7f",
- "sha256:e83fef9357bce8b85998295a8f52a5518b29b6f625442b2c2f026f48e32ae9ed"
+ "sha256:3b60256d509e823c2f0deead938725b064f9537e543a314278cd4266ea161682",
+ "sha256:6c0ebecf7473a72ff2348467708aa79f48c8a628f4080837c80aaa56373734ff"
],
"index": "pypi",
- "version": "==13.0.0b1.dev17"
+ "version": "==13.0.0b1.dev18"
},
"invenio-assets": {
"hashes": [
@@ -1102,11 +1102,11 @@
},
"invenio-db": {
"hashes": [
- "sha256:2257f4af82da6f282df11a9cd49f48d4e6a9fc30bd94d448308cf952f45d56bd",
- "sha256:503a95d644ec986c80d86625242adf59502b613ac7f158d31d8f3b5e5f9fb26a"
+ "sha256:275307e6a6980140f05ce765f54e0efc5f91a09cf206bdeecea874251f3aafbb",
+ "sha256:9f07739b8854185b594ea7917dfb8443ffb309981c60d2f660da3e2c12fe7a2d"
],
"markers": "python_version >= '3.7'",
- "version": "==1.3.0"
+ "version": "==1.3.1"
},
"invenio-drafts-resources": {
"hashes": [
@@ -1216,11 +1216,11 @@
},
"invenio-oauthclient": {
"hashes": [
- "sha256:0aacac0e721f07ec578b0b0ca3cadb46853da0f7bb48127865d5e7ee4a3f0c84",
- "sha256:8ea0420b2f965cbbdbc95bb36c73ed1a78c18094f3425df5d1880bb3e1533ac6"
+ "sha256:14d68ef4c3e5f4a5697a319050208c8a89f731eeab66389d10bd5332bbc06b19",
+ "sha256:356f6ee3331503bfb09a406fc6e4ee588a3c8820b24620255ee5617ccf8d4bac"
],
"markers": "python_version >= '3.7'",
- "version": "==4.1.0"
+ "version": "==4.1.1"
},
"invenio-pages": {
"hashes": [
@@ -1256,11 +1256,11 @@
},
"invenio-rdm-records": {
"hashes": [
- "sha256:79cc2f5ef7cf86fd4432069ccd48f1139fd03e103420c90149e6d0e48f0097fa",
- "sha256:c7ad7d5d81989c618b4d7c8773b9e0dd83d49d007282b3dee2a5dcdcfede3ea3"
+ "sha256:9c162b3398481ca3e3a50dd1c9dd96db1cc8ff4cfe3eb181231b3a9c68be5114",
+ "sha256:dca619327c7fa2f2383ddef5529ff596ad7ae1a1d84eccfed9b93e6489c9bd37"
],
"markers": "python_version >= '3.7'",
- "version": "==16.0.1"
+ "version": "==16.2.0"
},
"invenio-records": {
"hashes": [
@@ -1311,19 +1311,19 @@
},
"invenio-requests": {
"hashes": [
- "sha256:65d007c98dc19b6d750ffd456e0031d081084bdda7d50fec2c0bc47a324760b4",
- "sha256:795f81545f0051ef3595676d8d9ca0587247b5bff37f234a4fd4ba0ad6abf3ab"
+ "sha256:a37aa4aa8313f27f4eab285e21034b451e628bbf3b445ba31b840a14a70faa1b",
+ "sha256:bc326ff11a22e5f3938cdcaf441a6be069e944b389b1106cb1b35be33345743b"
],
"markers": "python_version >= '3.7'",
- "version": "==5.2.0"
+ "version": "==5.3.0"
},
"invenio-rest": {
"hashes": [
- "sha256:7c8ff04d6e2460bbf1867e9f8f8220c326a10280b7039f853c7dfaa12b73bf8c",
- "sha256:a7e45e36fda31b66067013c1f69b014e65e39cde58636f0499e01fcaf2618799"
+ "sha256:b7b9b9811695f4b754ba128c9be8a98afecb4d9b94c7911411aa1b34a3e99546",
+ "sha256:ce4182c1cdda6e2336399f43b792a2946d930ced80343552775b58b5b1318370"
],
"markers": "python_version >= '3.7'",
- "version": "==1.3.1"
+ "version": "==1.4.0"
},
"invenio-search": {
"extras": [
@@ -1353,15 +1353,15 @@
},
"invenio-swh": {
"git": "https://github.com/inveniosoftware/invenio-swh",
- "ref": "107a0ad166b0ed1f0fe37fe103593093976e4abe"
+ "ref": "511a88046c15fc6986ce85183ac7d842b8157eb1"
},
"invenio-theme": {
"hashes": [
- "sha256:5816bafa0d5c16384a9fb040928c9a1f95bca3834b2b45a332db8cb5a50a3264",
- "sha256:87c047e03e3547798838efde4fcd3ede5d76c421618b22443745bb9ba82567e1"
+ "sha256:2b8c65a4ef07f41065ce39b9cec4c0de99e1d1fed1fcd970ec688f94f452863c",
+ "sha256:2ff54e74b74b2ac9ae2c8e56e6012b8c199c58fff250c379792465c8ba6e3a5f"
],
"markers": "python_version >= '3.7'",
- "version": "==3.4.3"
+ "version": "==3.5.0"
},
"invenio-userprofiles": {
"hashes": [
@@ -1381,11 +1381,11 @@
},
"invenio-vocabularies": {
"hashes": [
- "sha256:82e465459dfd59f2c0f0627ba8257f2c00e54aea6269b0908f7a27ad91d26b84",
- "sha256:f85405f33b82183c300ed0470a70e9d6b1909483fd3b7e6ee283a42b24390e4d"
+ "sha256:31e13d8d4d7bc7c32372acf1a7f962d0258c17dc68359b0dd42ed22709d5ad92",
+ "sha256:f46f513c36d1b60fb58c2251ddcd1c1c7df380f2f6486bd26523733c484360b2"
],
"markers": "python_version >= '3.7'",
- "version": "==6.5.0"
+ "version": "==6.6.0"
},
"invenio-webhooks": {
"hashes": [
@@ -1636,10 +1636,10 @@
},
"lxml-html-clean": {
"hashes": [
- "sha256:081e6378c68ebb4113940ed82a3534c99e24ba1ca5ad5ce8868c7c4d264618f1",
- "sha256:d9f7d8ae36092f4ed5079cfbf95ff06d3c6fd04f4a861422ce251ece72d3c4b5"
+ "sha256:40c838bbcf1fc72ba4ce811fbb3135913017b27820d7c16e8bc412ae1d8bc00b",
+ "sha256:b704f2757e61d793b1c08bf5ad69e4c0b68d6696f4c3c1429982caf90050bcaf"
],
- "version": "==0.3.1"
+ "version": "==0.4.1"
},
"mako": {
"hashes": [
@@ -2378,11 +2378,11 @@
"crypto"
],
"hashes": [
- "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850",
- "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"
+ "sha256:543b77207db656de204372350926bed5a86201c4cbff159f623f79c7bb487a15",
+ "sha256:7628a7eb7938959ac1b26e819a1df0fd3259505627b575e4bad6d08f76db695c"
],
- "markers": "python_version >= '3.8'",
- "version": "==2.9.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==2.10.0"
},
"pymdown-extensions": {
"hashes": [
@@ -2830,11 +2830,11 @@
},
"setuptools": {
"hashes": [
- "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd",
- "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"
+ "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef",
+ "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"
],
- "markers": "python_version >= '3.8'",
- "version": "==75.3.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==75.5.0"
},
"simplejson": {
"hashes": [
@@ -3129,11 +3129,11 @@
},
"sqlparse": {
"hashes": [
- "sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4",
- "sha256:bb6b4df465655ef332548e24f08e205afc81b9ab86cb1c45657a7ff173a3a00e"
+ "sha256:9e37b35e16d1cc652a2545f0997c1deb23ea28fa1f3eefe609eee3063c3b105f",
+ "sha256:e99bc85c78160918c3e1d9230834ab8d80fc06c59d03f8db2618f65f65dda55e"
],
"markers": "python_version >= '3.8'",
- "version": "==0.5.1"
+ "version": "==0.5.2"
},
"sqltap": {
"hashes": [
@@ -3173,11 +3173,11 @@
},
"tomli": {
"hashes": [
- "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38",
- "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
+ "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8",
+ "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"
],
"markers": "python_version < '3.11'",
- "version": "==2.0.2"
+ "version": "==2.1.0"
},
"tornado": {
"hashes": [
@@ -3781,71 +3781,71 @@
},
"coverage": {
"hashes": [
- "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376",
- "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9",
- "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111",
- "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172",
- "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491",
- "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546",
- "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2",
- "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11",
- "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08",
- "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c",
- "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2",
- "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963",
- "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613",
- "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0",
- "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db",
- "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf",
- "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73",
- "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117",
- "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1",
- "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e",
- "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522",
- "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25",
- "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc",
- "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea",
- "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52",
- "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a",
- "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07",
- "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06",
- "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa",
- "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901",
- "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b",
- "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17",
- "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0",
- "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21",
- "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19",
- "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5",
- "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51",
- "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3",
- "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3",
- "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f",
- "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076",
- "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a",
- "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718",
- "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba",
- "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e",
- "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27",
- "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e",
- "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09",
- "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e",
- "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70",
- "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f",
- "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72",
- "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a",
- "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef",
- "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b",
- "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b",
- "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f",
- "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806",
- "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b",
- "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1",
- "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c",
- "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858"
+ "sha256:0266b62cbea568bd5e93a4da364d05de422110cbed5056d69339bd5af5685433",
+ "sha256:0573f5cbf39114270842d01872952d301027d2d6e2d84013f30966313cadb529",
+ "sha256:0ddcb70b3a3a57581b450571b31cb774f23eb9519c2aaa6176d3a84c9fc57671",
+ "sha256:108bb458827765d538abcbf8288599fee07d2743357bdd9b9dad456c287e121e",
+ "sha256:14045b8bfd5909196a90da145a37f9d335a5d988a83db34e80f41e965fb7cb42",
+ "sha256:1a5407a75ca4abc20d6252efeb238377a71ce7bda849c26c7a9bece8680a5d99",
+ "sha256:2bc3e45c16564cc72de09e37413262b9f99167803e5e48c6156bccdfb22c8327",
+ "sha256:2d608a7808793e3615e54e9267519351c3ae204a6d85764d8337bd95993581a8",
+ "sha256:34d23e28ccb26236718a3a78ba72744212aa383141961dd6825f6595005c8b06",
+ "sha256:37a15573f988b67f7348916077c6d8ad43adb75e478d0910957394df397d2874",
+ "sha256:3c0317288f032221d35fa4cbc35d9f4923ff0dfd176c79c9b356e8ef8ef2dff4",
+ "sha256:3c42ec2c522e3ddd683dec5cdce8e62817afb648caedad9da725001fa530d354",
+ "sha256:3c6b24007c4bcd0b19fac25763a7cac5035c735ae017e9a349b927cfc88f31c1",
+ "sha256:40cca284c7c310d622a1677f105e8507441d1bb7c226f41978ba7c86979609ab",
+ "sha256:46f21663e358beae6b368429ffadf14ed0a329996248a847a4322fb2e35d64d3",
+ "sha256:49ed5ee4109258973630c1f9d099c7e72c5c36605029f3a91fe9982c6076c82b",
+ "sha256:5c95e0fa3d1547cb6f021ab72f5c23402da2358beec0a8e6d19a368bd7b0fb37",
+ "sha256:5dd4e4a49d9c72a38d18d641135d2fb0bdf7b726ca60a103836b3d00a1182acd",
+ "sha256:5e444b8e88339a2a67ce07d41faabb1d60d1004820cee5a2c2b54e2d8e429a0f",
+ "sha256:60dcf7605c50ea72a14490d0756daffef77a5be15ed1b9fea468b1c7bda1bc3b",
+ "sha256:623e6965dcf4e28a3debaa6fcf4b99ee06d27218f46d43befe4db1c70841551c",
+ "sha256:673184b3156cba06154825f25af33baa2671ddae6343f23175764e65a8c4c30b",
+ "sha256:6cf96ceaa275f071f1bea3067f8fd43bec184a25a962c754024c973af871e1b7",
+ "sha256:70a56a2ec1869e6e9fa69ef6b76b1a8a7ef709972b9cc473f9ce9d26b5997ce3",
+ "sha256:77256ad2345c29fe59ae861aa11cfc74579c88d4e8dbf121cbe46b8e32aec808",
+ "sha256:796c9b107d11d2d69e1849b2dfe41730134b526a49d3acb98ca02f4985eeff7a",
+ "sha256:7c07de0d2a110f02af30883cd7dddbe704887617d5c27cf373362667445a4c76",
+ "sha256:7e61b0e77ff4dddebb35a0e8bb5a68bf0f8b872407d8d9f0c726b65dfabe2469",
+ "sha256:82c809a62e953867cf57e0548c2b8464207f5f3a6ff0e1e961683e79b89f2c55",
+ "sha256:850cfd2d6fc26f8346f422920ac204e1d28814e32e3a58c19c91980fa74d8289",
+ "sha256:87ea64b9fa52bf395272e54020537990a28078478167ade6c61da7ac04dc14bc",
+ "sha256:90746521206c88bdb305a4bf3342b1b7316ab80f804d40c536fc7d329301ee13",
+ "sha256:951aade8297358f3618a6e0660dc74f6b52233c42089d28525749fc8267dccd2",
+ "sha256:963e4a08cbb0af6623e61492c0ec4c0ec5c5cf74db5f6564f98248d27ee57d30",
+ "sha256:987a8e3da7da4eed10a20491cf790589a8e5e07656b6dc22d3814c4d88faf163",
+ "sha256:9c2eb378bebb2c8f65befcb5147877fc1c9fbc640fc0aad3add759b5df79d55d",
+ "sha256:a1ab9763d291a17b527ac6fd11d1a9a9c358280adb320e9c2672a97af346ac2c",
+ "sha256:a3b925300484a3294d1c70f6b2b810d6526f2929de954e5b6be2bf8caa1f12c1",
+ "sha256:acbb8af78f8f91b3b51f58f288c0994ba63c646bc1a8a22ad072e4e7e0a49f1c",
+ "sha256:ad32a981bcdedb8d2ace03b05e4fd8dace8901eec64a532b00b15217d3677dd2",
+ "sha256:aee9cf6b0134d6f932d219ce253ef0e624f4fa588ee64830fcba193269e4daa3",
+ "sha256:af05bbba896c4472a29408455fe31b3797b4d8648ed0a2ccac03e074a77e2314",
+ "sha256:b6cce5c76985f81da3769c52203ee94722cd5d5889731cd70d31fee939b74bf0",
+ "sha256:bb684694e99d0b791a43e9fc0fa58efc15ec357ac48d25b619f207c41f2fd384",
+ "sha256:c132b5a22821f9b143f87446805e13580b67c670a548b96da945a8f6b4f2efbb",
+ "sha256:c296263093f099da4f51b3dff1eff5d4959b527d4f2f419e16508c5da9e15e8c",
+ "sha256:c973b2fe4dc445cb865ab369df7521df9c27bf40715c837a113edaa2aa9faf45",
+ "sha256:cdd94501d65adc5c24f8a1a0eda110452ba62b3f4aeaba01e021c1ed9cb8f34a",
+ "sha256:d79d4826e41441c9a118ff045e4bccb9fdbdcb1d02413e7ea6eb5c87b5439d24",
+ "sha256:dbba8210f5067398b2c4d96b4e64d8fb943644d5eb70be0d989067c8ca40c0f8",
+ "sha256:df002e59f2d29e889c37abd0b9ee0d0e6e38c24f5f55d71ff0e09e3412a340ec",
+ "sha256:dfd14bcae0c94004baba5184d1c935ae0d1231b8409eb6c103a5fd75e8ecdc56",
+ "sha256:e25bacb53a8c7325e34d45dddd2f2fbae0dbc230d0e2642e264a64e17322a777",
+ "sha256:e2c8e3384c12dfa19fa9a52f23eb091a8fad93b5b81a41b14c17c78e23dd1d8b",
+ "sha256:e5f2a0f161d126ccc7038f1f3029184dbdf8f018230af17ef6fd6a707a5b881f",
+ "sha256:e69ad502f1a2243f739f5bd60565d14a278be58be4c137d90799f2c263e7049a",
+ "sha256:ead9b9605c54d15be228687552916c89c9683c215370c4a44f1f217d2adcc34d",
+ "sha256:f07ff574986bc3edb80e2c36391678a271d555f91fd1d332a1e0f4b5ea4b6ea9",
+ "sha256:f2c7a045eef561e9544359a0bf5784b44e55cefc7261a20e730baa9220c83413",
+ "sha256:f3e8796434a8106b3ac025fd15417315d7a58ee3e600ad4dbcfddc3f4b14342c",
+ "sha256:f63e21ed474edd23f7501f89b53280014436e383a14b9bd77a648366c81dce7b",
+ "sha256:fd49c01e5057a451c30c9b892948976f5d38f2cbd04dc556a82743ba8e27ed8c"
],
"markers": "python_version >= '3.9'",
- "version": "==7.6.4"
+ "version": "==7.6.7"
},
"docker-services-cli": {
"hashes": [
@@ -4168,11 +4168,11 @@
},
"setuptools": {
"hashes": [
- "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd",
- "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"
+ "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef",
+ "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"
],
- "markers": "python_version >= '3.8'",
- "version": "==75.3.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==75.5.0"
},
"snowballstemmer": {
"hashes": [
@@ -4247,11 +4247,11 @@
},
"tomli": {
"hashes": [
- "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38",
- "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"
+ "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8",
+ "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"
],
"markers": "python_version < '3.11'",
- "version": "==2.0.2"
+ "version": "==2.1.0"
},
"typing-extensions": {
"hashes": [
diff --git a/assets/js/components/react_invenio_forms/CustomAffiliationsSuggestions.js b/assets/js/components/react_invenio_forms/CustomAffiliationsSuggestions.js
new file mode 100644
index 00000000..eb92cfe9
--- /dev/null
+++ b/assets/js/components/react_invenio_forms/CustomAffiliationsSuggestions.js
@@ -0,0 +1,59 @@
+import React from "react";
+import { Header, Grid } from "semantic-ui-react";
+import { makeIdEntry, makeSubheader } from "react-invenio-forms";
+
+
+export const CustomAffiliationsSuggestions = (creatibutors) => {
+ // Ensure creatibutors is always an array
+ const creatibutorsArray = Array.isArray(creatibutors) ? creatibutors : [creatibutors];
+
+ return creatibutorsArray.map((creatibutor) => {
+ const { creatibutor: creatibutorData } = creatibutor;
+ const { name, acronym, identifiers = [], id } = creatibutorData;
+
+ const subheader = makeSubheader(creatibutorData, creatibutor.isOrganization);
+ const displayName = acronym ? `${name} (${acronym})` : name;
+
+ const sources = [];
+ const idStrings = [];
+
+ identifiers.forEach((identifier) => {
+ const { scheme, identifier: value } = identifier;
+
+ if (scheme === "ror") {
+ sources.push(
+
+ Source: {scheme.toUpperCase()} (Preferred)
+
+ );
+ } else if (scheme === "edmo") {
+ sources.push(
+ Source: {scheme.toUpperCase()}
+ );
+ } else {
+ const idEntry = makeIdEntry(identifier);
+ if (idEntry) idStrings.push(idEntry);
+ }
+ });
+
+ return (
+
+
+
+
+ {displayName} {idStrings.length > 0 && <>({idStrings})>}
+ {subheader && {subheader}}
+
+
+
+ {sources.length > 0 && (
+
+ )}
+
+
+
+ );
+ });
+};
diff --git a/assets/js/invenio_app_rdm/overridableRegistry/mapping.js b/assets/js/invenio_app_rdm/overridableRegistry/mapping.js
index 594c4f22..dc541dda 100644
--- a/assets/js/invenio_app_rdm/overridableRegistry/mapping.js
+++ b/assets/js/invenio_app_rdm/overridableRegistry/mapping.js
@@ -7,10 +7,12 @@
import { UpgradeLegacyRecordButton } from "../../components/landing_page/overrides/UpgradeLegacyRecordButton";
import { FileUploaderNewVersion } from "../../components/landing_page/overrides/FileUploaderNewVersion";
import SubcommunityCreateForm from "../../components/community/overrides/SubcommunityCreateForm";
+import { CustomAffiliationsSuggestions } from "../../components/react_invenio_forms/CustomAffiliationsSuggestions";
export const overriddenComponents = {
"InvenioAppRdm.RecordLandingPage.RecordManagement.container":
UpgradeLegacyRecordButton,
"ReactInvenioDeposit.FileUploader.NewVersionButton.container": FileUploaderNewVersion,
+ "ReactInvenioForms.AffiliationsSuggestions.content": CustomAffiliationsSuggestions,
"InvenioCommunities.CommunityCreateForm.layout": SubcommunityCreateForm
};
diff --git a/docker-compose.full.yml b/docker-compose.full.yml
index 1f07c2d0..fe30b975 100644
--- a/docker-compose.full.yml
+++ b/docker-compose.full.yml
@@ -1,4 +1,3 @@
-version: '2.2'
services:
cache:
extends:
diff --git a/docker-compose.yml b/docker-compose.yml
index e660e2a6..7ab226fa 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,4 +1,3 @@
-version: '2.2'
services:
cache:
extends:
diff --git a/docker-services.yml b/docker-services.yml
index b4ad9566..d9185eb7 100644
--- a/docker-services.yml
+++ b/docker-services.yml
@@ -1,4 +1,3 @@
-version: "2.2"
services:
app:
build:
diff --git a/invenio.cfg b/invenio.cfg
index ddfeed9b..b1b685e9 100644
--- a/invenio.cfg
+++ b/invenio.cfg
@@ -20,68 +20,48 @@ from datetime import timedelta
from celery.schedules import crontab
from flask_resources import create_error_handler
from invenio_administration.permissions import administration_permission
-from invenio_app_rdm.config import (
- APP_RDM_DEPOSIT_FORM_DEFAULTS as DEPOSIT_FORM_DEFAULTS,
-)
-from invenio_app_rdm.config import (
- APP_RDM_ROUTES,
- CELERY_BEAT_SCHEDULE,
-)
-from invenio_app_rdm.config import (
- COMMUNITIES_ERROR_HANDLERS as BASE_COMMUNITIES_ERROR_HANDLERS,
-)
+from invenio_app_rdm.config import \
+ APP_RDM_DEPOSIT_FORM_DEFAULTS as DEPOSIT_FORM_DEFAULTS
+from invenio_app_rdm.config import APP_RDM_ROUTES, CELERY_BEAT_SCHEDULE, APP_RDM_IDENTIFIER_SCHEMES_UI
+from invenio_app_rdm.config import \
+ COMMUNITIES_ERROR_HANDLERS as BASE_COMMUNITIES_ERROR_HANDLERS
from invenio_communities.communities.services import facets as community_facets
from invenio_github.oauth.remote_app import github_app as github_remote_app
from invenio_i18n import lazy_gettext as _
from invenio_oauthclient.contrib.keycloak import KeycloakSettingsHelper
-from invenio_oauthclient.contrib.orcid import (
- REMOTE_MEMBER_APP,
- REMOTE_SANDBOX_MEMBER_APP,
-)
+from invenio_oauthclient.contrib.orcid import (REMOTE_MEMBER_APP,
+ REMOTE_SANDBOX_MEMBER_APP)
from invenio_oauthclient.views.client import auto_redirect_login
-from invenio_rdm_records.config import (
- RDM_FACETS,
-)
-from invenio_rdm_records.config import (
- RDM_SORT_OPTIONS as BASE_SORT_OPTIONS,
-)
+from invenio_rdm_records.config import (RDM_FACETS,
+ RDM_RECORDS_PERSONORG_SCHEMES)
+from invenio_rdm_records.config import RDM_SORT_OPTIONS as BASE_SORT_OPTIONS
from invenio_rdm_records.contrib.journal import JOURNAL_SORT_OPTIONS
from invenio_rdm_records.contrib.meeting import MEETING_SORT_OPTIONS
-from invenio_rdm_records.resources.config import (
- error_handlers as base_records_error_handlers,
-)
+from invenio_rdm_records.resources.config import \
+ error_handlers as base_records_error_handlers
from invenio_rdm_records.resources.errors import HTTPJSONException
from invenio_rdm_records.services.components import DefaultRecordsComponents
from invenio_rdm_records.services.components.signal import SignalComponent
from invenio_records_resources.services.records.queryparser import (
- FieldValueMapper,
- QueryParser,
- SearchFieldTransformer,
-)
-from invenio_vocabularies.services.custom_fields import (
- SUBJECT_FIELDS,
- SUBJECT_FIELDS_UI,
-)
+ FieldValueMapper, QueryParser, SearchFieldTransformer)
+from invenio_vocabularies.services.custom_fields import (SUBJECT_FIELDS,
+ SUBJECT_FIELDS_UI)
from zenodo_rdm import facets as zenodo_community_facets
from zenodo_rdm import providers as zenodo_providers
from zenodo_rdm.api import ZenodoRDMDraft, ZenodoRDMRecord
-from zenodo_rdm.custom_fields import (
- CUSTOM_FIELDS,
- CUSTOM_FIELDS_FACETS,
- CUSTOM_FIELDS_UI,
- NAMESPACES,
-)
+from zenodo_rdm.custom_fields import (CUSTOM_FIELDS, CUSTOM_FIELDS_FACETS,
+ CUSTOM_FIELDS_UI, NAMESPACES)
+from zenodo_rdm.custom_schemes import is_edmo
from zenodo_rdm.files import storage_factory
from zenodo_rdm.github.schemas import CitationMetadataSchema
from zenodo_rdm.legacy.resources import record_serializers
from zenodo_rdm.metrics.config import METRICS_CACHE_UPDATE_INTERVAL
from zenodo_rdm.moderation.errors import UserBlockedException
-from zenodo_rdm.moderation.handlers import CommunityScoreHandler, RecordScoreHandler
+from zenodo_rdm.moderation.handlers import (CommunityScoreHandler,
+ RecordScoreHandler)
from zenodo_rdm.openaire.records.components import OpenAIREComponent
-from zenodo_rdm.permissions import (
- ZenodoCommunityPermissionPolicy,
- ZenodoRDMRecordPermissionPolicy,
-)
+from zenodo_rdm.permissions import (ZenodoCommunityPermissionPolicy,
+ ZenodoRDMRecordPermissionPolicy)
from zenodo_rdm.queryparser import word_communities, word_doi
from zenodo_rdm.subcommunities import (
ZenodoSubCommunityRequest,
@@ -740,16 +720,10 @@ USERPROFILES_READ_ONLY = (
THEME_SHOW_FRONTPAGE_INTRO_SECTION = False
APP_RDM_RECORD_LANDING_PAGE_TEMPLATE = "zenodo_rdm/records/detail.html"
-from zenodo_rdm.utils import (
- annostor_link_render,
- blr_link_render,
- briefideas_link_render,
- f1000_link_render,
- github_link_render,
- openaire_link_render,
- reana_link_render,
- swh_link_render,
-)
+from zenodo_rdm.utils import (annostor_link_render, blr_link_render,
+ briefideas_link_render, f1000_link_render,
+ github_link_render, openaire_link_render,
+ reana_link_render, swh_link_render)
APP_RDM_RECORD_LANDING_PAGE_EXTERNAL_LINKS = [
{"id": "f1000", "render": f1000_link_render},
@@ -926,6 +900,22 @@ OAISERVER_XSL_URL = "/static/oai2.xsl"
RDM_DATACITE_FUNDER_IDENTIFIERS_PRIORITY = ("doi", "ror", "grid", "isni", "gnd")
"""Priority of funder identifiers types for Datacite serialization, prioritize DOI."""
+RDM_RECORDS_PERSONORG_SCHEMES = {
+**RDM_RECORDS_PERSONORG_SCHEMES,
+ "edmo": {"label": _("EDMO"), "validator": is_edmo, "datacite": "URL"},
+}
+"""Person and Organization Schemes."""
+
+APP_RDM_IDENTIFIER_SCHEMES_UI = {
+ **APP_RDM_IDENTIFIER_SCHEMES_UI,
+ "edmo": {
+ "url_prefix": "https://edmo.seadatanet.org/report/",
+ "icon": "images/edmo-icon.svg",
+ "label": "EDMO",
+ }
+}
+"""Identifier Schemes UI config."""
+
RECORDS_RESOURCES_ALLOW_EMPTY_FILES = False
"""Disable empty files for Zenodo."""
diff --git a/scripts/run_script.py b/scripts/run_script.py
old mode 100644
new mode 100755
index 9d0eb868..78a2db0e
--- a/scripts/run_script.py
+++ b/scripts/run_script.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024 CERN.
@@ -5,7 +6,7 @@
# Invenio-RDM is free software; you can redistribute it and/or modify
# it under the terms of the MIT License; see LICENSE file for more details.
"""Script to run a Python script in a job on OpenShift."""
-#!/usr/bin/env python
+
import json
import subprocess
import sys
@@ -22,9 +23,9 @@ def _abort(message):
if len(sys.argv) < 1:
print(f"Usage: {PROGRAM} \n")
- print(f" file: the path to the script to run")
+ print(" file: the path to the script to run")
print(
- f" image: the image version to be used by the job. If not provided, the script will try to infer it from the deployed image."
+ " image: the image version to be used by the job. If not provided, the script will try to infer it from the deployed image."
)
print(f" Example: {PROGRAM} /home/script.py 7.3.0")
sys.exit(1)
@@ -60,7 +61,9 @@ def infer_deployed_version():
script_path = sys.argv[1]
-image_version = sys.argv[2].removeprefix("v") if len(sys.argv) > 2 else infer_deployed_version()
+image_version = (
+ sys.argv[2].removeprefix("v") if len(sys.argv) > 2 else infer_deployed_version()
+)
# verify the file exists in local filesystem
if not Path(script_path).is_file():
@@ -103,7 +106,7 @@ def infer_deployed_version():
- copy the script {script_path} to {terminal_pod_name}
- run a pod with Zenodo {image_version}
- execute the script inside the created pod
-Proceed? (y/n):
+Proceed? (y/n):
"""
if input(str_) != "y":
_abort("Aborted.")
diff --git a/site/setup.cfg b/site/setup.cfg
index 7bd0290c..58bfa192 100644
--- a/site/setup.cfg
+++ b/site/setup.cfg
@@ -88,6 +88,8 @@ invenio_previewer.previewers =
image_previewer = zenodo_rdm.previewer.image_previewer
invenio_search.index_templates =
zenodo_rdm = zenodo_rdm.index_templates
+idutils.custom_schemes =
+ edmo = zenodo_rdm.custom_schemes:get_scheme_config_func
[bdist_wheel]
universal = 1
diff --git a/site/zenodo_rdm/custom_schemes.py b/site/zenodo_rdm/custom_schemes.py
new file mode 100644
index 00000000..ce643f35
--- /dev/null
+++ b/site/zenodo_rdm/custom_schemes.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2024 CERN.
+#
+# ZenodoRDM is free software; you can redistribute it and/or modify it
+# under the terms of the MIT License; see LICENSE file for more details.
+
+"""Custom scheme config."""
+
+import re
+
+# Regular expression to validate EDMO identifiers in the format "edmo:"
+edmo_regexp = re.compile(r"^edmo:(\d+)$")
+
+# Regular expression to match the EDMO URL format
+edmo_url_regexp = re.compile(
+ r"(?:https?://)?(?:edmo\.seadatanet\.org/report/)?(\d+)$", re.IGNORECASE
+)
+
+
+def is_edmo(val):
+ """
+ Validate and normalize an EDMO identifier or URL.
+
+ Returns the normalized 'edmo:' format if valid, otherwise None.
+ """
+ # Match against the URL or the edmo: format
+ match = edmo_url_regexp.match(val) or edmo_regexp.match(val)
+ if match:
+ # Extract the numeric ID from the matched group
+ return f"edmo:{match.group(1)}"
+ return None
+
+
+def normalize_edmo(val):
+ """Normalize an EDMO identifier or URL to the 'edmo:' format."""
+ return is_edmo(val)
+
+
+def generate_edmo_url(_, normalized_pid):
+ """
+ Generate a URL for a given normalized EDMO identifier.
+
+ Assumes the input is in the form 'edmo:'.
+ """
+ edmo_id = normalized_pid.split(":")[1]
+ return f"https://edmo.seadatanet.org/report/{edmo_id}"
+
+
+def get_scheme_config_func():
+ """Return the configuration for the EDMO custom scheme."""
+ return {
+ "validator": is_edmo,
+ "normalizer": normalize_edmo,
+ "filter": [],
+ "url_generator": generate_edmo_url,
+ }
diff --git a/site/zenodo_rdm/legacy/services.py b/site/zenodo_rdm/legacy/services.py
index 7eb2c57e..8656356d 100644
--- a/site/zenodo_rdm/legacy/services.py
+++ b/site/zenodo_rdm/legacy/services.py
@@ -152,7 +152,7 @@ class LegacyRecordServiceConfig(RDMRecordServiceConfig):
),
"doi": RecordPIDLink("https://doi.org/{+pid_doi}", when=has_doi),
"parent_doi": RecordParentPIDLink(
- "{+ui}/doi/{+pid_doi}",
+ "https://doi.org/{+pid_doi}",
when=is_record_and_has_parent_doi,
),
"badge": RecordPIDLink("{+ui}/badge/doi/{pid_doi}.svg"),
diff --git a/static/images/edmo-icon.svg b/static/images/edmo-icon.svg
new file mode 100644
index 00000000..a602f24a
--- /dev/null
+++ b/static/images/edmo-icon.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/templates/semantic-ui/zenodo_rdm/macros/creators.html b/templates/semantic-ui/zenodo_rdm/macros/creators.html
index 24f94a26..caf3d1b1 100644
--- a/templates/semantic-ui/zenodo_rdm/macros/creators.html
+++ b/templates/semantic-ui/zenodo_rdm/macros/creators.html
@@ -53,6 +53,11 @@
{% set link = "https://ror.org/{identifier}".format(identifier=id.identifier) %}
{% set link_title = _("ROR profile") %}
{% set icon = "/static/images/ror-icon.svg" %}
+
+ {% elif id.scheme == "edmo" %}
+ {% set link = "https://edmo.seadatanet.org/report/{identifier}".format(identifier=id.identifier) %}
+ {% set link_title = _("EDMO profile") %}
+ {% set icon = "/static/images/edmo-icon.svg" %}
{% elif id.scheme == "gnd" %}
{% set link = "https://d-nb.info/gnd/{identifier}".format(identifier=id.identifier) %}