diff --git a/api/Pipfile b/api/Pipfile index d825de0e8b5..5de141f8acb 100644 --- a/api/Pipfile +++ b/api/Pipfile @@ -32,7 +32,8 @@ django-tqdm = "~=1.3" django-uuslug = "~=2.0" djangorestframework = "~=3.14" drf-spectacular = "*" -elasticsearch-dsl = "~=7.4" +elasticsearch = "==8.8.2" +elasticsearch-dsl = "~=8.9" future = "~=0.18" gunicorn = "~=21.2" limit = "~=0.2" diff --git a/api/Pipfile.lock b/api/Pipfile.lock index fb2b021ef6b..7b134df28c4 100644 --- a/api/Pipfile.lock +++ b/api/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9f5c3dec42b393b50067a42c3d98567c016123a79fd70c825079498925ff1c4f" + "sha256": "93811fe09d4c575cf6f1664638653d13fd9ec920bc4e0534e3e7c7a75a92ff1a" }, "pipfile-spec": 6, "requires": { @@ -151,19 +151,19 @@ }, "boto3": { "hashes": [ - "sha256:4ee914266c9bed16978677a367fd05053d8dcaddcbe998c9df30787ab73f87aa", - "sha256:682abbd304e93e726163d7de7448c1bf88108c72cf6a23dceb6bba86fdc86dff" + "sha256:ec7895504e3b2dd35fbdb7397bc3c48daaba8e6f37bc436aa928ff4e745f0f1c", + "sha256:fed2d673fce33384697baa0028edfd18b06aa17af5c3ef82da75e9254a8ffb07" ], "index": "pypi", - "version": "==1.28.45" + "version": "==1.28.48" }, "botocore": { "hashes": [ - "sha256:85ff64a0ac2705c4ba36268c3b2dbc1184062e9cf729a89dd66c2f54f730fc79", - "sha256:cceb150cff1d7f7a6faf655510a8384eb4505a33b430495fe1744d03a70dc66a" + "sha256:6ed16f66aa6ed6070fed26d69764cb14c7759e4cc0b1c191283cc48b05d65de9", + "sha256:9618c06f7e08ed590dae6613b8b2511055f7d6c07517382143ef8563169d4ef1" ], "markers": "python_version >= '3.7'", - "version": "==1.31.45" + "version": "==1.31.48" }, "certifi": { "hashes": [ @@ -455,21 +455,29 @@ "index": "pypi", "version": "==0.26.4" }, + "elastic-transport": { + "hashes": [ + "sha256:19db271ab79c9f70f8c43f8f5b5111408781a6176b54ab2e54d713b6d9ceb815", + "sha256:b9ad708ceb7fcdbc6b30a96f886609a109f042c0b9d9f2e44403b3133ba7ff10" + ], + "markers": "python_version >= '3.6'", + "version": "==8.4.0" + }, "elasticsearch": { "hashes": [ - "sha256:0e2454645dc00517dee4c6de3863411a9c5f1955d013c5fefa29123dadc92f98", - "sha256:66c4ece2adfe7cc120e2b6a6798a1fd5c777aecf82eec39bb95cef7cfc7ea2b3" + "sha256:bed8cf8fcc6c3be7c254b579de4c29afab021f373c832246f912d37aef3c6bd5", + "sha256:bffd6ce4faaacf90e6f617241773b3da8fb94e2e83554f5508e2fab92ca79643" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'", - "version": "==7.17.9" + "index": "pypi", + "version": "==8.8.2" }, "elasticsearch-dsl": { "hashes": [ - "sha256:07ee9c87dc28cc3cae2daa19401e1e18a172174ad9e5ca67938f752e3902a1d5", - "sha256:97f79239a252be7c4cce554c29e64695d7ef6a4828372316a5e5ff815e7a7498" + "sha256:66410adf881f02b8a032e8a5b2a3ee093fdeede4b814fbf04c0f6ce0499b7472", + "sha256:ab266bcf84b0f23bd2d73d9b31e054b5d38b20279cf076c53873f46b6dabf747" ], "index": "pypi", - "version": "==7.4.1" + "version": "==8.9.0" }, "frozenlist": { "hashes": [ @@ -917,106 +925,106 @@ }, "rpds-py": { "hashes": [ - "sha256:00e97d43a36811b78fa9ad9d3329bf34f76a31e891a7031a2ac01450c9b168ab", - "sha256:013d6c784150d10236a74b4094a79d96a256b814457e388fc5a4ba9efe24c402", - "sha256:0188b580c490bccb031e9b67e9e8c695a3c44ac5e06218b152361eca847317c3", - "sha256:02945ae38fd78efc40900f509890de84cfd5ffe2cd2939eeb3a8800dc68b87cb", - "sha256:02b4a2e28eb24dac4ef43dda4f6a6f7766e355179b143f7d0c76a1c5488a307b", - "sha256:0527c97dcd8bb983822ee31d3760187083fd3ba18ac4dd22cf5347c89d5628f4", - "sha256:05a1382905026bdd560f806c8c7c16e0f3e3fb359ba8868203ca6e5799884968", - "sha256:0b309908b6ff5ffbf6394818cb73b5a2a74073acee2c57fe8719046389aeff0d", - "sha256:0fc625059b83695fbb4fc8b7a8b66fa94ff9c7b78c84fb9986cd53ff88a28d80", - "sha256:177c033e467a66a054dd3a9534167234a3d0b2e41445807b13b626e01da25d92", - "sha256:18909093944727e068ebfc92e2e6ed1c4fa44135507c1c0555213ce211c53214", - "sha256:1adb04e4b4e41bf30aaa77eeb169c1b9ba9e5010e2e6ce8d6c17e1446edc9b68", - "sha256:1ed3d5385d14be894e12a9033be989e012214a9811e7194849c94032ad69682a", - "sha256:203eb1532d51591d32e8dfafd60b5d31347ea7278c8da02b4b550287f6abe28b", - "sha256:213f9ef5c02ec2f883c1075d25a873149daadbaea50d18d622e9db55ec9849c2", - "sha256:2275f1a022e2383da5d2d101fe11ccdcbae799148c4b83260a4b9309fa3e1fc2", - "sha256:22e6de18f00583f06928cc8d0993104ecc62f7c6da6478db2255de89a30e45d1", - "sha256:289073f68452b96e70990085324be7223944c7409973d13ddfe0eea1c1b5663b", - "sha256:29ec8507664f94cc08457d98cfc41c3cdbddfa8952438e644177a29b04937876", - "sha256:2a55631b93e47956fbc97d69ba2054a8c6a4016f9a3064ec4e031f5f1030cb90", - "sha256:2a86d246a160d98d820ee7d02dc18c923c228de095be362e57b9fd8970b2c4a1", - "sha256:2bca97521ee786087f0c5ef318fef3eef0266a9c3deff88205523cf353af7394", - "sha256:2c8fc6c841ada60a86d29c9ebe2e8757c47eda6553f3596c560e59ca6e9b6fa1", - "sha256:2cd0c9fb5d40887500b4ed818770c68ab4fa6e0395d286f9704be6751b1b7d98", - "sha256:2d27d08056fcd61ff47a0cd8407eff4d3e816c82cb6b9c6f0ce9a0ad49225f81", - "sha256:2ffbf1b38c88d0466de542e91b08225d51782282512f8e2b11715126c41fda48", - "sha256:3fd503c27e7b7034128e30847ecdb4bff4ca5e60f29ad022a9f66ae8940d54ac", - "sha256:3ff1f585a0fdc1415bd733b804f33d386064a308672249b14828130dd43e7c31", - "sha256:41bd430b7b63aa802c02964e331ac0b177148fef5f807d2c90d05ce71a52b4d4", - "sha256:43e9b1531d6a898bdf086acb75c41265c7ec4331267d7619148d407efc72bd24", - "sha256:46af4a742b90c7460e94214f923452c2c1d050a9da1d2b8d4c70cbc045e692b7", - "sha256:46c4c550bf59ce05d6bff2c98053822549aaf9fbaf81103edea325e03350bca1", - "sha256:4969592e3cdeefa4cbb15a26cec102cbd4a1d6e5b695fac9fa026e19741138c8", - "sha256:4a0536ed2b9297c75104e1a3da330828ba1b2639fa53b38d396f98bf7e3c68df", - "sha256:4a96147791e49e84207dd1530109aa0e9eeaf1c8b7a59f150047fc0fcdf9bb64", - "sha256:4c7f9d70f99e1fbcbf57c75328b80e1c0a7f6cad43e75efa90a97221be5efe15", - "sha256:4e8474f7233fe1949ce4e03bea698a600c2d5d6b51dab6d6e6336dbe69acf23e", - "sha256:4f1b804cfad04f862d6a84af9d1ad941b06f671878f0f7ecad6c92007d423de6", - "sha256:529aab727f54a937085184e7436e1d0e19975cf10115eda12d37a683e4ee5342", - "sha256:5612b0b1de8d5114520094bd5fc3d04eb8af6f3e10d48ef05b7c8e77c1fd9545", - "sha256:56777c57246e048908b550af9b81b0ec9cf804fd47cb7502ccd93238bd6025c2", - "sha256:56ba7c1100ed079527f2b995bf5486a2e557e6d5b733c52e8947476338815b69", - "sha256:59d222086daa55421d599609b32d0ebe544e57654c4a0a1490c54a7ebaa67561", - "sha256:5aba767e64b494483ad60c4873bec78d16205a21f8247c99749bd990d9c846c2", - "sha256:5d5eaf988951f6ecb6854ca3300b87123599c711183c83da7ce39717a7cbdbce", - "sha256:73da69e1f612c3e682e34dcb971272d90d6f27b2c99acff444ca455a89978574", - "sha256:75c8766734ac0053e1d683567e65e85306c4ec62631b0591caeb287ac8f72e08", - "sha256:75eea40355a8690459c7291ce6c8ce39c27bd223675c7da6619f510c728feb97", - "sha256:80c3cf46511653f94dfe07c7c79ab105c4164d6e1dfcb35b7214fb9af53eaef4", - "sha256:8557c807388e6617161fe51b1a4747ea8d1133f2d2ad8e79583439abebe58fbd", - "sha256:89438e8885a186c69fe31f7ef98bb2bf29688c466c3caf9060f404c0be89ae80", - "sha256:899b03a3be785a7e1ff84b237da71f0efa2f021512f147dd34ffdf7aa82cb678", - "sha256:8de9b88f0cbac73cfed34220d13c57849e62a7099a714b929142425e926d223a", - "sha256:8f4d561f4728f825e3b793a53064b606ca0b6fc264f67d09e54af452aafc5b82", - "sha256:907b214da5d2fcff0b6ddb83de1333890ca92abaf4bbf8d9c61dc1b95c87fd6e", - "sha256:9118de88c16947eaf5b92f749e65b0501ea69e7c2be7bd6aefc12551622360e1", - "sha256:9568764e72d85cf7855ca78b48e07ed1be47bf230e2cea8dabda3c95f660b0ff", - "sha256:9c74cbee9e532dc34371127f7686d6953e5153a1f22beab7f953d95ee4a0fe09", - "sha256:9cdfd649011ce2d90cb0dd304c5aba1190fac0c266d19a9e2b96b81cfd150a09", - "sha256:9f00d54b18dd837f1431d66b076737deb7c29ce3ebb8412ceaf44d5e1954ac0c", - "sha256:a2f416cdfe92f5fbb77177f5f3f7830059d1582db05f2c7119bf80069d1ab69b", - "sha256:a4cb372e22e9c879bd9a9cc9b20b7c1fbf30a605ac953da45ecec05d8a6e1c77", - "sha256:a65de5c02884760a14a58304fb6303f9ddfc582e630f385daea871e1bdb18686", - "sha256:aa3b3a43dabc4cc57a7800f526cbe03f71c69121e21b863fdf497b59b462b163", - "sha256:ab0f7aabdbce4a202e013083eeab71afdb85efa405dc4a06fea98cde81204675", - "sha256:abe081453166e206e3a8c6d8ace57214c17b6d9477d7601ac14a365344dbc1f4", - "sha256:ae141c9017f8f473a6ee07a9425da021816a9f8c0683c2e5442f0ccf56b0fc62", - "sha256:af52078719209bef33e38131486fd784832dd8d1dc9b85f00a44f6e7437dd021", - "sha256:b00150a9a3fd0a8efaa90bc2696c105b04039d50763dd1c95a34c88c5966cb57", - "sha256:b2660000e1a113869c86eb5cc07f3343467490f3cd9d0299f81da9ddae7137b7", - "sha256:b3eb1a0d2b6d232d1bcdfc3fcc5f7b004ab3fbd9203011a3172f051d4527c0b6", - "sha256:b589d93a60e78fe55d5bc76ee8c2bf945dbdbb7cd16044c53e0307604e448de1", - "sha256:b8578fc6c8bdd0201327503720fa581000b4bd3934abbf07e2628d1ad3de157d", - "sha256:ba1b28e44f611f3f2b436bd8290050a61db4b59a8e24be4465f44897936b3824", - "sha256:bb44644371eaa29a3aba7b69b1862d0d56f073bb7585baa32e4271a71a91ee82", - "sha256:bcde80aefe7054fad6277762fb7e9d35c72ea479a485ae1bb14629c640987b30", - "sha256:bd1142d22fdb183a0fff66d79134bf644401437fed874f81066d314c67ee193c", - "sha256:bf77f9017fcfa1232f98598a637406e6c33982ccba8a5922339575c3e2b90ea5", - "sha256:c2772bb95062e3f9774140205cd65d8997e39620715486cf5f843cf4ad8f744c", - "sha256:c4ecc4e9a5d73a816cae36ee6b5d8b7a0c72013cae1e101406e832887c3dc2d8", - "sha256:c86231c66e4f422e7c13ea6200bb4048b3016c8bfd11b4fd0dabd04d2c8e3501", - "sha256:c8f6526df47953b07c45b95c4d1da6b9a0861c0e5da0271db96bb1d807825412", - "sha256:ccfb77f6dc8abffa6f1c7e3975ed9070a41ce5fcc11154d2bead8c1baa940f09", - "sha256:d9d7efaad48b859053b90dedd69bc92f2095084251e732e4c57ac9726bcb1e64", - "sha256:dd91a7d7a9ce7f4983097c91ce211f3e5569cc21caa16f2692298a07e396f82b", - "sha256:de4a2fd524993578fe093044f291b4b24aab134390030b3b9b5f87fd41ab7e75", - "sha256:df61f818edf7c8626bfa392f825860fb670b5f8336e238eb0ec7e2a5689cdded", - "sha256:e1147bc3d0dd1e549d991110d0a09557ec9f925dbc1ca62871fcdab2ec9d716b", - "sha256:e1954f4b239d1a92081647eecfd51cbfd08ea16eb743b8af1cd0113258feea14", - "sha256:e281b71922208e00886e4b7ffbfcf27874486364f177418ab676f102130e7ec9", - "sha256:e69737bd56006a86fd5a78b2b85447580a6138c930a75eb9ef39fe03d90782b1", - "sha256:e82b4a70cc67094f3f3fd77579702f48fcf1de7bdc67d79b8f1e24d089a6162c", - "sha256:e92e5817eb6bfed23aa5e45bfe30647b83602bdd6f9e25d63524d4e6258458b0", - "sha256:eaba0613c759ebf95988a84f766ca6b7432d55ce399194f95dde588ad1be0878", - "sha256:edd74b760a6bb950397e7a7bd2f38e6700f6525062650b1d77c6d851b82f02c2", - "sha256:f40abbcc0a7d9a8a80870af839d317e6932533f98682aabd977add6c53beeb23", - "sha256:fce7a8ee8d0f682c953c0188735d823f0fcb62779bf92cd6ba473a8e730e26ad" + "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9", + "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637", + "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5", + "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9", + "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c", + "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957", + "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6", + "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154", + "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8", + "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569", + "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2", + "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c", + "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453", + "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1", + "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7", + "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b", + "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9", + "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496", + "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3", + "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b", + "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6", + "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da", + "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842", + "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd", + "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294", + "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71", + "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093", + "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e", + "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c", + "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e", + "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b", + "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97", + "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac", + "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf", + "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a", + "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc", + "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0", + "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623", + "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6", + "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8", + "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b", + "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d", + "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff", + "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb", + "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08", + "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33", + "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5", + "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a", + "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a", + "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762", + "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860", + "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73", + "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a", + "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065", + "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c", + "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c", + "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec", + "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515", + "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72", + "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd", + "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec", + "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12", + "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1", + "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557", + "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25", + "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff", + "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8", + "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9", + "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d", + "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a", + "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e", + "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c", + "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0", + "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48", + "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e", + "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314", + "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717", + "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95", + "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8", + "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57", + "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33", + "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1", + "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f", + "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f", + "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9", + "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599", + "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41", + "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391", + "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475", + "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882", + "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740", + "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f", + "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee", + "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836", + "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c", + "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a", + "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb" ], "markers": "python_version >= '3.8'", - "version": "==0.10.2" + "version": "==0.10.3" }, "s3transfer": { "hashes": [ @@ -1028,11 +1036,11 @@ }, "sentry-sdk": { "hashes": [ - "sha256:2e53ad63f96bb9da6570ba2e755c267e529edcf58580a2c0d2a11ef26e1e678b", - "sha256:7dc873b87e1faf4d00614afd1058bfa1522942f33daef8a59f90de8ed75cd10c" + "sha256:64a7141005fb775b9db298a30de93e3b83e0ddd1232dc6f36eb38aebc1553291", + "sha256:6de2e88304873484207fed836388e422aeff000609b104c802749fd89d56ba5b" ], "index": "pypi", - "version": "==1.30.0" + "version": "==1.31.0" }, "six": { "hashes": [ @@ -1065,14 +1073,6 @@ "markers": "python_version >= '3.7'", "version": "==4.66.1" }, - "typing-extensions": { - "hashes": [ - "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", - "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" - ], - "markers": "python_version < '3.11'", - "version": "==4.7.1" - }, "uritemplate": { "hashes": [ "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0", @@ -1252,14 +1252,6 @@ } }, "develop": { - "appnope": { - "hashes": [ - "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", - "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" - ], - "markers": "sys_platform == 'darwin'", - "version": "==0.1.3" - }, "asttokens": { "hashes": [ "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", @@ -1267,14 +1259,6 @@ ], "version": "==2.4.0" }, - "async-timeout": { - "hashes": [ - "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", - "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" - ], - "markers": "python_version >= '3.7'", - "version": "==4.0.3" - }, "attrs": { "hashes": [ "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", @@ -1326,14 +1310,6 @@ "markers": "python_version >= '3.5'", "version": "==5.1.1" }, - "exceptiongroup": { - "hashes": [ - "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", - "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" - ], - "markers": "python_version < '3.11'", - "version": "==1.1.3" - }, "executing": { "hashes": [ "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", @@ -1644,106 +1620,106 @@ }, "rpds-py": { "hashes": [ - "sha256:00e97d43a36811b78fa9ad9d3329bf34f76a31e891a7031a2ac01450c9b168ab", - "sha256:013d6c784150d10236a74b4094a79d96a256b814457e388fc5a4ba9efe24c402", - "sha256:0188b580c490bccb031e9b67e9e8c695a3c44ac5e06218b152361eca847317c3", - "sha256:02945ae38fd78efc40900f509890de84cfd5ffe2cd2939eeb3a8800dc68b87cb", - "sha256:02b4a2e28eb24dac4ef43dda4f6a6f7766e355179b143f7d0c76a1c5488a307b", - "sha256:0527c97dcd8bb983822ee31d3760187083fd3ba18ac4dd22cf5347c89d5628f4", - "sha256:05a1382905026bdd560f806c8c7c16e0f3e3fb359ba8868203ca6e5799884968", - "sha256:0b309908b6ff5ffbf6394818cb73b5a2a74073acee2c57fe8719046389aeff0d", - "sha256:0fc625059b83695fbb4fc8b7a8b66fa94ff9c7b78c84fb9986cd53ff88a28d80", - "sha256:177c033e467a66a054dd3a9534167234a3d0b2e41445807b13b626e01da25d92", - "sha256:18909093944727e068ebfc92e2e6ed1c4fa44135507c1c0555213ce211c53214", - "sha256:1adb04e4b4e41bf30aaa77eeb169c1b9ba9e5010e2e6ce8d6c17e1446edc9b68", - "sha256:1ed3d5385d14be894e12a9033be989e012214a9811e7194849c94032ad69682a", - "sha256:203eb1532d51591d32e8dfafd60b5d31347ea7278c8da02b4b550287f6abe28b", - "sha256:213f9ef5c02ec2f883c1075d25a873149daadbaea50d18d622e9db55ec9849c2", - "sha256:2275f1a022e2383da5d2d101fe11ccdcbae799148c4b83260a4b9309fa3e1fc2", - "sha256:22e6de18f00583f06928cc8d0993104ecc62f7c6da6478db2255de89a30e45d1", - "sha256:289073f68452b96e70990085324be7223944c7409973d13ddfe0eea1c1b5663b", - "sha256:29ec8507664f94cc08457d98cfc41c3cdbddfa8952438e644177a29b04937876", - "sha256:2a55631b93e47956fbc97d69ba2054a8c6a4016f9a3064ec4e031f5f1030cb90", - "sha256:2a86d246a160d98d820ee7d02dc18c923c228de095be362e57b9fd8970b2c4a1", - "sha256:2bca97521ee786087f0c5ef318fef3eef0266a9c3deff88205523cf353af7394", - "sha256:2c8fc6c841ada60a86d29c9ebe2e8757c47eda6553f3596c560e59ca6e9b6fa1", - "sha256:2cd0c9fb5d40887500b4ed818770c68ab4fa6e0395d286f9704be6751b1b7d98", - "sha256:2d27d08056fcd61ff47a0cd8407eff4d3e816c82cb6b9c6f0ce9a0ad49225f81", - "sha256:2ffbf1b38c88d0466de542e91b08225d51782282512f8e2b11715126c41fda48", - "sha256:3fd503c27e7b7034128e30847ecdb4bff4ca5e60f29ad022a9f66ae8940d54ac", - "sha256:3ff1f585a0fdc1415bd733b804f33d386064a308672249b14828130dd43e7c31", - "sha256:41bd430b7b63aa802c02964e331ac0b177148fef5f807d2c90d05ce71a52b4d4", - "sha256:43e9b1531d6a898bdf086acb75c41265c7ec4331267d7619148d407efc72bd24", - "sha256:46af4a742b90c7460e94214f923452c2c1d050a9da1d2b8d4c70cbc045e692b7", - "sha256:46c4c550bf59ce05d6bff2c98053822549aaf9fbaf81103edea325e03350bca1", - "sha256:4969592e3cdeefa4cbb15a26cec102cbd4a1d6e5b695fac9fa026e19741138c8", - "sha256:4a0536ed2b9297c75104e1a3da330828ba1b2639fa53b38d396f98bf7e3c68df", - "sha256:4a96147791e49e84207dd1530109aa0e9eeaf1c8b7a59f150047fc0fcdf9bb64", - "sha256:4c7f9d70f99e1fbcbf57c75328b80e1c0a7f6cad43e75efa90a97221be5efe15", - "sha256:4e8474f7233fe1949ce4e03bea698a600c2d5d6b51dab6d6e6336dbe69acf23e", - "sha256:4f1b804cfad04f862d6a84af9d1ad941b06f671878f0f7ecad6c92007d423de6", - "sha256:529aab727f54a937085184e7436e1d0e19975cf10115eda12d37a683e4ee5342", - "sha256:5612b0b1de8d5114520094bd5fc3d04eb8af6f3e10d48ef05b7c8e77c1fd9545", - "sha256:56777c57246e048908b550af9b81b0ec9cf804fd47cb7502ccd93238bd6025c2", - "sha256:56ba7c1100ed079527f2b995bf5486a2e557e6d5b733c52e8947476338815b69", - "sha256:59d222086daa55421d599609b32d0ebe544e57654c4a0a1490c54a7ebaa67561", - "sha256:5aba767e64b494483ad60c4873bec78d16205a21f8247c99749bd990d9c846c2", - "sha256:5d5eaf988951f6ecb6854ca3300b87123599c711183c83da7ce39717a7cbdbce", - "sha256:73da69e1f612c3e682e34dcb971272d90d6f27b2c99acff444ca455a89978574", - "sha256:75c8766734ac0053e1d683567e65e85306c4ec62631b0591caeb287ac8f72e08", - "sha256:75eea40355a8690459c7291ce6c8ce39c27bd223675c7da6619f510c728feb97", - "sha256:80c3cf46511653f94dfe07c7c79ab105c4164d6e1dfcb35b7214fb9af53eaef4", - "sha256:8557c807388e6617161fe51b1a4747ea8d1133f2d2ad8e79583439abebe58fbd", - "sha256:89438e8885a186c69fe31f7ef98bb2bf29688c466c3caf9060f404c0be89ae80", - "sha256:899b03a3be785a7e1ff84b237da71f0efa2f021512f147dd34ffdf7aa82cb678", - "sha256:8de9b88f0cbac73cfed34220d13c57849e62a7099a714b929142425e926d223a", - "sha256:8f4d561f4728f825e3b793a53064b606ca0b6fc264f67d09e54af452aafc5b82", - "sha256:907b214da5d2fcff0b6ddb83de1333890ca92abaf4bbf8d9c61dc1b95c87fd6e", - "sha256:9118de88c16947eaf5b92f749e65b0501ea69e7c2be7bd6aefc12551622360e1", - "sha256:9568764e72d85cf7855ca78b48e07ed1be47bf230e2cea8dabda3c95f660b0ff", - "sha256:9c74cbee9e532dc34371127f7686d6953e5153a1f22beab7f953d95ee4a0fe09", - "sha256:9cdfd649011ce2d90cb0dd304c5aba1190fac0c266d19a9e2b96b81cfd150a09", - "sha256:9f00d54b18dd837f1431d66b076737deb7c29ce3ebb8412ceaf44d5e1954ac0c", - "sha256:a2f416cdfe92f5fbb77177f5f3f7830059d1582db05f2c7119bf80069d1ab69b", - "sha256:a4cb372e22e9c879bd9a9cc9b20b7c1fbf30a605ac953da45ecec05d8a6e1c77", - "sha256:a65de5c02884760a14a58304fb6303f9ddfc582e630f385daea871e1bdb18686", - "sha256:aa3b3a43dabc4cc57a7800f526cbe03f71c69121e21b863fdf497b59b462b163", - "sha256:ab0f7aabdbce4a202e013083eeab71afdb85efa405dc4a06fea98cde81204675", - "sha256:abe081453166e206e3a8c6d8ace57214c17b6d9477d7601ac14a365344dbc1f4", - "sha256:ae141c9017f8f473a6ee07a9425da021816a9f8c0683c2e5442f0ccf56b0fc62", - "sha256:af52078719209bef33e38131486fd784832dd8d1dc9b85f00a44f6e7437dd021", - "sha256:b00150a9a3fd0a8efaa90bc2696c105b04039d50763dd1c95a34c88c5966cb57", - "sha256:b2660000e1a113869c86eb5cc07f3343467490f3cd9d0299f81da9ddae7137b7", - "sha256:b3eb1a0d2b6d232d1bcdfc3fcc5f7b004ab3fbd9203011a3172f051d4527c0b6", - "sha256:b589d93a60e78fe55d5bc76ee8c2bf945dbdbb7cd16044c53e0307604e448de1", - "sha256:b8578fc6c8bdd0201327503720fa581000b4bd3934abbf07e2628d1ad3de157d", - "sha256:ba1b28e44f611f3f2b436bd8290050a61db4b59a8e24be4465f44897936b3824", - "sha256:bb44644371eaa29a3aba7b69b1862d0d56f073bb7585baa32e4271a71a91ee82", - "sha256:bcde80aefe7054fad6277762fb7e9d35c72ea479a485ae1bb14629c640987b30", - "sha256:bd1142d22fdb183a0fff66d79134bf644401437fed874f81066d314c67ee193c", - "sha256:bf77f9017fcfa1232f98598a637406e6c33982ccba8a5922339575c3e2b90ea5", - "sha256:c2772bb95062e3f9774140205cd65d8997e39620715486cf5f843cf4ad8f744c", - "sha256:c4ecc4e9a5d73a816cae36ee6b5d8b7a0c72013cae1e101406e832887c3dc2d8", - "sha256:c86231c66e4f422e7c13ea6200bb4048b3016c8bfd11b4fd0dabd04d2c8e3501", - "sha256:c8f6526df47953b07c45b95c4d1da6b9a0861c0e5da0271db96bb1d807825412", - "sha256:ccfb77f6dc8abffa6f1c7e3975ed9070a41ce5fcc11154d2bead8c1baa940f09", - "sha256:d9d7efaad48b859053b90dedd69bc92f2095084251e732e4c57ac9726bcb1e64", - "sha256:dd91a7d7a9ce7f4983097c91ce211f3e5569cc21caa16f2692298a07e396f82b", - "sha256:de4a2fd524993578fe093044f291b4b24aab134390030b3b9b5f87fd41ab7e75", - "sha256:df61f818edf7c8626bfa392f825860fb670b5f8336e238eb0ec7e2a5689cdded", - "sha256:e1147bc3d0dd1e549d991110d0a09557ec9f925dbc1ca62871fcdab2ec9d716b", - "sha256:e1954f4b239d1a92081647eecfd51cbfd08ea16eb743b8af1cd0113258feea14", - "sha256:e281b71922208e00886e4b7ffbfcf27874486364f177418ab676f102130e7ec9", - "sha256:e69737bd56006a86fd5a78b2b85447580a6138c930a75eb9ef39fe03d90782b1", - "sha256:e82b4a70cc67094f3f3fd77579702f48fcf1de7bdc67d79b8f1e24d089a6162c", - "sha256:e92e5817eb6bfed23aa5e45bfe30647b83602bdd6f9e25d63524d4e6258458b0", - "sha256:eaba0613c759ebf95988a84f766ca6b7432d55ce399194f95dde588ad1be0878", - "sha256:edd74b760a6bb950397e7a7bd2f38e6700f6525062650b1d77c6d851b82f02c2", - "sha256:f40abbcc0a7d9a8a80870af839d317e6932533f98682aabd977add6c53beeb23", - "sha256:fce7a8ee8d0f682c953c0188735d823f0fcb62779bf92cd6ba473a8e730e26ad" + "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9", + "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637", + "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5", + "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9", + "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c", + "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957", + "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6", + "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154", + "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8", + "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569", + "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2", + "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c", + "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453", + "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1", + "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7", + "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b", + "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9", + "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496", + "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3", + "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b", + "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6", + "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da", + "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842", + "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd", + "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294", + "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71", + "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093", + "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e", + "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c", + "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e", + "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b", + "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97", + "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac", + "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf", + "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a", + "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc", + "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0", + "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623", + "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6", + "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8", + "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b", + "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d", + "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff", + "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb", + "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08", + "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33", + "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5", + "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a", + "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a", + "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762", + "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860", + "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73", + "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a", + "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065", + "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c", + "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c", + "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec", + "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515", + "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72", + "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd", + "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec", + "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12", + "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1", + "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557", + "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25", + "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff", + "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8", + "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9", + "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d", + "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a", + "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e", + "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c", + "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0", + "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48", + "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e", + "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314", + "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717", + "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95", + "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8", + "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57", + "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33", + "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1", + "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f", + "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f", + "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9", + "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599", + "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41", + "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391", + "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475", + "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882", + "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740", + "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f", + "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee", + "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836", + "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c", + "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a", + "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb" ], "markers": "python_version >= '3.8'", - "version": "==0.10.2" + "version": "==0.10.3" }, "setproctitle": { "hashes": [ @@ -1872,28 +1848,20 @@ "markers": "python_version >= '3.7'", "version": "==2.3.0" }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version < '3.11'", - "version": "==2.0.1" - }, "traitlets": { "hashes": [ - "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8", - "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9" + "sha256:417745a96681fbb358e723d5346a547521f36e9bd0d50ba7ab368fff5d67aa54", + "sha256:f584ea209240466e66e91f3c81aa7d004ba4cf794990b0c775938a1544217cd1" ], - "markers": "python_version >= '3.7'", - "version": "==5.9.0" + "markers": "python_version >= '3.8'", + "version": "==5.10.0" }, "typing-extensions": { "hashes": [ "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.7'", "version": "==4.7.1" }, "wcwidth": { diff --git a/api/api/models/media.py b/api/api/models/media.py index 5cd795f1323..be6f63a3145 100644 --- a/api/api/models/media.py +++ b/api/api/models/media.py @@ -6,7 +6,7 @@ from django.db import models from django.utils.html import format_html -from elasticsearch import Elasticsearch, TransportError +from elasticsearch import BadRequestError, Elasticsearch, NotFoundError from api.models.base import OpenLedgerModel from api.models.mixins import ForeignIdentifierMixin, IdentifierMixin, MediaMixin @@ -275,14 +275,15 @@ def _perform_index_update(self, method: str, raise_errors: bool, **es_method_arg refresh=True, **es_method_args, ) - except TransportError as e: - if e.status_code == 404: + except (NotFoundError, BadRequestError) as e: + if isinstance(e, NotFoundError): # This is expected for the filtered index, but we should still # log, just in case. logger.warning( f"Document with _id {document_id} not found " f"in {index} index. No update performed." ) + continue else: raise e diff --git a/api/conf/settings/elasticsearch.py b/api/conf/settings/elasticsearch.py index 4f8a6cfb65c..83c2142e478 100644 --- a/api/conf/settings/elasticsearch.py +++ b/api/conf/settings/elasticsearch.py @@ -2,24 +2,28 @@ from aws_requests_auth.aws_auth import AWSRequestsAuth from decouple import config -from elasticsearch import Elasticsearch, RequestsHttpConnection +from elastic_transport import RequestsHttpNode +from elasticsearch import Elasticsearch from elasticsearch_dsl import connections from api.constants.media_types import MEDIA_TYPES from conf.settings.aws import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY -def _elasticsearch_connect(): +def _elasticsearch_connect() -> tuple[Elasticsearch, str]: """ Connect to configured Elasticsearch domain. :return: An Elasticsearch connection object. """ + es_scheme = config("ELASTICSEARCH_SCHEME", default="http://") es_url = config("ELASTICSEARCH_URL", default="localhost") es_port = config("ELASTICSEARCH_PORT", default=9200, cast=int) es_aws_region = config("ELASTICSEARCH_AWS_REGION", default="us-east-1") + es_endpoint = f"{es_scheme}{es_url}:{es_port}" + auth = AWSRequestsAuth( aws_access_key=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, @@ -29,27 +33,26 @@ def _elasticsearch_connect(): ) auth.encode = lambda x: bytes(x.encode("utf-8")) _es = Elasticsearch( - host=es_url, - port=es_port, - connection_class=RequestsHttpConnection, - timeout=10, + es_endpoint, + request_timeout=10, max_retries=1, retry_on_timeout=True, http_auth=auth, - wait_for_status="yellow", + node_class=RequestsHttpNode, ) _es.info() - return _es + _es.cluster.health(wait_for_status="yellow") + return _es, es_endpoint SETUP_ES = config("SETUP_ES", default=True, cast=bool) if SETUP_ES: - ES = _elasticsearch_connect() + ES, ES_ENDPOINT = _elasticsearch_connect() #: Elasticsearch client, also aliased to connection 'default' connections.add_connection("default", ES) else: - ES = None + ES, ES_ENDPOINT = None, None MEDIA_INDEX_MAPPING = { media_type: config(f"{media_type.upper()}_INDEX_NAME", default=media_type) diff --git a/api/test/factory/models/__init__.py b/api/test/factory/models/__init__.py index 7cdf1308571..628c8d484eb 100644 --- a/api/test/factory/models/__init__.py +++ b/api/test/factory/models/__init__.py @@ -1,9 +1,14 @@ from test.factory.models.audio import ( AudioAddOnFactory, AudioFactory, + AudioReportFactory, MatureAudioFactory, ) -from test.factory.models.image import ImageFactory, MatureImageFactory +from test.factory.models.image import ( + ImageFactory, + ImageReportFactory, + MatureImageFactory, +) from test.factory.models.oauth2 import ( AccessTokenFactory, OAuth2RegistrationFactory, diff --git a/api/test/factory/models/audio.py b/api/test/factory/models/audio.py index c6f88cc820a..9735b2c2c1a 100644 --- a/api/test/factory/models/audio.py +++ b/api/test/factory/models/audio.py @@ -4,7 +4,7 @@ import factory from factory.django import DjangoModelFactory -from api.models.audio import Audio, AudioAddOn, MatureAudio +from api.models.audio import Audio, AudioAddOn, AudioReport, MatureAudio class MatureAudioFactory(DjangoModelFactory): @@ -28,3 +28,10 @@ class Meta: audio_identifier = IdentifierFactory(AudioFactory) waveform_peaks = Faker("waveform") + + +class AudioReportFactory(DjangoModelFactory): + class Meta: + model = AudioReport + + media_obj = factory.SubFactory(AudioFactory) diff --git a/api/test/factory/models/image.py b/api/test/factory/models/image.py index 025f8acdf39..dc034ed3db0 100644 --- a/api/test/factory/models/image.py +++ b/api/test/factory/models/image.py @@ -1,9 +1,9 @@ -from test.factory.models.media import MediaFactory +from test.factory.models.media import MediaFactory, MediaReportFactory import factory from factory.django import DjangoModelFactory -from api.models.image import Image, MatureImage +from api.models.image import Image, ImageReport, MatureImage class MatureImageFactory(DjangoModelFactory): @@ -18,3 +18,10 @@ class ImageFactory(MediaFactory): class Meta: model = Image + + +class ImageReportFactory(MediaReportFactory): + class Meta: + model = ImageReport + + media_obj = factory.SubFactory(ImageFactory) diff --git a/api/test/factory/models/media.py b/api/test/factory/models/media.py index 8fc6505d602..2df54763b8d 100644 --- a/api/test/factory/models/media.py +++ b/api/test/factory/models/media.py @@ -4,6 +4,7 @@ from django.conf import settings import factory +import pook from elasticsearch import Elasticsearch from elasticsearch_dsl.response import Hit from factory.django import DjangoModelFactory @@ -95,6 +96,12 @@ def create(cls, *args, **kwargs) -> AbstractMedia | tuple[AbstractMedia, Hit]: skip_es = kwargs.pop("skip_es", False) with_hit = kwargs.pop("with_hit", False) + pook_active = pook.isactive() + if pook_active: + # Temporarily disable pook so that the calls to ES to create + # the factory document don't fail + pook.disable() + model_class = cls._meta.get_model_class() if cls._highest_pre_existing_pk is None: response = settings.ES.search( @@ -121,6 +128,10 @@ def create(cls, *args, **kwargs) -> AbstractMedia | tuple[AbstractMedia, Hit]: if mature_reported: cls._mature_factory.create(media_obj=model) + if pook_active: + # Reactivate pook if it was active + pook.activate() + if with_hit: return model, hit @@ -154,6 +165,7 @@ def _save_model_to_es( origin_index = media._meta.db_table source_document = cls._create_es_source_document(media, mature) + es.create( index=origin_index, id=str(media.pk), @@ -190,3 +202,8 @@ class IdentifierFactory(factory.SubFactory): def evaluate(self, instance, step, extra): model = super().evaluate(instance, step, extra) return model.identifier + + +class MediaReportFactory(DjangoModelFactory): + class Meta: + abstract = True diff --git a/api/test/unit/conftest.py b/api/test/unit/conftest.py index 3392e7a0760..5dd314db2ed 100644 --- a/api/test/unit/conftest.py +++ b/api/test/unit/conftest.py @@ -1,14 +1,28 @@ from dataclasses import dataclass from test.factory import models as model_factories -from test.factory.models.media import CREATED_BY_FIXTURE_MARKER, MediaFactory +from test.factory.models.media import ( + CREATED_BY_FIXTURE_MARKER, + MediaFactory, + MediaReportFactory, +) from unittest.mock import MagicMock from rest_framework.test import APIClient, APIRequestFactory +import pook import pytest from elasticsearch import Elasticsearch from fakeredis import FakeRedis +from api.models import ( + Audio, + DeletedAudio, + DeletedImage, + Image, + MatureAudio, + MatureImage, +) +from api.models.media import AbstractDeletedMedia, AbstractMatureMedia, AbstractMedia from api.serializers.audio_serializers import ( AudioReportRequestSerializer, AudioSearchRequestSerializer, @@ -66,10 +80,18 @@ class MediaTypeConfig: origin_index: str filtered_index: str model_factory: MediaFactory + model_class: AbstractMedia mature_factory: MediaFactory + mature_class: AbstractMatureMedia search_request_serializer: MediaSearchRequestSerializer model_serializer: MediaSerializer report_serializer: MediaReportRequestSerializer + report_factory: MediaReportFactory + deleted_class: AbstractDeletedMedia + + @property + def indexes(self): + return (self.origin_index, self.filtered_index) MEDIA_TYPE_CONFIGS = { @@ -79,10 +101,14 @@ class MediaTypeConfig: origin_index="image", filtered_index="image-filtered", model_factory=model_factories.ImageFactory, + model_class=Image, mature_factory=model_factories.MatureImageFactory, search_request_serializer=ImageSearchRequestSerializer, model_serializer=ImageSerializer, report_serializer=ImageReportRequestSerializer, + report_factory=model_factories.ImageReportFactory, + mature_class=MatureImage, + deleted_class=DeletedImage, ), "audio": MediaTypeConfig( media_type="audio", @@ -90,10 +116,14 @@ class MediaTypeConfig: origin_index="audio", filtered_index="audio-filtered", model_factory=model_factories.AudioFactory, + model_class=Audio, mature_factory=model_factories.MatureAudioFactory, search_request_serializer=AudioSearchRequestSerializer, model_serializer=AudioSerializer, report_serializer=AudioReportRequestSerializer, + report_factory=model_factories.AudioReportFactory, + mature_class=MatureAudio, + deleted_class=DeletedAudio, ), } @@ -129,8 +159,16 @@ def cleanup_elasticsearch_test_documents(request, settings): es: Elasticsearch = settings.ES + # If pook was activated by a test and not deactivated + # (usually because the test failed and something prevent + # pook from cleaning up after itself), disable here so that + # the ES request on the next line doesn't get intercepted, + # causing pook to raise an exception about the request not + # matching and the fixture documents not getting cleaned. + pook.disable() + es.delete_by_query( index="*", - body={"query": {"match": {"tags.name": CREATED_BY_FIXTURE_MARKER}}}, + query={"match": {"tags.name": CREATED_BY_FIXTURE_MARKER}}, refresh=True, ) diff --git a/api/test/unit/controllers/test_search_controller.py b/api/test/unit/controllers/test_search_controller.py index 3ed985456d6..e802be4920e 100644 --- a/api/test/unit/controllers/test_search_controller.py +++ b/api/test/unit/controllers/test_search_controller.py @@ -576,15 +576,19 @@ def test_no_post_process_results_recursion( hit_count=hit_count, ) - es_host = settings.ES.transport.kwargs["host"] - es_port = settings.ES.transport.kwargs["port"] - # `origin_index` enforced by passing `exact_index=True` below. es_endpoint = ( - f"http://{es_host}:{es_port}/{image_media_type_config.origin_index}/_search" + f"{settings.ES_ENDPOINT}/{image_media_type_config.origin_index}/_search" ) - mock_search = pook.post(es_endpoint).times(1).reply(200).json(mock_es_response).mock + mock_search = ( + pook.post(es_endpoint) + .times(1) + .reply(200) + .header("x-elastic-product", "Elasticsearch") + .json(mock_es_response) + .mock + ) # Ensure dead link filtering does not remove any results pook.head( @@ -682,12 +686,9 @@ def test_post_process_results_recurses_as_needed( base_hits=mock_es_response_1["hits"]["hits"], ) - es_host = settings.ES.transport.kwargs["host"] - es_port = settings.ES.transport.kwargs["port"] - # `origin_index` enforced by passing `exact_index=True` below. es_endpoint = ( - f"http://{es_host}:{es_port}/{image_media_type_config.origin_index}/_search" + f"{settings.ES_ENDPOINT}/{image_media_type_config.origin_index}/_search" ) # `from` is always 0 if there is no query mask @@ -703,6 +704,7 @@ def test_post_process_results_recurses_as_needed( .body(re.compile('from":0')) .times(1) .reply(200) + .header("x-elastic-product", "Elasticsearch") .json(mock_es_response_1) .mock ) @@ -714,6 +716,7 @@ def test_post_process_results_recurses_as_needed( .body(re.compile('from":0')) .times(1) .reply(200) + .header("x-elastic-product", "Elasticsearch") .json(mock_es_response_2) .mock ) diff --git a/api/test/unit/models/test_media_report.py b/api/test/unit/models/test_media_report.py index 9ca4fb6706c..0433647015a 100644 --- a/api/test/unit/models/test_media_report.py +++ b/api/test/unit/models/test_media_report.py @@ -1,24 +1,13 @@ import uuid -from test.factory.models.audio import AudioFactory -from test.factory.models.image import ImageFactory from typing import Literal, Union -from unittest.mock import MagicMock, call, patch from django.core.exceptions import ObjectDoesNotExist +import pook import pytest -from elasticsearch import TransportError - -from api.models import ( - Audio, - AudioReport, - DeletedAudio, - DeletedImage, - Image, - ImageReport, - MatureAudio, - MatureImage, -) +from elasticsearch import BadRequestError, NotFoundError + +from api.models import DeletedAudio, DeletedImage, MatureAudio, MatureImage from api.models.media import ( DEINDEXED, DMCA, @@ -38,153 +27,106 @@ reason_params = pytest.mark.parametrize("reason", [DMCA, MATURE, OTHER]) -@pytest.mark.parametrize( - "media_type, report_class", [("image", ImageReport), ("audio", AudioReport)] -) @reason_params -def test_cannot_report_invalid_identifier(media_type, report_class, reason): +def test_cannot_report_invalid_identifier(media_type_config, reason): with pytest.raises(ObjectDoesNotExist): - report_class.objects.create( + media_type_config.report_factory.create( media_obj_id=uuid.uuid4(), reason=reason, ) -@pytest.mark.parametrize( - "media_type, report_class, mature_class, deleted_class, model_factory", - [ - ("image", ImageReport, MatureImage, DeletedImage, ImageFactory), - ("audio", AudioReport, MatureAudio, DeletedAudio, AudioFactory), - ], -) @reason_params def test_pending_reports_have_no_subreport_models( - media_type: MediaType, - report_class, - mature_class, - deleted_class, + media_type_config, reason, - model_factory, ): - media = model_factory.create() - report = report_class.objects.create(media_obj=media, reason=reason) + media = media_type_config.model_factory.create() + report = media_type_config.report_factory.create(media_obj=media, reason=reason) assert report.status == PENDING - assert not mature_class.objects.filter(media_obj=media).exists() - assert not deleted_class.objects.filter(media_obj=media).exists() + assert not media_type_config.mature_class.objects.filter(media_obj=media).exists() + assert not media_type_config.deleted_class.objects.filter(media_obj=media).exists() -@pytest.mark.parametrize( - "media_type, report_class, mature_class, model_factory", - [ - ("image", ImageReport, MatureImage, ImageFactory), - ("audio", AudioReport, MatureAudio, AudioFactory), - ], -) -def test_mature_filtering_creates_mature_image_instance( - media_type: MediaType, report_class, mature_class, model_factory -): - media = model_factory.create() - mock_es = MagicMock() - with patch("django.conf.settings.ES", mock_es): - report_class.objects.create( - media_obj=media, reason=MATURE, status=MATURE_FILTERED - ) +def test_mature_filtering_creates_mature_image_instance(media_type_config, settings): + media = media_type_config.model_factory.create() - assert mature_class.objects.filter(media_obj=media).exists() - mock_es.update.assert_has_calls( - [ - call( - id=media.id, - index=media_type, - doc={"mature": True}, - refresh=True, - ), - call( - id=media.id, - index=f"{media_type}-filtered", - doc={"mature": True}, - refresh=True, - ), - ] + media_type_config.report_factory.create( + media_obj=media, reason=MATURE, status=MATURE_FILTERED ) - assert media.mature + assert media_type_config.mature_class.objects.filter(media_obj=media).exists() -@pytest.mark.parametrize( - "media_type, report_class, mature_class, model_factory", - [ - ("image", ImageReport, MatureImage, ImageFactory), - ("audio", AudioReport, MatureAudio, AudioFactory), - ], -) -def test_deleting_mature_image_instance_resets_mature_flag( - media_type: MediaType, report_class, mature_class, model_factory -): - media = model_factory.create() - mock_es = MagicMock() - with patch("django.conf.settings.ES", mock_es): - # Mark as mature. - report_class.objects.create( - media_obj=media, reason=MATURE, status=MATURE_FILTERED + for index in media_type_config.indexes: + doc = settings.ES.get( + index=index, + id=media.pk, + # get defaults to "realtime", meaning it ignores refreshes + # disable it here to implicitly test that the index was refreshed + # when the document was updated + realtime=False, ) - # Delete mature instance. - mature_class.objects.get(media_obj=media).delete() - - mock_es.update.assert_has_calls( - [ - call( - id=media.pk, - refresh=True, - index=media_type, - doc={"mature": True}, - ), - call( - id=media.pk, - refresh=True, - index=f"{media_type}-filtered", - doc={"mature": True}, - ), - call( - id=media.pk, - refresh=True, - index=media_type, - doc={"mature": False}, - ), - call( - id=media.pk, - refresh=True, - index=f"{media_type}-filtered", - doc={"mature": False}, - ), - ], + assert doc["found"] + assert doc["_source"]["mature"] + + assert media.mature + + +def test_deleting_mature_image_instance_resets_mature_flag(media_type_config, settings): + media = media_type_config.model_factory.create() + # Mark as mature. + media_type_config.report_factory.create( + media_obj=media, reason=MATURE, status=MATURE_FILTERED ) + # Delete mature instance. + media_type_config.mature_class.objects.get(media_obj=media).delete() + + # Assert the media are back to mature=False + # The previous test asserts they get set to mature=True + # in the first place, so it's not necessary to add those + # assertions here + for index in media_type_config.indexes: + doc = settings.ES.get( + index=index, + id=media.pk, + # get defaults to "realtime", meaning it ignores refreshes + # disable it here to implicitly test that the index was refreshed + # when the document was updated + realtime=False, + ) + assert doc["found"] + assert not doc["_source"]["mature"] + media.refresh_from_db() assert not media.mature -@pytest.mark.parametrize( - "media_type, media_class, report_class, deleted_class, model_factory", - [ - ("image", Image, ImageReport, DeletedImage, ImageFactory), - ("audio", Audio, AudioReport, DeletedAudio, AudioFactory), - ], -) -def test_deindexing_creates_deleted_image_instance( - media_type: MediaType, media_class, report_class, deleted_class, model_factory -): - media = model_factory.create() +def test_deindexing_creates_deleted_image_instance(media_type_config, settings): + media = media_type_config.model_factory.create() # Extracting field values because ``media`` will be deleted. image_id = media.id identifier = media.identifier - mock_es = MagicMock() - with patch("django.conf.settings.ES", mock_es): - report_class.objects.create(media_obj=media, reason=DMCA, status=DEINDEXED) + media_type_config.report_factory.create( + media_obj=media, reason=DMCA, status=DEINDEXED + ) - assert deleted_class.objects.filter(media_obj=media).exists() - assert not media_class.objects.filter(identifier=identifier).exists() - assert mock_es.delete.called_with(id=image_id) + assert media_type_config.deleted_class.objects.filter(media_obj=media).exists() + assert not media_type_config.model_class.objects.filter( + identifier=identifier + ).exists() + + for index in media_type_config.indexes: + with pytest.raises(NotFoundError): + settings.ES.get( + index=index, + id=image_id, + # get defaults to "realtime", meaning it ignores refreshes + # disable it here to implicitly test that the index was refreshed + # when the document was updated + realtime=False, + ) def test_all_deleted_media_covered(): @@ -205,202 +147,132 @@ def test_all_mature_media_covered(): assert set(AbstractMatureMedia.__subclasses__()) == {MatureAudio, MatureImage} -@pytest.mark.parametrize( - ("model_factory", "deleted_media_class", "indexes"), - ( - (ImageFactory, DeletedImage, ("image", "image-filtered")), - (AudioFactory, DeletedAudio, ("audio", "audio-filtered")), - ), -) def test_deleted_media_deletes_from_all_indexes( - settings, model_factory, deleted_media_class, indexes + media_type_config, + settings, ): - settings.ES = MagicMock() - media = model_factory.create() + media = media_type_config.model_factory.create() # Need to retrieve this here because the creation of the # deleted media class below will delete this object, rendering # the pk empty by the time we assert the calls media_id = media.pk - instance = deleted_media_class( + instance = media_type_config.deleted_class( media_obj=media, ) instance.save() - settings.ES.delete.assert_has_calls( - (call(index=index, id=media_id, refresh=True) for index in indexes), - # The order does not matter - any_order=True, - ) - - -@pytest.mark.parametrize( - ("model_factory", "deleted_media_class", "indexes"), - ( - (ImageFactory, DeletedImage, ("image", "image-filtered")), - (AudioFactory, DeletedAudio, ("audio", "audio-filtered")), - ), -) -def test_deleted_media_ignores_elasticsearch_404_errors( - settings, model_factory, deleted_media_class, indexes -): - settings.ES = MagicMock() - error = TransportError(404, "Whoops, no document!", {}) - settings.ES.delete.side_effect = [None, error] - media = model_factory.create() - # Need to retrieve this here because the creation of the - # deleted media class below will delete this object, rendering - # the pk empty by the time we assert the calls - media_id = media.pk - - instance = deleted_media_class( - media_obj=media, - ) - - instance.save() + for index in media_type_config.indexes: + with pytest.raises(NotFoundError): + settings.ES.get( + index=index, + id=media_id, + realtime=False, + ) - settings.ES.delete.assert_has_calls( - (call(index=index, id=media_id, refresh=True) for index in indexes), - # The order does not matter - any_order=True, - ) +@pook.on +def test_deleted_media_ignores_elasticsearch_404_errors(settings, media_type_config): + media = media_type_config.model_factory.create() -@pytest.mark.parametrize( - ("model_factory", "deleted_media_class", "indexes"), - ( - (ImageFactory, DeletedImage, ("image", "image-filtered")), - (AudioFactory, DeletedAudio, ("audio", "audio-filtered")), - ), -) -def test_deleted_media_raises_elasticsearch_400_errors( - settings, model_factory, deleted_media_class, indexes -): - settings.ES = MagicMock() - error = TransportError(400, "Terrible request, no thanks", {}) - settings.ES.delete.side_effect = [None, error] - media = model_factory.create() - # Need to retrieve this here because the creation of the - # deleted media class below will delete this object, rendering - # the pk empty by the time we assert the calls + es_mocks = [] + for index in media_type_config.indexes: + es_mocks.append( + pook.delete(settings.ES_ENDPOINT) + .path(f"/{index}/_doc/{media.pk}") + .param("refresh", "true") + .reply(404) + .mock + ) - instance = deleted_media_class( + # This should succeed despite the 404s forced above + media_type_config.deleted_class.objects.create( media_obj=media, ) - with pytest.raises(TransportError): - instance.save() + for mock in es_mocks: + assert mock.matched, f"{repr(mock.matchers)} did not match!" - settings.ES.delete.assert_has_calls( - (call(index=index, id=media.pk, refresh=True) for index in indexes), - # The order does not matter - any_order=True, - ) +@pook.on +def test_deleted_media_raises_elasticsearch_400_errors(settings, media_type_config): + media = media_type_config.model_factory.create() -@pytest.mark.parametrize( - ("model_factory", "mature_media_class", "indexes"), - ( - (ImageFactory, MatureImage, ("image", "image-filtered")), - (AudioFactory, MatureAudio, ("audio", "audio-filtered")), - ), -) -def test_mature_media_updates_all_indexes( - settings, model_factory, mature_media_class, indexes -): - settings.ES = MagicMock() - media = model_factory.create() + es_mocks: list[pook.Mock] = [] + for index in media_type_config.indexes: + es_mocks.append( + pook.delete(settings.ES_ENDPOINT) + .path(f"/{index}/_doc/{media.pk}") + .param("refresh", "true") + .reply(400) + .mock + ) - instance = mature_media_class( - media_obj=media, - ) + with pytest.raises(BadRequestError): + media_type_config.deleted_class.objects.create( + media_obj=media, + ) - instance.save() - - settings.ES.update.assert_has_calls( - ( - call( - index=index, - id=media.id, - doc={"mature": True}, - refresh=True, - ) - for index in indexes - ), - # The order does not matter - any_order=True, - ) + # Because we're causing a 400, and because that re-raises + # in the update, only one of the requests ever gets sent + # Therefore, one should remain pending and at least one + # should have matched + # Take this approach to avoid being concerned with the + # order of the requests, which doesn't matter + assert len([m for m in es_mocks if m.matched]) == 1 -@pytest.mark.parametrize( - ("model_factory", "mature_media_class", "indexes"), - ( - (ImageFactory, MatureImage, ("image", "image-filtered")), - (AudioFactory, MatureAudio, ("audio", "audio-filtered")), - ), -) +@pook.on def test_mature_media_ignores_elasticsearch_404_errors( - settings, model_factory, mature_media_class, indexes + settings, + media_type_config, ): - settings.ES = MagicMock() - error = TransportError(404, "Whoops, no document!", {}) - settings.ES.update.side_effect = [None, error] - media = model_factory.create() + media = media_type_config.model_factory.create() + + es_mocks = [] + for index in media_type_config.indexes: + es_mocks.append( + pook.post(settings.ES_ENDPOINT) + .path(f"/{index}/_update/{media.pk}") + .param("refresh", "true") + .reply(404) + .mock + ) - instance = mature_media_class( + # This should pass despite the 404 enforced above + media_type_config.mature_factory.create( media_obj=media, ) - instance.save() - - settings.ES.update.assert_has_calls( - ( - call( - index=index, - id=media.id, - doc={"mature": True}, - refresh=True, - ) - for index in indexes - ), - # The order does not matter - any_order=True, - ) + for mock in es_mocks: + assert mock.matched, f"{repr(mock.matchers)} did not match!" -@pytest.mark.parametrize( - ("model_factory", "mature_media_class", "indexes"), - ( - (ImageFactory, MatureImage, ("image", "image-filtered")), - (AudioFactory, MatureAudio, ("audio", "audio-filtered")), - ), -) -def test_mature_media_reraises_elasticsearch_400_errors( - settings, model_factory, mature_media_class, indexes -): - settings.ES = MagicMock() - error = TransportError(400, "Terrible request, no thanks.", {}) - settings.ES.update.side_effect = [None, error] - media = model_factory.create() +@pook.on +def test_mature_media_reraises_elasticsearch_400_errors(settings, media_type_config): + media = media_type_config.model_factory.create() - instance = mature_media_class( - media_obj=media, - ) + es_mocks = [] + for index in media_type_config.indexes: + es_mocks.append( + pook.post(settings.ES_ENDPOINT) + .path(f"/{index}/_update/{media.pk}") + .param("refresh", "true") + .reply(400) + .mock + ) - with pytest.raises(TransportError): - instance.save() + # This should fail due to the 400 enforced above + with pytest.raises(BadRequestError): + media_type_config.mature_factory.create( + media_obj=media, + ) - settings.ES.update.assert_has_calls( - ( - call( - index=index, - id=media.id, - doc={"mature": True}, - refresh=True, - ) - for index in indexes - ), - # The order does not matter - any_order=True, - ) + # Because we're causing a 400, and because that re-raises + # in the update, only one of the requests ever gets sent + # Therefore, one should remain pending and at least one + # should have matched + # Take this approach to avoid being concerned with the + # order of the requests, which doesn't matter + assert len([m for m in es_mocks if m.matched]) == 1 diff --git a/api/test/unit/utils/test_search_context.py b/api/test/unit/utils/test_search_context.py index b20817acf70..d5aa7ea49a5 100644 --- a/api/test/unit/utils/test_search_context.py +++ b/api/test/unit/utils/test_search_context.py @@ -50,11 +50,8 @@ def test_sensitive_text( results = [maybe_sensitive_text_hit] + [hit for _, hit in clear_results] if not setting_enabled: - es_host = settings.ES.transport.kwargs["host"] - es_port = settings.ES.transport.kwargs["port"] - with pook.post( - f"http://{es_host}:{es_port}/{media_type_config.filtered_index}/_search", + f"{settings.ES_ENDPOINT}/{media_type_config.filtered_index}/_search", reply=500, ) as mock: search_context = SearchContext.build( diff --git a/ingestion_server/Pipfile b/ingestion_server/Pipfile index dbb42a99184..bbc31a5f1d7 100644 --- a/ingestion_server/Pipfile +++ b/ingestion_server/Pipfile @@ -15,7 +15,8 @@ pook = "~=1.0" aws-requests-auth = "~=0.4" boto3 = "~=1.28" bottle = "~=0.12" -elasticsearch-dsl = "~=7.4" +elasticsearch = "==8.8.2" +elasticsearch-dsl = "~=8.9" falcon = "~=3.1" filelock = "~=3.12" gunicorn = "~=21.2" diff --git a/ingestion_server/Pipfile.lock b/ingestion_server/Pipfile.lock index 5fbd2eaa0a0..ab40764b401 100644 --- a/ingestion_server/Pipfile.lock +++ b/ingestion_server/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "16663b2ce054593ba6e6c336119c2a65099ce81d4ec102c62e5c335e7b7eee7b" + "sha256": "25098bab5ca1af1b01e69943d69b5df7d8d882e80f44a5b6555a94f5752661ca" }, "pipfile-spec": 6, "requires": { @@ -34,19 +34,19 @@ }, "boto3": { "hashes": [ - "sha256:6ff9a5b815e106656596064d51c9b6ba97a307807baa5f89634384b7d3f7ecc6", - "sha256:bd7c760afb195eaeaab907dc6b2c21fa64ddbba3fed4a869e80d820ddbd6cc70" + "sha256:ec7895504e3b2dd35fbdb7397bc3c48daaba8e6f37bc436aa928ff4e745f0f1c", + "sha256:fed2d673fce33384697baa0028edfd18b06aa17af5c3ef82da75e9254a8ffb07" ], "index": "pypi", - "version": "==1.28.40" + "version": "==1.28.48" }, "botocore": { "hashes": [ - "sha256:ce22a82ef8674f49691477d09558992cc87e7331f65c6a5b0da897ab192240ca", - "sha256:df766969f0d9ef9eda1a9c9946e0e173c10199f37a9e4c92861f11ddb5c9e702" + "sha256:6ed16f66aa6ed6070fed26d69764cb14c7759e4cc0b1c191283cc48b05d65de9", + "sha256:9618c06f7e08ed590dae6613b8b2511055f7d6c07517382143ef8563169d4ef1" ], "markers": "python_version >= '3.7'", - "version": "==1.31.40" + "version": "==1.31.48" }, "bottle": { "hashes": [ @@ -142,24 +142,32 @@ "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" ], - "markers": "python_version >= '3.7'", + "markers": "python_full_version >= '3.7.0'", "version": "==3.2.0" }, + "elastic-transport": { + "hashes": [ + "sha256:19db271ab79c9f70f8c43f8f5b5111408781a6176b54ab2e54d713b6d9ceb815", + "sha256:b9ad708ceb7fcdbc6b30a96f886609a109f042c0b9d9f2e44403b3133ba7ff10" + ], + "markers": "python_version >= '3.6'", + "version": "==8.4.0" + }, "elasticsearch": { "hashes": [ - "sha256:0e2454645dc00517dee4c6de3863411a9c5f1955d013c5fefa29123dadc92f98", - "sha256:66c4ece2adfe7cc120e2b6a6798a1fd5c777aecf82eec39bb95cef7cfc7ea2b3" + "sha256:bed8cf8fcc6c3be7c254b579de4c29afab021f373c832246f912d37aef3c6bd5", + "sha256:bffd6ce4faaacf90e6f617241773b3da8fb94e2e83554f5508e2fab92ca79643" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'", - "version": "==7.17.9" + "index": "pypi", + "version": "==8.8.2" }, "elasticsearch-dsl": { "hashes": [ - "sha256:07ee9c87dc28cc3cae2daa19401e1e18a172174ad9e5ca67938f752e3902a1d5", - "sha256:97f79239a252be7c4cce554c29e64695d7ef6a4828372316a5e5ff815e7a7498" + "sha256:66410adf881f02b8a032e8a5b2a3ee093fdeede4b814fbf04c0f6ce0499b7472", + "sha256:ab266bcf84b0f23bd2d73d9b31e054b5d38b20279cf076c53873f46b6dabf747" ], "index": "pypi", - "version": "==7.4.1" + "version": "==8.9.0" }, "falcon": { "hashes": [ @@ -201,11 +209,11 @@ }, "filelock": { "hashes": [ - "sha256:0ecc1dd2ec4672a10c8550a8182f1bd0c0a5088470ecd5a125e45f49472fac3d", - "sha256:f067e40ccc40f2b48395a80fcbd4728262fab54e232e090a4063ab804179efeb" + "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4", + "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd" ], "index": "pypi", - "version": "==3.12.3" + "version": "==3.12.4" }, "gunicorn": { "hashes": [ @@ -369,106 +377,106 @@ }, "rpds-py": { "hashes": [ - "sha256:00215f6a9058fbf84f9d47536902558eb61f180a6b2a0fa35338d06ceb9a2e5a", - "sha256:0028eb0967942d0d2891eae700ae1a27b7fd18604cfcb16a1ef486a790fee99e", - "sha256:0155c33af0676fc38e1107679be882077680ad1abb6303956b97259c3177e85e", - "sha256:063411228b852fb2ed7485cf91f8e7d30893e69b0acb207ec349db04cccc8225", - "sha256:0700c2133ba203c4068aaecd6a59bda22e06a5e46255c9da23cbf68c6942215d", - "sha256:08e08ccf5b10badb7d0a5c84829b914c6e1e1f3a716fdb2bf294e2bd01562775", - "sha256:0d292cabd7c8335bdd3237ded442480a249dbcdb4ddfac5218799364a01a0f5c", - "sha256:15932ec5f224b0e35764dc156514533a4fca52dcfda0dfbe462a1a22b37efd59", - "sha256:18f87baa20e02e9277ad8960cd89b63c79c05caf106f4c959a9595c43f2a34a5", - "sha256:1a6420a36975e0073acaeee44ead260c1f6ea56812cfc6c31ec00c1c48197173", - "sha256:1b401e8b9aece651512e62c431181e6e83048a651698a727ea0eb0699e9f9b74", - "sha256:1d7b7b71bcb82d8713c7c2e9c5f061415598af5938666beded20d81fa23e7640", - "sha256:23750a9b8a329844ba1fe267ca456bb3184984da2880ed17ae641c5af8de3fef", - "sha256:23a059143c1393015c68936370cce11690f7294731904bdae47cc3e16d0b2474", - "sha256:26d9fd624649a10e4610fab2bc820e215a184d193e47d0be7fe53c1c8f67f370", - "sha256:291c9ce3929a75b45ce8ddde2aa7694fc8449f2bc8f5bd93adf021efaae2d10b", - "sha256:298e8b5d8087e0330aac211c85428c8761230ef46a1f2c516d6a2f67fb8803c5", - "sha256:2c7c4266c1b61eb429e8aeb7d8ed6a3bfe6c890a1788b18dbec090c35c6b93fa", - "sha256:2d68a8e8a3a816629283faf82358d8c93fe5bd974dd2704152394a3de4cec22a", - "sha256:344b89384c250ba6a4ce1786e04d01500e4dac0f4137ceebcaad12973c0ac0b3", - "sha256:3455ecc46ea443b5f7d9c2f946ce4017745e017b0d0f8b99c92564eff97e97f5", - "sha256:3d544a614055b131111bed6edfa1cb0fb082a7265761bcb03321f2dd7b5c6c48", - "sha256:3e5c26905aa651cc8c0ddc45e0e5dea2a1296f70bdc96af17aee9d0493280a17", - "sha256:3f5cc8c7bc99d2bbcd704cef165ca7d155cd6464c86cbda8339026a42d219397", - "sha256:4992266817169997854f81df7f6db7bdcda1609972d8ffd6919252f09ec3c0f6", - "sha256:4d55528ef13af4b4e074d067977b1f61408602f53ae4537dccf42ba665c2c7bd", - "sha256:576da63eae7809f375932bfcbca2cf20620a1915bf2fedce4b9cc8491eceefe3", - "sha256:58fc4d66ee349a23dbf08c7e964120dc9027059566e29cf0ce6205d590ed7eca", - "sha256:5b9bf77008f2c55dabbd099fd3ac87009471d223a1c7ebea36873d39511b780a", - "sha256:5e7996aed3f65667c6dcc8302a69368435a87c2364079a066750a2eac75ea01e", - "sha256:5f7487be65b9c2c510819e744e375bd41b929a97e5915c4852a82fbb085df62c", - "sha256:6388e4e95a26717b94a05ced084e19da4d92aca883f392dffcf8e48c8e221a24", - "sha256:65af12f70355de29e1092f319f85a3467f4005e959ab65129cb697169ce94b86", - "sha256:668d2b45d62c68c7a370ac3dce108ffda482b0a0f50abd8b4c604a813a59e08f", - "sha256:71333c22f7cf5f0480b59a0aef21f652cf9bbaa9679ad261b405b65a57511d1e", - "sha256:7150b83b3e3ddaac81a8bb6a9b5f93117674a0e7a2b5a5b32ab31fdfea6df27f", - "sha256:748e472345c3a82cfb462d0dff998a7bf43e621eed73374cb19f307e97e08a83", - "sha256:75dbfd41a61bc1fb0536bf7b1abf272dc115c53d4d77db770cd65d46d4520882", - "sha256:7618a082c55cf038eede4a918c1001cc8a4411dfe508dc762659bcd48d8f4c6e", - "sha256:780fcb855be29153901c67fc9c5633d48aebef21b90aa72812fa181d731c6b00", - "sha256:78d10c431073dc6ebceed35ab22948a016cc2b5120963c13a41e38bdde4a7212", - "sha256:7a3a3d3e4f1e3cd2a67b93a0b6ed0f2499e33f47cc568e3a0023e405abdc0ff1", - "sha256:7b6975d3763d0952c111700c0634968419268e6bbc0b55fe71138987fa66f309", - "sha256:80772e3bda6787510d9620bc0c7572be404a922f8ccdfd436bf6c3778119464c", - "sha256:80992eb20755701753e30a6952a96aa58f353d12a65ad3c9d48a8da5ec4690cf", - "sha256:841128a22e6ac04070a0f84776d07e9c38c4dcce8e28792a95e45fc621605517", - "sha256:861d25ae0985a1dd5297fee35f476b60c6029e2e6e19847d5b4d0a43a390b696", - "sha256:872f3dcaa8bf2245944861d7311179d2c0c9b2aaa7d3b464d99a7c2e401f01fa", - "sha256:87c93b25d538c433fb053da6228c6290117ba53ff6a537c133b0f2087948a582", - "sha256:8856aa76839dc234d3469f1e270918ce6bec1d6a601eba928f45d68a15f04fc3", - "sha256:885e023e73ce09b11b89ab91fc60f35d80878d2c19d6213a32b42ff36543c291", - "sha256:899b5e7e2d5a8bc92aa533c2d4e55e5ebba095c485568a5e4bedbc163421259a", - "sha256:8ce8caa29ebbdcde67e5fd652c811d34bc01f249dbc0d61e5cc4db05ae79a83b", - "sha256:8e1c68303ccf7fceb50fbab79064a2636119fd9aca121f28453709283dbca727", - "sha256:8e7e2b3577e97fa43c2c2b12a16139b2cedbd0770235d5179c0412b4794efd9b", - "sha256:92f05fc7d832e970047662b3440b190d24ea04f8d3c760e33e7163b67308c878", - "sha256:97f5811df21703446b42303475b8b855ee07d6ab6cdf8565eff115540624f25d", - "sha256:9affee8cb1ec453382c27eb9043378ab32f49cd4bc24a24275f5c39bf186c279", - "sha256:a2da4a8c6d465fde36cea7d54bf47b5cf089073452f0e47c8632ecb9dec23c07", - "sha256:a6903cdca64f1e301af9be424798328c1fe3b4b14aede35f04510989fc72f012", - "sha256:a8ab1adf04ae2d6d65835995218fd3f3eb644fe20655ca8ee233e2c7270ff53b", - "sha256:a8edd467551c1102dc0f5754ab55cd0703431cd3044edf8c8e7d9208d63fa453", - "sha256:ac00c41dd315d147b129976204839ca9de699d83519ff1272afbe4fb9d362d12", - "sha256:ad277f74b1c164f7248afa968700e410651eb858d7c160d109fb451dc45a2f09", - "sha256:ae46a50d235f1631d9ec4670503f7b30405103034830bc13df29fd947207f795", - "sha256:afe6b5a04b2ab1aa89bad32ca47bf71358e7302a06fdfdad857389dca8fb5f04", - "sha256:b1cb078f54af0abd835ca76f93a3152565b73be0f056264da45117d0adf5e99c", - "sha256:b25136212a3d064a8f0b9ebbb6c57094c5229e0de76d15c79b76feff26aeb7b8", - "sha256:b3226b246facae14909b465061ddcfa2dfeadb6a64f407f24300d42d69bcb1a1", - "sha256:b98e75b21fc2ba5285aef8efaf34131d16af1c38df36bdca2f50634bea2d3060", - "sha256:bbd7b24d108509a1b9b6679fcc1166a7dd031dbef1f3c2c73788f42e3ebb3beb", - "sha256:bed57543c99249ab3a4586ddc8786529fbc33309e5e8a1351802a06ca2baf4c2", - "sha256:c0583f69522732bdd79dca4cd3873e63a29acf4a299769c7541f2ca1e4dd4bc6", - "sha256:c1e0e9916301e3b3d970814b1439ca59487f0616d30f36a44cead66ee1748c31", - "sha256:c651847545422c8131660704c58606d841e228ed576c8f1666d98b3d318f89da", - "sha256:c7853f27195598e550fe089f78f0732c66ee1d1f0eaae8ad081589a5a2f5d4af", - "sha256:cbae50d352e4717ffc22c566afc2d0da744380e87ed44a144508e3fb9114a3f4", - "sha256:cdbed8f21204398f47de39b0a9b180d7e571f02dfb18bf5f1b618e238454b685", - "sha256:d08395595c42bcd82c3608762ce734504c6d025eef1c06f42326a6023a584186", - "sha256:d4639111e73997567343df6551da9dd90d66aece1b9fc26c786d328439488103", - "sha256:d63787f289944cc4bde518ad2b5e70a4f0d6e2ce76324635359c74c113fd188f", - "sha256:d6d5f061f6a2aa55790b9e64a23dfd87b6664ab56e24cd06c78eb43986cb260b", - "sha256:d7865df1fb564092bcf46dac61b5def25342faf6352e4bc0e61a286e3fa26a3d", - "sha256:db6585b600b2e76e98131e0ac0e5195759082b51687ad0c94505970c90718f4a", - "sha256:e36d7369363d2707d5f68950a64c4e025991eb0177db01ccb6aa6facae48b69f", - "sha256:e7947d9a6264c727a556541b1630296bbd5d0a05068d21c38dde8e7a1c703ef0", - "sha256:eb2d59bc196e6d3b1827c7db06c1a898bfa0787c0574af398e65ccf2e97c0fbe", - "sha256:ee9c2f6ca9774c2c24bbf7b23086264e6b5fa178201450535ec0859739e6f78d", - "sha256:f4760e1b02173f4155203054f77a5dc0b4078de7645c922b208d28e7eb99f3e2", - "sha256:f70bec8a14a692be6dbe7ce8aab303e88df891cbd4a39af091f90b6702e28055", - "sha256:f869e34d2326e417baee430ae998e91412cc8e7fdd83d979277a90a0e79a5b47", - "sha256:f8b9a7cd381970e64849070aca7c32d53ab7d96c66db6c2ef7aa23c6e803f514", - "sha256:f99d74ddf9d3b6126b509e81865f89bd1283e3fc1b568b68cd7bd9dfa15583d7", - "sha256:f9e7e493ded7042712a374471203dd43ae3fff5b81e3de1a0513fa241af9fd41", - "sha256:fc72ae476732cdb7b2c1acb5af23b478b8a0d4b6fcf19b90dd150291e0d5b26b", - "sha256:fccbf0cd3411719e4c9426755df90bf3449d9fc5a89f077f4a7f1abd4f70c910", - "sha256:ffcf18ad3edf1c170e27e88b10282a2c449aa0358659592462448d71b2000cfc" + "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9", + "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637", + "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5", + "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9", + "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c", + "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957", + "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6", + "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154", + "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8", + "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569", + "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2", + "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c", + "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453", + "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1", + "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7", + "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b", + "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9", + "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496", + "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3", + "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b", + "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6", + "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da", + "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842", + "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd", + "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294", + "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71", + "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093", + "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e", + "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c", + "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e", + "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b", + "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97", + "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac", + "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf", + "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a", + "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc", + "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0", + "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623", + "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6", + "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8", + "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b", + "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d", + "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff", + "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb", + "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08", + "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33", + "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5", + "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a", + "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a", + "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762", + "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860", + "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73", + "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a", + "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065", + "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c", + "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c", + "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec", + "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515", + "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72", + "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd", + "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec", + "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12", + "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1", + "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557", + "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25", + "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff", + "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8", + "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9", + "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d", + "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a", + "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e", + "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c", + "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0", + "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48", + "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e", + "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314", + "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717", + "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95", + "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8", + "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57", + "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33", + "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1", + "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f", + "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f", + "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9", + "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599", + "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41", + "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391", + "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475", + "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882", + "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740", + "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f", + "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee", + "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836", + "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c", + "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a", + "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb" ], "markers": "python_version >= '3.8'", - "version": "==0.10.0" + "version": "==0.10.3" }, "s3transfer": { "hashes": [ @@ -483,11 +491,11 @@ "falcon" ], "hashes": [ - "sha256:2e53ad63f96bb9da6570ba2e755c267e529edcf58580a2c0d2a11ef26e1e678b", - "sha256:7dc873b87e1faf4d00614afd1058bfa1522942f33daef8a59f90de8ed75cd10c" + "sha256:64a7141005fb775b9db298a30de93e3b83e0ddd1232dc6f36eb38aebc1553291", + "sha256:6de2e88304873484207fed836388e422aeff000609b104c802749fd89d56ba5b" ], "index": "pypi", - "version": "==1.30.0" + "version": "==1.31.0" }, "six": { "hashes": [ @@ -499,11 +507,11 @@ }, "tldextract": { "hashes": [ - "sha256:581e7dbefc90e7bb857bb6f768d25c811a3c5f0892ed56a9a2999ddb7b1b70c2", - "sha256:5fe3210c577463545191d45ad522d3d5e78d55218ce97215e82004dcae1e1234" + "sha256:2cb271ca8d06ea1630a1361b58edad14e0cf81f34ce3c90b052854528fe2a281", + "sha256:4df1c65b95be61d59428e8611e955e54e6f1d4483d3e8d5733d3a9062155e910" ], "index": "pypi", - "version": "==3.4.4" + "version": "==3.5.0" }, "urllib3": { "hashes": [ @@ -515,20 +523,12 @@ } }, "develop": { - "appnope": { - "hashes": [ - "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", - "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" - ], - "markers": "sys_platform == 'darwin'", - "version": "==0.1.3" - }, "asttokens": { "hashes": [ - "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3", - "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c" + "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", + "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69" ], - "version": "==2.2.1" + "version": "==2.4.0" }, "attrs": { "hashes": [ @@ -674,7 +674,7 @@ "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" ], - "markers": "python_version >= '3.7'", + "markers": "python_full_version >= '3.7.0'", "version": "==3.0.39" }, "ptyprocess": { @@ -701,11 +701,11 @@ }, "pytest": { "hashes": [ - "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32", - "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a" + "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002", + "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069" ], "index": "pypi", - "version": "==7.4.0" + "version": "==7.4.2" }, "pytest-order": { "hashes": [ @@ -741,106 +741,106 @@ }, "rpds-py": { "hashes": [ - "sha256:00215f6a9058fbf84f9d47536902558eb61f180a6b2a0fa35338d06ceb9a2e5a", - "sha256:0028eb0967942d0d2891eae700ae1a27b7fd18604cfcb16a1ef486a790fee99e", - "sha256:0155c33af0676fc38e1107679be882077680ad1abb6303956b97259c3177e85e", - "sha256:063411228b852fb2ed7485cf91f8e7d30893e69b0acb207ec349db04cccc8225", - "sha256:0700c2133ba203c4068aaecd6a59bda22e06a5e46255c9da23cbf68c6942215d", - "sha256:08e08ccf5b10badb7d0a5c84829b914c6e1e1f3a716fdb2bf294e2bd01562775", - "sha256:0d292cabd7c8335bdd3237ded442480a249dbcdb4ddfac5218799364a01a0f5c", - "sha256:15932ec5f224b0e35764dc156514533a4fca52dcfda0dfbe462a1a22b37efd59", - "sha256:18f87baa20e02e9277ad8960cd89b63c79c05caf106f4c959a9595c43f2a34a5", - "sha256:1a6420a36975e0073acaeee44ead260c1f6ea56812cfc6c31ec00c1c48197173", - "sha256:1b401e8b9aece651512e62c431181e6e83048a651698a727ea0eb0699e9f9b74", - "sha256:1d7b7b71bcb82d8713c7c2e9c5f061415598af5938666beded20d81fa23e7640", - "sha256:23750a9b8a329844ba1fe267ca456bb3184984da2880ed17ae641c5af8de3fef", - "sha256:23a059143c1393015c68936370cce11690f7294731904bdae47cc3e16d0b2474", - "sha256:26d9fd624649a10e4610fab2bc820e215a184d193e47d0be7fe53c1c8f67f370", - "sha256:291c9ce3929a75b45ce8ddde2aa7694fc8449f2bc8f5bd93adf021efaae2d10b", - "sha256:298e8b5d8087e0330aac211c85428c8761230ef46a1f2c516d6a2f67fb8803c5", - "sha256:2c7c4266c1b61eb429e8aeb7d8ed6a3bfe6c890a1788b18dbec090c35c6b93fa", - "sha256:2d68a8e8a3a816629283faf82358d8c93fe5bd974dd2704152394a3de4cec22a", - "sha256:344b89384c250ba6a4ce1786e04d01500e4dac0f4137ceebcaad12973c0ac0b3", - "sha256:3455ecc46ea443b5f7d9c2f946ce4017745e017b0d0f8b99c92564eff97e97f5", - "sha256:3d544a614055b131111bed6edfa1cb0fb082a7265761bcb03321f2dd7b5c6c48", - "sha256:3e5c26905aa651cc8c0ddc45e0e5dea2a1296f70bdc96af17aee9d0493280a17", - "sha256:3f5cc8c7bc99d2bbcd704cef165ca7d155cd6464c86cbda8339026a42d219397", - "sha256:4992266817169997854f81df7f6db7bdcda1609972d8ffd6919252f09ec3c0f6", - "sha256:4d55528ef13af4b4e074d067977b1f61408602f53ae4537dccf42ba665c2c7bd", - "sha256:576da63eae7809f375932bfcbca2cf20620a1915bf2fedce4b9cc8491eceefe3", - "sha256:58fc4d66ee349a23dbf08c7e964120dc9027059566e29cf0ce6205d590ed7eca", - "sha256:5b9bf77008f2c55dabbd099fd3ac87009471d223a1c7ebea36873d39511b780a", - "sha256:5e7996aed3f65667c6dcc8302a69368435a87c2364079a066750a2eac75ea01e", - "sha256:5f7487be65b9c2c510819e744e375bd41b929a97e5915c4852a82fbb085df62c", - "sha256:6388e4e95a26717b94a05ced084e19da4d92aca883f392dffcf8e48c8e221a24", - "sha256:65af12f70355de29e1092f319f85a3467f4005e959ab65129cb697169ce94b86", - "sha256:668d2b45d62c68c7a370ac3dce108ffda482b0a0f50abd8b4c604a813a59e08f", - "sha256:71333c22f7cf5f0480b59a0aef21f652cf9bbaa9679ad261b405b65a57511d1e", - "sha256:7150b83b3e3ddaac81a8bb6a9b5f93117674a0e7a2b5a5b32ab31fdfea6df27f", - "sha256:748e472345c3a82cfb462d0dff998a7bf43e621eed73374cb19f307e97e08a83", - "sha256:75dbfd41a61bc1fb0536bf7b1abf272dc115c53d4d77db770cd65d46d4520882", - "sha256:7618a082c55cf038eede4a918c1001cc8a4411dfe508dc762659bcd48d8f4c6e", - "sha256:780fcb855be29153901c67fc9c5633d48aebef21b90aa72812fa181d731c6b00", - "sha256:78d10c431073dc6ebceed35ab22948a016cc2b5120963c13a41e38bdde4a7212", - "sha256:7a3a3d3e4f1e3cd2a67b93a0b6ed0f2499e33f47cc568e3a0023e405abdc0ff1", - "sha256:7b6975d3763d0952c111700c0634968419268e6bbc0b55fe71138987fa66f309", - "sha256:80772e3bda6787510d9620bc0c7572be404a922f8ccdfd436bf6c3778119464c", - "sha256:80992eb20755701753e30a6952a96aa58f353d12a65ad3c9d48a8da5ec4690cf", - "sha256:841128a22e6ac04070a0f84776d07e9c38c4dcce8e28792a95e45fc621605517", - "sha256:861d25ae0985a1dd5297fee35f476b60c6029e2e6e19847d5b4d0a43a390b696", - "sha256:872f3dcaa8bf2245944861d7311179d2c0c9b2aaa7d3b464d99a7c2e401f01fa", - "sha256:87c93b25d538c433fb053da6228c6290117ba53ff6a537c133b0f2087948a582", - "sha256:8856aa76839dc234d3469f1e270918ce6bec1d6a601eba928f45d68a15f04fc3", - "sha256:885e023e73ce09b11b89ab91fc60f35d80878d2c19d6213a32b42ff36543c291", - "sha256:899b5e7e2d5a8bc92aa533c2d4e55e5ebba095c485568a5e4bedbc163421259a", - "sha256:8ce8caa29ebbdcde67e5fd652c811d34bc01f249dbc0d61e5cc4db05ae79a83b", - "sha256:8e1c68303ccf7fceb50fbab79064a2636119fd9aca121f28453709283dbca727", - "sha256:8e7e2b3577e97fa43c2c2b12a16139b2cedbd0770235d5179c0412b4794efd9b", - "sha256:92f05fc7d832e970047662b3440b190d24ea04f8d3c760e33e7163b67308c878", - "sha256:97f5811df21703446b42303475b8b855ee07d6ab6cdf8565eff115540624f25d", - "sha256:9affee8cb1ec453382c27eb9043378ab32f49cd4bc24a24275f5c39bf186c279", - "sha256:a2da4a8c6d465fde36cea7d54bf47b5cf089073452f0e47c8632ecb9dec23c07", - "sha256:a6903cdca64f1e301af9be424798328c1fe3b4b14aede35f04510989fc72f012", - "sha256:a8ab1adf04ae2d6d65835995218fd3f3eb644fe20655ca8ee233e2c7270ff53b", - "sha256:a8edd467551c1102dc0f5754ab55cd0703431cd3044edf8c8e7d9208d63fa453", - "sha256:ac00c41dd315d147b129976204839ca9de699d83519ff1272afbe4fb9d362d12", - "sha256:ad277f74b1c164f7248afa968700e410651eb858d7c160d109fb451dc45a2f09", - "sha256:ae46a50d235f1631d9ec4670503f7b30405103034830bc13df29fd947207f795", - "sha256:afe6b5a04b2ab1aa89bad32ca47bf71358e7302a06fdfdad857389dca8fb5f04", - "sha256:b1cb078f54af0abd835ca76f93a3152565b73be0f056264da45117d0adf5e99c", - "sha256:b25136212a3d064a8f0b9ebbb6c57094c5229e0de76d15c79b76feff26aeb7b8", - "sha256:b3226b246facae14909b465061ddcfa2dfeadb6a64f407f24300d42d69bcb1a1", - "sha256:b98e75b21fc2ba5285aef8efaf34131d16af1c38df36bdca2f50634bea2d3060", - "sha256:bbd7b24d108509a1b9b6679fcc1166a7dd031dbef1f3c2c73788f42e3ebb3beb", - "sha256:bed57543c99249ab3a4586ddc8786529fbc33309e5e8a1351802a06ca2baf4c2", - "sha256:c0583f69522732bdd79dca4cd3873e63a29acf4a299769c7541f2ca1e4dd4bc6", - "sha256:c1e0e9916301e3b3d970814b1439ca59487f0616d30f36a44cead66ee1748c31", - "sha256:c651847545422c8131660704c58606d841e228ed576c8f1666d98b3d318f89da", - "sha256:c7853f27195598e550fe089f78f0732c66ee1d1f0eaae8ad081589a5a2f5d4af", - "sha256:cbae50d352e4717ffc22c566afc2d0da744380e87ed44a144508e3fb9114a3f4", - "sha256:cdbed8f21204398f47de39b0a9b180d7e571f02dfb18bf5f1b618e238454b685", - "sha256:d08395595c42bcd82c3608762ce734504c6d025eef1c06f42326a6023a584186", - "sha256:d4639111e73997567343df6551da9dd90d66aece1b9fc26c786d328439488103", - "sha256:d63787f289944cc4bde518ad2b5e70a4f0d6e2ce76324635359c74c113fd188f", - "sha256:d6d5f061f6a2aa55790b9e64a23dfd87b6664ab56e24cd06c78eb43986cb260b", - "sha256:d7865df1fb564092bcf46dac61b5def25342faf6352e4bc0e61a286e3fa26a3d", - "sha256:db6585b600b2e76e98131e0ac0e5195759082b51687ad0c94505970c90718f4a", - "sha256:e36d7369363d2707d5f68950a64c4e025991eb0177db01ccb6aa6facae48b69f", - "sha256:e7947d9a6264c727a556541b1630296bbd5d0a05068d21c38dde8e7a1c703ef0", - "sha256:eb2d59bc196e6d3b1827c7db06c1a898bfa0787c0574af398e65ccf2e97c0fbe", - "sha256:ee9c2f6ca9774c2c24bbf7b23086264e6b5fa178201450535ec0859739e6f78d", - "sha256:f4760e1b02173f4155203054f77a5dc0b4078de7645c922b208d28e7eb99f3e2", - "sha256:f70bec8a14a692be6dbe7ce8aab303e88df891cbd4a39af091f90b6702e28055", - "sha256:f869e34d2326e417baee430ae998e91412cc8e7fdd83d979277a90a0e79a5b47", - "sha256:f8b9a7cd381970e64849070aca7c32d53ab7d96c66db6c2ef7aa23c6e803f514", - "sha256:f99d74ddf9d3b6126b509e81865f89bd1283e3fc1b568b68cd7bd9dfa15583d7", - "sha256:f9e7e493ded7042712a374471203dd43ae3fff5b81e3de1a0513fa241af9fd41", - "sha256:fc72ae476732cdb7b2c1acb5af23b478b8a0d4b6fcf19b90dd150291e0d5b26b", - "sha256:fccbf0cd3411719e4c9426755df90bf3449d9fc5a89f077f4a7f1abd4f70c910", - "sha256:ffcf18ad3edf1c170e27e88b10282a2c449aa0358659592462448d71b2000cfc" + "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9", + "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637", + "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5", + "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9", + "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c", + "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957", + "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6", + "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154", + "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8", + "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569", + "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2", + "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c", + "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453", + "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1", + "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7", + "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b", + "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9", + "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496", + "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3", + "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b", + "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6", + "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da", + "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842", + "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd", + "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294", + "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71", + "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093", + "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e", + "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c", + "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e", + "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b", + "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97", + "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac", + "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf", + "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a", + "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc", + "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0", + "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623", + "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6", + "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8", + "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b", + "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d", + "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff", + "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb", + "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08", + "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33", + "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5", + "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a", + "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a", + "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762", + "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860", + "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73", + "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a", + "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065", + "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c", + "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c", + "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec", + "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515", + "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72", + "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd", + "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec", + "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12", + "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1", + "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557", + "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25", + "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff", + "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8", + "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9", + "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d", + "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a", + "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e", + "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c", + "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0", + "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48", + "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e", + "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314", + "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717", + "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95", + "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8", + "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57", + "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33", + "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1", + "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f", + "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f", + "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9", + "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599", + "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41", + "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391", + "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475", + "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882", + "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740", + "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f", + "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee", + "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836", + "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c", + "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a", + "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb" ], "markers": "python_version >= '3.8'", - "version": "==0.10.0" + "version": "==0.10.3" }, "six": { "hashes": [ @@ -867,11 +867,11 @@ }, "traitlets": { "hashes": [ - "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8", - "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9" + "sha256:417745a96681fbb358e723d5346a547521f36e9bd0d50ba7ab368fff5d67aa54", + "sha256:f584ea209240466e66e91f3c81aa7d004ba4cf794990b0c775938a1544217cd1" ], - "markers": "python_version >= '3.7'", - "version": "==5.9.0" + "markers": "python_version >= '3.8'", + "version": "==5.10.0" }, "wcwidth": { "hashes": [ diff --git a/ingestion_server/ingestion_server/es_helpers.py b/ingestion_server/ingestion_server/es_helpers.py index 98a70119b47..fb90e4d2a88 100644 --- a/ingestion_server/ingestion_server/es_helpers.py +++ b/ingestion_server/ingestion_server/es_helpers.py @@ -4,8 +4,9 @@ from aws_requests_auth.aws_auth import AWSRequestsAuth from decouple import config +from elastic_transport import RequestsHttpNode from elasticsearch import ConnectionError as EsConnectionError -from elasticsearch import Elasticsearch, NotFoundError, RequestsHttpConnection +from elasticsearch import Elasticsearch, NotFoundError class Stat(NamedTuple): @@ -45,9 +46,16 @@ def _elasticsearch_connect() -> Elasticsearch: :return: an Elasticsearch client """ + elasticsearch_scheme = config("ELASTICSEARCH_SCHEME", default="http://") elasticsearch_url = config("ELASTICSEARCH_URL", default="localhost") elasticsearch_port = config("ELASTICSEARCH_PORT", default=9200, cast=int) + es_endpoint = "{scheme}{url}:{port}".format( + scheme=elasticsearch_scheme, + url=elasticsearch_url, + port=elasticsearch_port, + ) + # For AWS IAM access to Elasticsearch aws_region = config("AWS_REGION", "us-east-1") aws_access_key_id = config("AWS_ACCESS_KEY_ID", default="") @@ -65,9 +73,8 @@ def _elasticsearch_connect() -> Elasticsearch: ) auth.encode = lambda x: bytes(x.encode("utf-8")) es = Elasticsearch( - host=elasticsearch_url, - port=elasticsearch_port, - connection_class=RequestsHttpConnection, + es_endpoint, + node_class=RequestsHttpNode, http_auth=auth, timeout=timeout * 3600, # seconds )