diff --git a/Pipfile b/Pipfile index 8c8d612e5..ee1215eed 100644 --- a/Pipfile +++ b/Pipfile @@ -4,7 +4,7 @@ verify_ssl = true name = "pypi" [packages] -fastapi = "==0.99.1" +fastapi = "==0.101.1" uvicorn = {version = "==0.23.2", extras = ["standard"]} jsonlines = "==3.1.0" cacheout = "==0.14.1" diff --git a/Pipfile.lock b/Pipfile.lock index a4ae9ad4e..f5212d74b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "296a6b3a3e9e4a2b26aa3509b08e53996b4c64a49274a5fe0129fb28c4b0176f" + "sha256": "bad7b5c6525919b7fdfdd6801ce27de14a127cc70a0b92c0719eba00ca55d6da" }, "pipfile-spec": 6, "requires": { @@ -133,6 +133,14 @@ "markers": "python_version >= '3.7'", "version": "==1.3.1" }, + "annotated-types": { + "hashes": [ + "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802", + "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd" + ], + "markers": "python_version >= '3.7'", + "version": "==0.5.0" + }, "anyio": { "hashes": [ "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780", @@ -364,11 +372,11 @@ }, "fastapi": { "hashes": [ - "sha256:976df7bab51ac7beda9f68c4513b8c4490b5c1135c72aafd0a5ee4023ec5282e", - "sha256:ac78f717cd80d657bd183f94d33b9bda84aa376a46a9dab513586b8eef1dc6fc" + "sha256:7b32000d14ca9992f7461117b81e4ef9ff0c07936af641b4fe40e67d5f9d63cb", + "sha256:aef5f8676eb1b8389952e1fe734abe20f04b71f6936afcc53b320ba79b686a4b" ], "index": "pypi", - "version": "==0.99.1" + "version": "==0.101.1" }, "file-read-backwards": { "hashes": [ @@ -836,45 +844,123 @@ }, "pydantic": { "hashes": [ - "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", - "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe", - "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47", - "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494", - "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33", - "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86", - "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d", - "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c", - "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a", - "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565", - "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb", - "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62", - "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62", - "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0", - "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523", - "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d", - "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405", - "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f", - "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b", - "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718", - "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed", - "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb", - "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5", - "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc", - "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942", - "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe", - "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246", - "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350", - "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303", - "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09", - "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33", - "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8", - "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a", - "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1", - "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6", - "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d" + "sha256:1607cc106602284cd4a00882986570472f193fde9cb1259bceeaedb26aa79a6d", + "sha256:45b5e446c6dfaad9444819a293b921a40e1db1aa61ea08aede0522529ce90e81" ], "markers": "python_version >= '3.7'", - "version": "==1.10.12" + "version": "==2.3.0" + }, + "pydantic-core": { + "hashes": [ + "sha256:002d0ea50e17ed982c2d65b480bd975fc41086a5a2f9c924ef8fc54419d1dea3", + "sha256:02e1c385095efbd997311d85c6021d32369675c09bcbfff3b69d84e59dc103f6", + "sha256:046af9cfb5384f3684eeb3f58a48698ddab8dd870b4b3f67f825353a14441418", + "sha256:04fe5c0a43dec39aedba0ec9579001061d4653a9b53a1366b113aca4a3c05ca7", + "sha256:07a1aec07333bf5adebd8264047d3dc518563d92aca6f2f5b36f505132399efc", + "sha256:1480fa4682e8202b560dcdc9eeec1005f62a15742b813c88cdc01d44e85308e5", + "sha256:1508f37ba9e3ddc0189e6ff4e2228bd2d3c3a4641cbe8c07177162f76ed696c7", + "sha256:171a4718860790f66d6c2eda1d95dd1edf64f864d2e9f9115840840cf5b5713f", + "sha256:19e20f8baedd7d987bd3f8005c146e6bcbda7cdeefc36fad50c66adb2dd2da48", + "sha256:1a0ddaa723c48af27d19f27f1c73bdc615c73686d763388c8683fe34ae777bad", + "sha256:1aa712ba150d5105814e53cb141412217146fedc22621e9acff9236d77d2a5ef", + "sha256:1ac1750df1b4339b543531ce793b8fd5c16660a95d13aecaab26b44ce11775e9", + "sha256:1c721bfc575d57305dd922e6a40a8fe3f762905851d694245807a351ad255c58", + "sha256:1ce8c84051fa292a5dc54018a40e2a1926fd17980a9422c973e3ebea017aa8da", + "sha256:1fa1f6312fb84e8c281f32b39affe81984ccd484da6e9d65b3d18c202c666149", + "sha256:22134a4453bd59b7d1e895c455fe277af9d9d9fbbcb9dc3f4a97b8693e7e2c9b", + "sha256:23470a23614c701b37252618e7851e595060a96a23016f9a084f3f92f5ed5881", + "sha256:240a015102a0c0cc8114f1cba6444499a8a4d0333e178bc504a5c2196defd456", + "sha256:252851b38bad3bfda47b104ffd077d4f9604a10cb06fe09d020016a25107bf98", + "sha256:2a20c533cb80466c1d42a43a4521669ccad7cf2967830ac62c2c2f9cece63e7e", + "sha256:2dd50d6a1aef0426a1d0199190c6c43ec89812b1f409e7fe44cb0fbf6dfa733c", + "sha256:340e96c08de1069f3d022a85c2a8c63529fd88709468373b418f4cf2c949fb0e", + "sha256:3796a6152c545339d3b1652183e786df648ecdf7c4f9347e1d30e6750907f5bb", + "sha256:37a822f630712817b6ecc09ccc378192ef5ff12e2c9bae97eb5968a6cdf3b862", + "sha256:3a750a83b2728299ca12e003d73d1264ad0440f60f4fc9cee54acc489249b728", + "sha256:3c8945a105f1589ce8a693753b908815e0748f6279959a4530f6742e1994dcb6", + "sha256:3ccc13afee44b9006a73d2046068d4df96dc5b333bf3509d9a06d1b42db6d8bf", + "sha256:3f90e5e3afb11268628c89f378f7a1ea3f2fe502a28af4192e30a6cdea1e7d5e", + "sha256:4292ca56751aebbe63a84bbfc3b5717abb09b14d4b4442cc43fd7c49a1529efd", + "sha256:430ddd965ffd068dd70ef4e4d74f2c489c3a313adc28e829dd7262cc0d2dd1e8", + "sha256:439a0de139556745ae53f9cc9668c6c2053444af940d3ef3ecad95b079bc9987", + "sha256:44b4f937b992394a2e81a5c5ce716f3dcc1237281e81b80c748b2da6dd5cf29a", + "sha256:48c1ed8b02ffea4d5c9c220eda27af02b8149fe58526359b3c07eb391cb353a2", + "sha256:4ef724a059396751aef71e847178d66ad7fc3fc969a1a40c29f5aac1aa5f8784", + "sha256:50555ba3cb58f9861b7a48c493636b996a617db1a72c18da4d7f16d7b1b9952b", + "sha256:522a9c4a4d1924facce7270c84b5134c5cabcb01513213662a2e89cf28c1d309", + "sha256:5493a7027bfc6b108e17c3383959485087d5942e87eb62bbac69829eae9bc1f7", + "sha256:56ea80269077003eaa59723bac1d8bacd2cd15ae30456f2890811efc1e3d4413", + "sha256:5a2a3c9ef904dcdadb550eedf3291ec3f229431b0084666e2c2aa8ff99a103a2", + "sha256:5cfde4fab34dd1e3a3f7f3db38182ab6c95e4ea91cf322242ee0be5c2f7e3d2f", + "sha256:5e4a2cf8c4543f37f5dc881de6c190de08096c53986381daebb56a355be5dfe6", + "sha256:5e9c068f36b9f396399d43bfb6defd4cc99c36215f6ff33ac8b9c14ba15bdf6b", + "sha256:5ed7ceca6aba5331ece96c0e328cd52f0dcf942b8895a1ed2642de50800b79d3", + "sha256:5fa159b902d22b283b680ef52b532b29554ea2a7fc39bf354064751369e9dbd7", + "sha256:615a31b1629e12445c0e9fc8339b41aaa6cc60bd53bf802d5fe3d2c0cda2ae8d", + "sha256:621afe25cc2b3c4ba05fff53525156d5100eb35c6e5a7cf31d66cc9e1963e378", + "sha256:6656a0ae383d8cd7cc94e91de4e526407b3726049ce8d7939049cbfa426518c8", + "sha256:672174480a85386dd2e681cadd7d951471ad0bb028ed744c895f11f9d51b9ebe", + "sha256:692b4ff5c4e828a38716cfa92667661a39886e71136c97b7dac26edef18767f7", + "sha256:6bcc1ad776fffe25ea5c187a028991c031a00ff92d012ca1cc4714087e575973", + "sha256:6bf7d610ac8f0065a286002a23bcce241ea8248c71988bda538edcc90e0c39ad", + "sha256:75c0ebbebae71ed1e385f7dfd9b74c1cff09fed24a6df43d326dd7f12339ec34", + "sha256:788be9844a6e5c4612b74512a76b2153f1877cd845410d756841f6c3420230eb", + "sha256:7dc2ce039c7290b4ef64334ec7e6ca6494de6eecc81e21cb4f73b9b39991408c", + "sha256:813aab5bfb19c98ae370952b6f7190f1e28e565909bfc219a0909db168783465", + "sha256:8421cf496e746cf8d6b677502ed9a0d1e4e956586cd8b221e1312e0841c002d5", + "sha256:84e87c16f582f5c753b7f39a71bd6647255512191be2d2dbf49458c4ef024588", + "sha256:84f8bb34fe76c68c9d96b77c60cef093f5e660ef8e43a6cbfcd991017d375950", + "sha256:85cc4d105747d2aa3c5cf3e37dac50141bff779545ba59a095f4a96b0a460e70", + "sha256:883daa467865e5766931e07eb20f3e8152324f0adf52658f4d302242c12e2c32", + "sha256:8b2b1bfed698fa410ab81982f681f5b1996d3d994ae8073286515ac4d165c2e7", + "sha256:8ecbac050856eb6c3046dea655b39216597e373aa8e50e134c0e202f9c47efec", + "sha256:930bfe73e665ebce3f0da2c6d64455098aaa67e1a00323c74dc752627879fc67", + "sha256:9616567800bdc83ce136e5847d41008a1d602213d024207b0ff6cab6753fe645", + "sha256:9680dd23055dd874173a3a63a44e7f5a13885a4cfd7e84814be71be24fba83db", + "sha256:99faba727727b2e59129c59542284efebbddade4f0ae6a29c8b8d3e1f437beb7", + "sha256:9a718d56c4d55efcfc63f680f207c9f19c8376e5a8a67773535e6f7e80e93170", + "sha256:9b33bf9658cb29ac1a517c11e865112316d09687d767d7a0e4a63d5c640d1b17", + "sha256:9e8b374ef41ad5c461efb7a140ce4730661aadf85958b5c6a3e9cf4e040ff4bb", + "sha256:9e9b65a55bbabda7fccd3500192a79f6e474d8d36e78d1685496aad5f9dbd92c", + "sha256:a0b7486d85293f7f0bbc39b34e1d8aa26210b450bbd3d245ec3d732864009819", + "sha256:a53e3195f134bde03620d87a7e2b2f2046e0e5a8195e66d0f244d6d5b2f6d31b", + "sha256:a87c54e72aa2ef30189dc74427421e074ab4561cf2bf314589f6af5b37f45e6d", + "sha256:a892b5b1871b301ce20d40b037ffbe33d1407a39639c2b05356acfef5536d26a", + "sha256:a8acc9dedd304da161eb071cc7ff1326aa5b66aadec9622b2574ad3ffe225525", + "sha256:aaafc776e5edc72b3cad1ccedb5fd869cc5c9a591f1213aa9eba31a781be9ac1", + "sha256:acafc4368b289a9f291e204d2c4c75908557d4f36bd3ae937914d4529bf62a76", + "sha256:b0a5d7edb76c1c57b95df719af703e796fc8e796447a1da939f97bfa8a918d60", + "sha256:b25afe9d5c4f60dcbbe2b277a79be114e2e65a16598db8abee2a2dcde24f162b", + "sha256:b44c42edc07a50a081672e25dfe6022554b47f91e793066a7b601ca290f71e42", + "sha256:b594b64e8568cf09ee5c9501ede37066b9fc41d83d58f55b9952e32141256acd", + "sha256:b962700962f6e7a6bd77e5f37320cabac24b4c0f76afeac05e9f93cf0c620014", + "sha256:bb128c30cf1df0ab78166ded1ecf876620fb9aac84d2413e8ea1594b588c735d", + "sha256:bf9d42a71a4d7a7c1f14f629e5c30eac451a6fc81827d2beefd57d014c006c4a", + "sha256:c6595b0d8c8711e8e1dc389d52648b923b809f68ac1c6f0baa525c6440aa0daa", + "sha256:c8c6660089a25d45333cb9db56bb9e347241a6d7509838dbbd1931d0e19dbc7f", + "sha256:c9d469204abcca28926cbc28ce98f28e50e488767b084fb3fbdf21af11d3de26", + "sha256:d38bbcef58220f9c81e42c255ef0bf99735d8f11edef69ab0b499da77105158a", + "sha256:d4eb77df2964b64ba190eee00b2312a1fd7a862af8918ec70fc2d6308f76ac64", + "sha256:d63b7545d489422d417a0cae6f9898618669608750fc5e62156957e609e728a5", + "sha256:d7050899026e708fb185e174c63ebc2c4ee7a0c17b0a96ebc50e1f76a231c057", + "sha256:d79f1f2f7ebdb9b741296b69049ff44aedd95976bfee38eb4848820628a99b50", + "sha256:d85463560c67fc65cd86153a4975d0b720b6d7725cf7ee0b2d291288433fc21b", + "sha256:d9140ded382a5b04a1c030b593ed9bf3088243a0a8b7fa9f071a5736498c5483", + "sha256:d9b4916b21931b08096efed090327f8fe78e09ae8f5ad44e07f5c72a7eedb51b", + "sha256:df14f6332834444b4a37685810216cc8fe1fe91f447332cd56294c984ecbff1c", + "sha256:e49ce7dc9f925e1fb010fc3d555250139df61fa6e5a0a95ce356329602c11ea9", + "sha256:e61eae9b31799c32c5f9b7be906be3380e699e74b2db26c227c50a5fc7988698", + "sha256:ea053cefa008fda40f92aab937fb9f183cf8752e41dbc7bc68917884454c6362", + "sha256:f06e21ad0b504658a3a9edd3d8530e8cea5723f6ea5d280e8db8efc625b47e49", + "sha256:f14546403c2a1d11a130b537dda28f07eb6c1805a43dae4617448074fd49c282", + "sha256:f1a5d8f18877474c80b7711d870db0eeef9442691fcdb00adabfc97e183ee0b0", + "sha256:f2969e8f72c6236c51f91fbb79c33821d12a811e2a94b7aa59c65f8dbdfad34a", + "sha256:f468d520f47807d1eb5d27648393519655eadc578d5dd862d06873cce04c4d1b", + "sha256:f70dc00a91311a1aea124e5f64569ea44c011b58433981313202c46bccbec0e1", + "sha256:f93255b3e4d64785554e544c1c76cd32f4a354fa79e2eeca5d16ac2e7fdd57aa" + ], + "markers": "python_version >= '3.7'", + "version": "==2.6.3" }, "pyjwt": { "hashes": [ @@ -1090,11 +1176,11 @@ }, "setuptools": { "hashes": [ - "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f", - "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235" + "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d", + "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b" ], - "markers": "python_version >= '3.7'", - "version": "==68.0.0" + "markers": "python_version >= '3.8'", + "version": "==68.1.2" }, "six": { "hashes": [ @@ -1235,11 +1321,11 @@ }, "websocket-client": { "hashes": [ - "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd", - "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d" + "sha256:53e95c826bf800c4c465f50093a8c4ff091c7327023b10bfaff40cf1ef170eaa", + "sha256:ce54f419dfae71f4bdba69ebe65bf7f0a93fe71bc009ad3a010aacc3eebad537" ], - "markers": "python_version >= '3.7'", - "version": "==1.6.1" + "markers": "python_version >= '3.8'", + "version": "==1.6.2" }, "websockets": { "hashes": [ @@ -1420,13 +1506,120 @@ ], "version": "==0.2.0" }, + "bitarray": { + "hashes": [ + "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", + "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b", + "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667", + "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac", + "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82", + "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869", + "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52", + "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084", + "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767", + "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180", + "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399", + "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620", + "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf", + "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08", + "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e", + "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816", + "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f", + "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e", + "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939", + "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e", + "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf", + "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3", + "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46", + "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3", + "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd", + "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324", + "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7", + "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f", + "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5", + "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec", + "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127", + "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794", + "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7", + "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78", + "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b", + "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6", + "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886", + "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107", + "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c", + "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e", + "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482", + "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499", + "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d", + "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc", + "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d", + "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5", + "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376", + "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a", + "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d", + "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792", + "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305", + "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347", + "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e", + "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e", + "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa", + "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5", + "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6", + "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055", + "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0", + "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752", + "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2", + "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c", + "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98", + "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051", + "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f", + "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e", + "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b", + "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204", + "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035", + "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a", + "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2", + "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884", + "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1", + "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a", + "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484", + "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b", + "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165", + "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3", + "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942", + "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3", + "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75", + "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6", + "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c", + "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e", + "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346", + "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6", + "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc", + "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae", + "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117", + "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3", + "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b", + "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21", + "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3", + "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664", + "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992", + "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd", + "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082", + "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e", + "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5", + "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e", + "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19", + "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608" + ], + "version": "==2.8.1" + }, "bitstring": { "hashes": [ - "sha256:a391db8828ac4485dd5ce72c80b27ebac3e7b989631359959e310cd9729723b2", - "sha256:f93893791e8a6ecb02adcc5c191aaa964a06a9e1449e326cfb4f49ff5198e588" + "sha256:13a07c63a2901a5572638d4917a2e7ea539df6bfe49aeb1c56949117fda943fa", + "sha256:a9c97fdf9fe38f27ea0ac2b4cf2a3f5bce5ccc23b863082582b9f48b22274528" ], "markers": "python_version >= '3.7'", - "version": "==4.0.2" + "version": "==4.1.1" }, "cachetools": { "hashes": [ @@ -1656,43 +1849,43 @@ }, "fonttools": { "hashes": [ - "sha256:01cfe02416b6d416c5c8d15e30315cbcd3e97d1b50d3b34b0ce59f742ef55258", - "sha256:0a1466713e54bdbf5521f2f73eebfe727a528905ff5ec63cda40961b4b1eea95", - "sha256:0df8ef75ba5791e873c9eac2262196497525e3f07699a2576d3ab9ddf41cb619", - "sha256:10dac980f2b975ef74532e2a94bb00e97a95b4595fb7f98db493c474d5f54d0e", - "sha256:150122ed93127a26bc3670ebab7e2add1e0983d30927733aec327ebf4255b072", - "sha256:1f81ed9065b4bd3f4f3ce8e4873cd6a6b3f4e92b1eddefde35d332c6f414acc3", - "sha256:27ec3246a088555629f9f0902f7412220c67340553ca91eb540cf247aacb1983", - "sha256:2d6dc3fa91414ff4daa195c05f946e6a575bd214821e26d17ca50f74b35b0fe4", - "sha256:329341ba3d86a36e482610db56b30705384cb23bd595eac8cbb045f627778e9d", - "sha256:3fb2a69870bfe143ec20b039a1c8009e149dd7780dd89554cc8a11f79e5de86b", - "sha256:4655c480a1a4d706152ff54f20e20cf7609084016f1df3851cce67cef768f40a", - "sha256:48e82d776d2e93f88ca56567509d102266e7ab2fb707a0326f032fe657335238", - "sha256:57b68eab183fafac7cd7d464a7bfa0fcd4edf6c67837d14fb09c1c20516cf20b", - "sha256:58c1165f9b2662645de9b19a8c8bdd636b36294ccc07e1b0163856b74f10bafc", - "sha256:614b1283dca88effd20ee48160518e6de275ce9b5456a3134d5f235523fc5065", - "sha256:685a4dd6cf31593b50d6d441feb7781a4a7ef61e19551463e14ed7c527b86f9f", - "sha256:6bd7e4777bff1dcb7c4eff4786998422770f3bfbef8be401c5332895517ba3fa", - "sha256:703101eb0490fae32baf385385d47787b73d9ea55253df43b487c89ec767e0d7", - "sha256:83b98be5d291e08501bd4fc0c4e0f8e6e05b99f3924068b17c5c9972af6fff84", - "sha256:8ece1886d12bb36c48c00b2031518877f41abae317e3a55620d38e307d799b7e", - "sha256:9c456d1f23deff64ffc8b5b098718e149279abdea4d8692dba69172fb6a0d597", - "sha256:9cd2363ea7728496827658682d049ffb2e98525e2247ca64554864a8cc945568", - "sha256:a9b55d2a3b360e0c7fc5bd8badf1503ca1c11dd3a1cd20f2c26787ffa145a9c7", - "sha256:ae7df0ae9ee2f3f7676b0ff6f4ebe48ad0acaeeeaa0b6839d15dbf0709f2c5ef", - "sha256:ae881e484702efdb6cf756462622de81d4414c454edfd950b137e9a7352b3cb9", - "sha256:b8600ae7dce6ec3ddfb201abb98c9d53abbf8064d7ac0c8a0d8925e722ccf2a0", - "sha256:c36c904ce0322df01e590ba814d5d69e084e985d7e4c2869378671d79662a7d4", - "sha256:c8bf88f9e3ce347c716921804ef3a8330cb128284eb6c0b6c4b3574f3c580023", - "sha256:d40673b2e927f7cd0819c6f04489dfbeb337b4a7b10fc633c89bf4f34ecb9620", - "sha256:d54e600a2bcfa5cdaa860237765c01804a03b08404d6affcd92942fa7315ffba", - "sha256:dfe7fa7e607f7e8b58d0c32501a3a7cac148538300626d1b930082c90ae7f6bd", - "sha256:e35bed436726194c5e6e094fdfb423fb7afaa0211199f9d245e59e11118c576c", - "sha256:f0290ea7f9945174bd4dfd66e96149037441eb2008f3649094f056201d99e293", - "sha256:fae4e801b774cc62cecf4a57b1eae4097903fced00c608d9e2bc8f84cd87b54a" + "sha256:0eb79a2da5eb6457a6f8ab904838454accc7d4cccdaff1fd2bd3a0679ea33d64", + "sha256:113337c2d29665839b7d90b39f99b3cac731f72a0eda9306165a305c7c31d341", + "sha256:12a7c247d1b946829bfa2f331107a629ea77dc5391dfd34fdcd78efa61f354ca", + "sha256:179737095eb98332a2744e8f12037b2977f22948cf23ff96656928923ddf560a", + "sha256:19b7db825c8adee96fac0692e6e1ecd858cae9affb3b4812cdb9d934a898b29e", + "sha256:37983b6bdab42c501202500a2be3a572f50d4efe3237e0686ee9d5f794d76b35", + "sha256:3a35981d90feebeaef05e46e33e6b9e5b5e618504672ca9cd0ff96b171e4bfff", + "sha256:46a0ec8adbc6ff13494eb0c9c2e643b6f009ce7320cf640de106fb614e4d4360", + "sha256:4aa79366e442dbca6e2c8595645a3a605d9eeabdb7a094d745ed6106816bef5d", + "sha256:515607ec756d7865f23070682622c49d922901943697871fc292277cf1e71967", + "sha256:53eb5091ddc8b1199330bb7b4a8a2e7995ad5d43376cadce84523d8223ef3136", + "sha256:5d18fc642fd0ac29236ff88ecfccff229ec0386090a839dd3f1162e9a7944a40", + "sha256:5fb289b7a815638a7613d46bcf324c9106804725b2bb8ad913c12b6958ffc4ec", + "sha256:62f481ac772fd68901573956231aea3e4b1ad87b9b1089a61613a91e2b50bb9b", + "sha256:689508b918332fb40ce117131633647731d098b1b10d092234aa959b4251add5", + "sha256:68a02bbe020dc22ee0540e040117535f06df9358106d3775e8817d826047f3fd", + "sha256:6ed2662a3d9c832afa36405f8748c250be94ae5dfc5283d668308391f2102861", + "sha256:7286aed4ea271df9eab8d7a9b29e507094b51397812f7ce051ecd77915a6e26b", + "sha256:7cc7d685b8eeca7ae69dc6416833fbfea61660684b7089bca666067cb2937dcf", + "sha256:8708b98c278012ad267ee8a7433baeb809948855e81922878118464b274c909d", + "sha256:9398f244e28e0596e2ee6024f808b06060109e33ed38dcc9bded452fd9bbb853", + "sha256:9e36344e48af3e3bde867a1ca54f97c308735dd8697005c2d24a86054a114a71", + "sha256:a398bdadb055f8de69f62b0fc70625f7cbdab436bbb31eef5816e28cab083ee8", + "sha256:acb47f6f8680de24c1ab65ebde39dd035768e2a9b571a07c7b8da95f6c8815fd", + "sha256:be24fcb80493b2c94eae21df70017351851652a37de514de553435b256b2f249", + "sha256:c391cd5af88aacaf41dd7cfb96eeedfad297b5899a39e12f4c2c3706d0a3329d", + "sha256:c95b0724a6deea2c8c5d3222191783ced0a2f09bd6d33f93e563f6f1a4b3b3a4", + "sha256:c9b1ce7a45978b821a06d375b83763b27a3a5e8a2e4570b3065abad240a18760", + "sha256:db372213d39fa33af667c2aa586a0c1235e88e9c850f5dd5c8e1f17515861868", + "sha256:db55cbaea02a20b49fefbd8e9d62bd481aaabe1f2301dabc575acc6b358874fa", + "sha256:ed1a13a27f59d1fc1920394a7f596792e9d546c9ca5a044419dca70c37815d7c", + "sha256:f2b82f46917d8722e6b5eafeefb4fb585d23babd15d8246c664cd88a5bddd19c", + "sha256:f2f806990160d1ce42d287aa419df3ffc42dfefe60d473695fb048355fe0c6a0", + "sha256:f720fa82a11c0f9042376fd509b5ed88dab7e3cd602eee63a1af08883b37342b" ], "markers": "python_version >= '3.8'", - "version": "==4.42.0" + "version": "==4.42.1" }, "iniconfig": { "hashes": [ @@ -2018,83 +2211,90 @@ }, "pymongo": { "hashes": [ - "sha256:022c91e2a41eefbcddc844c534520a13c6f613666c37b9fb9ed039eff47bd2e4", - "sha256:02dba4ea2a6f22de4b50864d3957a0110b75d3eeb40aeab0b0ff64bcb5a063e6", - "sha256:04ec1c5451ad358fdbff28ddc6e8a3d1b5f62178d38cd08007a251bc3f59445a", - "sha256:05935f5a4bbae0a99482147588351b7b17999f4a4e6e55abfb74367ac58c0634", - "sha256:0a7739bcebdbeb5648edb15af00fd38f2ab5de20851a1341d229494a638284cc", - "sha256:0bdbbcc1ef3a56347630c57eda5cd9536bdbdb82754b3108c66cbc51b5233dfb", - "sha256:0dcc64747b628a96bcfc6405c42acae3762c85d8ae8c1ce18834b8151cad7486", - "sha256:1897123c4bede1af0c264a3bc389a2505bae50d85e4f211288d352928c02d017", - "sha256:1944b16ffef3573ae064196460de43eb1c865a64fed23551b5eac1951d80acca", - "sha256:2259302d8ab51cd56c3d9d5cca325977e35a0bb3a15a297ec124d2da56c214f7", - "sha256:262a4073d2ee0654f0314ef4d9aab1d8c13dc8dae5c102312e152c02bfa7bdb7", - "sha256:2aab6d1cff00d68212eca75d2260980202b14038d9298fed7d5c455fe3285c7c", - "sha256:2fe4bbf2b2c91e4690b5658b0fbb98ca6e0a8fba9ececd65b4e7d2d1df3e9b01", - "sha256:32d6d2b7e14bb6bc052f6cba0c1cf4d47a2b49c56ea1ed0f960a02bc9afaefb2", - "sha256:334d41649f157c56a47fb289bae3b647a867c1a74f5f3a8a371fb361580bd9d3", - "sha256:35545583396684ea70a0b005034a469bf3f447732396e5b3d50bec94890b8d5c", - "sha256:3681caf37edbe05f72f0d351e4a6cb5874ec7ab5eeb99df3a277dbf110093739", - "sha256:36b0b06c6e830d190215fced82872e5fd8239771063afa206f9adc09574018a3", - "sha256:3a350d03959f9d5b7f2ea0621f5bb2eb3927b8fc1c4031d12cfd3949839d4f66", - "sha256:3bb935789276422d8875f051837356edfccdb886e673444d91e4941a8142bd48", - "sha256:3f0bd25de90b804cc95e548f55f430df2b47f242a4d7bbce486db62f3b3c981f", - "sha256:3f345380f6d6d6d1dc6db9fa5c8480c439ea79553b71a2cbe3030a1f20676595", - "sha256:44381b817eeb47a41bbfbd279594a7fb21017e0e3e15550eb0fd3758333097f3", - "sha256:48409bac0f6a62825c306c9a124698df920afdc396132908a8e88b466925a248", - "sha256:4e6a70c9d437b043fb07eef1796060f476359e5b7d8e23baa49f1a70379d6543", - "sha256:4ec9c6d4547c93cf39787c249969f7348ef6c4d36439af10d57b5ee65f3dfbf9", - "sha256:5248fdf7244a5e976279fe154d116c73f6206e0be71074ea9d9b1e73b5893dd5", - "sha256:5368801ca6b66aacc5cc013258f11899cd6a4c3bb28cec435dd67f835905e9d2", - "sha256:53831effe4dc0243231a944dfbd87896e42b1cf081776930de5cc74371405e3b", - "sha256:54d0b8b6f2548e15b09232827d9ba8e03a599c9a30534f7f2c7bae79df2d1f91", - "sha256:55b6ebeeabe32a9d2e38eeb90f07c020cb91098b34b5fca42ff3991cb6e6e621", - "sha256:58c492e28057838792bed67875f982ffbd3c9ceb67341cc03811859fddb8efbf", - "sha256:5a1e5b931bf729b2eacd720a0e40201c2d5ed0e2bada60863f19b069bb5016c4", - "sha256:5a2a1da505ea78787b0382c92dc21a45d19918014394b220c4734857e9c73694", - "sha256:6cf08997d3ecf9a1eabe12c35aa82a5c588f53fac054ed46fe5c16a0a20ea43d", - "sha256:7b7127bb35f10d974ec1bd5573389e99054c558b821c9f23bb8ff94e7ae6e612", - "sha256:7e307d67641d0e2f7e7d6ee3dad880d090dace96cc1d95c99d15bd9f545a1168", - "sha256:8082eef0d8c711c9c272906fa469965e52b44dbdb8a589b54857b1351dc2e511", - "sha256:854d92d2437e3496742e17342496e1f3d9efb22455501fd6010aa3658138e457", - "sha256:85b92b3828b2c923ed448f820c147ee51fa4566e35c9bf88415586eb0192ced2", - "sha256:884a35c0740744a48f67210692841581ab83a4608d3a031e7125022989ef65f8", - "sha256:912b0fdc16500125dc1837be8b13c99d6782d93d6cd099d0e090e2aca0b6d100", - "sha256:91848d555155ad4594de5e575b6452adc471bc7bc4b4d2b1f4f15a78a8af7843", - "sha256:977c34b5b0b50bd169fbca1a4dd06fbfdfd8ac47734fdc3473532c10098e16ce", - "sha256:980da627edc1275896d7d4670596433ec66e1f452ec244e07bbb2f91c955b581", - "sha256:98764ae13de0ab80ba824ca0b84177006dec51f48dfb7c944d8fa78ab645c67f", - "sha256:995b868ccc9df8d36cb28142363e3911846fe9f43348d942951f60cdd7f62224", - "sha256:9d43634594f2486cc9bb604a1dc0914234878c4faf6604574a25260cb2faaa06", - "sha256:9d45243ff4800320c842c45e01c91037e281840e8c6ed2949ed82a70f55c0e6a", - "sha256:a0d326c3ba989091026fbc4827638dc169abdbb0c0bbe593716921543f530af6", - "sha256:a438508dd8007a4a724601c3790db46fe0edc3d7d172acafc5f148ceb4a07815", - "sha256:a4df87dbbd03ac6372d24f2a8054b4dc33de497d5227b50ec649f436ad574284", - "sha256:a5198beca36778f19a98b56f541a0529502046bc867b352dda5b6322e1ddc4fd", - "sha256:a6750449759f0a83adc9df3a469483a8c3eef077490b76f30c03dc8f7a4b1d66", - "sha256:a86d20210c9805a032cda14225087ec483613aff0955327c7871a3c980562c5b", - "sha256:ae1f85223193f249320f695eec4242cdcc311357f5f5064c2e72cfd18017e8ee", - "sha256:aed21b3142311ad139629c4e101b54f25447ec40d6f42c72ad5c1a6f4f851f3a", - "sha256:b25d2ccdb2901655cc56c0fc978c5ddb35029c46bfd30d182d0e23fffd55b14b", - "sha256:b4c4bcd285bf0f5272d50628e4ea3989738e3af1251b2dd7bf50da2d593f3a56", - "sha256:bbdd6c719cc2ea440d7245ba71ecdda507275071753c6ffe9c8232647246f575", - "sha256:c409e5888a94a3ff99783fffd9477128ffab8416e3f8b2c633993eecdcd5c267", - "sha256:d1b1c8eb21de4cb5e296614e8b775d5ecf9c56b7d3c6000f4bfdb17f9e244e72", - "sha256:d67f4029c57b36a0278aeae044ce382752c078c7625cef71b5e2cf3e576961f9", - "sha256:d9a5e16a32fb1000c72a8734ddd8ae291974deb5d38d40d1bdd01dbe4024eeb0", - "sha256:ddffc0c6d0e92cf43dc6c47639d1ef9ab3c280db2998a33dbb9953bd864841e1", - "sha256:e0f08a2dba1469252462c414b66cb416c7f7295f2c85e50f735122a251fcb131", - "sha256:e3b508e0de613b906267f2c484cb5e9afd3a64680e1af23386ca8f99a29c6145", - "sha256:e426e213ab07a73f8759ab8d69e87d05d7a60b3ecbf7673965948dcf8ebc1c9f", - "sha256:e6d5d2c97c35f83dc65ccd5d64c7ed16eba6d9403e3744e847aee648c432f0bb", - "sha256:ebe1683ec85d8bca389183d01ecf4640c797d6f22e6dac3453a6c492920d5ec3", - "sha256:ef0e3279e72cccc3dc7be75b12b1e54cc938d7ce13f5f22bea844b9d9d5fecd4", - "sha256:efa67f46c1678df541e8f41247d22430905f80a3296d9c914aaa793f2c9fa1db", - "sha256:f41feb8cf429799ac43ed34504839954aa7d907f8bd9ecb52ed5ff0d2ea84245", - "sha256:fab52db4d3aa3b73bcf920fb375dbea63bf0df0cb4bdb38c5a0a69e16568cc21" + "sha256:076afa0a4a96ca9f77fec0e4a0d241200b3b3a1766f8d7be9a905ecf59a7416b", + "sha256:08819da7864f9b8d4a95729b2bea5fffed08b63d3b9c15b4fea47de655766cf5", + "sha256:0a1f26bc1f5ce774d99725773901820dfdfd24e875028da4a0252a5b48dcab5c", + "sha256:0f4b125b46fe377984fbaecf2af40ed48b05a4b7676a2ff98999f2016d66b3ec", + "sha256:1240edc1a448d4ada4bf1a0e55550b6292420915292408e59159fd8bbdaf8f63", + "sha256:152259f0f1a60f560323aacf463a3642a65a25557683f49cfa08c8f1ecb2395a", + "sha256:168172ef7856e20ec024fe2a746bfa895c88b32720138e6438fd765ebd2b62dd", + "sha256:1b1d7d9aabd8629a31d63cd106d56cca0e6420f38e50563278b520f385c0d86e", + "sha256:1d40ad09d9f5e719bc6f729cc6b17f31c0b055029719406bd31dde2f72fca7e7", + "sha256:21b953da14549ff62ea4ae20889c71564328958cbdf880c64a92a48dda4c9c53", + "sha256:23cc6d7eb009c688d70da186b8f362d61d5dd1a2c14a45b890bd1e91e9c451f2", + "sha256:2988ef5e6b360b3ff1c6d55c53515499de5f48df31afd9f785d788cdacfbe2d3", + "sha256:2a0aade2b11dc0c326ccd429ee4134d2d47459ff68d449c6d7e01e74651bd255", + "sha256:2b0176f9233a5927084c79ff80b51bd70bfd57e4f3d564f50f80238e797f0c8a", + "sha256:2d4fa1b01fa7e5b7bb8d312e3542e211b320eb7a4e3d8dc884327039d93cb9e0", + "sha256:3236cf89d69679eaeb9119c840f5c7eb388a2110b57af6bb6baf01a1da387c18", + "sha256:33faa786cc907de63f745f587e9879429b46033d7d97a7b84b37f4f8f47b9b32", + "sha256:37df8f6006286a5896d1cbc3efb8471ced42e3568d38e6cb00857277047b0d63", + "sha256:3a7166d57dc74d679caa7743b8ecf7dc3a1235a9fd178654dddb2b2a627ae229", + "sha256:3d79ae3bb1ff041c0db56f138c88ce1dfb0209f3546d8d6e7c3f74944ecd2439", + "sha256:3e33064f1984db412b34d51496f4ea785a9cff621c67de58e09fb28da6468a52", + "sha256:3fa3648e4f1e63ddfe53563ee111079ea3ab35c3b09cd25bc22dadc8269a495f", + "sha256:40d5f6e853ece9bfc01e9129b228df446f49316a4252bb1fbfae5c3c9dedebad", + "sha256:41771b22dd2822540f79a877c391283d4e6368125999a5ec8beee1ce566f3f82", + "sha256:435228d3c16a375274ac8ab9c4f9aef40c5e57ddb8296e20ecec9e2461da1017", + "sha256:44ee985194c426ddf781fa784f31ffa29cb59657b2dba09250a4245431847d73", + "sha256:465fd5b040206f8bce7016b01d7e7f79d2fcd7c2b8e41791be9632a9df1b4999", + "sha256:496c9cbcb4951183d4503a9d7d2c1e3694aab1304262f831d5e1917e60386036", + "sha256:49dce6957598975d8b8d506329d2a3a6c4aee911fa4bbcf5e52ffc6897122950", + "sha256:4c42748ccc451dfcd9cef6c5447a7ab727351fd9747ad431db5ebb18a9b78a4d", + "sha256:505f8519c4c782a61d94a17b0da50be639ec462128fbd10ab0a34889218fdee3", + "sha256:53f2dda54d76a98b43a410498bd12f6034b2a14b6844ca08513733b2b20b7ad8", + "sha256:56320c401f544d762fc35766936178fbceb1d9261cd7b24fbfbc8fb6f67aa8a5", + "sha256:58a63a26a1e3dc481dd3a18d6d9f8bd1d576cd1ffe0d479ba7dd38b0aeb20066", + "sha256:5caee7bd08c3d36ec54617832b44985bd70c4cbd77c5b313de6f7fce0bb34f93", + "sha256:631492573a1bef2f74f9ac0f9d84e0ce422c251644cd81207530af4aa2ee1980", + "sha256:63d8019eee119df308a075b8a7bdb06d4720bf791e2b73d5ab0e7473c115d79c", + "sha256:6422b6763b016f2ef2beedded0e546d6aa6ba87910f9244d86e0ac7690f75c96", + "sha256:681f252e43b3ef054ca9161635f81b730f4d8cadd28b3f2b2004f5a72f853982", + "sha256:6d64878d1659d2a5bdfd0f0a4d79bafe68653c573681495e424ab40d7b6d6d41", + "sha256:74c0da07c04d0781490b2915e7514b1adb265ef22af039a947988c331ee7455b", + "sha256:7591a3beea6a9a4fa3080d27d193b41f631130e3ffa76b88c9ccea123f26dc59", + "sha256:76a262c41c1a7cbb84a3b11976578a7eb8e788c4b7bfbd15c005fb6ca88e6e50", + "sha256:77cfff95c1fafd09e940b3fdcb7b65f11442662fad611d0e69b4dd5d17a81c60", + "sha256:8027c9063579083746147cf401a7072a9fb6829678076cd3deff28bb0e0f50c8", + "sha256:80a167081c75cf66b32f30e2f1eaee9365af935a86dbd76788169911bed9b5d5", + "sha256:840eaf30ccac122df260b6005f9dfae4ac287c498ee91e3e90c56781614ca238", + "sha256:8543253adfaa0b802bfa88386db1009c6ebb7d5684d093ee4edc725007553d21", + "sha256:89b3f2da57a27913d15d2a07d58482f33d0a5b28abd20b8e643ab4d625e36257", + "sha256:8e559116e4128630ad3b7e788e2e5da81cbc2344dee246af44471fa650486a70", + "sha256:9aff6279e405dc953eeb540ab061e72c03cf38119613fce183a8e94f31be608f", + "sha256:9c04b9560872fa9a91251030c488e0a73bce9321a70f991f830c72b3f8115d0d", + "sha256:9d2346b00af524757576cc2406414562cced1d4349c92166a0ee377a2a483a80", + "sha256:a253b765b7cbc4209f1d8ee16c7287c4268d3243070bf72d7eec5aa9dfe2a2c2", + "sha256:a8127437ebc196a6f5e8fddd746bd0903a400dc6b5ae35df672dd1ccc7170a2a", + "sha256:b25f7bea162b3dbec6d33c522097ef81df7c19a9300722fa6853f5b495aecb77", + "sha256:b33c17d9e694b66d7e96977e9e56df19d662031483efe121a24772a44ccbbc7e", + "sha256:b4fe46b58010115514b842c669a0ed9b6a342017b15905653a5b1724ab80917f", + "sha256:b520aafc6cb148bac09ccf532f52cbd31d83acf4d3e5070d84efe3c019a1adbf", + "sha256:b5bbb87fa0511bd313d9a2c90294c88db837667c2bda2ea3fa7a35b59fd93b1f", + "sha256:b6d2a56fc2354bb6378f3634402eec788a8f3facf0b3e7d468db5f2b5a78d763", + "sha256:bbd705d5f3c3d1ff2d169e418bb789ff07ab3c70d567cc6ba6b72b04b9143481", + "sha256:bc5d8c3647b8ae28e4312f1492b8f29deebd31479cd3abaa989090fb1d66db83", + "sha256:c3c3525ea8658ee1192cdddf5faf99b07ebe1eeaa61bf32821126df6d1b8072b", + "sha256:c9a9a39b7cac81dca79fca8c2a6479ef4c7b1aab95fad7544cc0e8fd943595a2", + "sha256:cd4c8d6aa91d3e35016847cbe8d73106e3d1c9a4e6578d38e2c346bfe8edb3ca", + "sha256:cf62da7a4cdec9a4b2981fcbd5e08053edffccf20e845c0b6ec1e77eb7fab61d", + "sha256:d67225f05f6ea27c8dc57f3fa6397c96d09c42af69d46629f71e82e66d33fa4f", + "sha256:dfcd2b9f510411de615ccedd47462dae80e82fdc09fe9ab0f0f32f11cf57eeb5", + "sha256:e1f61355c821e870fb4c17cdb318669cfbcf245a291ce5053b41140870c3e5cc", + "sha256:e249190b018d63c901678053b4a43e797ca78b93fb6d17633e3567d4b3ec6107", + "sha256:e2654d1278384cff75952682d17c718ecc1ad1d6227bb0068fd826ba47d426a5", + "sha256:e57d859b972c75ee44ea2ef4758f12821243e99de814030f69a3decb2aa86807", + "sha256:e5a27f348909235a106a3903fc8e70f573d89b41d723a500869c6569a391cff7", + "sha256:ead4f19d0257a756b21ac2e0e85a37a7245ddec36d3b6008d5bfe416525967dc", + "sha256:f076b779aa3dc179aa3ed861be063a313ed4e48ae9f6a8370a9b1295d4502111", + "sha256:f1bb3a62395ffe835dbef3a1cbff48fbcce709c78bd1f52e896aee990928432b", + "sha256:f2227a08b091bd41df5aadee0a5037673f691e2aa000e1968b1ea2342afc6880", + "sha256:f3754acbd7efc7f1b529039fcffc092a15e1cf045e31f22f6c9c5950c613ec4d", + "sha256:fe48f50fb6348511a3268a893bfd4ab5f263f5ac220782449d03cd05964d1ae7", + "sha256:fff7d17d30b2cd45afd654b3fc117755c5d84506ed25fda386494e4e0a3416e1" ], "index": "pypi", - "version": "==4.4.1" + "version": "==4.5.0" }, "pyparsing": { "hashes": [ @@ -2138,28 +2338,34 @@ }, "scipy": { "hashes": [ - "sha256:08d957ca82d3535b3b9ba6c8ff355d78fe975271874e2af267cb5add5bd78625", - "sha256:249cfa465c379c9bb2c20123001e151ff5e29b351cbb7f9c91587260602c58d0", - "sha256:366a6a937110d80dca4f63b3f5b00cc89d36f678b2d124a01067b154e692bab1", - "sha256:39154437654260a52871dfde852adf1b93b1d1bc5dc0ffa70068f16ec0be2624", - "sha256:396fae3f8c12ad14c5f3eb40499fd06a6fef8393a6baa352a652ecd51e74e029", - "sha256:3b9963798df1d8a52db41a6fc0e6fa65b1c60e85d73da27ae8bb754de4792481", - "sha256:3e8eb42db36526b130dfbc417609498a6192381abc1975b91e3eb238e0b41c1a", - "sha256:512fdc18c65f76dadaca139348e525646d440220d8d05f6d21965b8d4466bccd", - "sha256:aec8c62fbe52914f9cf28d846cf0401dd80ab80788bbab909434eb336ed07c04", - "sha256:b41a0f322b4eb51b078cb3441e950ad661ede490c3aca66edef66f4b37ab1877", - "sha256:b4bb943010203465ac81efa392e4645265077b4d9e99b66cf3ed33ae12254173", - "sha256:b588311875c58d1acd4ef17c983b9f1ab5391755a47c3d70b6bd503a45bfaf71", - "sha256:ba94eeef3c9caa4cea7b402a35bb02a5714ee1ee77eb98aca1eed4543beb0f4c", - "sha256:be8c962a821957fdde8c4044efdab7a140c13294997a407eaee777acf63cbf0c", - "sha256:cce154372f0ebe88556ed06d7b196e9c2e0c13080ecb58d0f35062dc7cc28b47", - "sha256:d51565560565a0307ed06fa0ec4c6f21ff094947d4844d6068ed04400c72d0c3", - "sha256:e866514bc2d660608447b6ba95c8900d591f2865c07cca0aa4f7ff3c4ca70f30", - "sha256:fb5b492fa035334fd249f0973cc79ecad8b09c604b42a127a677b45a9a3d4289", - "sha256:ffb28e3fa31b9c376d0fb1f74c1f13911c8c154a760312fbee87a21eb21efe31" + "sha256:0f3261f14b767b316d7137c66cc4f33a80ea05841b9c87ad83a726205b901423", + "sha256:10eb6af2f751aa3424762948e5352f707b0dece77288206f227864ddf675aca0", + "sha256:1342ca385c673208f32472830c10110a9dcd053cf0c4b7d4cd7026d0335a6c1d", + "sha256:214cdf04bbae7a54784f8431f976704ed607c4bc69ba0d5d5d6a9df84374df76", + "sha256:2b997a5369e2d30c97995dcb29d638701f8000d04df01b8e947f206e5d0ac788", + "sha256:2c91cf049ffb5575917f2a01da1da082fd24ed48120d08a6e7297dfcac771dcd", + "sha256:3aeb87661de987f8ec56fa6950863994cd427209158255a389fc5aea51fa7055", + "sha256:4447ad057d7597476f9862ecbd9285bbf13ba9d73ce25acfa4e4b11c6801b4c9", + "sha256:542a757e2a6ec409e71df3d8fd20127afbbacb1c07990cb23c5870c13953d899", + "sha256:8d9886f44ef8c9e776cb7527fb01455bf4f4a46c455c4682edc2c2cc8cd78562", + "sha256:90d3b1364e751d8214e325c371f0ee0dd38419268bf4888b2ae1040a6b266b2a", + "sha256:95763fbda1206bec41157582bea482f50eb3702c85fffcf6d24394b071c0e87a", + "sha256:ac74b1512d38718fb6a491c439aa7b3605b96b1ed3be6599c17d49d6c60fca18", + "sha256:afdb0d983f6135d50770dd979df50bf1c7f58b5b33e0eb8cf5c73c70600eae1d", + "sha256:b0620240ef445b5ddde52460e6bc3483b7c9c750275369379e5f609a1050911c", + "sha256:b133f237bd8ba73bad51bc12eb4f2d84cbec999753bf25ba58235e9fc2096d80", + "sha256:b29318a5e39bd200ca4381d80b065cdf3076c7d7281c5e36569e99273867f61d", + "sha256:b8425fa963a32936c9773ee3ce44a765d8ff67eed5f4ac81dc1e4a819a238ee9", + "sha256:d2b813bfbe8dec6a75164523de650bad41f4405d35b0fa24c2c28ae07fcefb20", + "sha256:d690e1ca993c8f7ede6d22e5637541217fc6a4d3f78b3672a6fe454dbb7eb9a7", + "sha256:e367904a0fec76433bf3fbf3e85bf60dae8e9e585ffd21898ab1085a29a04d16", + "sha256:ea932570b1c2a30edafca922345854ff2cd20d43cd9123b6dacfdecebfc1a80b", + "sha256:f28f1f6cfeb48339c192efc6275749b2a25a7e49c4d8369a28b6591da02fbc9a", + "sha256:f73102f769ee06041a3aa26b5841359b1a93cc364ce45609657751795e8f4a4a", + "sha256:fa4909c6c20c3d91480533cddbc0e7c6d849e7d9ded692918c76ce5964997898" ], "markers": "python_version < '3.13' and python_version >= '3.9'", - "version": "==1.11.1" + "version": "==1.11.2" }, "screed": { "hashes": [ diff --git a/src/common/product_models/heatmap_common_models.py b/src/common/product_models/heatmap_common_models.py index 824f2a85e..d35f71de9 100644 --- a/src/common/product_models/heatmap_common_models.py +++ b/src/common/product_models/heatmap_common_models.py @@ -111,9 +111,6 @@ class Cell(BaseModel): description="The value of the heatmap at this cell." ) - class Config: - smart_union = True - class HeatMapRow(BaseModel): """ @@ -133,7 +130,7 @@ class HeatMapRow(BaseModel): description="The cells in the row of the heatmap in render order." ) meta: dict[str, str] | None = Field( - examples=[{"growth_media": "Spizizen minimal media + 0.5mM biotin"}], + example={"growth_media": "Spizizen minimal media + 0.5mM biotin"}, description="Arbitrary metadata about the data in the row" ) @@ -178,9 +175,6 @@ class CellDetailEntry(BaseModel): description="The value of the cell entry." ) - class Config: - smart_union = True - class CellDetail(BaseModel): """ diff --git a/src/common/storage/init_storage.py b/src/common/storage/init_storage.py index 9e4ddfe62..dfb2ec8c4 100644 --- a/src/common/storage/init_storage.py +++ b/src/common/storage/init_storage.py @@ -21,7 +21,7 @@ def _get_config() -> CollectionsServiceConfig: parser = argparse.ArgumentParser( - description="Set up ArangoDB collection sharding for the KBase collectins service." + description="Set up ArangoDB collection sharding for the KBase collections service." ) parser.add_argument( '-c', '--config', required=True, type=str, @@ -33,7 +33,7 @@ def _get_config() -> CollectionsServiceConfig: "-s", "--skip-database-creation", action="store_true", help="Don't create the database. This is necessary if the credentials in the config " + "file don't have permissions for the _system database; however the target database " - + "must alreaady exist." + + "must already exist." ) args = parser.parse_args() with open(args.config, 'rb') as cfgfile: diff --git a/src/service/data_products/common_models.py b/src/service/data_products/common_models.py index 712fb26cc..5d3be8f93 100644 --- a/src/service/data_products/common_models.py +++ b/src/service/data_products/common_models.py @@ -3,7 +3,7 @@ """ from fastapi import APIRouter, Query -from pydantic import BaseModel, validator, Field +from pydantic import field_validator, ConfigDict, BaseModel, Field from src.common.product_models.common_models import SubsetProcessStates from src.common.storage import collection_and_field_names as names from src.service import models @@ -58,14 +58,13 @@ class DataProductSpec(BaseModel): in the `tags` argument. """ - @validator("router") + @field_validator("router") + @classmethod def _check_router_tags(cls, v): # @NoSelf if not v.tags: raise ValueError("router must have at least one tag") return v - - class Config: - arbitrary_types_allowed = True + model_config = ConfigDict(arbitrary_types_allowed=True) class DataProductMissingIDs(SubsetProcessStates): @@ -82,10 +81,10 @@ class DataProductMissingIDs(SubsetProcessStates): ) -QUERY_VALIDATOR_LOAD_VERSION_OVERRIDE = Annotated[str | None, Query( +QUERY_VALIDATOR_LOAD_VERSION_OVERRIDE = Annotated[str, Query( min_length=models.LENGTH_MIN_LOAD_VERSION, max_length=models.LENGTH_MAX_LOAD_VERSION, - regex=models.REGEX_LOAD_VERSION, + pattern=models.REGEX_LOAD_VERSION, example=models.FIELD_LOAD_VERSION_EXAMPLE, description=models.FIELD_LOAD_VERSION_DESCRIPTION + ". This will override the collection's " + "load version. Service administrator privileges are required." @@ -114,7 +113,7 @@ class DataProductMissingIDs(SubsetProcessStates): )] -QUERY_VALIDATOR_MATCH_ID = Annotated[str | None, Query( +QUERY_VALIDATOR_MATCH_ID = Annotated[str, Query( description="A match ID to set the view to the match rather than " + "the entire collection. Authentication is required. If a match ID is " # matches are against a specific load version, so... @@ -136,7 +135,7 @@ class DataProductMissingIDs(SubsetProcessStates): )] -QUERY_VALIDATOR_SELECTION_ID = Annotated[str | None, Query( +QUERY_VALIDATOR_SELECTION_ID = Annotated[str, Query( description="A selection ID to set the view to the selection rather than the entire " + "collection. If a selection ID is set, any load version override is ignored. " + "If a selection filter and a match filter are provided, they are ANDed together. " @@ -161,7 +160,7 @@ class DataProductMissingIDs(SubsetProcessStates): )] -QUERY_VALIDATOR_SORT_ON = Annotated[str | None, Query( +QUERY_VALIDATOR_SORT_ON = Annotated[str, Query( example=names.FLD_KBASE_ID, description="The field to sort on." )] diff --git a/src/service/data_products/heatmap.py b/src/service/data_products/heatmap.py index 98b3d1883..d49930fce 100644 --- a/src/service/data_products/heatmap.py +++ b/src/service/data_products/heatmap.py @@ -225,7 +225,7 @@ async def get_heatmap( self, r: Request, collection_id: Annotated[str, PATH_VALIDATOR_COLLECTION_ID], - start_after: str | None = Query( + start_after: str = Query( default=None, example="GB_GCA_000006155.2", description=f"The `{names.FLD_KBASE_ID}` to start after when listing data. This " @@ -290,8 +290,8 @@ async def get_missing_ids( self, r: Request, collection_id: Annotated[str, PATH_VALIDATOR_COLLECTION_ID], - match_id: Annotated[str | None, Query(description="A match ID.")] = None, - selection_id: Annotated[str | None, Query(description="A selection ID.")] = None, + match_id: Annotated[str, Query(description="A match ID.")] = None, + selection_id: Annotated[str, Query(description="A selection ID.")] = None, user: kb_auth.KBaseUser = Depends(_OPT_AUTH), ) -> DataProductMissingIDs: return await get_missing_ids( diff --git a/src/service/data_products/samples.py b/src/service/data_products/samples.py index 8dbe1336f..a1de920ac 100644 --- a/src/service/data_products/samples.py +++ b/src/service/data_products/samples.py @@ -298,7 +298,7 @@ async def get_sample_locations( + "time and a lot of memory. In the future it may be disallowed for collections with " + "large numbers of samples." )] = False, - match_id: Annotated[str | None, Query( + match_id: Annotated[str, Query( description="A match ID to set the view to the match rather than " + "the entire collection. Authentication is required. If a match ID is " # matches are against a specific load version, so... @@ -306,7 +306,7 @@ async def get_sample_locations( + "If a selection filter and a match filter are provided, they are ANDed together. " )] = None, # TODO FEATURE support a choice of AND or OR for matches & selections - selection_id: Annotated[str | None, Query( + selection_id: Annotated[str, Query( description="A selection ID to set the view to the selection rather than the entire " + "collection. If a selection ID is set, any load version override is ignored. " + "If a selection filter and a match filter are provided, they are ANDed together. " @@ -492,8 +492,8 @@ async def get_samples_by_id( async def get_missing_ids( r: Request, collection_id: Annotated[str, PATH_VALIDATOR_COLLECTION_ID], - match_id: Annotated[str | None, Query(description="A match ID.")] = None, - selection_id: Annotated[str | None, Query(description="A selection ID.")] = None, + match_id: Annotated[str, Query(description="A match ID.")] = None, + selection_id: Annotated[str, Query(description="A selection ID.")] = None, user: kb_auth.KBaseUser = Depends(_OPT_AUTH), ) -> common_models.DataProductMissingIDs: return await _get_missing_ids( diff --git a/src/service/data_products/taxa_count.py b/src/service/data_products/taxa_count.py index a46bedea8..b16552537 100644 --- a/src/service/data_products/taxa_count.py +++ b/src/service/data_products/taxa_count.py @@ -141,7 +141,7 @@ class TaxaCounts(SubsetProcessStates): """ The taxa counts data set. """ - data: list[TaxaCount] | None + data: list[TaxaCount] | None = None _FLD_COL_ID = "colid" @@ -193,13 +193,13 @@ async def get_taxa_counts( example="phylum", description="The taxonomic rank at which to return results" ), - match_id: str | None = Query( + match_id: str = Query( default = None, description="A match ID to include the match count in the taxa count data. " + "Authentication is required. " # matches are against a specific load version, so... + "Note that if a match ID is set, any load version override is ignored."), - selection_id: str | None = Query( + selection_id: str = Query( default = None, description="A selection ID to include the selection count in the taxa count data. " + "Note that if a selection ID is set, any load version override is ignored."), diff --git a/src/service/matchers/lineage_matcher.py b/src/service/matchers/lineage_matcher.py index 5ce6dbb81..13b4b0298 100644 --- a/src/service/matchers/lineage_matcher.py +++ b/src/service/matchers/lineage_matcher.py @@ -4,7 +4,7 @@ import logging -from pydantic import BaseModel, Field, Extra +from pydantic import ConfigDict, BaseModel, Field from typing import Any from src.common.constants import GTDB_UNCLASSIFIED_PREFIX @@ -32,10 +32,9 @@ class GTDBLineageMatcherCollectionParameters(BaseModel): description="The GTDB version of the collection in which the matcher is installed. " + "Input data to the matcher must match this version of GTDB or the match will " + "abort.", - regex=r"^\d{2,4}\.\d{1,2}$" # giving a little room for expansion + pattern=r"^\d{2,4}\.\d{1,2}$" # giving a little room for expansion ) - class Config: - extra = Extra.forbid + model_config = ConfigDict(extra="forbid") class GTDBLineageMatcherUserParameters(BaseModel): @@ -44,8 +43,7 @@ class GTDBLineageMatcherUserParameters(BaseModel): example=GTDBRank.SPECIES, description="A rank in the the GTDB lineage." ) - class Config: - extra = Extra.forbid + model_config = ConfigDict(extra="forbid") async def _process_match( @@ -153,6 +151,6 @@ def generate_match_process( "KBaseSets.AssemblySet", ], required_data_products=[genome_attributes.ID], - user_parameters=GTDBLineageMatcherUserParameters.schema(), - collection_parameters=GTDBLineageMatcherCollectionParameters.schema() + user_parameters=GTDBLineageMatcherUserParameters.model_json_schema(), + collection_parameters=GTDBLineageMatcherCollectionParameters.model_json_schema() ) diff --git a/src/service/matchers/minhash_homology_matcher.py b/src/service/matchers/minhash_homology_matcher.py index 8aaf32504..6f9b08241 100644 --- a/src/service/matchers/minhash_homology_matcher.py +++ b/src/service/matchers/minhash_homology_matcher.py @@ -17,7 +17,7 @@ import asyncio import logging -from pydantic import BaseModel, Field, Extra, HttpUrl +from pydantic import ConfigDict, BaseModel, Field, HttpUrl from src.service import data_product_specs from src.service import models @@ -48,8 +48,7 @@ class MinHashHomologyMatcherCollectionParameters(BaseModel): description="The name of the sketch database in the Assembly Homology Service to match " + "against. This parameter is sent to the sketch service." ) - class Config: - extra = Extra.forbid + model_config = ConfigDict(extra="forbid") class MinHashHomologyMatcherUserParameters(BaseModel): @@ -63,8 +62,7 @@ class MinHashHomologyMatcherUserParameters(BaseModel): ) # TODO HOMOLOGY_MATCHER may want to support more parameters if we switch to a different # implementation like sourmash - class Config: - extra = Extra.forbid + model_config = ConfigDict(extra="forbid") async def _get_sketch_service_client(collection_parameters: dict[str, Any]): @@ -225,6 +223,6 @@ def generate_match_process( "KBaseSets.AssemblySet", ], required_data_products=[genome_attributes.ID], - user_parameters=MinHashHomologyMatcherUserParameters.schema(), - collection_parameters=MinHashHomologyMatcherCollectionParameters.schema() + user_parameters=MinHashHomologyMatcherUserParameters.model_json_schema(), + collection_parameters=MinHashHomologyMatcherCollectionParameters.model_json_schema() ) diff --git a/src/service/models.py b/src/service/models.py index fd23e9fa8..f4ba43810 100644 --- a/src/service/models.py +++ b/src/service/models.py @@ -11,8 +11,8 @@ """ from enum import Enum -from pydantic import BaseModel, Field, validator, HttpUrl, root_validator -from typing import Any, Optional +from pydantic import field_validator, BaseModel, Field, HttpUrl, model_validator +from typing import Any, Self, Annotated from src.service.arg_checkers import contains_control_characters @@ -101,7 +101,7 @@ DATA_PRODUCT_ID_FIELD_PROPS = { "min_length": 1, "max_length": 20, - "regex": "^[a-z_]+$", + "pattern": "^[a-z_]+$", "example": "taxa_count", "description": "The ID of the data product", } @@ -113,7 +113,7 @@ MATCHER_ID_PROPS = { "min_length": 1, "max_length": 20, - "regex": "^[a-z_]+$", + "pattern": "^[a-z_]+$", "example": "gtdb_lineage", "description": "The ID of the matcher", } @@ -128,14 +128,15 @@ class DataProduct(BaseModel): version: str = Field( min_length = LENGTH_MIN_LOAD_VERSION, max_length = LENGTH_MAX_LOAD_VERSION, - regex = REGEX_LOAD_VERSION, + pattern = REGEX_LOAD_VERSION, example=FIELD_LOAD_VERSION_EXAMPLE, description=FIELD_LOAD_VERSION_DESCRIPTION ) # in the future we may want a schema version... need to think this through first. # assume missing == schema version 1 for now - @validator("product", "version", pre=True) + @field_validator("product", "version", mode="before") + @classmethod def _strip(cls, v): # @NoSelf return v.strip() @@ -162,36 +163,46 @@ class Collection(BaseModel): ver_src: str = Field( min_length=1, max_length=50, - regex=REGEX_NO_WHITESPACE, + pattern=REGEX_NO_WHITESPACE, example="r207", description="The version of the collection at the collection data source." ) - desc: Optional[str] = Field( - min_length=1, - max_length=1000, - example="This is a collection of used hot dogs collected from Coney Island in 1892.", - description="A free text description of the collection." - ) - icon_url: Optional[HttpUrl] = Field( - example="https://live.staticflickr.com/3091/2883561418_dafc36c92b_z.jpg", - description="A url to an image icon for the collection." - ) + desc: Annotated[ + str | None, + Field( + min_length=1, + max_length=1000, + example="This is a collection of used hot dogs collected from Coney Island in 1892.", + description="A free text description of the collection." + ) + ] = None + icon_url: Annotated[ + HttpUrl | None, + Field( + example="https://live.staticflickr.com/3091/2883561418_dafc36c92b_z.jpg", + description="A url to an image icon for the collection." + ) + ] = None data_products: list[DataProduct] = Field( description="The data products associated with the collection" ) matchers: list[Matcher] = Field( description="The matchers associated with the collection" ) - default_select: str | None = Field( # might need to make this a list in future...? not sure - **DATA_PRODUCT_ID_FIELD_PROPS | { - "description": - "The ID of the data product to which non-data product specific selections " - + "should be applied. If present, the data product must be listed in the data " - + "products list. If absent, most selections will fail." - } - ) - - @validator("name", "ver_src", pre=True) + default_select: Annotated[ + str | None, + Field( # might need to make this a list in future...? not sure + **DATA_PRODUCT_ID_FIELD_PROPS | { + "description": + "The ID of the data product to which non-data product specific selections " + + "should be applied. If present, the data product must be listed in the data " + + "products list. If absent, most selections will fail." + } + ) + ] = None + + @field_validator("name", "ver_src", mode="before") + @classmethod def _strip_and_fail_on_control_characters(cls, v): # @NoSelf v = v.strip() pos = contains_control_characters(v) @@ -199,7 +210,8 @@ def _strip_and_fail_on_control_characters(cls, v): # @NoSelf raise ValueError(f"contains a control character at position {pos}") return v - @validator("desc", pre=True) + @field_validator("desc", mode="before") + @classmethod def _strip_and_fail_on_control_characters_with_exceptions(cls, v): # @NoSelf if v is None: return None @@ -209,12 +221,14 @@ def _strip_and_fail_on_control_characters_with_exceptions(cls, v): # @NoSelf raise ValueError(f"contains a non tab or newline control character at position {pos}") return v - @validator("data_products") - def _check_data_products_unique(cls, v): # @NoSelf + @field_validator("data_products") + @classmethod + def _check_data_products_unique(cls, v): return cls._checkunique(v, lambda dp: dp.product, "data product") - @validator("matchers") - def _check_matchers_unique(cls, v): # @NoSelf + @field_validator("matchers") + @classmethod + def _check_matchers_unique(cls, v): return cls._checkunique(v, lambda m: m.matcher, "matcher") @classmethod @@ -226,16 +240,15 @@ def _checkunique(cls, items, accessor, field): seen.add(accessor(it)) return items - @root_validator - def _check_default_selection(cls, values): # @NoSelf - select = values.get("default_select") - if select: - dps = {dp.product for dp in values[FIELD_DATA_PRODUCTS]} - if select not in dps: - raise ValueError(f"The default selection data product {select} " + @model_validator(mode="after") + def _check_default_selection(self) -> Self: + if self.default_select: + dps = {dp.product for dp in self.data_products} + if self.default_select not in dps: + raise ValueError(f"The default selection data product {self.default_select} " + "is not in the set of specified data products" ) - return values + return self # No need to worry about field validation here since the service is assigning the values @@ -309,11 +322,14 @@ class ProcessAttributes(ProcessStateField): description="Milliseconds since the Unix epoch at the point the data and " + "corresponding process was created." ) - heartbeat: int | None = Field( - example=1674243789866, - description="Milliseconds since the Unix epoch at the last time the process sent " - + "a heartbeat. Used to determine when the process needs to be restarted." - ) + heartbeat: Annotated[ + int | None, + Field( + example=1674243789866, + description="Milliseconds since the Unix epoch at the last time the process sent " + + "a heartbeat. Used to determine when the process needs to be restarted." + ) + ] = None # Note this means that processes should be idempotent - running the same process twice, # even if one of the processes was interrupted, should produce the same result when at # least one process completes @@ -513,10 +529,13 @@ class SelectionVerbose(Selection): example=FIELD_SELECTION_EXAMPLE, description=FIELD_SELECTION_IDS_DESCRIPTION ) - unmatched_ids: list[str] | None = Field( - example=FIELD_SELECTION_EXAMPLE, - description=FIELD_SELECTION_UNMATCHED_DESCRIPTION - ) + unmatched_ids: Annotated[ + list[str] | None, + Field( + example=FIELD_SELECTION_EXAMPLE, + description=FIELD_SELECTION_UNMATCHED_DESCRIPTION + ) + ] = None class InternalSelection(SelectionVerbose, ProcessAttributes, LastAccess): diff --git a/src/service/routes_collections.py b/src/service/routes_collections.py index a63715795..1369535a8 100644 --- a/src/service/routes_collections.py +++ b/src/service/routes_collections.py @@ -91,7 +91,7 @@ async def _activate_collection_version( max_length=50, # pydantic uses the stdlib re under the hood, which doesn't understand \pC, so # routes need to manually check for control characters - regex=models.REGEX_NO_WHITESPACE, + pattern=models.REGEX_NO_WHITESPACE, example=models.FIELD_VER_TAG_EXAMPLE, description=models.FIELD_VER_TAG_DESCRIPTION ) @@ -398,7 +398,7 @@ async def create_sets( # https://github.com/kbase/workspace_deluxe/blob/4c03b4364a2ccc292f60ccd629cbb5f71b25bfcc/src/us/kbase/workspace/database/ObjectIDNoWSNoVer.java min_length=1, max_length=255, - regex=r"^[\w\.\|_-]+$" + pattern=r"^[\w\.\|_-]+$" ), ws_type: str = Path( example="KBaseGenomeAnnotations.Assembly", @@ -454,11 +454,11 @@ async def save_collection( ver_num = await store.get_next_version(collection_id) doc.update({ models.FIELD_MATCHERS: sorted( - doc[models.FIELD_MATCHERS], - key=lambda m: m[models.FIELD_MATCHERS_MATCHER]), + [models.Matcher.construct(**d) for d in doc[models.FIELD_MATCHERS]], + key=lambda m: m.matcher), models.FIELD_DATA_PRODUCTS: sorted( - doc[models.FIELD_DATA_PRODUCTS], - key=lambda m: m[models.FIELD_DATA_PRODUCTS_PRODUCT]), + [models.DataProduct.construct(**d) for d in doc[models.FIELD_DATA_PRODUCTS]], + key=lambda m: m.product), models.FIELD_COLLECTION_ID: collection_id, models.FIELD_VER_TAG: ver_tag, models.FIELD_VER_NUM: ver_num, @@ -544,7 +544,7 @@ async def activate_collection_by_ver_num( async def get_collection_versions( r: Request, collection_id: str = PATH_VALIDATOR_COLLECTION_ID, - max_ver: int | None = _QUERY_MAX_VER, + max_ver: int = _QUERY_MAX_VER, user: kb_auth.KBaseUser=Depends(_AUTH), ) -> CollectionVersions: store = _precheck_admin_and_get_storage(r, user, "", "view collection versions") diff --git a/src/service/routes_common.py b/src/service/routes_common.py index 9734306fd..9fc851ed2 100644 --- a/src/service/routes_common.py +++ b/src/service/routes_common.py @@ -13,7 +13,7 @@ PATH_VALIDATOR_COLLECTION_ID = Path( min_length=1, max_length=20, - regex=r"^\w+$", + pattern=r"^\w+$", example=models.FIELD_COLLECTION_ID_EXAMPLE, description=models.FIELD_COLLECTION_ID_DESCRIPTION ) diff --git a/src/service/storage_arango.py b/src/service/storage_arango.py index e0941e25b..23314772c 100644 --- a/src/service/storage_arango.py +++ b/src/service/storage_arango.py @@ -252,7 +252,7 @@ async def save_collection_version(self, collection: models.SavedCollection) -> N The caller is expected to use the `get_next_version` method to get a version number for the collection. """ - doc = collection.dict() + doc = jsonable_encoder(collection) # ver_tag is pretty unconstrained so MD5 to get rid of any weird characters doc[names.FLD_ARANGO_KEY] = _version_key(collection.id, collection.ver_tag) col = self._db.collection(names.COLL_SRV_VERSIONS) @@ -916,7 +916,7 @@ async def create_or_get_data_product_process(self, dp_match: models.DataProductP data_product=dp_match.data_product, type=dp_match.type )) - doc = dp_match.dict() + doc = jsonable_encoder(dp_match) doc[names.FLD_ARANGO_KEY] = key # See Note 1 at the beginning of the file col = self._db.collection(names.COLL_SRV_DATA_PRODUCT_PROCESSES) diff --git a/test/src/service/deletion_test.py b/test/src/service/deletion_test.py index 4e0c21fd2..5fe7ebb67 100644 --- a/test/src/service/deletion_test.py +++ b/test/src/service/deletion_test.py @@ -30,9 +30,9 @@ user_last_perm_check={"user": 60000}, ) -MATCH_DELETED = models.DeletedMatch(deleted=100000, **MATCH.dict()) +MATCH_DELETED = models.DeletedMatch(deleted=100000, **MATCH.model_dump()) -MATCH_NEWER_LAST_ACCESS = models.InternalMatch(**dict(MATCH.dict(), last_access=110000)) +MATCH_NEWER_LAST_ACCESS = models.InternalMatch(**dict(MATCH.model_dump(), last_access=110000)) SELECTION = models.InternalSelection( selection_id="whoo", @@ -47,9 +47,10 @@ last_access=90000, ) -SELECTION_DELETED = models.DeletedSelection(deleted=100000, **SELECTION.dict()) +SELECTION_DELETED = models.DeletedSelection(deleted=100000, **SELECTION.model_dump()) -SELECTION_NEWER_LAST_ACCESS = models.InternalSelection(**dict(SELECTION.dict(), last_access=110000)) +SELECTION_NEWER_LAST_ACCESS = models.InternalSelection( + **dict(SELECTION.model_dump(), last_access=110000)) COLLECTION = models.SavedCollection( name="Some flowery name",