diff --git a/Pipfile.lock b/Pipfile.lock index 8bc4701..99b4917 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -189,7 +189,7 @@ "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.8'", "version": "==5.0.1" }, "attrs": { @@ -202,11 +202,11 @@ }, "babel": { "hashes": [ - "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", - "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316" + "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", + "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2" ], "markers": "python_version >= '3.8'", - "version": "==2.16.0" + "version": "==2.17.0" }, "babel-edtf": { "hashes": [ @@ -224,11 +224,11 @@ }, "beautifulsoup4": { "hashes": [ - "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", - "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed" + "sha256:72465267014897bb10ca749bb632bde6c2d20f3254afd5458544bd74e6c2e6d8", + "sha256:741c8b6903a1e4ae8ba32b9c9ae7510dab7a197fdbadcf9fcdeb0891ef5ec66a" ], - "markers": "python_full_version >= '3.6.0'", - "version": "==4.12.3" + "markers": "python_full_version >= '3.7.0'", + "version": "==4.13.1" }, "bibtexparser": { "hashes": [ @@ -309,11 +309,11 @@ }, "certifi": { "hashes": [ - "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", - "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" + "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", + "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe" ], "markers": "python_version >= '3.6'", - "version": "==2024.12.14" + "version": "==2025.1.31" }, "cffi": { "hashes": [ @@ -385,7 +385,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.17.1" }, "charset-normalizer": { @@ -706,7 +706,7 @@ "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.7'", "version": "==1.2.2" }, "executing": { @@ -719,11 +719,11 @@ }, "faker": { "hashes": [ - "sha256:42f2da8cf561e38c72b25e9891168b1e25fec42b6b0b5b0b6cd6041da54af885", - "sha256:926d2301787220e0554c2e39afc4dc535ce4b0a8d0a089657137999f66334ef4" + "sha256:28c24061780f83b45d9cb15a72b8f143b09d276c9ff52eb557744b7a89e8ba19", + "sha256:609abe555761ff31b0e5e16f958696e9b65c9224a7ac612ac96bfc2b8f09fe35" ], "markers": "python_version >= '3.8'", - "version": "==35.0.0" + "version": "==35.2.0" }, "fastjsonschema": { "hashes": [ @@ -1013,11 +1013,11 @@ }, "fsspec": { "hashes": [ - "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f", - "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2" + "sha256:1c24b16eaa0a1798afa0337aa0db9b256718ab2a89c425371f5628d22c3b6afd", + "sha256:9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b" ], "markers": "python_version >= '3.8'", - "version": "==2024.12.0" + "version": "==2025.2.0" }, "ftfy": { "hashes": [ @@ -1132,7 +1132,7 @@ "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79", "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f" ], - "markers": "python_version >= '3' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))", + "markers": "python_version >= '3.7'", "version": "==3.1.1" }, "html5lib": { @@ -1180,7 +1180,7 @@ "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e", "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580" ], - "markers": "python_version < '3.10'", + "markers": "python_version >= '3.9'", "version": "==8.6.1" }, "importlib-resources": { @@ -1393,11 +1393,11 @@ }, "invenio-mail": { "hashes": [ - "sha256:171e4c31ad78bea483debc102408732125a68379521b8cb672fb4c143817d45d", - "sha256:50fcc9e48aed84cb039dfb235d2f13f755aacffbc99433665759e3115184566e" + "sha256:80f5446880421189cf69e80cf1a654f651d3f597cdd8411ee136550e565dcdb0", + "sha256:893d57c34e2591cf08cb458cff005ec0c67868708fb1fef144ac589dca28ff1d" ], "markers": "python_version >= '3.7'", - "version": "==2.2.0" + "version": "==2.2.1" }, "invenio-notifications": { "hashes": [ @@ -1551,6 +1551,7 @@ "sha256:569df7a0db6b84951acecbd60b5871c9f06aaf61421bf493f9ce646f685eb0a6", "sha256:ced2c342a69b8a27262728b00c51d014eaf32a1330499decac192fa810141d21" ], + "markers": "python_version >= '3.7'", "version": "==2.4.1" }, "invenio-search-ui": { @@ -1633,7 +1634,7 @@ "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.7'", "version": "==0.7.2" }, "itsdangerous": { @@ -1999,11 +2000,11 @@ }, "marshmallow": { "hashes": [ - "sha256:1287bca04e6a5f4094822ac153c03da5e214a0a60bcd557b140f3e66991b8ca1", - "sha256:eb36762a1cc76d7abf831e18a3a1b26d3d481bbc74581b8e532a3d3a8115e1cb" + "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c", + "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6" ], "markers": "python_version >= '3.9'", - "version": "==3.26.0" + "version": "==3.26.1" }, "marshmallow-oneofschema": { "hashes": [ @@ -2130,11 +2131,11 @@ }, "mistune": { "hashes": [ - "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1", - "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667" + "sha256:02106ac2aa4f66e769debbfa028509a275069dcffce0dfa578edd7b991ee700a", + "sha256:e0740d635f515119f7d1feb6f9b192ee60f0cc649f80a8f944f905706a21654c" ], "markers": "python_version >= '3.8'", - "version": "==3.1.0" + "version": "==3.1.1" }, "mkdocs": { "hashes": [ @@ -2360,11 +2361,11 @@ }, "nbconvert": { "hashes": [ - "sha256:c83467bb5777fdfaac5ebbb8e864f300b277f68692ecc04d6dab72f2d8442344", - "sha256:e12eac052d6fd03040af4166c563d76e7aeead2e9aadf5356db552a1784bd547" + "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", + "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582" ], "markers": "python_version >= '3.8'", - "version": "==7.16.5" + "version": "==7.16.6" }, "nbformat": { "hashes": [ @@ -2394,6 +2395,7 @@ "sha256:31559b738b48ed5abe87b357205a040fa1dc64042a6454ad2d6854050d911ba0", "sha256:e54ad0d754358233503e0c08e85b77dbe07d6c00babeae62c81d8cee11965ae6" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.1.0" }, "opensearch-py": { @@ -2401,6 +2403,7 @@ "sha256:52c60fdb5d4dcf6cce3ee746c13b194529b0161e0f41268b98ab8f1624abe2fa", "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda" ], + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==2.8.0" }, "ordered-set": { @@ -2725,6 +2728,7 @@ "sha256:f8157bed2f51db683f31306aa497311b560f2265998122abe1dce6428bd86567", "sha256:ffe8ed017e4ed70f68b7b371d84b7d4a790368db9203dfc2d222febd3a9c8863" ], + "markers": "python_version >= '3.8'", "version": "==2.9.10" }, "ptyprocess": { @@ -2785,17 +2789,18 @@ }, "pymdown-extensions": { "hashes": [ - "sha256:637951cbfbe9874ba28134fb3ce4b8bcadd6aca89ac4998ec29dcbafd554ae08", - "sha256:b65801996a0cd4f42a3110810c306c45b7313c09b0610a6f773730f2a9e3c96b" + "sha256:05e0bee73d64b9c71a4ae17c72abc2f700e8bc8403755a00580b49a4e9f189e9", + "sha256:41e576ce3f5d650be59e900e4ceff231e0aed2a88cf30acaee41e02f063a061b" ], "markers": "python_version >= '3.8'", - "version": "==10.14.1" + "version": "==10.14.3" }, "pymysql": { "hashes": [ "sha256:4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c", "sha256:e127611aaf2b417403c60bf4dc570124aeb4a57f5f37b8e95ae399a42f904cd0" ], + "markers": "python_version >= '3.7'", "version": "==1.1.1" }, "pynpm": { @@ -2959,118 +2964,118 @@ }, "pyzmq": { "hashes": [ - "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6", - "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a", - "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9", - "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f", - "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37", - "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc", - "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed", - "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097", - "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d", - "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52", - "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6", - "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6", - "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2", - "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282", - "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3", - "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732", - "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5", - "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18", - "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306", - "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f", - "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3", - "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b", - "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277", - "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a", - "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797", - "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca", - "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c", - "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f", - "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5", - "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a", - "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44", - "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20", - "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4", - "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8", - "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780", - "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386", - "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5", - "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2", - "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0", - "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971", - "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b", - "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50", - "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c", - "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f", - "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231", - "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c", - "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08", - "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5", - "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6", - "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073", - "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e", - "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4", - "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317", - "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3", - "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072", - "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad", - "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a", - "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb", - "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd", - "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f", - "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef", - "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5", - "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187", - "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711", - "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988", - "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640", - "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c", - "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764", - "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1", - "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1", - "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289", - "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb", - "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a", - "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218", - "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c", - "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf", - "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7", - "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8", - "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726", - "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9", - "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93", - "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88", - "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115", - "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6", - "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672", - "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2", - "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea", - "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc", - "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b", - "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa", - "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003", - "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797", - "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940", - "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db", - "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc", - "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27", - "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3", - "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e", - "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98", - "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b", - "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629", - "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9", - "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6", - "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec", - "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951", - "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae", - "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4", - "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6", - "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919" + "sha256:000760e374d6f9d1a3478a42ed0c98604de68c9e94507e5452951e598ebecfba", + "sha256:004837cb958988c75d8042f5dac19a881f3d9b3b75b2f574055e22573745f841", + "sha256:0250c94561f388db51fd0213cdccbd0b9ef50fd3c57ce1ac937bf3034d92d72e", + "sha256:03719e424150c6395b9513f53a5faadcc1ce4b92abdf68987f55900462ac7eec", + "sha256:0995fd3530f2e89d6b69a2202e340bbada3191014352af978fa795cb7a446331", + "sha256:099b56ef464bc355b14381f13355542e452619abb4c1e57a534b15a106bf8e23", + "sha256:09dac387ce62d69bec3f06d51610ca1d660e7849eb45f68e38e7f5cf1f49cbcb", + "sha256:0b2007f28ce1b8acebdf4812c1aab997a22e57d6a73b5f318b708ef9bcabbe95", + "sha256:0b6a93d684278ad865fc0b9e89fe33f6ea72d36da0e842143891278ff7fd89c3", + "sha256:0f50db737d688e96ad2a083ad2b453e22865e7e19c7f17d17df416e91ddf67eb", + "sha256:100a826a029c8ef3d77a1d4c97cbd6e867057b5806a7276f2bac1179f893d3bf", + "sha256:1238c2448c58b9c8d6565579393148414a42488a5f916b3f322742e561f6ae0d", + "sha256:160194d1034902937359c26ccfa4e276abffc94937e73add99d9471e9f555dd6", + "sha256:17d72a74e5e9ff3829deb72897a175333d3ef5b5413948cae3cf7ebf0b02ecca", + "sha256:17f88622b848805d3f6427ce1ad5a2aa3cf61f12a97e684dab2979802024d460", + "sha256:1c6ae0e95d0a4b0cfe30f648a18e764352d5415279bdf34424decb33e79935b8", + "sha256:1c84c1297ff9f1cd2440da4d57237cb74be21fdfe7d01a10810acba04e79371a", + "sha256:1fd4b3efc6f62199886440d5e27dd3ccbcb98dfddf330e7396f1ff421bfbb3c2", + "sha256:25e720dba5b3a3bb2ad0ad5d33440babd1b03438a7a5220511d0c8fa677e102e", + "sha256:269c14904da971cb5f013100d1aaedb27c0a246728c341d5d61ddd03f463f2f3", + "sha256:290c96f479504439b6129a94cefd67a174b68ace8a8e3f551b2239a64cfa131a", + "sha256:2d88ba221a07fc2c5581565f1d0fe8038c15711ae79b80d9462e080a1ac30435", + "sha256:2e1eb9d2bfdf5b4e21165b553a81b2c3bd5be06eeddcc4e08e9692156d21f1f6", + "sha256:31fff709fef3b991cfe7189d2cfe0c413a1d0e82800a182cfa0c2e3668cd450f", + "sha256:361edfa350e3be1f987e592e834594422338d7174364763b7d3de5b0995b16f3", + "sha256:36d4e7307db7c847fe37413f333027d31c11d5e6b3bacbb5022661ac635942ba", + "sha256:36ee4297d9e4b34b5dc1dd7ab5d5ea2cbba8511517ef44104d2915a917a56dc8", + "sha256:380816d298aed32b1a97b4973a4865ef3be402a2e760204509b52b6de79d755d", + "sha256:3ef584f13820d2629326fe20cc04069c21c5557d84c26e277cfa6235e523b10f", + "sha256:3fe6e28a8856aea808715f7a4fc11f682b9d29cac5d6262dd8fe4f98edc12d53", + "sha256:44dba28c34ce527cf687156c81f82bf1e51f047838d5964f6840fd87dfecf9fe", + "sha256:45fad32448fd214fbe60030aa92f97e64a7140b624290834cc9b27b3a11f9473", + "sha256:46d4ebafc27081a7f73a0f151d0c38d4291656aa134344ec1f3d0199ebfbb6d4", + "sha256:49135bb327fca159262d8fd14aa1f4a919fe071b04ed08db4c7c37d2f0647162", + "sha256:4a98898fdce380c51cc3e38ebc9aa33ae1e078193f4dc641c047f88b8c690c9a", + "sha256:4eb3197f694dfb0ee6af29ef14a35f30ae94ff67c02076eef8125e2d98963cd0", + "sha256:51431f6b2750eb9b9d2b2952d3cc9b15d0215e1b8f37b7a3239744d9b487325d", + "sha256:574b285150afdbf0a0424dddf7ef9a0d183988eb8d22feacb7160f7515e032cb", + "sha256:57dd4d91b38fa4348e237a9388b4423b24ce9c1695bbd4ba5a3eada491e09399", + "sha256:59660e15c797a3b7a571c39f8e0b62a1f385f98ae277dfe95ca7eaf05b5a0f12", + "sha256:5b4fc44f5360784cc02392f14235049665caaf7c0fe0b04d313e763d3338e463", + "sha256:632a09c6d8af17b678d84df442e9c3ad8e4949c109e48a72f805b22506c4afa7", + "sha256:637536c07d2fb6a354988b2dd1d00d02eb5dd443f4bbee021ba30881af1c28aa", + "sha256:651726f37fcbce9f8dd2a6dab0f024807929780621890a4dc0c75432636871be", + "sha256:6991ee6c43e0480deb1b45d0c7c2bac124a6540cba7db4c36345e8e092da47ce", + "sha256:6d75fcb00a1537f8b0c0bb05322bc7e35966148ffc3e0362f0369e44a4a1de99", + "sha256:70b3a46ecd9296e725ccafc17d732bfc3cdab850b54bd913f843a0a54dfb2c04", + "sha256:786dd8a81b969c2081b31b17b326d3a499ddd1856e06d6d79ad41011a25148da", + "sha256:7c6160fe513654e65665332740f63de29ce0d165e053c0c14a161fa60dd0da01", + "sha256:7ebdd96bd637fd426d60e86a29ec14b8c1ab64b8d972f6a020baf08a30d1cf46", + "sha256:7f18ce33f422d119b13c1363ed4cce245b342b2c5cbbb76753eabf6aa6f69c7d", + "sha256:80a00370a2ef2159c310e662c7c0f2d030f437f35f478bb8b2f70abd07e26b24", + "sha256:817fcd3344d2a0b28622722b98500ae9c8bfee0f825b8450932ff19c0b15bebd", + "sha256:8531ed35dfd1dd2af95f5d02afd6545e8650eedbf8c3d244a554cf47d8924459", + "sha256:866c12b7c90dd3a86983df7855c6f12f9407c8684db6aa3890fc8027462bda82", + "sha256:88812b3b257f80444a986b3596e5ea5c4d4ed4276d2b85c153a6fbc5ca457ae7", + "sha256:8b0f5bab40a16e708e78a0c6ee2425d27e1a5d8135c7a203b4e977cee37eb4aa", + "sha256:8bacc1a10c150d58e8a9ee2b2037a70f8d903107e0f0b6e079bf494f2d09c091", + "sha256:8ec8e3aea6146b761d6c57fcf8f81fcb19f187afecc19bf1701a48db9617a217", + "sha256:8eddb3784aed95d07065bcf94d07e8c04024fdb6b2386f08c197dfe6b3528fda", + "sha256:9027a7fcf690f1a3635dc9e55e38a0d6602dbbc0548935d08d46d2e7ec91f454", + "sha256:90dc731d8e3e91bcd456aa7407d2eba7ac6f7860e89f3766baabb521f2c1de4a", + "sha256:91e2bfb8e9a29f709d51b208dd5f441dc98eb412c8fe75c24ea464734ccdb48e", + "sha256:95f5728b367a042df146cec4340d75359ec6237beebf4a8f5cf74657c65b9257", + "sha256:95f7b01b3f275504011cf4cf21c6b885c8d627ce0867a7e83af1382ebab7b3ff", + "sha256:97cbb368fd0debdbeb6ba5966aa28e9a1ae3396c7386d15569a6ca4be4572b99", + "sha256:9ec6abfb701437142ce9544bd6a236addaf803a32628d2260eb3dbd9a60e2891", + "sha256:9fbdb90b85c7624c304f72ec7854659a3bd901e1c0ffb2363163779181edeb68", + "sha256:a003200b6cd64e89b5725ff7e284a93ab24fd54bbac8b4fa46b1ed57be693c27", + "sha256:a0741edbd0adfe5f30bba6c5223b78c131b5aa4a00a223d631e5ef36e26e6d13", + "sha256:a23948554c692df95daed595fdd3b76b420a4939d7a8a28d6d7dea9711878641", + "sha256:a4bffcadfd40660f26d1b3315a6029fd4f8f5bf31a74160b151f5c577b2dc81b", + "sha256:a6549ecb0041dafa55b5932dcbb6c68293e0bd5980b5b99f5ebb05f9a3b8a8f3", + "sha256:a7ad34a2921e8f76716dc7205c9bf46a53817e22b9eec2e8a3e08ee4f4a72468", + "sha256:abf7b5942c6b0dafcc2823ddd9154f419147e24f8df5b41ca8ea40a6db90615c", + "sha256:b314268e716487bfb86fcd6f84ebbe3e5bec5fac75fdf42bc7d90fdb33f618ad", + "sha256:baa1da72aecf6a490b51fba7a51f1ce298a1e0e86d0daef8265c8f8f9848eb77", + "sha256:bd8fdee945b877aa3bffc6a5a8816deb048dab0544f9df3731ecd0e54d8c84c9", + "sha256:bdbc78ae2065042de48a65f1421b8af6b76a0386bb487b41955818c3c1ce7bed", + "sha256:c059883840e634a21c5b31d9b9a0e2b48f991b94d60a811092bc37992715146a", + "sha256:c1bb37849e2294d519117dd99b613c5177934e5c04a5bb05dd573fa42026567e", + "sha256:c2a9cb17fd83b7a3a3009901aca828feaf20aa2451a8a487b035455a86549c09", + "sha256:c7154d228502e18f30f150b7ce94f0789d6b689f75261b623f0fdc1eec642aab", + "sha256:cdb69710e462a38e6039cf17259d328f86383a06c20482cc154327968712273c", + "sha256:ceb0d78b7ef106708a7e2c2914afe68efffc0051dc6a731b0dbacd8b4aee6d68", + "sha256:d14f50d61a89b0925e4d97a0beba6053eb98c426c5815d949a43544f05a0c7ec", + "sha256:d51a7bfe01a48e1064131f3416a5439872c533d756396be2b39e3977b41430f9", + "sha256:d9da0289d8201c8a29fd158aaa0dfe2f2e14a181fd45e2dc1fbf969a62c1d594", + "sha256:e5e33b1491555843ba98d5209439500556ef55b6ab635f3a01148545498355e5", + "sha256:e76ad4729c2f1cf74b6eb1bdd05f6aba6175999340bd51e6caee49a435a13bf5", + "sha256:e7eeaef81530d0b74ad0d29eec9997f1c9230c2f27242b8d17e0ee67662c8f6e", + "sha256:e8e47050412f0ad3a9b2287779758073cbf10e460d9f345002d4779e43bb0136", + "sha256:ed038a921df836d2f538e509a59cb638df3e70ca0fcd70d0bf389dfcdf784d2a", + "sha256:edb550616f567cd5603b53bb52a5f842c0171b78852e6fc7e392b02c2a1504bb", + "sha256:ee7152f32c88e0e1b5b17beb9f0e2b14454235795ef68c0c120b6d3d23d12833", + "sha256:eeb37f65350d5c5870517f02f8bbb2ac0fbec7b416c0f4875219fef305a89a45", + "sha256:ef29630fde6022471d287c15c0a2484aba188adbfb978702624ba7a54ddfa6c1", + "sha256:ef5479fac31df4b304e96400fc67ff08231873ee3537544aa08c30f9d22fce38", + "sha256:f0019cc804ac667fb8c8eaecdb66e6d4a68acf2e155d5c7d6381a5645bd93ae4", + "sha256:f0f19c2097fffb1d5b07893d75c9ee693e9cbc809235cf3f2267f0ef6b015f24", + "sha256:f19dae58b616ac56b96f2e2290f2d18730a898a171f447f491cc059b073ca1fa", + "sha256:f1f31661a80cc46aba381bed475a9135b213ba23ca7ff6797251af31510920ce", + "sha256:f2c307fbe86e18ab3c885b7e01de942145f539165c3360e2af0f094dd440acd9", + "sha256:f32718ee37c07932cc336096dc7403525301fd626349b6eff8470fe0f996d8d7", + "sha256:f39d1227e8256d19899d953e6e19ed2ccb689102e6d85e024da5acf410f301eb", + "sha256:f5eeeb82feec1fc5cbafa5ee9022e87ffdb3a8c48afa035b356fcd20fc7f533f", + "sha256:f92a002462154c176dac63a8f1f6582ab56eb394ef4914d65a9417f5d9fde218", + "sha256:f9ba5def063243793dec6603ad1392f735255cbc7202a3a484c14f99ec290705", + "sha256:fc409c18884eaf9ddde516d53af4f2db64a8bc7d81b1a0c274b8aa4e929958e8" ], "markers": "python_version >= '3.7'", - "version": "==26.2.0" + "version": "==26.2.1" }, "rdflib": { "hashes": [ @@ -3214,10 +3219,11 @@ }, "s3fs": { "hashes": [ - "sha256:1b0f3a8f5946cca5ba29871d6792ab1e4528ed762327d8aefafc81b73b99fd56", - "sha256:d8665549f9d1de083151582437a2f10d5f3b3227c1f8e67a2b0b730db813e005" + "sha256:4b66b773519c1983e3071e13a42a2f2498d87da13dee40fda0622f4ed1b55664", + "sha256:d94b985f55add51c655e9ca9b4ceecb5c4b6389aecde162bdebc89f489a4e9f2" ], - "version": "==2024.12.0" + "markers": "python_version >= '3.9'", + "version": "==2025.2.0" }, "sentry-sdk": { "hashes": [ @@ -3591,7 +3597,7 @@ "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.8'", "version": "==2.2.1" }, "tornado": { @@ -3702,7 +3708,7 @@ "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version < '3.10'", + "markers": "python_version >= '3.8'", "version": "==4.12.2" }, "tzdata": { @@ -3723,11 +3729,11 @@ }, "ua-parser": { "hashes": [ - "sha256:5b31133606a781f56692caa11a9671a9f330c22604b3c4957a7ba18c152212d0", - "sha256:a9740f53f4fbb72b7a03d304cae32a2785cafc55e8207efb74877bba17c35324" + "sha256:b059f2cb0935addea7e551251cbbf42e9a8872f86134163bc1a4f79e0945ffea", + "sha256:f9d92bf19d4329019cef91707aecc23c6d65143ad7e29a233f0580fb0d15547d" ], "markers": "python_version >= '3.9'", - "version": "==1.0.0" + "version": "==1.0.1" }, "ua-parser-builtins": { "hashes": [ @@ -3757,7 +3763,7 @@ "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e", "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32" ], - "markers": "python_version >= '3.6'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==1.26.20" }, "uwsgi": { @@ -4112,7 +4118,7 @@ "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e", "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580" ], - "markers": "python_version < '3.10'", + "markers": "python_version >= '3.9'", "version": "==8.6.1" }, "packaging": { @@ -4174,7 +4180,7 @@ "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.8'", "version": "==2.2.1" }, "zipp": { diff --git a/invenio.cfg b/invenio.cfg index 2ef3561..a6fe238 100644 --- a/invenio.cfg +++ b/invenio.cfg @@ -20,6 +20,8 @@ from cds_rdm.permissions import ( CDSRDMPreservationSyncPermissionPolicy, ) from cds_rdm.files import storage_factory +from cds_rdm.inspire_harvester.reader import InspireHTTPReader +from cds_rdm.inspire_harvester.transformer import InspireJsonTransformer from celery.schedules import crontab from invenio_app_rdm.config import STATS_EVENTS as _APP_RDM_STATS_EVENTS, STATS_AGGREGATIONS as _APP_RDM_STATS_AGGREGATIONS, APP_RDM_ROUTES from invenio_vocabularies.services.custom_fields import VocabularyCF @@ -556,6 +558,15 @@ VOCABULARIES_NAMES_SCHEMES = { } """Names allowed identifier schemes.""" +VOCABULARIES_DATASTREAM_READERS = { + "inspire-http-reader": InspireHTTPReader, +} +"""Data Streams readers.""" + +VOCABULARIES_DATASTREAM_TRANSFORMERS = { + "inspire-json-transformer": InspireJsonTransformer, +} +"""Data Streams transformers.""" # Invenio Stats # ============= diff --git a/site/cds_rdm/inspire_harvester/__init__.py b/site/cds_rdm/inspire_harvester/__init__.py new file mode 100644 index 0000000..8621642 --- /dev/null +++ b/site/cds_rdm/inspire_harvester/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2025 CERN. +# +# CDS-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. + +"""INSPIRE to CDS harvester module.""" diff --git a/site/cds_rdm/inspire_harvester/jobs.py b/site/cds_rdm/inspire_harvester/jobs.py new file mode 100644 index 0000000..2026818 --- /dev/null +++ b/site/cds_rdm/inspire_harvester/jobs.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2025 CERN. +# +# CDS-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. + +"""Jobs module.""" + +from datetime import timezone + +from invenio_i18n import gettext as _ +from invenio_vocabularies.jobs import ProcessDataStreamJob +from marshmallow import Schema, fields +from marshmallow_utils.fields import TZDateTime + + +class InspireArgsSchema(Schema): + """Schema of task input arguments.""" + + since = TZDateTime( + timezone=timezone.utc, + format="%Y-%m-%d", + metadata={ + "description": _( + "YYYY-MM-DD format. " + "Leave field empty if it should continue since last successful run." + ) + }, + ) + + until = TZDateTime( + timezone=timezone.utc, + format="%Y-%m-%d", + metadata={ + "description": _( + "YYYY-MM-DD format. " + "End date of the date range. If this field is provided, then Since field is mandatory. Start/End date is included." + ) + }, + ) + + on = TZDateTime( + timezone=timezone.utc, + format="%Y-%m-%d", + metadata={"description": _("YYYY-MM-DD format. Harvest by exact date.")}, + ) + + inspire_id = fields.String() + + job_arg_schema = fields.String( + metadata={"type": "hidden"}, + dump_default="InspireArgsSchema", + load_default="InspireArgsSchema", + ) + + +class ProcessInspireHarvesterJob(ProcessDataStreamJob): + """Process INSPIRE to CDS harvester registered task.""" + + description = "Inspire to CDS records harvester" + title = "Inspire harvester" + id = "process_inspire" + arguments_schema = InspireArgsSchema + + @classmethod + def build_task_arguments( + cls, job_obj, since=None, inspire_id=None, until=None, on=None, **kwargs + ): + """Build task arguments.""" + return { + "config": { + "readers": [ + { + "args": { + "since": since, + "until": until, + "on": on, + "inspire_id": inspire_id, + }, + "type": "inspire-http-reader", + }, + ], + "writers": [ + { + "args": { + "writer": { + "type": "TODO", + "args": {}, + } + }, + "type": "async", + } + ], + "transformers": [{"type": "inspire-json-transformer"}], + } + } diff --git a/site/cds_rdm/inspire_harvester/reader.py b/site/cds_rdm/inspire_harvester/reader.py new file mode 100644 index 0000000..669f877 --- /dev/null +++ b/site/cds_rdm/inspire_harvester/reader.py @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2025 CERN. +# +# CDS-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. + +"""Reader component.""" +from datetime import datetime +from urllib.parse import urlencode + +import requests +from invenio_vocabularies.datastreams.errors import ReaderError + + +class InspireHTTPReader: + """INSPIRE HTTP Reader.""" + + def __init__( + self, + since=None, + until=None, + on=None, + inspire_id=None, + ): + """Constructor.""" + self._since = since + self._until = until + self._on = on + self._inspire_id = inspire_id + + def _validate_date_format(self, date): + """Validate that input dates are in correct format.""" + try: + date_converted = datetime.strptime(date, "%Y-%m-%d") + except ValueError: + raise ValueError("Date must be in YYYY-MM-DD format.") + return date_converted + + def _validate_input_args(self): + """Different validations for the input args.""" + if self._inspire_id: + if any([self._on, self._until, self._since]): + raise ReaderError( + "When providing INSPIRE record ID for the search, all other args ('On', 'Since' and " + "'Until') are ignored. Please specify only inspire_id value." + ) + elif self._on: + if any([self._inspire_id, self._until, self._since]): + raise ReaderError( + "When searching by exact date, all other args ('Inspire_id', 'Since' and " + "'Until') are ignored. Please specify only 'On' value." + ) + + self._validate_date_format(self._on) + elif self._until: + if self._since is None: # make sure the start date is also provided + raise ReaderError( + "Only end date of the date range is provided. Please specify also 'Since' parameter." + ) + + if any([self._inspire_id, self._on]): + raise ReaderError( + "When searching by the date range, all irrelevant args ('Inspire_id' and 'On' are " + "ignored. Please specify only 'Until' and 'Since' values." + ) + + since_date = self._validate_date_format(self._since) + until_date = self._validate_date_format(self._until) + + if since_date > until_date: + raise ValueError( + "The 'Since' date must be earlier than or equal to the 'Until' date." + ) + else: + self._validate_date_format(self._since) + + def _iter(self, url, *args, **kwargs): + """Yields HTTP response.""" + headers = {"Accept": "application/json"} + + while url: # Continue until there is no "next" link + response = requests.get(url, headers=headers) + data = response.json() + + if response.status_code == 200: + if ( + data["hits"]["total"] == 0 + ): # TODO make it a warning or info when we have proper logging + raise ReaderError( + f"No results found when querying INSPIRE. See URL: {url}." + ) + + yield response.content + else: + raise ReaderError( + f"Error occurred while getting JSON data from INSPIRE. Error message: {response.text}. See URL: {url}." + ) + + # Get the next page URL if available + url = data.get("links", {}).get("next") + + def read(self, item=None, *args, **kwargs): + """Builds a query depending on the input data.""" + self._validate_input_args() + + document_type = "thesis" + oai_set = "ForCDS" + + if self._inspire_id: + # get by INSPIRE id + query_params = { + "q": f"_oai.sets:{oai_set} AND document_type:{document_type} AND id:{self._inspire_id}" + } + elif self._on: + # get by the exact date + query_params = { + "q": f"_oai.sets:{oai_set} AND document_type:{document_type} AND du:{self._on}" + } + elif self._until: + # get by the date range + query_params = { + "q": f"_oai.sets:{oai_set} AND document_type:{document_type} AND du >= {self._since} AND du <= {self._until}" + } + else: + # get since specified date until now + query_params = { + "q": f"_oai.sets:{oai_set} AND document_type:{document_type} AND du >= {self._since}" + } + + base_url = "https://inspirehep.net/api/literature" + encoded_query = urlencode(query_params) + url = f"{base_url}?{encoded_query}" + + yield from self._iter(url=url, *args, **kwargs) diff --git a/site/cds_rdm/inspire_harvester/transformer.py b/site/cds_rdm/inspire_harvester/transformer.py new file mode 100644 index 0000000..b4d8202 --- /dev/null +++ b/site/cds_rdm/inspire_harvester/transformer.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2025 CERN. +# +# CDS-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. + +"""Transformer module.""" + +from invenio_vocabularies.datastreams.transformers import BaseTransformer + + +class InspireJsonTransformer(BaseTransformer): + """INSPIRE JSON transformer.""" + + def __init__(self, root_element=None, *args, **kwargs): + """Initializes the transformer.""" + self.root_element = root_element + super().__init__(*args, **kwargs) + + def apply(self, stream_entry, **kwargs): + """TODO.""" diff --git a/site/setup.cfg b/site/setup.cfg index 9bb2480..1cbb723 100644 --- a/site/setup.cfg +++ b/site/setup.cfg @@ -31,6 +31,7 @@ invenio_jobs.jobs = sync_cern_groups = cds_rdm.jobs:SyncGroups sync_local_accounts_to_names = cds_rdm.jobs:SyncLocalAccounts merge_duplicate_names = cds_rdm.jobs:MergeDuplicateNames + process_inspire = cds_rdm.inspire_harvester.jobs:ProcessInspireHarvesterJob invenio_pidstore.minters = legacy = cds_rdm.minters:legacy_recid_minter idutils.custom_schemes =