diff --git a/Pipfile b/Pipfile index 164ec7d86..06c48bdab 100644 --- a/Pipfile +++ b/Pipfile @@ -142,7 +142,6 @@ django-storages = {extras = ["google"] } aiohttp = {extras = ["speedups"] } aiodns = "*" eventlet = "*" -linked-services = {extras = ["django", "aiohttp", "requests"] } celery-task-manager = {extras = ["django"] } django-sql-explorer = {extras = ["xls"] } contextlib2 = "*" @@ -157,3 +156,4 @@ pyright = "*" mypy = "*" python-magic = "*" uvicorn = {extras = ["standard"], version = "*"} +linked-services = {extras = ["requests", "django", "aiohttp"], version = "*"} diff --git a/Pipfile.lock b/Pipfile.lock index 149c1dd3a..6584e0568 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d2ee64c6b137e5b6f7779f8636359bf20c5fa998957dcec482371fae7ed610c2" + "sha256": "a00a69326bd0652028d170b338670fa0d58264ad2493e832468b593b9d8285bc" }, "pipfile-spec": 6, "requires": {}, @@ -25,12 +25,12 @@ }, "adrf": { "hashes": [ - "sha256:18844630dd9272c38cc3f761fce6bfb50f91c4f84dadf99846f86d4527f19c7f", - "sha256:3032b987085d75cfd59eb3d4dcd7138fc20085de1782b065603559ccec69531f" + "sha256:e2f59fd84960a564b0385d9201c55531a30c6118eb40c86c5356c077f279af23", + "sha256:fd6c45df908e042c91571fdcff1ea54180c871ec18659b639cf3217d67ce97d5" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==0.1.8" + "version": "==0.1.9" }, "aiodns": { "hashes": [ @@ -53,85 +53,85 @@ "speedups" ], "hashes": [ - "sha256:0411777249f25d11bd2964a230b3ffafcbed6cd65d0f2b132bc2b8f5b8c347c7", - "sha256:0a97d657f6cf8782a830bb476c13f7d777cfcab8428ac49dde15c22babceb361", - "sha256:0b5a5009b0159a8f707879dc102b139466d8ec6db05103ec1520394fdd8ea02c", - "sha256:0bcb7f6976dc0b6b56efde13294862adf68dd48854111b422a336fa729a82ea6", - "sha256:14624d96f0d69cf451deed3173079a68c322279be6030208b045ab77e1e8d550", - "sha256:15c4e489942d987d5dac0ba39e5772dcbed4cc9ae3710d1025d5ba95e4a5349c", - "sha256:176f8bb8931da0613bb0ed16326d01330066bb1e172dd97e1e02b1c27383277b", - "sha256:17af09d963fa1acd7e4c280e9354aeafd9e3d47eaa4a6bfbd2171ad7da49f0c5", - "sha256:1a8b13b9950d8b2f8f58b6e5842c4b842b5887e2c32e3f4644d6642f1659a530", - "sha256:202f40fb686e5f93908eee0c75d1e6fbe50a43e9bd4909bf3bf4a56b560ca180", - "sha256:21cbe97839b009826a61b143d3ca4964c8590d7aed33d6118125e5b71691ca46", - "sha256:27935716f8d62c1c73010428db310fd10136002cfc6d52b0ba7bdfa752d26066", - "sha256:282e0a7ddd36ebc411f156aeaa0491e8fe7f030e2a95da532cf0c84b0b70bc66", - "sha256:28f29bce89c3b401a53d6fd4bee401ee943083bf2bdc12ef297c1d63155070b0", - "sha256:2ac9fd83096df36728da8e2f4488ac3b5602238f602706606f3702f07a13a409", - "sha256:30f9f89ae625d412043f12ca3771b2ccec227cc93b93bb1f994db6e1af40a7d3", - "sha256:317251b9c9a2f1a9ff9cd093775b34c6861d1d7df9439ce3d32a88c275c995cd", - "sha256:31de2f10f63f96cc19e04bd2df9549559beadd0b2ee2da24a17e7ed877ca8c60", - "sha256:36df00e0541f264ce42d62280281541a47474dfda500bc5b7f24f70a7f87be7a", - "sha256:39625703540feb50b6b7f938b3856d1f4886d2e585d88274e62b1bd273fae09b", - "sha256:3f5461c77649358610fb9694e790956b4238ac5d9e697a17f63619c096469afe", - "sha256:4313f3bc901255b22f01663eeeae167468264fdae0d32c25fc631d5d6e15b502", - "sha256:442356e8924fe1a121f8c87866b0ecdc785757fd28924b17c20493961b3d6697", - "sha256:44cb1a1326a0264480a789e6100dc3e07122eb8cd1ad6b784a3d47d13ed1d89c", - "sha256:44d323aa80a867cb6db6bebb4bbec677c6478e38128847f2c6b0f70eae984d72", - "sha256:499368eb904566fbdf1a3836a1532000ef1308f34a1bcbf36e6351904cced771", - "sha256:4b01d9cfcb616eeb6d40f02e66bebfe7b06d9f2ef81641fdd50b8dd981166e0b", - "sha256:5720ebbc7a1b46c33a42d489d25d36c64c419f52159485e55589fbec648ea49a", - "sha256:5cc5e0d069c56645446c45a4b5010d4b33ac6c5ebfd369a791b5f097e46a3c08", - "sha256:618b18c3a2360ac940a5503da14fa4f880c5b9bc315ec20a830357bcc62e6bae", - "sha256:6435a66957cdba1a0b16f368bde03ce9c79c57306b39510da6ae5312a1a5b2c1", - "sha256:647ec5bee7e4ec9f1034ab48173b5fa970d9a991e565549b965e93331f1328fe", - "sha256:6e1e9e447856e9b7b3d38e1316ae9a8c92e7536ef48373de758ea055edfd5db5", - "sha256:6ef1550bb5f55f71b97a6a395286db07f7f2c01c8890e613556df9a51da91e8d", - "sha256:6ffa45cc55b18d4ac1396d1ddb029f139b1d3480f1594130e62bceadf2e1a838", - "sha256:77f31cebd8c27a36af6c7346055ac564946e562080ee1a838da724585c67474f", - "sha256:7a3b5b2c012d70c63d9d13c57ed1603709a4d9d7d473e4a9dfece0e4ea3d5f51", - "sha256:7a7ddf981a0b953ade1c2379052d47ccda2f58ab678fca0671c7c7ca2f67aac2", - "sha256:84de955314aa5e8d469b00b14d6d714b008087a0222b0f743e7ffac34ef56aff", - "sha256:8dcfd14c712aa9dd18049280bfb2f95700ff6a8bde645e09f17c3ed3f05a0130", - "sha256:928f92f80e2e8d6567b87d3316c1fd9860ccfe36e87a9a7f5237d4cda8baa1ba", - "sha256:9384b07cfd3045b37b05ed002d1c255db02fb96506ad65f0f9b776b762a7572e", - "sha256:96726839a42429318017e67a42cca75d4f0d5248a809b3cc2e125445edd7d50d", - "sha256:96bbec47beb131bbf4bae05d8ef99ad9e5738f12717cfbbf16648b78b0232e87", - "sha256:9bcf97b971289be69638d8b1b616f7e557e1342debc7fc86cf89d3f08960e411", - "sha256:a0cf4d814689e58f57ecd5d8c523e6538417ca2e72ff52c007c64065cef50fb2", - "sha256:a7c6147c6306f537cff59409609508a1d2eff81199f0302dd456bb9e7ea50c39", - "sha256:a9266644064779840feec0e34f10a89b3ff1d2d6b751fe90017abcad1864fa7c", - "sha256:afbe85b50ade42ddff5669947afde9e8a610e64d2c80be046d67ec4368e555fa", - "sha256:afcda759a69c6a8be3aae764ec6733155aa4a5ad9aad4f398b52ba4037942fe3", - "sha256:b2fab23003c4bb2249729a7290a76c1dda38c438300fdf97d4e42bf78b19c810", - "sha256:bd3f711f4c99da0091ced41dccdc1bcf8be0281dc314d6d9c6b6cf5df66f37a9", - "sha256:be0c7c98e38a1e3ad7a6ff64af8b6d6db34bf5a41b1478e24c3c74d9e7f8ed42", - "sha256:c1f2d7fd583fc79c240094b3e7237d88493814d4b300d013a42726c35a734bc9", - "sha256:c5bba6b83fde4ca233cfda04cbd4685ab88696b0c8eaf76f7148969eab5e248a", - "sha256:c6beeac698671baa558e82fa160be9761cf0eb25861943f4689ecf9000f8ebd0", - "sha256:c7333e7239415076d1418dbfb7fa4df48f3a5b00f8fdf854fca549080455bc14", - "sha256:c8a02f74ae419e3955af60f570d83187423e42e672a6433c5e292f1d23619269", - "sha256:c9c23e62f3545c2216100603614f9e019e41b9403c47dd85b8e7e5015bf1bde0", - "sha256:cca505829cdab58c2495ff418c96092d225a1bbd486f79017f6de915580d3c44", - "sha256:d3108f0ad5c6b6d78eec5273219a5bbd884b4aacec17883ceefaac988850ce6e", - "sha256:d4b8a1b6c7a68c73191f2ebd3bf66f7ce02f9c374e309bdb68ba886bbbf1b938", - "sha256:d6e274661c74195708fc4380a4ef64298926c5a50bb10fbae3d01627d7a075b7", - "sha256:db2914de2559809fdbcf3e48f41b17a493b58cb7988d3e211f6b63126c55fe82", - "sha256:e738aabff3586091221044b7a584865ddc4d6120346d12e28e788307cd731043", - "sha256:e7f6173302f8a329ca5d1ee592af9e628d3ade87816e9958dcf7cdae2841def7", - "sha256:e9d036a9a41fc78e8a3f10a86c2fc1098fca8fab8715ba9eb999ce4788d35df0", - "sha256:ea142255d4901b03f89cb6a94411ecec117786a76fc9ab043af8f51dd50b5313", - "sha256:ebd3e6b0c7d4954cca59d241970011f8d3327633d555051c430bd09ff49dc494", - "sha256:ec656680fc53a13f849c71afd0c84a55c536206d524cbc831cde80abbe80489e", - "sha256:ec8df0ff5a911c6d21957a9182402aad7bf060eaeffd77c9ea1c16aecab5adbf", - "sha256:ed95d66745f53e129e935ad726167d3a6cb18c5d33df3165974d54742c373868", - "sha256:ef2c9499b7bd1e24e473dc1a85de55d72fd084eea3d8bdeec7ee0720decb54fa", - "sha256:f5252ba8b43906f206048fa569debf2cd0da0316e8d5b4d25abe53307f573941", - "sha256:f737fef6e117856400afee4f17774cdea392b28ecf058833f5eca368a18cf1bf", - "sha256:fc726c3fa8f606d07bd2b500e5dc4c0fd664c59be7788a16b9e34352c50b6b6b" + "sha256:0882c2820fd0132240edbb4a51eb8ceb6eef8181db9ad5291ab3332e0d71df5f", + "sha256:0a6d3fbf2232e3a08c41eca81ae4f1dff3d8f1a30bae415ebe0af2d2458b8a33", + "sha256:0b7fb429ab1aafa1f48578eb315ca45bd46e9c37de11fe45c7f5f4138091e2f1", + "sha256:0eb98d90b6690827dcc84c246811feeb4e1eea683c0eac6caed7549be9c84665", + "sha256:0fd82b8e9c383af11d2b26f27a478640b6b83d669440c0a71481f7c865a51da9", + "sha256:10b4ff0ad793d98605958089fabfa350e8e62bd5d40aa65cdc69d6785859f94e", + "sha256:1642eceeaa5ab6c9b6dfeaaa626ae314d808188ab23ae196a34c9d97efb68350", + "sha256:1dac54e8ce2ed83b1f6b1a54005c87dfed139cf3f777fdc8afc76e7841101226", + "sha256:1e69966ea6ef0c14ee53ef7a3d68b564cc408121ea56c0caa2dc918c1b2f553d", + "sha256:1f21bb8d0235fc10c09ce1d11ffbd40fc50d3f08a89e4cf3a0c503dc2562247a", + "sha256:2170816e34e10f2fd120f603e951630f8a112e1be3b60963a1f159f5699059a6", + "sha256:21fef42317cf02e05d3b09c028712e1d73a9606f02467fd803f7c1f39cc59add", + "sha256:249cc6912405917344192b9f9ea5cd5b139d49e0d2f5c7f70bdfaf6b4dbf3a2e", + "sha256:3499c7ffbfd9c6a3d8d6a2b01c26639da7e43d47c7b4f788016226b1e711caa8", + "sha256:3af41686ccec6a0f2bdc66686dc0f403c41ac2089f80e2214a0f82d001052c03", + "sha256:3e23419d832d969f659c208557de4a123e30a10d26e1e14b73431d3c13444c2e", + "sha256:3ea1b59dc06396b0b424740a10a0a63974c725b1c64736ff788a3689d36c02d2", + "sha256:44167fc6a763d534a6908bdb2592269b4bf30a03239bcb1654781adf5e49caf1", + "sha256:479b8c6ebd12aedfe64563b85920525d05d394b85f166b7873c8bde6da612f9c", + "sha256:4af57160800b7a815f3fe0eba9b46bf28aafc195555f1824555fa2cfab6c1538", + "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5", + "sha256:4eed954b161e6b9b65f6be446ed448ed3921763cc432053ceb606f89d793927e", + "sha256:541d823548ab69d13d23730a06f97460f4238ad2e5ed966aaf850d7c369782d9", + "sha256:568c1236b2fde93b7720f95a890741854c1200fba4a3471ff48b2934d2d93fd3", + "sha256:5854be2f3e5a729800bac57a8d76af464e160f19676ab6aea74bde18ad19d438", + "sha256:620598717fce1b3bd14dd09947ea53e1ad510317c85dda2c9c65b622edc96b12", + "sha256:6526e5fb4e14f4bbf30411216780c9967c20c5a55f2f51d3abd6de68320cc2f3", + "sha256:6fba278063559acc730abf49845d0e9a9e1ba74f85f0ee6efd5803f08b285853", + "sha256:70d1f9dde0e5dd9e292a6d4d00058737052b01f3532f69c0c65818dac26dc287", + "sha256:731468f555656767cda219ab42e033355fe48c85fbe3ba83a349631541715ba2", + "sha256:81b8fe282183e4a3c7a1b72f5ade1094ed1c6345a8f153506d114af5bf8accd9", + "sha256:84a585799c58b795573c7fa9b84c455adf3e1d72f19a2bf498b54a95ae0d194c", + "sha256:85992ee30a31835fc482468637b3e5bd085fa8fe9392ba0bdcbdc1ef5e9e3c55", + "sha256:8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c", + "sha256:88a12ad8ccf325a8a5ed80e6d7c3bdc247d66175afedbe104ee2aaca72960d8e", + "sha256:8be8508d110d93061197fd2d6a74f7401f73b6d12f8822bbcd6d74f2b55d71b1", + "sha256:8e2bf8029dbf0810c7bfbc3e594b51c4cc9101fbffb583a3923aea184724203c", + "sha256:929f3ed33743a49ab127c58c3e0a827de0664bfcda566108989a14068f820194", + "sha256:92cde43018a2e17d48bb09c79e4d4cb0e236de5063ce897a5e40ac7cb4878773", + "sha256:92fc484e34b733704ad77210c7957679c5c3877bd1e6b6d74b185e9320cc716e", + "sha256:943a8b052e54dfd6439fd7989f67fc6a7f2138d0a2cf0a7de5f18aa4fe7eb3b1", + "sha256:9d73ee3725b7a737ad86c2eac5c57a4a97793d9f442599bea5ec67ac9f4bdc3d", + "sha256:9f5b3c1ed63c8fa937a920b6c1bec78b74ee09593b3f5b979ab2ae5ef60d7600", + "sha256:9fd46ce0845cfe28f108888b3ab17abff84ff695e01e73657eec3f96d72eef34", + "sha256:a344d5dc18074e3872777b62f5f7d584ae4344cd6006c17ba12103759d407af3", + "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8", + "sha256:a8f5f7515f3552d899c61202d99dcb17d6e3b0de777900405611cd747cecd1b8", + "sha256:a9b7371665d4f00deb8f32208c7c5e652059b0fda41cf6dbcac6114a041f1cc2", + "sha256:aa54f8ef31d23c506910c21163f22b124facb573bff73930735cf9fe38bf7dff", + "sha256:aba807f9569455cba566882c8938f1a549f205ee43c27b126e5450dc9f83cc62", + "sha256:ae545f31489548c87b0cced5755cfe5a5308d00407000e72c4fa30b19c3220ac", + "sha256:af01e42ad87ae24932138f154105e88da13ce7d202a6de93fafdafb2883a00ef", + "sha256:b540bd67cfb54e6f0865ceccd9979687210d7ed1a1cc8c01f8e67e2f1e883d28", + "sha256:b6212a60e5c482ef90f2d788835387070a88d52cf6241d3916733c9176d39eab", + "sha256:b63de12e44935d5aca7ed7ed98a255a11e5cb47f83a9fded7a5e41c40277d104", + "sha256:ba74ec819177af1ef7f59063c6d35a214a8fde6f987f7661f4f0eecc468a8f76", + "sha256:bb49c7f1e6ebf3821a42d81d494f538107610c3a705987f53068546b0e90303e", + "sha256:bd176afcf8f5d2aed50c3647d4925d0db0579d96f75a31e77cbaf67d8a87742d", + "sha256:bd7227b87a355ce1f4bf83bfae4399b1f5bb42e0259cb9405824bd03d2f4336a", + "sha256:bf8d9bfee991d8acc72d060d53860f356e07a50f0e0d09a8dfedea1c554dd0d5", + "sha256:bfde76a8f430cf5c5584553adf9926534352251d379dcb266ad2b93c54a29745", + "sha256:c341c7d868750e31961d6d8e60ff040fb9d3d3a46d77fd85e1ab8e76c3e9a5c4", + "sha256:c7a06301c2fb096bdb0bd25fe2011531c1453b9f2c163c8031600ec73af1cc99", + "sha256:cb23d8bb86282b342481cad4370ea0853a39e4a32a0042bb52ca6bdde132df43", + "sha256:d119fafe7b634dbfa25a8c597718e69a930e4847f0b88e172744be24515140da", + "sha256:d40f9da8cabbf295d3a9dae1295c69975b86d941bc20f0a087f0477fa0a66231", + "sha256:d6c9af134da4bc9b3bd3e6a70072509f295d10ee60c697826225b60b9959acdd", + "sha256:dd7659baae9ccf94ae5fe8bfaa2c7bc2e94d24611528395ce88d009107e00c6d", + "sha256:de8d38f1c2810fa2a4f1d995a2e9c70bb8737b18da04ac2afbf3971f65781d87", + "sha256:e595c591a48bbc295ebf47cb91aebf9bd32f3ff76749ecf282ea7f9f6bb73886", + "sha256:ec2aa89305006fba9ffb98970db6c8221541be7bee4c1d027421d6f6df7d1ce2", + "sha256:ec82bf1fda6cecce7f7b915f9196601a1bd1a3079796b76d16ae4cce6d0ef89b", + "sha256:ed9ee95614a71e87f1a70bc81603f6c6760128b140bc4030abe6abaa988f1c3d", + "sha256:f047569d655f81cb70ea5be942ee5d4421b6219c3f05d131f64088c73bb0917f", + "sha256:ffa336210cf9cd8ed117011085817d00abe4c08f99968deef0013ea283547204", + "sha256:ffb3dc385f6bb1568aa974fe65da84723210e5d9707e360e9ecb51f59406cd2e" ], "markers": "python_version >= '3.9'", - "version": "==3.11.9" + "version": "==3.11.11" }, "aiohttp-retry": { "hashes": [ @@ -143,11 +143,11 @@ }, "aiosignal": { "hashes": [ - "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", - "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" + "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", + "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54" ], - "markers": "python_version >= '3.7'", - "version": "==1.3.1" + "markers": "python_version >= '3.9'", + "version": "==1.3.2" }, "amqp": { "hashes": [ @@ -167,11 +167,11 @@ }, "anyio": { "hashes": [ - "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c", - "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d" + "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48", + "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352" ], "markers": "python_version >= '3.9'", - "version": "==4.6.2.post1" + "version": "==4.7.0" }, "asgiref": { "hashes": [ @@ -199,11 +199,11 @@ }, "attrs": { "hashes": [ - "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346", - "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2" + "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff", + "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308" ], - "markers": "python_version >= '3.7'", - "version": "==24.2.0" + "markers": "python_version >= '3.8'", + "version": "==24.3.0" }, "autobahn": { "hashes": [ @@ -419,20 +419,20 @@ "django" ], "hashes": [ - "sha256:6a153da3005c8044e8550d45791ad6e5a2b56471db4b660deb215a140c97c999", - "sha256:bc24475f625bc0ddcd2d3ba115742353aada611710d63c8436ff4b5351cd8470" + "sha256:7628328e99b7654467afdbd4830480f284a621bd9ee3e3165002a0e7e793f03d", + "sha256:8bdbac8707ac5f23c2a6da655baca5e5920bbf2b2f0985e01d9c51569503c4a4" ], "markers": "python_version >= '3.11'", - "version": "==1.8.0" + "version": "==1.9.0" }, "certifi": { "hashes": [ - "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", - "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9" + "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", + "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==2024.8.30" + "version": "==2024.12.14" }, "cffi": { "hashes": [ @@ -504,7 +504,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.17.1" }, "channels": { @@ -527,114 +527,101 @@ }, "charset-normalizer": { "hashes": [ - "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", - "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", - "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", - "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", - "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", - "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", - "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", - "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", - "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", - "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", - "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", - "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", - "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", - "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", - "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", - "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", - "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", - "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", - "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", - "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", - "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", - "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", - "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", - "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", - "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", - "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", - "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", - "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", - "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", - "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", - "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", - "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", - "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", - "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", - "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", - "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", - "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", - "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", - "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", - "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", - "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", - "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", - "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", - "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", - "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", - "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", - "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", - "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", - "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", - "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", - "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", - "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", - "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", - "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", - "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", - "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", - "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", - "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", - "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", - "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", - "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", - "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", - "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", - "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", - "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", - "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", - "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", - "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", - "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", - "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", - "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", - "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", - "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", - "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", - "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", - "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", - "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", - "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", - "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", - "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", - "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", - "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", - "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", - "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", - "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", - "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", - "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", - "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", - "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", - "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", - "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", - "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", - "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", - "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", - "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", - "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", - "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", - "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", - "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", - "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", - "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", - "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", - "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", - "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", - "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.4.0" + "markers": "python_version >= '3.7'", + "version": "==3.4.1" }, "circuitbreaker": { "hashes": [ @@ -646,11 +633,11 @@ }, "click": { "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" ], "markers": "python_version >= '3.7'", - "version": "==8.1.7" + "version": "==8.1.8" }, "click-didyoumean": { "hashes": [ @@ -708,7 +695,6 @@ "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", - "sha256:60eb32934076fa07e4316b7b2742fa52cbb190b42c2df2863dbc4230a0a9b385", "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", @@ -716,7 +702,6 @@ "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", - "sha256:9abcc2e083cbe8dde89124a47e5e53ec38751f0d7dfd36801008f316a127d7ba", "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", @@ -805,12 +790,12 @@ }, "django": { "hashes": [ - "sha256:8b38a9a12da3ae00cb0ba72da985ec4b14de6345046b1e174b1fd7254398f818", - "sha256:c0fa0e619c39325a169208caef234f90baa925227032ad3f44842ba14d75234a" + "sha256:236e023f021f5ce7dee5779de7b286565fdea5f4ab86bae5338e3f7b69896cf0", + "sha256:de450c09e91879fa5a307f696e57c851955c910a438a35e6b4c895e86bedc82a" ], "index": "pypi", "markers": "python_version >= '3.10'", - "version": "==5.1.3" + "version": "==5.1.4" }, "django-appconf": { "hashes": [ @@ -939,12 +924,12 @@ }, "eventlet": { "hashes": [ - "sha256:a5df970a2431526e4973bd5810bb8c41aa4da18baa531aa18799302c24e19510", - "sha256:d7d457c7d0e793b16bc3f44da1e87eb48639b655c17dc430294d28cc2c67de81" + "sha256:4a2e3cbc53917c8f39074ccf689501168563d3a4df59e9cddd5e9d3b7f85c599", + "sha256:6a46823af1dca7d29cf04c0d680365805435473c3acbffc176765c7f8787edac" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==0.38.0" + "version": "==0.38.2" }, "exceptiongroup": { "hashes": [ @@ -1125,37 +1110,37 @@ "grpc" ], "hashes": [ - "sha256:2ceb087315e6af43f256704b871d99326b1f12a9d6ce99beaedec99ba26a0ace", - "sha256:c20100d4c4c41070cf365f1d8ddf5365915291b5eb11b83829fbd1c999b5122f" + "sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9", + "sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf" ], "markers": "python_version >= '3.7'", - "version": "==2.23.0" + "version": "==2.24.0" }, "google-api-python-client": { "hashes": [ - "sha256:1b420062e03bfcaa1c79e2e00a612d29a6a934151ceb3d272fe150a656dc8f17", - "sha256:a521bbbb2ec0ba9d6f307cdd64ed6e21eeac372d1bd7493a4ab5022941f784ad" + "sha256:6352185c505e1f311f11b0b96c1b636dcb0fec82cd04b80ac5a671ac4dcab339", + "sha256:b809c111ded61716a9c1c7936e6899053f13bae3defcdfda904bd2ca68065b9c" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.154.0" + "version": "==2.156.0" }, "google-apps-meet": { "hashes": [ - "sha256:183fae13a446d29dde22417a346f315c85219dd6cb81266bc67e105c2206a86e", - "sha256:b555af035703e321a0bc8cda55a60e99783c759e29e9cb8ecdd4615b5ec22d0f" + "sha256:a9c811b7bac7568dea5622ba44005f6bca9ae5d928a68b6f22cd9b8cbc354f74", + "sha256:bfb91f816d679278c80fc079be4cbe3b2f736106697b709a9398d080959730d0" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==0.1.10" + "version": "==0.1.11" }, "google-auth": { "hashes": [ - "sha256:51a15d47028b66fd36e5c64a82d2d57480075bccc7da37cde257fc94177a61fb", - "sha256:545e9618f2df0bcbb7dcbc45a546485b1212624716975a1ea5ae8149ce769ab1" + "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00", + "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0" ], "markers": "python_version >= '3.7'", - "version": "==2.36.0" + "version": "==2.37.0" }, "google-auth-httplib2": { "hashes": [ @@ -1200,12 +1185,12 @@ }, "google-cloud-datastore": { "hashes": [ - "sha256:07950b9c8865087c565f45fa3fdd7a05d4c3d99adf79e10c3f596ff08a7d9bba", - "sha256:b9383af24d8e90ed6c5d161d72411d82efd9b21c051fa6f4bbd743a49d37ffb3" + "sha256:9665d009729d9551329d9476f4d5bda9c11d3469243ea8a2c0d9490b65aa899f", + "sha256:d2190180343b807d4aa3b0b3bb837606349b71e5e74e29aa9009c0ae38c0b6a0" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.20.1" + "version": "==2.20.2" }, "google-cloud-firestore": { "hashes": [ @@ -1227,21 +1212,21 @@ }, "google-cloud-recaptcha-enterprise": { "hashes": [ - "sha256:8aefbfbc2fe1bdfe7c014e10ad1933337a52465e3bfaa842ed16dc494bb4b7c8", - "sha256:aec4195a5492cb42390fb1f933176c0b1d4b6b21eb6ced4d6a5f5f2f083e97d3" + "sha256:00a5eeebd156db219afb92db5d311e6fda95b1927630ea95f569b89df44b9ceb", + "sha256:9192497490daffb6f317293fdb21c09b4b340b0bc0eeb19f5b9c0ea57527caf0" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.25.0" + "version": "==1.26.0" }, "google-cloud-storage": { "hashes": [ - "sha256:97a4d45c368b7d401ed48c4fdfe86e1e1cb96401c9e199e419d289e2c0370166", - "sha256:aaf7acd70cdad9f274d29332673fcab98708d0e1f4dceb5a5356aaef06af4d99" + "sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba", + "sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.18.2" + "version": "==2.19.0" }, "google-crc32c": { "hashes": [ @@ -1407,7 +1392,7 @@ "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79", "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f" ], - "markers": "python_version >= '3' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))", + "markers": "python_version >= '3.7'", "version": "==3.1.1" }, "grpcio": { @@ -1468,6 +1453,7 @@ "sha256:eeb38ff04ab6e5756a2aef6ad8d94e89bb4a51ef96e20f45c44ba190fa0bcaad", "sha256:f8261fa2a5f679abeb2a0a93ad056d765cdca1c47745eda3f2d87f874ff4b8c9" ], + "markers": "python_version >= '3.8'", "version": "==1.68.1" }, "grpcio-status": { @@ -1475,6 +1461,7 @@ "sha256:66f3d8847f665acfd56221333d66f7ad8927903d87242a482996bdb45e8d28fd", "sha256:e1378d036c81a1610d7b4c7a146cd663dd13fcc915cf4d7d053929dba5bbb6e1" ], + "markers": "python_version >= '3.8'", "version": "==1.68.1" }, "gunicorn": { @@ -1503,104 +1490,119 @@ }, "hiredis": { "hashes": [ - "sha256:00018f22f38530768b73ea86c11f47e8d4df65facd4e562bd78773bd1baef35e", - "sha256:034925b5fb514f7b11aac38cd55b3fd7e9d3af23bd6497f3f20aa5b8ba58e232", - "sha256:038756db735e417ab36ee6fd7725ce412385ed2bd0767e8179a4755ea11b804f", - "sha256:04ccae6dcd9647eae6025425ab64edb4d79fde8b9e6e115ebfabc6830170e3b2", - "sha256:0aacc0a78e1d94d843a6d191f224a35893e6bdfeb77a4a89264155015c65f126", - "sha256:0bb6f9fd92f147ba11d338ef5c68af4fd2908739c09e51f186e1d90958c68cc1", - "sha256:0dcfa684966f25b335072115de2f920228a3c2caf79d4bfa2b30f6e4f674a948", - "sha256:100431e04d25a522ef2c3b94f294c4219c4de3bfc7d557b6253296145a144c11", - "sha256:120f2dda469b28d12ccff7c2230225162e174657b49cf4cd119db525414ae281", - "sha256:122171ff47d96ed8dd4bba6c0e41d8afaba3e8194949f7720431a62aa29d8895", - "sha256:13c275b483a052dd645eb2cb60d6380f1f5215e4c22d6207e17b86be6dd87ffa", - "sha256:13c345e7278c210317e77e1934b27b61394fee0dec2e8bd47e71570900f75823", - "sha256:1f669212c390eebfbe03c4e20181f5970b82c5d0a0ad1df1785f7ffbe7d61150", - "sha256:1fb8de899f0145d6c4d5d4bd0ee88a78eb980a7ffabd51e9889251b8f58f1785", - "sha256:204b79b30a0e6be0dc2301a4d385bb61472809f09c49f400497f1cdd5a165c66", - "sha256:22c17c96143c2a62dfd61b13803bc5de2ac526b8768d2141c018b965d0333b66", - "sha256:23142a8af92a13fc1e3f2ca1d940df3dcf2af1d176be41fe8d89e30a837a0b60", - "sha256:3d22c53f0ec5c18ecb3d92aa9420563b1c5d657d53f01356114978107b00b860", - "sha256:3dc8043959b50141df58ab4f398e8ae84c6f9e673a2c9407be65fc789138f4a6", - "sha256:3ea635101b739c12effd189cc19b2671c268abb03013fd1f6321ca29df3ca625", - "sha256:41afc0d3c18b59eb50970479a9c0e5544fb4b95e3a79cf2fbaece6ddefb926fe", - "sha256:4664dedcd5933364756d7251a7ea86d60246ccf73a2e00912872dacbfcef8978", - "sha256:466f836dbcf86de3f9692097a7a01533dc9926986022c6617dc364a402b265c5", - "sha256:467d28112c7faa29b7db743f40803d927c8591e9da02b6ce3d5fadc170a542a2", - "sha256:47de0bbccf4c8a9f99d82d225f7672b9dd690d8fd872007b933ef51a302c9fa6", - "sha256:484025d2eb8f6348f7876fc5a2ee742f568915039fcb31b478fd5c242bb0fe3a", - "sha256:48727d7d405d03977d01885f317328dc21d639096308de126c2c4e9950cbd3c9", - "sha256:4b182791c41c5eb1d9ed736f0ff81694b06937ca14b0d4dadde5dadba7ff6dae", - "sha256:4c6efcbb5687cf8d2aedcc2c3ed4ac6feae90b8547427d417111194873b66b06", - "sha256:4ea3a86405baa8eb0d3639ced6926ad03e07113de54cb00fd7510cb0db76a89d", - "sha256:50a196af0ce657fcde9bf8a0bbe1032e22c64d8fcec2bc926a35e7ff68b3a166", - "sha256:50da7a9edf371441dfcc56288d790985ee9840d982750580710a9789b8f4a290", - "sha256:51b99cfac514173d7b8abdfe10338193e8a0eccdfe1870b646009d2fb7cbe4b5", - "sha256:54a6dd7b478e6eb01ce15b3bb5bf771e108c6c148315bf194eb2ab776a3cac4d", - "sha256:562eaf820de045eb487afaa37e6293fe7eceb5b25e158b5a1974b7e40bf04543", - "sha256:5a8dffb5f5b3415a4669d25de48b617fd9d44b0bccfc4c2ab24b06406ecc9ecb", - "sha256:5b5cff42a522a0d81c2ae7eae5e56d0ee7365e0c4ad50c4de467d8957aff4414", - "sha256:63482db3fadebadc1d01ad33afa6045ebe2ea528eb77ccaabd33ee7d9c2bad48", - "sha256:6ca41fa40fa019cde42c21add74aadd775e71458051a15a352eabeb12eb4d084", - "sha256:6eecb343c70629f5af55a8b3e53264e44fa04e155ef7989de13668a0cb102a90", - "sha256:719c32147ba29528cb451f037bf837dcdda4ff3ddb6cdb12c4216b0973174718", - "sha256:77c8006c12154c37691b24ff293c077300c22944018c3ff70094a33e10c1d795", - "sha256:793c80a3d6b0b0e8196a2d5de37a08330125668c8012922685e17aa9108c33ac", - "sha256:7d99b91e42217d7b4b63354b15b41ce960e27d216783e04c4a350224d55842a4", - "sha256:82f794d564f4bc76b80c50b03267fe5d6589e93f08e66b7a2f674faa2fa76ebc", - "sha256:83a29cc7b21b746cb6a480189e49f49b2072812c445e66a9e38d2004d496b81c", - "sha256:869f6d5537d243080f44253491bb30aa1ec3c21754003b3bddeadedeb65842b0", - "sha256:8854969e7480e8d61ed7549eb232d95082a743e94138d98d7222ba4e9f7ecacd", - "sha256:898636a06d9bf575d2c594129085ad6b713414038276a4bfc5db7646b8a5be78", - "sha256:8e0bb6102ebe2efecf8a3292c6660a0e6fac98176af6de67f020bea1c2343717", - "sha256:8fed69bbaa307040c62195a269f82fc3edf46b510a17abb6b30a15d7dab548df", - "sha256:9862db92ef67a8a02e0d5370f07d380e14577ecb281b79720e0d7a89aedb9ee5", - "sha256:98a152052b8878e5e43a2e3a14075218adafc759547c98668a21e9485882696c", - "sha256:99516d99316062824a24d145d694f5b0d030c80da693ea6f8c4ecf71a251d8bb", - "sha256:9b285ef6bf1581310b0d5e8f6ce64f790a1c40e89c660e1320b35f7515433672", - "sha256:a131377493a59fb0f5eaeb2afd49c6540cafcfba5b0b3752bed707be9e7c4eaf", - "sha256:a1c81c89ed765198da27412aa21478f30d54ef69bf5e4480089d9c3f77b8f882", - "sha256:a2537b2cd98192323fce4244c8edbf11f3cac548a9d633dbbb12b48702f379f4", - "sha256:a41be8af1fd78ca97bc948d789a09b730d1e7587d07ca53af05758f31f4b985d", - "sha256:a631e2990b8be23178f655cae8ac6c7422af478c420dd54e25f2e26c29e766f1", - "sha256:a6a49ef161739f8018c69b371528bdb47d7342edfdee9ddc75a4d8caddf45a6e", - "sha256:ac6d929cb33dd12ad3424b75725975f0a54b5b12dbff95f2a2d660c510aa106d", - "sha256:b23291951959141173eec10f8573538e9349fa27f47a0c34323d1970bf891ee5", - "sha256:ba9fc605ac558f0de67463fb588722878641e6fa1dabcda979e8e69ff581d0bd", - "sha256:bdc144d56333c52c853c31b4e2e52cfbdb22d3da4374c00f5f3d67c42158970f", - "sha256:c073848d2b1d5561f3903879ccf4e1a70c9b1e7566c7bdcc98d082fa3e7f0a1d", - "sha256:c1018cc7f12824506f165027eabb302735b49e63af73eb4d5450c66c88f47026", - "sha256:c3ece960008dab66c6b8bb3a1350764677ee7c74ccd6270aaf1b1caf9ccebb46", - "sha256:c3fdad75e7837a475900a1d3a5cc09aa024293c3b0605155da2d42f41bc0e482", - "sha256:c8a1df39d74ec507d79c7a82c8063eee60bf80537cdeee652f576059b9cdd15c", - "sha256:c8a91e9520fbc65a799943e5c970ffbcd67905744d8becf2e75f9f0a5e8414f0", - "sha256:d10fcd9e0eeab835f492832b2a6edb5940e2f1230155f33006a8dfd3bd2c94e4", - "sha256:d435ae89073d7cd51e6b6bf78369c412216261c9c01662e7008ff00978153729", - "sha256:d7a4c1791d7aa7e192f60fe028ae409f18ccdd540f8b1e6aeb0df7816c77e4a4", - "sha256:dc384874a719c767b50a30750f937af18842ee5e288afba95a5a3ed703b1515a", - "sha256:df274e3abb4df40f4c7274dd3e587dfbb25691826c948bc98d5fead019dfb001", - "sha256:e069967cbd5e1900aafc4b5943888f6d34937fc59bf8918a1a546cb729b4b1e4", - "sha256:e194a0d5df9456995d8f510eab9f529213e7326af6b94770abf8f8b7952ddcaa", - "sha256:e1a9c14ae9573d172dc050a6f63a644457df5d01ec4d35a6a0f097f812930f83", - "sha256:e241fab6332e8fb5f14af00a4a9c6aefa22f19a336c069b7ddbf28ef8341e8d6", - "sha256:e421ac9e4b5efc11705a0d5149e641d4defdc07077f748667f359e60dc904420", - "sha256:e43679eca508ba8240d016d8cca9d27342d70184773c15bea78a23c87a1922f1", - "sha256:e584fe5f4e6681d8762982be055f1534e0170f6308a7a90f58d737bab12ff6a8", - "sha256:f114a6c86edbf17554672b050cce72abf489fe58d583c7921904d5f1c9691605", - "sha256:f2f312eef8aafc2255e3585dcf94d5da116c43ef837db91db9ecdc1bc930072d", - "sha256:f359175197fd833c8dd7a8c288f1516be45415bb5c939862ab60c2918e1e1943", - "sha256:f75999ae00a920f7dce6ecae76fa5e8674a3110e5a75f12c7a2c75ae1af53396", - "sha256:f91456507427ba36fd81b2ca11053a8e112c775325acc74e993201ea912d63e9", - "sha256:fa1fcad89d8a41d8dc10b1e54951ec1e161deabd84ed5a2c95c3c7213bdb3514", - "sha256:fa86bf9a0ed339ec9e8a9a9d0ae4dccd8671625c83f9f9f2640729b15e07fbfd", - "sha256:fcdb552ffd97151dab8e7bc3ab556dfa1512556b48a367db94b5c20253a35ee1", - "sha256:fcecbd39bd42cef905c0b51c9689c39d0cc8b88b1671e7f40d4fb213423aef3a", - "sha256:fe91d62b0594db5ea7d23fc2192182b1a7b6973f628a9b8b2e0a42a2be721ac6", - "sha256:fed8581ae26345dea1f1e0d1a96e05041a727a45e7d8d459164583e23c6ac441" + "sha256:0322d70f3328b97da14b6e98b18f0090a12ed8a8bf7ae20932e2eb9d1bb0aa2c", + "sha256:0614e16339f1784df3bbd2800322e20b4127d3f3a3509f00a5562efddb2521aa", + "sha256:072c162260ebb1d892683107da22d0d5da7a1414739eae4e185cac22fe89627f", + "sha256:07ab990d0835f36bf358dbb84db4541ac0a8f533128ec09af8f80a576eef2e88", + "sha256:09e89e7d34cfe5ca8f7a869fca827d1af0afe8aaddb26b38c01058730edb79ad", + "sha256:0f8ca13e2476ffd6d5be4763f5868133506ddcfa5ce54b4dac231ebdc19be6c6", + "sha256:0ffa2552f704a45954627697a378fc2f559004e53055b82f00daf30bd4305330", + "sha256:107b66ce977bb2dff8f2239e68344360a75d05fed3d9fa0570ac4d3020ce2396", + "sha256:1110eae007f30e70a058d743e369c24430327cd01fd97d99519d6794a58dd587", + "sha256:13f5b16f97d0bbd1c04ce367c49097d1214d60e11f9fee7ef2a9b54e0a6645c8", + "sha256:18e703ff860c1d83abbcf57012b309ead02b56b60e85150c6c3bfb37cbb16ebf", + "sha256:1c22fa74ddd063396b19fe8445a1ae8b4190eff755d5750dda48e860a45b2ee7", + "sha256:2102a94063d878c40df92f55199637a74f535e3a0b79ceba4a00538853a21be3", + "sha256:230dd0e77cb0f525f58a1306a7b4aaf078037fc5229110922332ca46f90821bb", + "sha256:2892db9db21f0cf7cc298d09f85d3e1f6dc4c4c24463ab67f79bc7a006d51867", + "sha256:2af62070aa9433802cae7be7364d5e82f76462c6a2ae34e53008b637aaa9a156", + "sha256:2e04c7feb9467e3170cd4d5bee381775783d81bbc45d6147c1c0ce3b50dc04f9", + "sha256:3004ef7436feb7bfa61c0b36d422b8fb8c29aaa1a514c9405f0fdee5e9694dd3", + "sha256:34d25aa25c10f966d5415795ed271da84605044dbf436c054966cea5442451b3", + "sha256:34f3f5f0354db2d6797a6fb08d2c036a50af62a1d919d122c1c784304ef49347", + "sha256:35b5fc061c8a0dbfdb440053280504d6aaa8d9726bd4d1d0e1cfcbbdf0d60b73", + "sha256:363e21fba55e1a26349dc9ca7da6b14332123879b6359bcee4a9acecb40ca33b", + "sha256:37aed4aa9348600145e2d019c7be27855e503ecc4906c6976ff2f3b52e3d5d97", + "sha256:39efab176fca3d5111075f6ba56cd864f18db46d858289d39360c5672e0e5c3e", + "sha256:3b5bd8adfe8742e331a94cccd782bffea251fa70d9a709e71f4510f50794d700", + "sha256:3dbf9163296fa45fbddcfc4c5900f10e9ddadda37117dbfb641e327e536b53e0", + "sha256:3e9445b7f117a9c8c8ccad97cb44daa55ddccff3cbc9079984eac56d982ba01f", + "sha256:4180dc5f646b426e5fa1212e1348c167ee2a864b3a70d56579163d64a847dd1e", + "sha256:4663a319ab7d22c597b9421e5ea384fd583e044f2f1ca9a1b98d4fef8a0fea2f", + "sha256:4a018340c073cf88cb635b2bedff96619df2f666018c655e7911f46fa2c1c178", + "sha256:4ef5ad8b91530e4d10a68562b0a380ea22705a60e88cecee086d7c63a38564ce", + "sha256:4f12018e5c5f866a1c3f7017cb2d88e5c6f9440df2281e48865a2b6c40f247f4", + "sha256:511e36a6fa41d3efab3cd5cd70ac388ed825993b9e66fa3b0e47cf27a2f5ffee", + "sha256:51d40ac3611091020d7dea6b05ed62cb152bff595fa4f931e7b6479d777acf7c", + "sha256:539e5bb725b62b76a5319a4e68fc7085f01349abc2316ef3df608ea0883c51d2", + "sha256:570cbf31413c77fe5e7c157f2943ca4400493ddd9cf2184731cfcafc753becd7", + "sha256:59a9230f3aa38a33d09d8171400de202f575d7a38869e5ce2947829bca6fe359", + "sha256:5c54a88eb9d8ebc4e5eefaadbe2102a4f7499f9e413654172f40aefd25350959", + "sha256:5ce71a797b5bc02c51da082428c00251ed6a7a67a03acbda5fbf9e8d028725f6", + "sha256:676b3d88674134bfaaf70dac181d1790b0f33b3187bfb9da9221e17e0e624f83", + "sha256:6c840b9cec086328f2ee2cfee0038b5d6bbb514bac7b5e579da6e346eaac056c", + "sha256:72a98ccc7b8ec9ce0100ecf59f45f05d2023606e8e3676b07a316d1c1c364072", + "sha256:732cf1c5cf1324f7bf3b6086976fe62a2ca98f0bf6316f31063c2c67be8797bc", + "sha256:7acdc68e29a446ad17aadaff19c981a36b3bd8c894c3520412c8a7ab1c3e0de7", + "sha256:7acf35cfa7ec9e1e7559c04e7095628f7d06049b5f24dcb58c1a55ef6dc689f8", + "sha256:7c76e751fd1e2f221dec09cdc24040ee486886e943d5d7ffc256e8cf15c75e51", + "sha256:7d3880f213b6f14e9c69ce52beffd1748eecc8669698c4782761887273b6e1bd", + "sha256:802474c18e878b3f9905e160a8b7df87d57885758083eda76c5978265acb41aa", + "sha256:8060fa256862b0c3de64a73ab45bc1ccf381caca464f2647af9075b200828948", + "sha256:8095ef159896e5999a795b0f80e4d64281301a109e442a8d29cd750ca6bd8303", + "sha256:87c2b3fe7e7c96eba376506a76e11514e07e848f737b254e0973e4b5c3a491e9", + "sha256:89b83e76eb00ab0464e7b0752a3ffcb02626e742e9509bc141424a9c3202e8dc", + "sha256:8a45ff7915392a55d9386bb235ea1d1eb9960615f301979f02143fc20036b699", + "sha256:8f1240bde53d3d1676f0aba61b3661560dc9a681cae24d9de33e650864029aa4", + "sha256:9020fd7e58f489fda6a928c31355add0e665fd6b87b21954e675cf9943eafa32", + "sha256:93811d60b0f73d0f049c86f4373a3833b4a38fce374ab151074d929553eb4304", + "sha256:93a6c9230e5a5565847130c0e1005c8d3aa5ca681feb0ed542c4651323d32feb", + "sha256:93cfa6cc25ee2ceb0be81dc61eca9995160b9e16bdb7cca4a00607d57e998918", + "sha256:9646de31f5994e6218311dcf216e971703dbf804c510fd3f84ddb9813c495824", + "sha256:98ebf08c907836b70a8f40e030df8ab6f174dc7f6fa765251d813e89f14069d8", + "sha256:9acf7f0e7106f631cd618eb60ec9bbd6e43045addd5310f66ba1177209567e59", + "sha256:9b2d6e33601c67c074c367fdccdd6033e642284e7a56adc130f18f724c378ca8", + "sha256:9b390f63191bcccbb6044d4c118acdf4fa55f38e5658ac4cfd5a33a6f0c07659", + "sha256:9fc4e35b4afb0af6da55495dd0742ad32ab88150428a6ecdbb3085cbd60714e8", + "sha256:a26fa888025badb5563f283cc19594c215a413e905729e59a5f7cf3f46d66c32", + "sha256:a31806306a60f3565c04c964d6bee0e9d4a5120e1da589e41976b53972edf635", + "sha256:a5f65e89ce50a94d9490d5442a649c6116f53f216c8c14eb37cf9637956482b2", + "sha256:a86b9fef256c2beb162244791fdc025aa55f936d6358e86e2020e512fe2e4972", + "sha256:aa36688c10a08f626fddcf68c2b1b91b0e90b070c26e550a4151a877f5c2d431", + "sha256:aed10d9df1e2fb0011db2713ac64497462e9c2c0208b648c97569da772b959ca", + "sha256:af46a4be0e82df470f68f35316fa16cd1e134d1c5092fc1082e1aad64cce716d", + "sha256:b621a89fc29b3f4b01be6640ec81a6a94b5382bc78fecb876408d57a071e45aa", + "sha256:b6d1c9e1fce5e0a94072667ae2bf0142b89ebbb1917d3531184e060a43f3ee11", + "sha256:b87cddd8107487863fed6994de51e5594a0be267b0b19e213694e99cdd614623", + "sha256:b885695dce7a39b1fd9a609ed9c4cf312e53df2ec028d5a78af7a891b5fbea4d", + "sha256:b9b4da8162cf289781732d6a5ba01d820c42c05943fcdb7de307d03639961db3", + "sha256:bad3b1e0c83849910f28c95953417106f539277035a4b515d1425f93947bc28f", + "sha256:bc117a04bcb461d3bb1b2c5b417aee3442e1e8aa33ebc800481431f4c09fe0c5", + "sha256:bc51f594c2c0863ded6501642dc96701ca8bbea9ced4fa3af0a1aeda8aa634cb", + "sha256:bc63d698c43aea500a84d8b083f830c03808b6cf3933ae4d35a27f0a3d881652", + "sha256:bd33db977ac7af97e8d035ffadb163b00546be22e5f1297b2123f5f9bf0f8a21", + "sha256:c156156798729eadc9ab76ffee96c88b93cc1c3b493f4dd0a4341f53939194ee", + "sha256:c2bc713ee73ab9de4a0d68b0ab0f29612342b63173714742437b977584adb2d8", + "sha256:c339ff4b4739b2a40da463763dd566129762f72926bca611ad9a457a9fe64abd", + "sha256:c5c44e9fa6f4462d0330cb5f5d46fa652512fc86b41d4d1974d0356f263e9105", + "sha256:c5cd20804e3cb0d31e7d899d8dd091f569c33fe40d4bade670a067ab7d31c2ac", + "sha256:c6b232c43e89755ba332c2745ddab059c0bc1a0f01448a3a14d506f8448b1ce6", + "sha256:c7e06baea05de57e1e7548064f505a6964e992674fe61b8f274afe2ac93b6371", + "sha256:c89d2dcb271d24c44f02264233b75d5db8c58831190fa92456a90b87fa17b748", + "sha256:cf3d2299b054e57a9f97ca08704c2843e44f29b57dc69b76a2592ecd212efe1a", + "sha256:cf6844035abf47d52a1c3f4257255af3bf3b0f14d559b08eaa45885418c6c55d", + "sha256:d1a6f889514ee2452300c9a06862fceedef22a2891f1c421a27b1ba52ef130b2", + "sha256:d302deff8cb63a7feffc1844e4dafc8076e566bbf10c5aaaf0f4fe791b8a6bd0", + "sha256:d3cfb4089e96f8f8ee9554da93148a9261aa6612ad2cc202c1a494c7b712e31f", + "sha256:d92144e0cd6e6e841a6ad343e9d58631626eeb4ac96b0322649379b5d4527447", + "sha256:d968116caddd19d63120d1298e62b1bbc694db3360ed0d5df8c3a97edbc12552", + "sha256:d968dde69e3fe903bf9ef00667669dcf04a3e096e33aaf138775106ead138bc8", + "sha256:e38d7a56b1a79ed0bbb9e6fe376d82e3f4dcc646ae47472f2c858e19a597c112", + "sha256:e38d8a325f9a6afac1b1c72d996d1add9e1b99696ce9410538ba5e9aa8fdba02", + "sha256:e665b14ab50aa175cfa306fcb00fffd4e3ff02ceb36ca6a4df00b1246d6a73c4", + "sha256:e812a4e656bbd1c1c15c844b28259c49e26bb384837e44e8d2aa55412c91d2f7", + "sha256:ea4f5ecf9dbea93c827486f59c606684c3496ea71c7ba9a8131932780696e61a", + "sha256:eb5316c9a65c4dde80796aa245b76011bab64eb84461a77b0a61c1bf2970bcc9", + "sha256:f1e8ba6414ac1ae536129e18c069f3eb497df5a74e136e3566471620a4fa5f95", + "sha256:f3982a9c16c1c4bc05a00b65d01ffb8d80ea1a7b6b533be2f1a769d3e989d2c0", + "sha256:f50763cd819d4a52a47b5966d4bb47dee34b637c5fa6402509800eee6ecb61e6", + "sha256:f7c7f89e0bc4246115754e2eda078a111282f6d6ecc6fb458557b724fe6f2aac", + "sha256:f9ea0678806c53d96758e74c6a898f9d506a2e3367a344757f768bef9e069366", + "sha256:fcb91ba42903de637b94a1b64477f381f94ad82c0742c264f9245be76a7a3cbc" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==3.0.0" + "version": "==3.1.0" }, "hpack": { "hashes": [ @@ -1672,15 +1674,16 @@ "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f", "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43" ], + "markers": "python_full_version >= '3.8.0'", "version": "==0.6.4" }, "httpx": { "hashes": [ - "sha256:0858d3bab51ba7e386637f22a61d8ccddaeec5f3fe4209da3a6168dbb91573e0", - "sha256:dc0b419a0cfeb6e8b34e85167c0da2671206f5095f1baa9663d23bcfd6b535fc" + "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", + "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad" ], "markers": "python_version >= '3.8'", - "version": "==0.28.0" + "version": "==0.28.1" }, "hyperframe": { "hashes": [ @@ -1740,92 +1743,93 @@ }, "jinja2": { "hashes": [ - "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", - "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d" + "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", + "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb" ], "markers": "python_version >= '3.7'", - "version": "==3.1.4" + "version": "==3.1.5" }, "jiter": { "hashes": [ - "sha256:0396bc5cb1309c6dab085e70bb3913cdd92218315e47b44afe9eace68ee8adaa", - "sha256:079e62e64696241ac3f408e337aaac09137ed760ccf2b72b1094b48745c13641", - "sha256:0aae4738eafdd34f0f25c2d3668ce9e8fa0d7cb75a2efae543c9a69aebc37323", - "sha256:0e48e7a336529b9419d299b70c358d4ebf99b8f4b847ed3f1000ec9f320e8c0c", - "sha256:1a6dfe795b7a173a9f8ba7421cdd92193d60c1c973bbc50dc3758a9ad0fa5eb6", - "sha256:1b0befe7c6e9fc867d5bed21bab0131dfe27d1fa5cd52ba2bced67da33730b7d", - "sha256:202dbe8970bfb166fab950eaab8f829c505730a0b33cc5e1cfb0a1c9dd56b2f9", - "sha256:21fe5b8345db1b3023052b2ade9bb4d369417827242892051244af8fae8ba231", - "sha256:2373487caad7fe39581f588ab5c9262fc1ade078d448626fec93f4ffba528858", - "sha256:2582912473c0d9940791479fe1bf2976a34f212eb8e0a82ee9e645ac275c5d16", - "sha256:2a488f8c54bddc3ddefaf3bfd6de4a52c97fc265d77bc2dcc6ee540c17e8c342", - "sha256:30c2161c5493acf6b6c3c909973fb64ae863747def01cc7574f3954e0a15042c", - "sha256:36050284c0abde57aba34964d3920f3d6228211b65df7187059bb7c7f143759a", - "sha256:38caedda64fe1f04b06d7011fc15e86b3b837ed5088657bf778656551e3cd8f9", - "sha256:3a15ed47ab09576db560dbc5c2c5a64477535beb056cd7d997d5dd0f2798770e", - "sha256:4ab961858d7ad13132328517d29f121ae1b2d94502191d6bcf96bddcc8bb5d1c", - "sha256:4cca948a3eda8ea24ed98acb0ee19dc755b6ad2e570ec85e1527d5167f91ff67", - "sha256:5000195921aa293b39b9b5bc959d7fa658e7f18f938c0e52732da8e3cc70a278", - "sha256:504099fb7acdbe763e10690d560a25d4aee03d918d6a063f3a761d8a09fb833f", - "sha256:549f170215adeb5e866f10617c3d019d8eb4e6d4e3c6b724b3b8c056514a3487", - "sha256:62d0e42ec5dc772bd8554a304358220be5d97d721c4648b23f3a9c01ccc2cb26", - "sha256:646163201af42f55393ee6e8f6136b8df488253a6533f4230a64242ecbfe6048", - "sha256:646cf4237665b2e13b4159d8f26d53f59bc9f2e6e135e3a508a2e5dd26d978c6", - "sha256:6507011a299b7f578559084256405a8428875540d8d13530e00b688e41b09493", - "sha256:733bc9dc8ff718a0ae4695239e9268eb93e88b73b367dfac3ec227d8ce2f1e77", - "sha256:74d2b56ed3da5760544df53b5f5c39782e68efb64dc3aa0bba4cc08815e6fae8", - "sha256:796f750b65f5d605f5e7acaccc6b051675e60c41d7ac3eab40dbd7b5b81a290f", - "sha256:798dafe108cba58a7bb0a50d4d5971f98bb7f3c974e1373e750de6eb21c1a329", - "sha256:7dfcf97210c6eab9d2a1c6af15dd39e1d5154b96a7145d0a97fa1df865b7b834", - "sha256:7f5d782e790396b13f2a7b36bdcaa3736a33293bdda80a4bf1a3ce0cd5ef9f15", - "sha256:859cc35bf304ab066d88f10a44a3251a9cd057fb11ec23e00be22206db878f4f", - "sha256:86fee98b569d4cc511ff2e3ec131354fafebd9348a487549c31ad371ae730310", - "sha256:8ec29a31b9abd6be39453a2c45da067138a3005d65d2c0507c530e0f1fdcd9a4", - "sha256:9046812e5671fdcfb9ae02881fff1f6a14d484b7e8b3316179a372cdfa1e8026", - "sha256:96e75c9abfbf7387cba89a324d2356d86d8897ac58c956017d062ad510832dae", - "sha256:a207e718d114d23acf0850a2174d290f42763d955030d9924ffa4227dbd0018f", - "sha256:a7ba461c3681728d556392e8ae56fb44a550155a24905f01982317b367c21dd4", - "sha256:a873e57009863eeac3e3969e4653f07031d6270d037d6224415074ac17e5505c", - "sha256:a88f608e050cfe45c48d771e86ecdbf5258314c883c986d4217cc79e1fb5f689", - "sha256:aad1e6e9b01cf0304dcee14db03e92e0073287a6297caf5caf2e9dbfea16a924", - "sha256:aeb5561adf4d26ca0d01b5811b4d7b56a8986699a473d700757b4758ef787883", - "sha256:aef8845f463093799db4464cee2aa59d61aa8edcb3762aaa4aacbec3f478c929", - "sha256:af2ce2487b3a93747e2cb5150081d4ae1e5874fce5924fc1a12e9e768e489ad8", - "sha256:ba9f12b0f801ecd5ed0cec29041dc425d1050922b434314c592fc30d51022467", - "sha256:bb5c8a0a8d081c338db22e5b8d53a89a121790569cbb85f7d3cfb1fe0fbe9836", - "sha256:c341ecc3f9bccde952898b0c97c24f75b84b56a7e2f8bbc7c8e38cab0875a027", - "sha256:c38cf25cf7862f61410b7a49684d34eb3b5bcbd7ddaf4773eea40e0bd43de706", - "sha256:c402ddcba90b4cc71db3216e8330f4db36e0da2c78cf1d8a9c3ed8f272602a94", - "sha256:c6189beb5c4b3117624be6b2e84545cff7611f5855d02de2d06ff68e316182be", - "sha256:ca6d3064dfc743eb0d3d7539d89d4ba886957c717567adc72744341c1e3573c9", - "sha256:cc7f993bc2c4e03015445adbb16790c303282fce2e8d9dc3a3905b1d40e50564", - "sha256:cef55042816d0737142b0ec056c0356a5f681fb8d6aa8499b158e87098f4c6f8", - "sha256:d0d6e22e4062c3d3c1bf3594baa2f67fc9dcdda8275abad99e468e0c6540bc54", - "sha256:d1ec27299e22d05e13a06e460bf7f75f26f9aaa0e0fb7d060f40e88df1d81faa", - "sha256:d4a8a6eda018a991fa58ef707dd51524055d11f5acb2f516d70b1be1d15ab39c", - "sha256:d4e3c8444d418686f78c9a547b9b90031faf72a0a1a46bfec7fb31edbd889c0d", - "sha256:d7765ca159d0a58e8e0f8ca972cd6d26a33bc97b4480d0d2309856763807cd28", - "sha256:d7dceae3549b80087f913aad4acc2a7c1e0ab7cb983effd78bdc9c41cabdcf18", - "sha256:d91a52d8f49ada2672a4b808a0c5c25d28f320a2c9ca690e30ebd561eb5a1002", - "sha256:dd5e351cb9b3e676ec3360a85ea96def515ad2b83c8ae3a251ce84985a2c9a6f", - "sha256:dee4eeb293ffcd2c3b31ebab684dbf7f7b71fe198f8eddcdf3a042cc6e10205a", - "sha256:e13fa849c0e30643554add089983caa82f027d69fad8f50acadcb21c462244ab", - "sha256:e29e9ecce53d396772590438214cac4ab89776f5e60bd30601f1050b34464019", - "sha256:e6ac56425023e52d65150918ae25480d0a1ce2a6bf5ea2097f66a2cc50f6d692", - "sha256:e7d6363d4c6f1052b1d8b494eb9a72667c3ef5f80ebacfe18712728e85327000", - "sha256:e8dbfcb46553e6661d3fc1f33831598fcddf73d0f67834bce9fc3e9ebfe5c439", - "sha256:ec4b711989860705733fc59fb8c41b2def97041cea656b37cf6c8ea8dee1c3f4", - "sha256:ed6074552b4a32e047b52dad5ab497223721efbd0e9efe68c67749f094a092f7", - "sha256:ef89663678d8257063ce7c00d94638e05bd72f662c5e1eb0e07a172e6c1a9a9f", - "sha256:f5ee157a8afd2943be690db679f82fafb8d347a8342e8b9c34863de30c538d55", - "sha256:f61cf6d93c1ade9b8245c9f14b7900feadb0b7899dbe4aa8de268b705647df81", - "sha256:f6f4e645efd96b4690b9b6091dbd4e0fa2885ba5c57a0305c1916b75b4f30ff6", - "sha256:f754ef13b4e4f67a3bf59fe974ef4342523801c48bf422f720bd37a02a360584", - "sha256:f867edeb279d22020877640d2ea728de5817378c60a51be8af731a8a8f525306", - "sha256:fa1782f22d5f92c620153133f35a9a395d3f3823374bceddd3e7032e2fdfa0b1" + "sha256:025337859077b41548bdcbabe38698bcd93cfe10b06ff66617a48ff92c9aec60", + "sha256:03c9df035d4f8d647f8c210ddc2ae0728387275340668fb30d2421e17d9a0841", + "sha256:08d4c92bf480e19fc3f2717c9ce2aa31dceaa9163839a311424b6862252c943e", + "sha256:0cf5dfa9956d96ff2efb0f8e9c7d055904012c952539a774305aaaf3abdf3d6c", + "sha256:14601dcac4889e0a1c75ccf6a0e4baf70dbc75041e51bcf8d0e9274519df6887", + "sha256:180a8aea058f7535d1c84183c0362c710f4750bef66630c05f40c93c2b152a0f", + "sha256:1c0dfbd1be3cbefc7510102370d86e35d1d53e5a93d48519688b1bf0f761160a", + "sha256:2dd61c5afc88a4fda7d8b2cf03ae5947c6ac7516d32b7a15bf4b49569a5c076b", + "sha256:317b25e98a35ffec5c67efe56a4e9970852632c810d35b34ecdd70cc0e47b3b6", + "sha256:32475a42b2ea7b344069dc1e81445cfc00b9d0e3ca837f0523072432332e9f74", + "sha256:37b2998606d6dadbb5ccda959a33d6a5e853252d921fec1792fc902351bb4e2c", + "sha256:3ac9f578c46f22405ff7f8b1f5848fb753cc4b8377fbec8470a7dc3997ca7566", + "sha256:3b94a33a241bee9e34b8481cdcaa3d5c2116f575e0226e421bed3f7a6ea71cff", + "sha256:4a9220497ca0cb1fe94e3f334f65b9b5102a0b8147646118f020d8ce1de70105", + "sha256:4ab9a87f3784eb0e098f84a32670cfe4a79cb6512fd8f42ae3d0709f06405d18", + "sha256:5127dc1abd809431172bc3fbe8168d6b90556a30bb10acd5ded41c3cfd6f43b6", + "sha256:5672a86d55416ccd214c778efccf3266b84f87b89063b582167d803246354be4", + "sha256:580ccf358539153db147e40751a0b41688a5ceb275e6f3e93d91c9467f42b2e3", + "sha256:58dc9bc9767a1101f4e5e22db1b652161a225874d66f0e5cb8e2c7d1c438b587", + "sha256:5a90a923338531b7970abb063cfc087eebae6ef8ec8139762007188f6bc69a9f", + "sha256:653cf462db4e8c41995e33d865965e79641ef45369d8a11f54cd30888b7e6ff1", + "sha256:66227a2c7b575720c1871c8800d3a0122bb8ee94edb43a5685aa9aceb2782d44", + "sha256:6e5337bf454abddd91bd048ce0dca5134056fc99ca0205258766db35d0a2ea43", + "sha256:70bf4c43652cc294040dbb62256c83c8718370c8b93dd93d934b9a7bf6c4f53c", + "sha256:711e408732d4e9a0208008e5892c2966b485c783cd2d9a681f3eb147cf36c7ef", + "sha256:76e324da7b5da060287c54f2fabd3db5f76468006c811831f051942bf68c9d44", + "sha256:789361ed945d8d42850f919342a8665d2dc79e7e44ca1c97cc786966a21f627a", + "sha256:79aec8172b9e3c6d05fd4b219d5de1ac616bd8da934107325a6c0d0e866a21b6", + "sha256:7efe4853ecd3d6110301665a5178b9856be7e2a9485f49d91aa4d737ad2ae49e", + "sha256:7f22b16b35d5c1df9dfd58843ab2cd25e6bf15191f5a236bed177afade507bfc", + "sha256:83c0efd80b29695058d0fd2fa8a556490dbce9804eac3e281f373bbc99045f6c", + "sha256:859e8eb3507894093d01929e12e267f83b1d5f6221099d3ec976f0c995cb6bd9", + "sha256:8b9931fd36ee513c26b5bf08c940b0ac875de175341cbdd4fa3be109f0492586", + "sha256:8bd2a824d08d8977bb2794ea2682f898ad3d8837932e3a74937e93d62ecbb637", + "sha256:8f2d5ed877f089862f4c7aacf3a542627c1496f972a34d0474ce85ee7d939c27", + "sha256:8ffc86ae5e3e6a93765d49d1ab47b6075a9c978a2b3b80f0f32628f39caa0c88", + "sha256:92249669925bc1c54fcd2ec73f70f2c1d6a817928480ee1c65af5f6b81cdf12d", + "sha256:99d9a1eded738299ba8e106c6779ce5c3893cffa0e32e4485d680588adae6db8", + "sha256:9c63eaef32b7bebac8ebebf4dabebdbc6769a09c127294db6babee38e9f405b9", + "sha256:9e1fa156ee9454642adb7e7234a383884452532bc9d53d5af2d18d98ada1d79c", + "sha256:a2ecaa3c23e7a7cf86d00eda3390c232f4d533cd9ddea4b04f5d0644faf642c5", + "sha256:a6c710d657c8d1d2adbbb5c0b0c6bfcec28fd35bd6b5f016395f9ac43e878a15", + "sha256:a9584de0cd306072635fe4b89742bf26feae858a0683b399ad0c2509011b9dc0", + "sha256:ab7f43235d71e03b941c1630f4b6e3055d46b6cb8728a17663eaac9d8e83a865", + "sha256:af102d3372e917cffce49b521e4c32c497515119dc7bd8a75665e90a718bbf08", + "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393", + "sha256:b2dd880785088ff2ad21ffee205e58a8c1ddabc63612444ae41e5e4b321b39c0", + "sha256:b426f72cd77da3fec300ed3bc990895e2dd6b49e3bfe6c438592a3ba660e41ca", + "sha256:ba5bdf56969cad2019d4e8ffd3f879b5fdc792624129741d3d83fc832fef8c7d", + "sha256:bf55846c7b7a680eebaf9c3c48d630e1bf51bdf76c68a5f654b8524335b0ad29", + "sha256:ca1f08b8e43dc3bd0594c992fb1fd2f7ce87f7bf0d44358198d6da8034afdf84", + "sha256:ca29b6371ebc40e496995c94b988a101b9fbbed48a51190a4461fcb0a68b4a36", + "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b", + "sha256:cadcc978f82397d515bb2683fc0d50103acff2a180552654bb92d6045dec2c49", + "sha256:cd646c827b4f85ef4a78e4e58f4f5854fae0caf3db91b59f0d73731448a970c6", + "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d", + "sha256:cde031d8413842a1e7501e9129b8e676e62a657f8ec8166e18a70d94d4682855", + "sha256:ce0820f4a3a59ddced7fce696d86a096d5cc48d32a4183483a17671a61edfddc", + "sha256:d20be8b7f606df096e08b0b1b4a3c6f0515e8dac296881fe7461dfa0fb5ec817", + "sha256:d21974d246ed0181558087cd9f76e84e8321091ebfb3a93d4c341479a736f099", + "sha256:d33f94615fcaf872f7fd8cd98ac3b429e435c77619777e8a449d9d27e01134d1", + "sha256:d35c864c2dff13dfd79fb070fc4fc6235d7b9b359efe340e1261deb21b9fcb66", + "sha256:d5c826a221851a8dc028eb6d7d6429ba03184fa3c7e83ae01cd6d3bd1d4bd17d", + "sha256:e41e75344acef3fc59ba4765df29f107f309ca9e8eace5baacabd9217e52a5ee", + "sha256:e52bf98c7e727dd44f7c4acb980cb988448faeafed8433c867888268899b298b", + "sha256:e6ec2be506e7d6f9527dae9ff4b7f54e68ea44a0ef6b098256ddf895218a2f8f", + "sha256:e725edd0929fa79f8349ab4ec7f81c714df51dc4e991539a578e5018fa4a7152", + "sha256:eaa58399c01db555346647a907b4ef6d4f584b123943be6ed5588c3f2359c9f4", + "sha256:eb21aaa9a200d0a80dacc7a81038d2e476ffe473ffdd9c91eb745d623561de05", + "sha256:ecff0dc14f409599bbcafa7e470c00b80f17abc14d1405d38ab02e4b42e55b57", + "sha256:f557c55bc2b7676e74d39d19bcb8775ca295c7a028246175d6a8b431e70835e5", + "sha256:f7200b8f7619d36aa51c803fd52020a2dfbea36ffec1b5e22cab11fd34d95a6d", + "sha256:f9d471356dc16f84ed48768b8ee79f29514295c7295cb41e1133ec0b2b8d637d", + "sha256:fc5adda618205bd4678b146612ce44c3cbfdee9697951f2c0ffdef1f26d72b63", + "sha256:fc9043259ee430ecd71d178fccabd8c332a3bf1e81e50cae43cc2b28d19e4cb7", + "sha256:ffd9fee7d0775ebaba131f7ca2e2d83839a62ad65e8e02fe2bd8fc975cedeb9e" ], "markers": "python_version >= '3.8'", - "version": "==0.8.0" + "version": "==0.8.2" }, "jsonschema": { "hashes": [ @@ -1893,20 +1897,20 @@ }, "launchdarkly-eventsource": { "hashes": [ - "sha256:8cb3301ec0daeb5e17eaa37b3b65f6660fab851b317e69271185ef2fb42c2fde", - "sha256:9b5ec7149e2ad9995be22ad5361deb480c229701e6b0cc799e94aa14f067b77b" + "sha256:0fa935b7692555455ac8b44b845cdc16738bd9b2e9ce89ee19b3f8b4adafe3f1", + "sha256:99c29fa9a570aa8d49c9804bcc401028cab8a8954ccbf4a68c3116933301ec33" ], "markers": "python_version >= '3.8'", - "version": "==1.2.0" + "version": "==1.2.1" }, "launchdarkly-server-sdk": { "hashes": [ - "sha256:8cb72f3cd283bd3b1954d59b8197f1467b35d5c10449904aaf560d59d4ceb368", - "sha256:e50a5eef770a5d0c609cf823c60ad9526f2f645e67efc638af31e7582ff62050" + "sha256:4a90e7f62622e7d6107fb4ca7ae7fbc32c3bf028f19822ed5431903210455836", + "sha256:ed3cc007275a669a2036ba79a4b46bff26cbaa05aa4b98cff9f71bd89967ea33" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==9.8.0" + "version": "==9.8.1" }, "linked-services": { "extras": [ @@ -1915,11 +1919,11 @@ "requests" ], "hashes": [ - "sha256:41048237dd04c05d1d2da1bb10159c390c8ce1d973ab3686ba473c8778c52981", - "sha256:dfe469b449981d86b4577b320422320edf3963111db7f5ed71e200fd56e83a23" + "sha256:20217bb021c25adf755bc4638526113745773d2d9b393a1716669a01b980f8d8", + "sha256:cc901826cc11aadeef3b90735f453636f3b5bd78bf7953ae7fe960126619dc41" ], "markers": "python_version >= '3.10'", - "version": "==1.2.4" + "version": "==1.3.1" }, "lxml": { "hashes": [ @@ -2257,11 +2261,11 @@ }, "mistune": { "hashes": [ - "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205", - "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8" + "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1", + "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667" ], - "markers": "python_version >= '3.7'", - "version": "==3.0.2" + "markers": "python_version >= '3.8'", + "version": "==3.1.0" }, "mixer": { "hashes": [ @@ -2450,42 +2454,48 @@ }, "mypy": { "hashes": [ - "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc", - "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e", - "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f", - "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74", - "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a", - "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2", - "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b", - "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73", - "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e", - "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d", - "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d", - "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6", - "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca", - "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d", - "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5", - "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62", - "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a", - "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc", - "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7", - "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb", - "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7", - "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732", - "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80", - "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a", - "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc", - "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2", - "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0", - "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24", - "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7", - "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b", - "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372", - "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8" + "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c", + "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd", + "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f", + "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0", + "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9", + "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b", + "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14", + "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35", + "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319", + "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc", + "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb", + "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb", + "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e", + "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60", + "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31", + "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f", + "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6", + "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107", + "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11", + "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a", + "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837", + "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6", + "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b", + "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d", + "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255", + "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae", + "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1", + "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8", + "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b", + "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac", + "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9", + "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9", + "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1", + "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34", + "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427", + "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1", + "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c", + "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.13.0" + "version": "==1.14.1" }, "mypy-extensions": { "hashes": [ @@ -2497,11 +2507,11 @@ }, "nbclient": { "hashes": [ - "sha256:3e93e348ab27e712acd46fccd809139e356eb9a31aab641d1a7991a6eb4e6f68", - "sha256:949019b9240d66897e442888cfb618f69ef23dc71c01cb5fced8499c2cfc084d" + "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", + "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193" ], - "markers": "python_full_version >= '3.8.0'", - "version": "==0.10.1" + "markers": "python_full_version >= '3.9.0'", + "version": "==0.10.2" }, "nbconvert": { "hashes": [ @@ -2522,39 +2532,39 @@ }, "newrelic": { "hashes": [ - "sha256:0161152fad3c6a16d7ee1aee4fedb99df760ddf2b37bf84f53ddf0b2349cde7a", - "sha256:07146f8dc884a59ea7ef32fd095075449199372d37df821cb73b033e4ff85598", - "sha256:075e5bb8d2830449aa24935522b778c336da910d7e5b0c41b97f1fd9f7e974df", - "sha256:17097aa4d62304fbec37a9df32a0ef1cc393bc6ac6581a088aefc686547403dd", - "sha256:189382cb73f790584ed5885632873c27857844bd895f50ca12504bebf441bdd1", - "sha256:1aff06ae5c8ff0938ed75c4e62bffe2bfd2400f40ec2ed1867c57055cb0cb64f", - "sha256:1e6c26a38e20de4c0ec2c423f6fd3101915c207dff7cefbb85378f1d57d26f30", - "sha256:203573e485b36d6f2deb91e974a80a97b70a798b91751480f43f24193c3848c8", - "sha256:203b531bf7e1625b64229ad88cc0588f207a4b5116ba4d1606980447d7f04cc4", - "sha256:212fddfae053bd0ee803d17b8cb91b75360f416566d81382046e88a2d3159b75", - "sha256:378309f2713b0f8e2cb17506d4e0507731cbb41de9126ccee4e4a8b91832cb98", - "sha256:38273663a462deb97f7ebe1320fe46ef479067d3d9dbc205c8be53dc2a4ee0dc", - "sha256:5cd69a0fcc449c0844103832886cda76b9c8244e77b9e77c4f1c2c4088c1b9fc", - "sha256:5dd75831833330d331edc60fc79104ac2e9afd32ffc75bcca9b27813c5096905", - "sha256:649656b4bc07eef4d891ed9a01ac2116ab009a6106c4ce146d2ae83f597a1339", - "sha256:6a49990b780b65a9ea5ef953b5abd2fa56434c0051413eb246b827fda573159c", - "sha256:6d174cb16054ddc647e12ce721e7174806de0552cc3b288d798245a65e4c85b3", - "sha256:7b0362437217735e379b5af13056d3b42c62fec3b815747c3d324b8dc29a23a1", - "sha256:8015e62a83d142aa0212783c58457005a33193f809c3e03fbcab922f8b5c8c0c", - "sha256:84d167bcc3f473cb4ab8c20516f442922837d7b9d896f4c419bdb9674dbf1401", - "sha256:891eceefaa438063d1f139dfaeb9837ffcc7a4ada84ea96ea681d529170c5d0c", - "sha256:94de1f405ee2ac7752f64c1620dc7921f5e73b7d1adda0fd1386b24d42fb1e71", - "sha256:a92b55999c800d1b9c6e390e1ed435003d39905afd78feec6cedd48dc0401b05", - "sha256:ba92c1d480d7b0ec457e7ab059cf2b202a366300ee382b9efa5f94bf0d646745", - "sha256:c4028726e651868f349985fe5ae4a4dc7e9ede6aa6e292e5f4d658e18e6956ac", - "sha256:c412fa0fd04332fb2016769a53f89eaed9834b0b205c99bb39dfbb06707f5517", - "sha256:c631eadc61a3a5202cb9bcaf2094d580b50104d82e04abe30be93a318849bc28", - "sha256:d6c849100f0d7259e35f1d882a3e322878913c250fe79960d1d3adfe69e358a6", - "sha256:d9eaadbdbc44aeae5247d49be030ecbd5093cf0482766c80a1748979f1fb6931" + "sha256:0e5c32c767b64369a8b816629688e62efc58f5ff81b5f4d97f7cf8f3f23d4deb", + "sha256:12572fc2f487dbdb6d2ebec6b1edbe3c3955af7638acf0bda6eff93072d45230", + "sha256:12700b8560a29935ca3cb9868c6f977512d1d4d9f04a91ee16893c52273f0cc1", + "sha256:15a1b1331ff3950824a61dc356cc57acff2051e2f0ca00e30705ba5b10e8b9c9", + "sha256:22b7da78dc374cc5a72bceaf6c03bc26fda6fd398b242a8aa1221e75cfa540b0", + "sha256:32fd7851d2c1c34632c4d6ae6bfe700703c99f1150ded0b16844257925d47861", + "sha256:40a3359672e99c64226b33599daa0d210128a1c7540e26e86400e5710741bf17", + "sha256:4115eb9e5c97ad14e8cbae23dd5275dc162beb2b140c58ac4ba786c020f51aff", + "sha256:4ecf94d7c9103c304d6e27afdf701fd62fcd4320d9ab8d94bcaf4c77cf4576a9", + "sha256:526ebed52279b7202f65b319574c0759620ab102331944211cadc71d5f205a8e", + "sha256:64da7c1155066d115e63523edfd4b9f39361b4c19a46fdde4b710b00342fb31d", + "sha256:6517683ba5c1170de100b0d9314dc3f542b5108acc535700018ba2fef26d3123", + "sha256:68b2f4fe10fed13cae551c41c90cb1686beee4daea0eb03559f552a58557a272", + "sha256:844a38c3ddeb3d2e2d6e568ab8a7f38e12ceaefd77261c66d2c4c9a20c2596ae", + "sha256:8da411cbb14f675c99276e76c92557887f9f5e8044ab2e1e85d4f9826b4eca6b", + "sha256:9df1bf1b1c0b294fce69bf0bbf87c03da544028f69ef6f1b597bf289a6b048e9", + "sha256:9e50b0abfbfd2b6e84896341b6c6b60a1564a98fef64cc0c27b407dac95314e7", + "sha256:a4fdbdd3e6226b01baab71cc2d2406f9f83cd88ee12d72e48593a8f510e240ff", + "sha256:a6658cfe3924c646c1b78a70f60eb890842d8fc31f752e32a450022d397672b8", + "sha256:a8336e0c569ad28ad33427c99bf4a5cb31ec5df8d95ac66c6065023f0b108a3a", + "sha256:b0297bfbef60ee57ce16e40192b3d317a8fb581f40a614a56672173db517117d", + "sha256:b94ca109cfa54ab2c8270d9814923ee3c0abb9e9afd7da026e0b4869f8d93969", + "sha256:c3d2ea64631663155e10f20a793076f271bf072e3564ecf6bd723f94358cb41c", + "sha256:c626fcde15412a905f2699f75d00d9c3af67e2b8f75f3ea1afdd6c0bb9a87d43", + "sha256:c8015ad51d9463c5c7c9977b99214013c276bf8bba3e3f97d5432308d93e37dd", + "sha256:cd36b7a4de9f7c49fde9849abc6fea293f70b09acad9a8573a514da5249b0f66", + "sha256:d69864f83039ffa17e6dab1d986d6a74be2401895b1ea9cb30453788b9372113", + "sha256:de25b50eba6e4b6cc9d0ccd980405ff2cceb4df52738a765dc55586a81c69d3a", + "sha256:e2a1b7b8b5414061bff996d2cef140ab26e9aa8d5e4e2cdce3ce8118adbf2c3e" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==10.3.1" + "version": "==10.4.0" }, "nodeenv": { "hashes": [ @@ -2566,65 +2576,65 @@ }, "numpy": { "hashes": [ - "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe", - "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0", - "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48", - "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a", - "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564", - "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958", - "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17", - "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0", - "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee", - "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b", - "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4", - "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4", - "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6", - "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4", - "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d", - "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f", - "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f", - "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f", - "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56", - "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9", - "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd", - "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23", - "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed", - "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a", - "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098", - "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1", - "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512", - "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f", - "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09", - "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f", - "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc", - "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8", - "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0", - "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761", - "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef", - "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5", - "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e", - "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b", - "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d", - "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43", - "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c", - "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41", - "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff", - "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408", - "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2", - "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9", - "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57", - "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb", - "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9", - "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3", - "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a", - "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0", - "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e", - "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598", - "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4" + "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2", + "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5", + "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60", + "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71", + "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631", + "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8", + "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2", + "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16", + "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa", + "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591", + "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964", + "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821", + "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484", + "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957", + "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800", + "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918", + "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95", + "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0", + "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e", + "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d", + "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73", + "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59", + "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51", + "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355", + "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348", + "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e", + "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440", + "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675", + "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84", + "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046", + "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab", + "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712", + "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308", + "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315", + "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3", + "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008", + "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5", + "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2", + "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e", + "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7", + "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf", + "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab", + "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd", + "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf", + "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8", + "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb", + "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268", + "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d", + "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780", + "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716", + "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e", + "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528", + "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af", + "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7", + "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51" ], "index": "pypi", "markers": "python_version >= '3.10'", - "version": "==2.1.3" + "version": "==2.2.1" }, "oauthlib": { "hashes": [ @@ -2636,12 +2646,12 @@ }, "openai": { "hashes": [ - "sha256:2a235d0e1e312cd982f561b18c27692e253852f4e5fb6ccf08cb13540a9bdaa1", - "sha256:547e85b94535469f137a779d8770c8c5adebd507c2cc6340ca401a7c4d5d16f0" + "sha256:e2910b1170a6b7f88ef491ac3a42c387f08bd3db533411f7ee391d166571d63c", + "sha256:f5a035fd01e141fc743f4b0e02c41ca49be8fab0866d3b67f5f29b4f4d3c0973" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.55.3" + "version": "==1.58.1" }, "packaging": { "hashes": [ @@ -2949,20 +2959,20 @@ }, "protobuf": { "hashes": [ - "sha256:0cd67a1e5c2d88930aa767f702773b2d054e29957432d7c6a18f8be02a07719a", - "sha256:0d10091d6d03537c3f902279fcf11e95372bdd36a79556311da0487455791b20", - "sha256:17d128eebbd5d8aee80300aed7a43a48a25170af3337f6f1333d1fac2c6839ac", - "sha256:34a90cf30c908f47f40ebea7811f743d360e202b6f10d40c02529ebd84afc069", - "sha256:445a0c02483869ed8513a585d80020d012c6dc60075f96fa0563a724987b1001", - "sha256:6c3009e22717c6cc9e6594bb11ef9f15f669b19957ad4087214d69e08a213368", - "sha256:85286a47caf63b34fa92fdc1fd98b649a8895db595cfa746c5286eeae890a0b1", - "sha256:88c4af76a73183e21061881360240c0cdd3c39d263b4e8fb570aaf83348d608f", - "sha256:c931c61d0cc143a2e756b1e7f8197a508de5365efd40f83c907a9febf36e6b43", - "sha256:e467f81fdd12ded9655cea3e9b83dc319d93b394ce810b556fb0f421d8613e86", - "sha256:ea7fb379b257911c8c020688d455e8f74efd2f734b72dc1ea4b4d7e9fd1326f2" + "sha256:13d6d617a2a9e0e82a88113d7191a1baa1e42c2cc6f5f1398d3b054c8e7e714a", + "sha256:2d2e674c58a06311c8e99e74be43e7f3a8d1e2b2fdf845eaa347fbd866f23355", + "sha256:36000f97ea1e76e8398a3f02936aac2a5d2b111aae9920ec1b769fc4a222c4d9", + "sha256:494229ecd8c9009dd71eda5fd57528395d1eacdf307dbece6c12ad0dd09e912e", + "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9", + "sha256:a0c53d78383c851bfa97eb42e3703aefdc96d2036a41482ffd55dc5f529466eb", + "sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e", + "sha256:b6b0d416bbbb9d4fbf9d0561dbfc4e324fd522f61f7af0fe0f282ab67b22477e", + "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851", + "sha256:e621a98c0201a7c8afe89d9646859859be97cb22b8bf1d8eacfd90d5bda2eb19", + "sha256:fde4554c0e578a5a0bcc9a276339594848d1e89f9ea47b4427c80e5d72f90181" ], "markers": "python_version >= '3.8'", - "version": "==5.29.0" + "version": "==5.29.2" }, "psycopg": { "extras": [ @@ -3217,117 +3227,117 @@ }, "pydantic": { "hashes": [ - "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa", - "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e" + "sha256:597e135ea68be3a37552fb524bc7d0d66dcf93d395acd93a00682f1efcb8ee3d", + "sha256:82f12e9723da6de4fe2ba888b5971157b3be7ad914267dea8f05f82b28254f06" ], "markers": "python_version >= '3.8'", - "version": "==2.10.2" + "version": "==2.10.4" }, "pydantic-core": { "hashes": [ - "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9", - "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b", - "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c", - "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529", - "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc", - "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854", - "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d", - "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278", - "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a", - "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c", - "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f", - "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27", - "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f", - "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac", - "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2", - "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97", - "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a", - "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919", - "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9", - "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4", - "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c", - "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131", - "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5", - "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd", - "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089", - "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107", - "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6", - "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60", - "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf", - "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", - "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08", - "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05", - "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2", - "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e", - "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c", - "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17", - "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62", - "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23", - "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be", - "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067", - "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02", - "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f", - "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235", - "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840", - "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5", - "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807", - "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16", - "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c", - "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864", - "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e", - "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a", - "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35", - "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737", - "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a", - "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3", - "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52", - "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05", - "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31", - "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89", - "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de", - "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6", - "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36", - "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c", - "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154", - "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb", - "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e", - "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd", - "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3", - "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f", - "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78", - "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960", - "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618", - "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08", - "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4", - "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c", - "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c", - "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330", - "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8", - "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792", - "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025", - "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9", - "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f", - "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01", - "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337", - "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4", - "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f", - "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd", - "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51", - "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab", - "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc", - "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676", - "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381", - "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed", - "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb", - "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967", - "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073", - "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae", - "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c", - "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206", - "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b" + "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278", + "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50", + "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9", + "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f", + "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6", + "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc", + "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54", + "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630", + "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9", + "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236", + "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7", + "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", + "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b", + "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048", + "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc", + "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", + "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4", + "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd", + "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4", + "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7", + "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7", + "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4", + "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e", + "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa", + "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6", + "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962", + "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b", + "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f", + "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474", + "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5", + "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459", + "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf", + "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a", + "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c", + "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76", + "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362", + "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4", + "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934", + "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320", + "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118", + "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96", + "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306", + "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046", + "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3", + "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2", + "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af", + "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", + "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67", + "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a", + "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", + "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35", + "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", + "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151", + "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b", + "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", + "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133", + "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef", + "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145", + "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15", + "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", + "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc", + "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", + "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c", + "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0", + "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5", + "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57", + "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", + "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8", + "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", + "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da", + "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", + "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc", + "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993", + "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656", + "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4", + "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c", + "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb", + "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d", + "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9", + "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e", + "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", + "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc", + "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a", + "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9", + "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506", + "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b", + "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1", + "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d", + "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99", + "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3", + "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31", + "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c", + "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", + "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", + "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308", + "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2", + "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228", + "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b", + "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", + "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad" ], "markers": "python_version >= '3.8'", - "version": "==2.27.1" + "version": "==2.27.2" }, "pyfcm": { "hashes": [ @@ -3394,6 +3404,7 @@ "sha256:49f7a019577d834746bc55c5fce6ecbcec0f2b4ec5ce1cf43a9a173b8138bb36", "sha256:e474f5a473cd7f92221cc04976e48f4d11502804657a08a989fb3be5514c904a" ], + "markers": "python_version >= '3.7'", "version": "==24.3.0" }, "pyparsing": { @@ -3401,7 +3412,7 @@ "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c" ], - "markers": "python_version > '3.0'", + "markers": "python_version >= '3.9'", "version": "==3.2.0" }, "pyrfc3339": { @@ -3413,12 +3424,12 @@ }, "pyright": { "hashes": [ - "sha256:41e9620bba9254406dc1f621a88ceab5a88af4c826feb4f614d95691ed243a60", - "sha256:716bf8cc174ab8b4dcf6828c3298cac05c5ed775dda9910106a5dcfe4c7fe220" + "sha256:54fa186f8b3e8a55a44ebfa842636635688670c6896dcf6cf4a7fc75062f4d15", + "sha256:66b2d42cdf5c3cbab05f2f4b76e8bec8aa78e679bfa0b6ad7b923d9e027cadb2" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.1.389" + "version": "==1.1.391" }, "pytest": { "hashes": [ @@ -3677,11 +3688,11 @@ "hiredis" ], "hashes": [ - "sha256:0b1087665a771b1ff2e003aa5bdd354f15a70c9e25d5a7dbf9c722c16528a7b0", - "sha256:ae174f2bb3b1bf2b09d54bf3e51fbc1469cf6c10aa03e21141f51969801a7897" + "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f", + "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4" ], "markers": "python_version >= '3.8'", - "version": "==5.2.0" + "version": "==5.2.1" }, "referencing": { "hashes": [ @@ -3710,110 +3721,112 @@ }, "rpds-py": { "hashes": [ - "sha256:034964ea0ea09645bdde13038b38abb14be0aa747f20fcfab6181207dd9e0483", - "sha256:0686f2c16eafdc2c6b4ce6e86e5b3092e87db09ae64be2787616444eb35b9756", - "sha256:0903ffdb5b9007e503203b6285e4ff0faf96d875c19f1d103b475acf7d9f7311", - "sha256:1212cb231f2002934cd8d71a0d718fdd9d9a2dd671e0feef8501038df3508026", - "sha256:1357c3092702078b7782b6ebd5ba9b22c1a291c34fbf9d8f1a48237466ac7758", - "sha256:1a6cc4eb1e86364331928acafb2bb41d8ab735ca3caf2d6019b9f6dac3f4f65d", - "sha256:208ce1d8e3af138d1d9b21d7206356b7f29b96675e0113aea652cf024e4ddfdc", - "sha256:2498ff422823be087b48bc82710deb87ac34f6b7c8034ee39920647647de1e60", - "sha256:24c28df05bd284879d0fac850ba697077d2a33b7ebcaea6318d6b6cdfdc86ddc", - "sha256:2a57300cc8b034c5707085249efd09f19116bb80278d0ec925d7f3710165c510", - "sha256:2d2fc3ab021be3e0b5aec6d4164f2689d231b8bfc5185cc454314746aa4aee72", - "sha256:2f513758e7cda8bc262e80299a8e3395d7ef7f4ae705be62632f229bc6c33208", - "sha256:306da3dfa174b489a3fc63b0872e2226a5ddf94c59875a770d72aff945d5ed96", - "sha256:326e42f2b49462e05f8527a1311ce98f9f97c484b3e443ec0ea4638bed3aebcf", - "sha256:32a0e24cab2daae0503b06666d516e90a080c1a95aff0406b9f03c6489177c4b", - "sha256:32de71c393f126d8203e9815557c7ff4d72ed1ad3aa3f52f6c7938413176750a", - "sha256:341a07a4b55126bfae68c9bf24220a73d456111e5eb3dcbdab9fd16de2341224", - "sha256:38cacf1f378571450576f2c8ce87da6f3fddc59d744de5c12b37acc23285b1e1", - "sha256:3b94b074dcce39976db22ea75c7aea8b22d95e6d3b62f76e20e1179a278521d8", - "sha256:3dc7c64b56b82428894f056e9ff6e8ee917ff74fc26b65211a33602c2372e928", - "sha256:3f7a048ec1ebc991331d709be4884dc318c9eaafa66dcde8be0933ac0e702149", - "sha256:41f65a97bf2c4b161c9f8f89bc37058346bec9b36e373c8ad00a16c957bff625", - "sha256:48c95997af9314f4034fe5ba2d837399e786586e220835a578d28fe8161e6ae5", - "sha256:49e084d47a66027ac72844f9f52f13d347a9a1f05d4f84381b420e47f836a7fd", - "sha256:4b5d17d8f5b885ce50e0cda85f99c0719e365e98b587338535fa566a48375afb", - "sha256:4c0321bc03a1c513eca1837e3bba948b975bcf3a172aebc197ab3573207f137a", - "sha256:4e7c9aa2353eb0b0d845323857197daa036c2ff8624df990b0d886d22a8f665e", - "sha256:4fc4824e38c1e91a73bc820e7caacaf19d0acd557465aceef0420ca59489b390", - "sha256:54d8f94dec5765a9edc19610fecf0fdf9cab36cbb9def1213188215f735a6f98", - "sha256:574c5c94213bc9990805bfd7e4ba3826d3c098516cbc19f0d0ef0433ad93fa06", - "sha256:59e63da174ff287db05ef7c21d75974a5bac727ed60452aeb3a14278477842a8", - "sha256:5ae7927cd2b869ca4dc645169d8af5494a29c99afd0ea0f24dd00c811ab1d8b8", - "sha256:5f21e1278c9456cd601832375c778ca44614d3433996488221a56572c223f04a", - "sha256:5fdf91a7c07f40e47b193f2acae0ed9da35d09325d7c3c3279f722b7cbf3d264", - "sha256:62ab12fe03ffc49978d29de9c31bbb216610157f7e5ca8e172fed6642aead3be", - "sha256:632d2fdddd9fbe3ac8896a119fd18a71fc95ca9c4cbe5223096c142d8c4a2b1d", - "sha256:64a0c965a1e299c9b280006bdb15c276c427c45360aed676305dc36bcaa4d13c", - "sha256:67e013a17a3db4d98cc228fd5aeb36a51b0f5cf7330b9102a552060f1fe4e560", - "sha256:6b639a19e1791b646d27f15d17530a51722cc728d43b2dff3aeb904f92d91bac", - "sha256:6b6e4bcfc32f831bfe3d6d8a5acedfbfd5e252a03c83fa24813b277a3a8a13ca", - "sha256:7539dbb8f705e13629ba6f23388976aad809e387f32a6e5c0712e4e8d9bfcce7", - "sha256:758098b38c344d9a7f279baf0689261777e601f620078ef5afdc9bd3339965c3", - "sha256:762206ba3bf1d6c8c9e0055871d3c0d5b074b7c3120193e6c067e7866f106ab1", - "sha256:771c9a3851beaa617d8c8115d65f834a2b52490f42ee2b88b13f1fc5529e9e0c", - "sha256:81e7a27365b02fe70a77f1365376879917235b3fec551d19b4c91b51d0bc1d07", - "sha256:8338db3c76833d02dc21c3e2c42534091341d26e4f7ba32c6032bb558a02e07b", - "sha256:8426f97117b914b9bfb2a7bd46edc148e8defda728a55a5df3a564abe70cd7a4", - "sha256:842855bbb113a19c393c6de5aa6ed9a26c6b13c2fead5e49114d39f0d08b94d8", - "sha256:87453d491369cd8018016d2714a13e8461975161703c18ee31eecf087a8ae5d4", - "sha256:875fe8dffb43c20f68379ee098b035a7038d7903c795d46715f66575a7050b19", - "sha256:8ad4dfda52e64af3202ceb2143a62deba97894b71c64a4405ee80f6b3ea77285", - "sha256:8c48fc7458fe3a74dcdf56ba3534ff41bd421f69436df09ff3497fdaac18b431", - "sha256:8cbb040fec8eddd5a6a75e737fd73c9ce37e51f94bacdd0b178d0174a4758395", - "sha256:92d28a608127b357da47c99e0d0e0655ca2060286540fe9f2a25a2e8ac666e05", - "sha256:931bf3d0705b2834fed29354f35170fa022fe22a95542b61b7c66aca5f8a224f", - "sha256:93bbd66f46dddc41e8c656130c97c0fb515e0fa44e1eebb2592769dbbd41b2f5", - "sha256:9ad4640a409bc2b7d22b7921e7660f0db96c5c8c69fbb2e8f3261d4f71d33983", - "sha256:a4366f264fa60d3c109f0b27af0cd9eb8d46746bd70bd3d9d425f035b6c7e286", - "sha256:a73ed43d64209e853bba567a543170267a5cd64f359540b0ca2d597e329ba172", - "sha256:a810a57ce5e8ecf8eac6ec4dab534ff80c34e5a2c31db60e992009cd20f58e0f", - "sha256:b4660943030406aaa40ec9f51960dd88049903d9536bc3c8ebb5cc4e1f119bbe", - "sha256:b8906f537978da3f7f0bd1ba37b69f6a877bb43312023b086582707d2835bf2f", - "sha256:b91bfef5daa2a5a4fe62f8d317fc91a626073639f951f851bd2cb252d01bc6c5", - "sha256:ba1fc34d0b2f6fd53377a4c954116251eba6d076bf64f903311f4a7d27d10acd", - "sha256:ba235e00e0878ba1080b0f2a761f143b2a2d1c354f3d8e507fbf2f3de401bf18", - "sha256:bb11809b0de643a292a82f728c494a2bbef0e30a7c42d37464abbd6bef7ca7b1", - "sha256:c17b43fe9c6da16885e3fe28922bcd1a029e61631fb771c7d501019b40bcc904", - "sha256:c1c21030ed494deb10226f90e2dbd84a012d59810c409832714a3dd576527be2", - "sha256:c398a5a8e258dfdc5ea2aa4e5aa2ca3207f654a8eb268693dd1a76939074a588", - "sha256:c637188b930175c256f13adbfc427b83ec7e64476d1ec9d6608f312bb84e06c3", - "sha256:c7b4450093c0c909299770226fb0285be47b0a57545bae25b5c4e51566b0e587", - "sha256:c8fd7a16f7a047e06c747cfcf2acef3ac316132df1c6077445b29ee6f3f3a70b", - "sha256:ca505fd3767a09a139737f3278bc8a485cb64043062da89bcba27e2f2ea78d33", - "sha256:d1522025cda9e57329aade769f56e5793b2a5da7759a21914ee10e67e17e601e", - "sha256:d276280649305c1da6cdd84585d48ae1f0efa67434d8b10d2df95228e59a05bb", - "sha256:d33622dc63c295788eed09dbb1d11bed178909d3267b02d873116ee6be368244", - "sha256:d4f2af3107fe4dc40c0d1a2409863f5249c6796398a1d83c1d99a0b3fa6cfb8d", - "sha256:d5469b347445d1c31105f33e7bfc9a8ba213d48e42641a610dda65bf9e3c83f5", - "sha256:d80fd710b3307a3c63809048b72c536689b9b0b31a2518339c3f1a4d29c73d7a", - "sha256:d9bb9242b38a664f307b3b897f093896f7ed51ef4fe25a0502e5a368de9151ea", - "sha256:d9ceca96df54cb1675a0b7f52f1c6d5d1df62c5b40741ba211780f1b05a282a2", - "sha256:dc2c00acdf68f1f69a476b770af311a7dc3955b7de228b04a40bcc51ac4d743b", - "sha256:dfdabdf8519c93908b2bf0f87c3f86f9e88bab279fb4acfd0907519ca5a1739f", - "sha256:e04919ffa9a728c446b27b6b625fa1d00ece221bdb9d633e978a7e0353a12c0e", - "sha256:e0abcce5e874474d3eab5ad53be03dae2abe651d248bdeaabe83708e82969e78", - "sha256:e1c04fb380bc8efaae2fdf17ed6cd5d223da78a8b0b18a610f53d4c5d6e31dfd", - "sha256:e23dcdd4b2ff9c6b3317ea7921b210d39592f8ca1cdea58ada25b202c65c0a69", - "sha256:e34a3e665d38d0749072e6565400c8ce9abae976e338919a0dfbfb0e1ba43068", - "sha256:e6da2e0500742e0f157f005924a0589f2e2dcbfdd6cd0cc0abce367433e989be", - "sha256:e9aa4af6b879bb75a3c7766fbf49d77f4097dd12b548ecbbd8b3f85caa833281", - "sha256:e9bbdba9e75b1a9ee1dd1335034dad998ef1acc08492226c6fd50aa773bdfa7d", - "sha256:e9d4293b21c69ee4f9e1a99ac4f772951d345611c614a0cfae2ec6b565279bc9", - "sha256:eadd2417e83a77ce3ae4a0efd08cb0ebdfd317b6406d11020354a53ad458ec84", - "sha256:ed0102146574e5e9f079b2e1a06e6b5b12a691f9c74a65b93b7f3d4feda566c6", - "sha256:f0fb8efc9e579acf1e556fd86277fecec320c21ca9b5d39db96433ad8c45bc4a", - "sha256:f4e9946c8c7def17e4fcb5eddb14c4eb6ebc7f6f309075e6c8d23b133c104607", - "sha256:f7649c8b8e4bd1ccc5fcbd51a855d57a617deeba19c66e3d04b1abecc61036b2", - "sha256:f980a0640599a74f27fd9d50c84c293f1cb7afc2046c5c6d3efaf8ec7cdbc326", - "sha256:f9dc2113e0cf0dd637751ca736186fca63664939ceb9f9f67e93ade88c69c0c9", - "sha256:fde778947304e55fc732bc8ea5c6063e74244ac1808471cb498983a210aaf62c", - "sha256:fe23687924b25a2dee52fab15976fd6577ed8518072bcda9ff2e2b88ab1f168b" + "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518", + "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059", + "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61", + "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5", + "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9", + "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543", + "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2", + "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a", + "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d", + "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56", + "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d", + "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd", + "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b", + "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4", + "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99", + "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d", + "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd", + "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe", + "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1", + "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e", + "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f", + "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3", + "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca", + "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d", + "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e", + "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc", + "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea", + "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38", + "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b", + "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c", + "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff", + "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723", + "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e", + "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493", + "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6", + "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83", + "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091", + "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1", + "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627", + "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1", + "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728", + "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16", + "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c", + "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45", + "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7", + "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a", + "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730", + "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967", + "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25", + "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24", + "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055", + "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d", + "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0", + "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e", + "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7", + "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c", + "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f", + "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd", + "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652", + "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8", + "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11", + "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333", + "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96", + "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64", + "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b", + "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e", + "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c", + "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9", + "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec", + "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb", + "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37", + "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad", + "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9", + "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c", + "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf", + "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4", + "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f", + "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d", + "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09", + "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d", + "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566", + "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74", + "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338", + "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15", + "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c", + "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648", + "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84", + "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3", + "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123", + "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520", + "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831", + "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e", + "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf", + "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b", + "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2", + "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3", + "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130", + "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b", + "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de", + "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5", + "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d", + "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00", + "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e" ], "markers": "python_version >= '3.9'", - "version": "==0.22.0" + "version": "==0.22.3" }, "rsa": { "hashes": [ @@ -3852,6 +3865,7 @@ "sha256:6b047fbd8a84fd0bb0d55ebce4031e400562b9196e1e0d3e0fe2b8a59f6d4a85", "sha256:b8683ba13f0d39c6cd5d625d2c5f65421d6d707b013b375c355751557cbe8e09" ], + "markers": "python_version >= '3.8'", "version": "==24.2.0" }, "setuptools": { @@ -3864,11 +3878,11 @@ }, "six": { "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.16.0" + "version": "==1.17.0" }, "sniffio": { "hashes": [ @@ -3950,20 +3964,20 @@ }, "sqlparse": { "hashes": [ - "sha256:9e37b35e16d1cc652a2545f0997c1deb23ea28fa1f3eefe609eee3063c3b105f", - "sha256:e99bc85c78160918c3e1d9230834ab8d80fc06c59d03f8db2618f65f65dda55e" + "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272", + "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca" ], "markers": "python_version >= '3.8'", - "version": "==0.5.2" + "version": "==0.5.3" }, "stripe": { "hashes": [ - "sha256:98e625d9ddbabcecf02666867169696e113d9eaba27979fb310a7a8dfd44097c", - "sha256:9d2e86943e1e4f325835d3860c4f58aa98d49229c9caf67588f9f9b2451e8e56" + "sha256:7ddd251b622d490fe57d78487855dc9f4d95b1bb113607e81fd377037a133d5a", + "sha256:8aa47a241de0355c383c916c4ef7273ab666f096a44ee7081e357db4a36f0cce" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==11.3.0" + "version": "==11.4.1" }, "text-unidecode": { "hashes": [ @@ -4022,12 +4036,12 @@ }, "twilio": { "hashes": [ - "sha256:0f747f6c29b0ddc50a55e51739abb28c83b83d97917b02e784119058a310db05", - "sha256:7d5d05140530f0eaf60d6a810c88da443cb2e6aad18a0830e4cb0ccd7b338d30" + "sha256:2447e041cec11167d7765aaa62ab1dae3b82b712245ca9a966096acd8b9f426f", + "sha256:e24c640696ccc726bba14160951da3cfc6b4bcb772fdcb3e8c16dc3cc851ef12" ], "index": "pypi", "markers": "python_full_version >= '3.7.0'", - "version": "==9.3.7" + "version": "==9.4.1" }, "twisted": { "extras": [ @@ -4054,7 +4068,7 @@ "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version >= '3.7'", + "markers": "python_version >= '3.8'", "version": "==4.12.2" }, "tzdata": { @@ -4076,31 +4090,31 @@ }, "urllib3": { "hashes": [ - "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", - "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.8'", - "version": "==2.2.3" + "markers": "python_version >= '3.9'", + "version": "==2.3.0" }, "uvicorn": { "extras": [ "standard" ], "hashes": [ - "sha256:82ad92fd58da0d12af7482ecdb5f2470a04c9c9a53ced65b9bbb4a205377602e", - "sha256:ee9519c246a72b1c084cea8d3b44ed6026e78a4a309cbedae9c37e4cb9fbb175" + "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4", + "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9" ], - "markers": "python_version >= '3.8'", - "version": "==0.32.1" + "markers": "python_version >= '3.9'", + "version": "==0.34.0" }, "uvicorn-worker": { "hashes": [ - "sha256:65dcef25ab80a62e0919640f9582216ee05b3bb1dc2f0e58b354ca0511c398fb", - "sha256:f6894544391796be6eeed37d48cae9d7739e5a105f7e37061eccef2eac5a0295" + "sha256:6baeab7b2162ea6b9612cbe149aa670a76090ad65a267ce8e27316ed13c7de7b", + "sha256:ef0fe8aad27b0290a9e602a256b03f5a5da3a9e5f942414ca587b645ec77dd52" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==0.2.0" + "markers": "python_version >= '3.9'", + "version": "==0.3.0" }, "uvloop": { "hashes": [ @@ -4142,6 +4156,7 @@ "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2" ], + "markers": "python_full_version >= '3.8.0'", "version": "==0.21.0" }, "vine": { @@ -4154,79 +4169,80 @@ }, "watchfiles": { "hashes": [ - "sha256:06d828fe2adc4ac8a64b875ca908b892a3603d596d43e18f7948f3fef5fc671c", - "sha256:074c7618cd6c807dc4eaa0982b4a9d3f8051cd0b72793511848fd64630174b17", - "sha256:09551237645d6bff3972592f2aa5424df9290e7a2e15d63c5f47c48cde585935", - "sha256:0fc3bf0effa2d8075b70badfdd7fb839d7aa9cea650d17886982840d71fdeabf", - "sha256:12ab123135b2f42517f04e720526d41448667ae8249e651385afb5cda31fedc0", - "sha256:13a4f9ee0cd25682679eea5c14fc629e2eaa79aab74d963bc4e21f43b8ea1877", - "sha256:1d19df28f99d6a81730658fbeb3ade8565ff687f95acb59665f11502b441be5f", - "sha256:1e176b6b4119b3f369b2b4e003d53a226295ee862c0962e3afd5a1c15680b4e3", - "sha256:1ee5edc939f53466b329bbf2e58333a5461e6c7b50c980fa6117439e2c18b42d", - "sha256:1f73c2147a453315d672c1ad907abe6d40324e34a185b51e15624bc793f93cc6", - "sha256:1ff236d7a3f4b0a42f699a22fc374ba526bc55048a70cbb299661158e1bb5e1f", - "sha256:245fab124b9faf58430da547512d91734858df13f2ddd48ecfa5e493455ffccb", - "sha256:28babb38cf2da8e170b706c4b84aa7e4528a6fa4f3ee55d7a0866456a1662041", - "sha256:28fb64b5843d94e2c2483f7b024a1280662a44409bedee8f2f51439767e2d107", - "sha256:29cf884ad4285d23453c702ed03d689f9c0e865e3c85d20846d800d4787de00f", - "sha256:2a825ba4b32c214e3855b536eb1a1f7b006511d8e64b8215aac06eb680642d84", - "sha256:2ac778a460ea22d63c7e6fb0bc0f5b16780ff0b128f7f06e57aaec63bd339285", - "sha256:2c2696611182c85eb0e755b62b456f48debff484b7306b56f05478b843ca8ece", - "sha256:2d9c0518fabf4a3f373b0a94bb9e4ea7a1df18dec45e26a4d182aa8918dee855", - "sha256:2de52b499e1ab037f1a87cb8ebcb04a819bf087b1015a4cf6dcf8af3c2a2613e", - "sha256:37566c844c9ce3b5deb964fe1a23378e575e74b114618d211fbda8f59d7b5dab", - "sha256:3d94fd83ed54266d789f287472269c0def9120a2022674990bd24ad989ebd7a0", - "sha256:48051d1c504448b2fcda71c5e6e3610ae45de6a0b8f5a43b961f250be4bdf5a8", - "sha256:487d15927f1b0bd24e7df921913399bb1ab94424c386bea8b267754d698f8f0e", - "sha256:4a3b33c3aefe9067ebd87846806cd5fc0b017ab70d628aaff077ab9abf4d06b3", - "sha256:4ff9c7e84e8b644a8f985c42bcc81457240316f900fc72769aaedec9d088055a", - "sha256:533a7cbfe700e09780bb31c06189e39c65f06c7f447326fee707fd02f9a6e945", - "sha256:53ae447f06f8f29f5ab40140f19abdab822387a7c426a369eb42184b021e97eb", - "sha256:550109001920a993a4383b57229c717fa73627d2a4e8fcb7ed33c7f1cddb0c85", - "sha256:5bbd0311588c2de7f9ea5cf3922ccacfd0ec0c1922870a2be503cc7df1ca8be7", - "sha256:5dccfc70480087567720e4e36ec381bba1ed68d7e5f368fe40c93b3b1eba0105", - "sha256:5f75cd42e7e2254117cf37ff0e68c5b3f36c14543756b2da621408349bd9ca7c", - "sha256:648e2b6db53eca6ef31245805cd528a16f56fa4cc15aeec97795eaf713c11435", - "sha256:774ef36b16b7198669ce655d4f75b4c3d370e7f1cbdfb997fb10ee98717e2058", - "sha256:8a2127cd68950787ee36753e6d401c8ea368f73beaeb8e54df5516a06d1ecd82", - "sha256:90004553be36427c3d06ec75b804233f8f816374165d5225b93abd94ba6e7234", - "sha256:905f69aad276639eff3893759a07d44ea99560e67a1cf46ff389cd62f88872a2", - "sha256:9122b8fdadc5b341315d255ab51d04893f417df4e6c1743b0aac8bf34e96e025", - "sha256:9272fdbc0e9870dac3b505bce1466d386b4d8d6d2bacf405e603108d50446940", - "sha256:936f362e7ff28311b16f0b97ec51e8f2cc451763a3264640c6ed40fb252d1ee4", - "sha256:947ccba18a38b85c366dafeac8df2f6176342d5992ca240a9d62588b214d731f", - "sha256:95dc785bc284552d044e561b8f4fe26d01ab5ca40d35852a6572d542adfeb4bc", - "sha256:95de85c254f7fe8cbdf104731f7f87f7f73ae229493bebca3722583160e6b152", - "sha256:9b4fb98100267e6a5ebaff6aaa5d20aea20240584647470be39fe4823012ac96", - "sha256:9c01446626574561756067f00b37e6b09c8622b0fc1e9fdbc7cbcea328d4e514", - "sha256:9c9a8d8fd97defe935ef8dd53d562e68942ad65067cd1c54d6ed8a088b1d931d", - "sha256:9e1d9284cc84de7855fcf83472e51d32daf6f6cecd094160192628bc3fee1b78", - "sha256:a0abf173975eb9dd17bb14c191ee79999e650997cc644562f91df06060610e62", - "sha256:a2218e78e2c6c07b1634a550095ac2a429026b2d5cbcd49a594f893f2bb8c936", - "sha256:a5a7a06cfc65e34fd0a765a7623c5ba14707a0870703888e51d3d67107589817", - "sha256:b2bca898c1dc073912d3db7fa6926cc08be9575add9e84872de2c99c688bac4e", - "sha256:b46e15c34d4e401e976d6949ad3a74d244600d5c4b88c827a3fdf18691a46359", - "sha256:b551c465a59596f3d08170bd7e1c532c7260dd90ed8135778038e13c5d48aa81", - "sha256:b555a93c15bd2c71081922be746291d776d47521a00703163e5fbe6d2a402399", - "sha256:bc338ce9f8846543d428260fa0f9a716626963148edc937d71055d01d81e1525", - "sha256:bedf84835069f51c7b026b3ca04e2e747ea8ed0a77c72006172c72d28c9f69fc", - "sha256:c3d258d78341d5d54c0c804a5b7faa66cd30ba50b2756a7161db07ce15363b8d", - "sha256:c83a6d33a9eda0af6a7470240d1af487807adc269704fe76a4972dd982d16236", - "sha256:c9a13ac46b545a7d0d50f7641eefe47d1597e7d1783a5d89e09d080e6dff44b0", - "sha256:cf517701a4a872417f4e02a136e929537743461f9ec6cdb8184d9a04f4843545", - "sha256:d2b39aa8edd9e5f56f99a2a2740a251dc58515398e9ed5a4b3e5ff2827060755", - "sha256:d3572d4c34c4e9c33d25b3da47d9570d5122f8433b9ac6519dca49c2740d23cd", - "sha256:d562a6114ddafb09c33246c6ace7effa71ca4b6a2324a47f4b09b6445ea78941", - "sha256:e1ed613ee107269f66c2df631ec0fc8efddacface85314d392a4131abe299f00", - "sha256:e3750434c83b61abb3163b49c64b04180b85b4dabb29a294513faec57f2ffdb7", - "sha256:eba98901a2eab909dbd79681190b9049acc650f6111fde1845484a4450761e98", - "sha256:f159ac795785cde4899e0afa539f4c723fb5dd336ce5605bc909d34edd00b79b", - "sha256:f8c4f3a1210ed099a99e6a710df4ff2f8069411059ffe30fa5f9467ebed1256b", - "sha256:fa13d604fcb9417ae5f2e3de676e66aa97427d888e83662ad205bed35a313176", - "sha256:fbd0ab7a9943bbddb87cbc2bf2f09317e74c77dc55b1f5657f81d04666c25269", - "sha256:ffd98a299b0a74d1b704ef0ed959efb753e656a4e0425c14e46ae4c3cbdd2919" + "sha256:0179252846be03fa97d4d5f8233d1c620ef004855f0717712ae1c558f1974a16", + "sha256:06ce08549e49ba69ccc36fc5659a3d0ff4e3a07d542b895b8a9013fcab46c2dc", + "sha256:0b90651b4cf9e158d01faa0833b073e2e37719264bcee3eac49fc3c74e7d304b", + "sha256:0d1ec043f02ca04bf21b1b32cab155ce90c651aaf5540db8eb8ad7f7e645cba8", + "sha256:0fe4e740ea94978b2b2ab308cbf9270a246bcbb44401f77cc8740348cbaeac3d", + "sha256:127de3883bdb29dbd3b21f63126bb8fa6e773b74eaef46521025a9ce390e1073", + "sha256:1550be1a5cb3be08a3fb84636eaafa9b7119b70c71b0bed48726fd1d5aa9b868", + "sha256:160eff7d1267d7b025e983ca8460e8cc67b328284967cbe29c05f3c3163711a3", + "sha256:16db2d7e12f94818cbf16d4c8938e4d8aaecee23826344addfaaa671a1527b07", + "sha256:1c6cf7709ed3e55704cc06f6e835bf43c03bc8e3cb8ff946bf69a2e0a78d9d77", + "sha256:1da46bb1eefb5a37a8fb6fd52ad5d14822d67c498d99bda8754222396164ae42", + "sha256:1df924ba82ae9e77340101c28d56cbaff2c991bd6fe8444a545d24075abb0a87", + "sha256:1e263cc718545b7f897baeac1f00299ab6fabe3e18caaacacb0edf6d5f35513c", + "sha256:228e2247de583475d4cebf6b9af5dc9918abb99d1ef5ee737155bb39fb33f3c0", + "sha256:275c1b0e942d335fccb6014d79267d1b9fa45b5ac0639c297f1e856f2f532552", + "sha256:29b9cb35b7f290db1c31fb2fdf8fc6d3730cfa4bca4b49761083307f441cac5a", + "sha256:2b4691234d31686dca133c920f94e478b548a8e7c750f28dbbc2e4333e0d3da9", + "sha256:2b961b86cd3973f5822826017cad7f5a75795168cb645c3a6b30c349094e02e3", + "sha256:2dcc3f60c445f8ce14156854a072ceb36b83807ed803d37fdea2a50e898635d6", + "sha256:2f492d2907263d6d0d52f897a68647195bc093dafed14508a8d6817973586b6b", + "sha256:310505ad305e30cb6c5f55945858cdbe0eb297fc57378f29bacceb534ac34199", + "sha256:34e87c7b3464d02af87f1059fedda5484e43b153ef519e4085fe1a03dd94801e", + "sha256:418c5ce332f74939ff60691e5293e27c206c8164ce2b8ce0d9abf013003fb7fe", + "sha256:46e86ed457c3486080a72bc837300dd200e18d08183f12b6ca63475ab64ed651", + "sha256:48681c86f2cb08348631fed788a116c89c787fdf1e6381c5febafd782f6c3b44", + "sha256:489b80812f52a8d8c7b0d10f0d956db0efed25df2821c7a934f6143f76938bd6", + "sha256:48c9f3bc90c556a854f4cab6a79c16974099ccfa3e3e150673d82d47a4bc92c9", + "sha256:49bc1bc26abf4f32e132652f4b3bfeec77d8f8f62f57652703ef127e85a3e38d", + "sha256:52bb50a4c4ca2a689fdba84ba8ecc6a4e6210f03b6af93181bb61c4ec3abaf86", + "sha256:5691340f259b8f76b45fb31b98e594d46c36d1dc8285efa7975f7f50230c9093", + "sha256:62691f1c0894b001c7cde1195c03b7801aaa794a837bd6eef24da87d1542838d", + "sha256:632a52dcaee44792d0965c17bdfe5dc0edad5b86d6a29e53d6ad4bf92dc0ff49", + "sha256:65ab1fb635476f6170b07e8e21db0424de94877e4b76b7feabfe11f9a5fc12b5", + "sha256:6a5bc3ca468bb58a2ef50441f953e1f77b9a61bd1b8c347c8223403dc9b4ac9a", + "sha256:6a76494d2c5311584f22416c5a87c1e2cb954ff9b5f0988027bc4ef2a8a67181", + "sha256:6f8dc09ae69af50bead60783180f656ad96bd33ffbf6e7a6fce900f6d53b08f1", + "sha256:703aa5e50e465be901e0e0f9d5739add15e696d8c26c53bc6fc00eb65d7b9469", + "sha256:713f67132346bdcb4c12df185c30cf04bdf4bf6ea3acbc3ace0912cab6b7cb8c", + "sha256:75d3bcfa90454dba8df12adc86b13b6d85fda97d90e708efc036c2760cc6ba44", + "sha256:7ca05cacf2e5c4a97d02a2878a24020daca21dbb8823b023b978210a75c79098", + "sha256:80bf4b459d94a0387617a1b499f314aa04d8a64b7a0747d15d425b8c8b151da0", + "sha256:84fac88278f42d61c519a6c75fb5296fd56710b05bbdcc74bdf85db409a03780", + "sha256:889a37e2acf43c377b5124166bece139b4c731b61492ab22e64d371cce0e6e80", + "sha256:8af4b582d5fc1b8465d1d2483e5e7b880cc1a4e99f6ff65c23d64d070867ac58", + "sha256:90b0fe1fcea9bd6e3084b44875e179b4adcc4057a3b81402658d0eb58c98edf8", + "sha256:93436ed550e429da007fbafb723e0769f25bae178fbb287a94cb4ccdf42d3af3", + "sha256:995c374e86fa82126c03c5b4630c4e312327ecfe27761accb25b5e1d7ab50ec8", + "sha256:9af037d3df7188ae21dc1c7624501f2f90d81be6550904e07869d8d0e6766655", + "sha256:9e080cf917b35b20c889225a13f290f2716748362f6071b859b60b8847a6aa43", + "sha256:a2ec98e31e1844eac860e70d9247db9d75440fc8f5f679c37d01914568d18721", + "sha256:abd85de513eb83f5ec153a802348e7a5baa4588b818043848247e3e8986094e8", + "sha256:ac1be85fe43b4bf9a251978ce5c3bb30e1ada9784290441f5423a28633a958a7", + "sha256:be37f9b1f8934cd9e7eccfcb5612af9fb728fecbe16248b082b709a9d1b348bf", + "sha256:bfcae6aecd9e0cb425f5145afee871465b98b75862e038d42fe91fd753ddd780", + "sha256:c05b021f7b5aa333124f2a64d56e4cb9963b6efdf44e8d819152237bbd93ba15", + "sha256:c14a07bdb475eb696f85c715dbd0f037918ccbb5248290448488a0b4ef201aad", + "sha256:c18f3502ad0737813c7dad70e3e1cc966cc147fbaeef47a09463bbffe70b0a00", + "sha256:c2e9fe695ff151b42ab06501820f40d01310fbd58ba24da8923ace79cf6d702d", + "sha256:c68be72b1666d93b266714f2d4092d78dc53bd11cf91ed5a3c16527587a52e29", + "sha256:ca94c85911601b097d53caeeec30201736ad69a93f30d15672b967558df02885", + "sha256:cf745cbfad6389c0e331786e5fe9ae3f06e9d9c2ce2432378e1267954793975c", + "sha256:d9dd2b89a16cf7ab9c1170b5863e68de6bf83db51544875b25a5f05a7269e678", + "sha256:ddff3f8b9fa24a60527c137c852d0d9a7da2a02cf2151650029fdc97c852c974", + "sha256:e153a690b7255c5ced17895394b4f109d5dcc2a4f35cb809374da50f0e5c456a", + "sha256:ea2b51c5f38bad812da2ec0cd7eec09d25f521a8b6b6843cbccedd9a1d8a5c15", + "sha256:ef9ec8068cf23458dbf36a08e0c16f0a2df04b42a8827619646637be1769300a", + "sha256:f280b02827adc9d87f764972fbeb701cf5611f80b619c20568e1982a277d6146", + "sha256:f3ff7da165c99a5412fe5dd2304dd2dbaaaa5da718aad942dcb3a178eaa70c56", + "sha256:f58d3bfafecf3d81c15d99fc0ecf4319e80ac712c77cf0ce2661c8cf8bf84066", + "sha256:f79fe7993e230a12172ce7d7c7db061f046f672f2b946431c81aff8f60b2758b", + "sha256:ffe709b1d0bc2e9921257569675674cafb3a5f8af689ab9f3f2b3f88775b960f" ], - "version": "==1.0.0" + "markers": "python_version >= '3.9'", + "version": "==1.0.3" }, "wcwidth": { "hashes": [ @@ -4314,6 +4330,7 @@ "sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6", "sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89" ], + "markers": "python_version >= '3.9'", "version": "==14.1" }, "whitenoise": { @@ -4660,18 +4677,17 @@ }, "attrs": { "hashes": [ - "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346", - "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2" + "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff", + "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308" ], - "markers": "python_version >= '3.7'", - "version": "==24.2.0" + "markers": "python_version >= '3.8'", + "version": "==24.3.0" }, "babel": { "hashes": [ "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316" ], - "index": "pypi", "markers": "python_version >= '3.8'", "version": "==2.16.0" }, @@ -4714,23 +4730,22 @@ }, "capy-core": { "extras": [ - "django" + "pytest" ], "hashes": [ - "sha256:bd4a543ea060a938ee3194777d73b5596cee476840646d6403cb2e13c0618e0e", - "sha256:de01f4d074934c48ff4101051c3bc1905d46f99129851206f176d89e7df6a113" + "sha256:006d641ff97a5a514b0b16776fd24fad2ed4086407b10ae146061fb0ac4b980f", + "sha256:afae38000931f976644eab8c679fb1e9e815d57e5452f225135d5e3b1285615a" ], "markers": "python_version >= '3.11'", - "version": "==1.2.0" + "version": "==1.3.1" }, "certifi": { "hashes": [ - "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", - "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9" + "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", + "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" ], - "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==2024.8.30" + "version": "==2024.12.14" }, "cfgv": { "hashes": [ @@ -4742,122 +4757,109 @@ }, "charset-normalizer": { "hashes": [ - "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", - "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", - "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", - "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", - "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", - "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", - "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", - "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", - "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", - "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", - "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", - "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", - "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", - "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", - "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", - "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", - "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", - "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", - "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", - "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", - "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", - "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", - "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", - "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", - "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", - "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", - "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", - "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", - "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", - "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", - "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", - "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", - "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", - "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", - "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", - "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", - "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", - "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", - "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", - "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", - "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", - "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", - "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", - "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", - "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", - "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", - "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", - "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", - "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", - "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", - "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", - "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", - "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", - "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", - "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", - "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", - "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", - "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", - "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", - "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", - "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", - "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", - "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", - "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", - "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", - "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", - "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", - "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", - "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", - "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", - "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", - "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", - "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", - "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", - "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", - "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", - "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", - "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", - "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", - "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", - "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", - "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", - "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", - "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", - "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", - "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", - "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", - "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", - "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", - "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", - "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", - "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", - "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", - "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", - "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", - "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", - "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", - "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", - "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", - "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", - "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", - "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", - "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", - "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", - "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.4.0" + "markers": "python_version >= '3.7'", + "version": "==3.4.1" }, "click": { "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" ], "markers": "python_version >= '3.7'", - "version": "==8.1.7" + "version": "==8.1.8" }, "colorama": { "hashes": [ @@ -4872,81 +4874,80 @@ "toml" ], "hashes": [ - "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5", - "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf", - "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb", - "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638", - "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4", - "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc", - "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed", - "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a", - "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d", - "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649", - "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c", - "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b", - "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4", - "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443", - "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83", - "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee", - "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e", - "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e", - "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3", - "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0", - "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb", - "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076", - "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb", - "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787", - "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1", - "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e", - "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce", - "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801", - "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764", - "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365", - "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf", - "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6", - "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71", - "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002", - "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4", - "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c", - "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8", - "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4", - "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146", - "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc", - "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea", - "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4", - "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad", - "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28", - "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451", - "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50", - "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779", - "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63", - "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e", - "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc", - "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022", - "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d", - "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94", - "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b", - "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d", - "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331", - "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a", - "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0", - "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee", - "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92", - "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a", - "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9" + "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9", + "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f", + "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273", + "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994", + "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e", + "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50", + "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e", + "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e", + "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c", + "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853", + "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8", + "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8", + "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe", + "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165", + "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb", + "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59", + "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609", + "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18", + "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098", + "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd", + "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3", + "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43", + "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d", + "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359", + "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90", + "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78", + "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a", + "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99", + "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988", + "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2", + "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0", + "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694", + "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377", + "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d", + "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23", + "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312", + "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf", + "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6", + "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b", + "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c", + "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690", + "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a", + "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f", + "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4", + "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25", + "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd", + "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852", + "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0", + "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244", + "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315", + "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078", + "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0", + "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27", + "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132", + "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5", + "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247", + "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022", + "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b", + "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3", + "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18", + "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5", + "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.6.8" + "version": "==7.6.10" }, "coveralls": { "hashes": [ - "sha256:7a6b1fa9848332c7b2221afb20f3df90272ac0167060f41b5fe90429b30b1809", - "sha256:7b2a0a2bcef94f295e3cf28dcc55ca40b71c77d1c2446b538e85f0f7bc21aa69" + "sha256:a8de28a5f04e418c7142b8ce6588c3a64245b433c458a5871cb043383667e4f2", + "sha256:c5e50b73b980d89308816b597e3e7bdeb0adedf831585d5c4ac967d576f8925d" ], "index": "pypi", - "markers": "python_version < '3.13' and python_version >= '3.8'", - "version": "==4.0.1" + "version": "==1.8.0" }, "distlib": { "hashes": [ @@ -4957,12 +4958,11 @@ }, "django": { "hashes": [ - "sha256:8b38a9a12da3ae00cb0ba72da985ec4b14de6345046b1e174b1fd7254398f818", - "sha256:c0fa0e619c39325a169208caef234f90baa925227032ad3f44842ba14d75234a" + "sha256:236e023f021f5ce7dee5779de7b286565fdea5f4ab86bae5338e3f7b69896cf0", + "sha256:de450c09e91879fa5a307f696e57c851955c910a438a35e6b4c895e86bedc82a" ], - "index": "pypi", "markers": "python_version >= '3.10'", - "version": "==5.1.3" + "version": "==5.1.4" }, "django-stubs": { "hashes": [ @@ -4983,12 +4983,12 @@ }, "djangorestframework-stubs": { "hashes": [ - "sha256:34539871895d66d382b6ae3655d9f95c1de7733cf50bc29097638d367ed3117d", - "sha256:79dc9018f5d5fa420f9981eec9f1e820ecbd04719791f144419cdc6c5b8e29bd" + "sha256:0e72f1e8507bdb2acd99b304520494ea5d45bccba51a4877140cb65fd461adf0", + "sha256:3df129845acac6c1b097bc7e5b360d53e32a02029d60b4f972dfbd3e2508f236" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==3.15.1" + "markers": "python_version >= '3.9'", + "version": "==3.15.2" }, "docopt": { "hashes": [ @@ -5023,12 +5023,12 @@ }, "flake8-bugbear": { "hashes": [ - "sha256:435b531c72b27f8eff8d990419697956b9fd25c6463c5ba98b3991591de439db", - "sha256:cccf786ccf9b2e1052b1ecfa80fb8f80832d0880425bcbd4cd45d3c8128c2683" + "sha256:1b6967436f65ca22a42e5373aaa6f2d87966ade9aa38d4baf2a1be550767545e", + "sha256:46273cef0a6b6ff48ca2d69e472f41420a42a46e24b2a8972e4f0d6733d12a64" ], "index": "pypi", "markers": "python_full_version >= '3.8.1'", - "version": "==24.10.31" + "version": "==24.12.12" }, "flake8-docstrings": { "hashes": [ @@ -5080,7 +5080,6 @@ "sha256:f43f47e702d0c8e1b8b997c00f1601486f9f976f84ab704f8f11536e3fa144c9", "sha256:ff96c5739834c9a594db0e12bf59cb3fa0e5102fc7b893972118a3166733d61c" ], - "index": "pypi", "markers": "python_version >= '3.9'", "version": "==24.11.1" }, @@ -5096,20 +5095,19 @@ "grpc" ], "hashes": [ - "sha256:2ceb087315e6af43f256704b871d99326b1f12a9d6ce99beaedec99ba26a0ace", - "sha256:c20100d4c4c41070cf365f1d8ddf5365915291b5eb11b83829fbd1c999b5122f" + "sha256:10d82ac0fca69c82a25b3efdeefccf6f28e02ebb97925a8cce8edbfe379929d9", + "sha256:e255640547a597a4da010876d333208ddac417d60add22b6851a0c66a831fcaf" ], "markers": "python_version >= '3.7'", - "version": "==2.23.0" + "version": "==2.24.0" }, "google-api-python-client": { "hashes": [ - "sha256:1b420062e03bfcaa1c79e2e00a612d29a6a934151ceb3d272fe150a656dc8f17", - "sha256:a521bbbb2ec0ba9d6f307cdd64ed6e21eeac372d1bd7493a4ab5022941f784ad" + "sha256:6352185c505e1f311f11b0b96c1b636dcb0fec82cd04b80ac5a671ac4dcab339", + "sha256:b809c111ded61716a9c1c7936e6899053f13bae3defcdfda904bd2ca68065b9c" ], - "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.154.0" + "version": "==2.156.0" }, "google-api-python-client-stubs": { "hashes": [ @@ -5122,20 +5120,20 @@ }, "google-apps-meet": { "hashes": [ - "sha256:183fae13a446d29dde22417a346f315c85219dd6cb81266bc67e105c2206a86e", - "sha256:b555af035703e321a0bc8cda55a60e99783c759e29e9cb8ecdd4615b5ec22d0f" + "sha256:a9c811b7bac7568dea5622ba44005f6bca9ae5d928a68b6f22cd9b8cbc354f74", + "sha256:bfb91f816d679278c80fc079be4cbe3b2f736106697b709a9398d080959730d0" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==0.1.10" + "version": "==0.1.11" }, "google-auth": { "hashes": [ - "sha256:51a15d47028b66fd36e5c64a82d2d57480075bccc7da37cde257fc94177a61fb", - "sha256:545e9618f2df0bcbb7dcbc45a546485b1212624716975a1ea5ae8149ce769ab1" + "sha256:0054623abf1f9c83492c63d3f47e77f0a544caa3d40b2d98e099a611c2dd5d00", + "sha256:42664f18290a6be591be5329a96fe30184be1a1badb7292a7f686a9659de9ca0" ], "markers": "python_version >= '3.7'", - "version": "==2.36.0" + "version": "==2.37.0" }, "google-auth-httplib2": { "hashes": [ @@ -5238,16 +5236,16 @@ "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79", "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f" ], - "markers": "python_version >= '3' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))", + "markers": "python_version >= '3.7'", "version": "==3.1.1" }, "griffe": { "hashes": [ - "sha256:72964f93e08c553257706d6cd2c42d1c172213feb48b2be386f243380b405d4b", - "sha256:ad6a7980f8c424c9102160aafa3bcdf799df0e75f7829d75af9ee5aef656f860" + "sha256:073e78ad3e10c8378c2f798bd4ef87b92d8411e9916e157fd366a17cc4fd4e52", + "sha256:ed33af890586a5bebc842fcb919fc694b3dc1bc55b7d9e0228de41ce566b4a1d" ], "markers": "python_version >= '3.9'", - "version": "==1.5.1" + "version": "==1.5.4" }, "grpcio": { "hashes": [ @@ -5307,6 +5305,7 @@ "sha256:eeb38ff04ab6e5756a2aef6ad8d94e89bb4a51ef96e20f45c44ba190fa0bcaad", "sha256:f8261fa2a5f679abeb2a0a93ad056d765cdca1c47745eda3f2d87f874ff4b8c9" ], + "markers": "python_version >= '3.8'", "version": "==1.68.1" }, "grpcio-status": { @@ -5314,6 +5313,7 @@ "sha256:66f3d8847f665acfd56221333d66f7ad8927903d87242a482996bdb45e8d28fd", "sha256:e1378d036c81a1610d7b4c7a146cd663dd13fcc915cf4d7d053929dba5bbb6e1" ], + "markers": "python_version >= '3.8'", "version": "==1.68.1" }, "httplib2": { @@ -5326,11 +5326,11 @@ }, "identify": { "hashes": [ - "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02", - "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd" + "sha256:285a7d27e397652e8cafe537a6cc97dd470a970f48fb2e9d979aa38eae5513ac", + "sha256:993b0f01b97e0568c179bb9196391ff391bfb88a99099dbf5ce392b68f42d0af" ], "markers": "python_version >= '3.9'", - "version": "==2.6.3" + "version": "==2.6.4" }, "idna": { "hashes": [ @@ -5350,11 +5350,11 @@ }, "jinja2": { "hashes": [ - "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", - "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d" + "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", + "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb" ], "markers": "python_version >= '3.7'", - "version": "==3.1.4" + "version": "==3.1.5" }, "langcodes": { "hashes": [ @@ -5458,7 +5458,6 @@ "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803" ], - "index": "pypi", "markers": "python_version >= '3.8'", "version": "==3.7" }, @@ -5573,12 +5572,12 @@ }, "mkdocs-material": { "hashes": [ - "sha256:53fb9c9624e7865da6ec807d116cd7be24b3cb36ab31b1d1d1a9af58c56009a2", - "sha256:fc3b7a8e00ad896660bd3a5cc12ca0cb28bdc2bcbe2a946b5714c23ac91b0ede" + "sha256:3671bb282b4f53a1c72e08adbe04d2481a98f85fed392530051f80ff94a9621d", + "sha256:c3c2d8176b18198435d3a3e119011922f3e11424074645c24019c2dcf08a360e" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==9.5.47" + "version": "==9.5.49" }, "mkdocs-material-extensions": { "hashes": [ @@ -5599,51 +5598,57 @@ }, "mkdocstrings-python": { "hashes": [ - "sha256:7a1760941c0b52a2cd87b960a9e21112ffe52e7df9d0b9583d04d47ed2e186f3", - "sha256:7f7d40d6db3cb1f5d19dbcd80e3efe4d0ba32b073272c0c0de9de2e604eda62a" + "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c", + "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==1.12.2" + "version": "==1.13.0" }, "mypy": { "hashes": [ - "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc", - "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e", - "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f", - "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74", - "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a", - "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2", - "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b", - "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73", - "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e", - "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d", - "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d", - "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6", - "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca", - "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d", - "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5", - "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62", - "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a", - "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc", - "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7", - "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb", - "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7", - "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732", - "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80", - "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a", - "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc", - "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2", - "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0", - "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24", - "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7", - "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b", - "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372", - "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8" + "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c", + "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd", + "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f", + "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0", + "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9", + "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b", + "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14", + "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35", + "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319", + "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc", + "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb", + "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb", + "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e", + "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60", + "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31", + "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f", + "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6", + "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107", + "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11", + "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a", + "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837", + "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6", + "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b", + "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d", + "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255", + "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae", + "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1", + "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8", + "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b", + "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac", + "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9", + "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9", + "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1", + "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34", + "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427", + "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1", + "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c", + "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.13.0" + "version": "==1.14.1" }, "mypy-extensions": { "hashes": [ @@ -5663,65 +5668,64 @@ }, "numpy": { "hashes": [ - "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe", - "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0", - "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48", - "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a", - "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564", - "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958", - "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17", - "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0", - "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee", - "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b", - "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4", - "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4", - "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6", - "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4", - "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d", - "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f", - "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f", - "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f", - "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56", - "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9", - "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd", - "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23", - "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed", - "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a", - "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098", - "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1", - "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512", - "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f", - "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09", - "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f", - "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc", - "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8", - "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0", - "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761", - "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef", - "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5", - "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e", - "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b", - "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d", - "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43", - "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c", - "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41", - "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff", - "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408", - "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2", - "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9", - "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57", - "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb", - "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9", - "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3", - "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a", - "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0", - "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e", - "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598", - "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4" + "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2", + "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5", + "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60", + "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71", + "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631", + "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8", + "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2", + "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16", + "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa", + "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591", + "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964", + "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821", + "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484", + "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957", + "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800", + "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918", + "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95", + "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0", + "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e", + "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d", + "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73", + "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59", + "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51", + "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355", + "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348", + "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e", + "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440", + "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675", + "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84", + "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046", + "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab", + "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712", + "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308", + "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315", + "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3", + "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008", + "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5", + "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2", + "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e", + "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7", + "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf", + "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab", + "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd", + "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf", + "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8", + "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb", + "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268", + "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d", + "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780", + "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716", + "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e", + "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528", + "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af", + "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7", + "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51" ], - "index": "pypi", "markers": "python_version >= '3.10'", - "version": "==2.1.3" + "version": "==2.2.1" }, "oauthlib": { "hashes": [ @@ -5841,7 +5845,6 @@ "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2", "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9" ], - "index": "pypi", "markers": "python_version >= '3.9'", "version": "==11.0.0" }, @@ -5880,20 +5883,20 @@ }, "protobuf": { "hashes": [ - "sha256:0cd67a1e5c2d88930aa767f702773b2d054e29957432d7c6a18f8be02a07719a", - "sha256:0d10091d6d03537c3f902279fcf11e95372bdd36a79556311da0487455791b20", - "sha256:17d128eebbd5d8aee80300aed7a43a48a25170af3337f6f1333d1fac2c6839ac", - "sha256:34a90cf30c908f47f40ebea7811f743d360e202b6f10d40c02529ebd84afc069", - "sha256:445a0c02483869ed8513a585d80020d012c6dc60075f96fa0563a724987b1001", - "sha256:6c3009e22717c6cc9e6594bb11ef9f15f669b19957ad4087214d69e08a213368", - "sha256:85286a47caf63b34fa92fdc1fd98b649a8895db595cfa746c5286eeae890a0b1", - "sha256:88c4af76a73183e21061881360240c0cdd3c39d263b4e8fb570aaf83348d608f", - "sha256:c931c61d0cc143a2e756b1e7f8197a508de5365efd40f83c907a9febf36e6b43", - "sha256:e467f81fdd12ded9655cea3e9b83dc319d93b394ce810b556fb0f421d8613e86", - "sha256:ea7fb379b257911c8c020688d455e8f74efd2f734b72dc1ea4b4d7e9fd1326f2" + "sha256:13d6d617a2a9e0e82a88113d7191a1baa1e42c2cc6f5f1398d3b054c8e7e714a", + "sha256:2d2e674c58a06311c8e99e74be43e7f3a8d1e2b2fdf845eaa347fbd866f23355", + "sha256:36000f97ea1e76e8398a3f02936aac2a5d2b111aae9920ec1b769fc4a222c4d9", + "sha256:494229ecd8c9009dd71eda5fd57528395d1eacdf307dbece6c12ad0dd09e912e", + "sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9", + "sha256:a0c53d78383c851bfa97eb42e3703aefdc96d2036a41482ffd55dc5f529466eb", + "sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e", + "sha256:b6b0d416bbbb9d4fbf9d0561dbfc4e324fd522f61f7af0fe0f282ab67b22477e", + "sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851", + "sha256:e621a98c0201a7c8afe89d9646859859be97cb22b8bf1d8eacfd90d5bda2eb19", + "sha256:fde4554c0e578a5a0bcc9a276339594848d1e89f9ea47b4427c80e5d72f90181" ], "markers": "python_version >= '3.8'", - "version": "==5.29.0" + "version": "==5.29.2" }, "pyasn1": { "hashes": [ @@ -5945,45 +5948,46 @@ }, "pymdown-extensions": { "hashes": [ - "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77", - "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7" + "sha256:80bc33d715eec68e683e04298946d47d78c7739e79d808203df278ee8ef89428", + "sha256:e0b351494dc0d8d14a1f52b39b1499a00ef1566b4ba23dc74f1eba75c736f5dd" ], "markers": "python_version >= '3.8'", - "version": "==10.12" + "version": "==10.13" }, "pyparsing": { "hashes": [ "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c" ], - "markers": "python_version > '3.0'", + "markers": "python_version >= '3.9'", "version": "==3.2.0" }, "pyright": { "hashes": [ - "sha256:41e9620bba9254406dc1f621a88ceab5a88af4c826feb4f614d95691ed243a60", - "sha256:716bf8cc174ab8b4dcf6828c3298cac05c5ed775dda9910106a5dcfe4c7fe220" + "sha256:54fa186f8b3e8a55a44ebfa842636635688670c6896dcf6cf4a7fc75062f4d15", + "sha256:66b2d42cdf5c3cbab05f2f4b76e8bec8aa78e679bfa0b6ad7b923d9e027cadb2" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.1.389" + "version": "==1.1.391" }, "pytest": { "hashes": [ "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==8.3.4" }, "pytest-asyncio": { "hashes": [ - "sha256:a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b", - "sha256:d081d828e576d85f875399194281e92bf8a68d60d72d1a2faf2feddb6c46b276" + "sha256:8c0610303c9e0442a5db8604505fc0f545456ba1528824842b37b4a626cbf609", + "sha256:db5432d18eac6b7e28b46dcd9b69921b55c3b1086e85febfe04e70b18d9e81b3" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==0.24.0" + "markers": "python_version >= '3.9'", + "version": "==0.25.0" }, "pytest-cov": { "hashes": [ @@ -6025,7 +6029,6 @@ "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725" ], - "index": "pypi", "version": "==2024.2" }, "pyyaml": { @@ -6084,7 +6087,6 @@ "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" ], - "index": "pypi", "markers": "python_version >= '3.8'", "version": "==6.0.2" }, @@ -6098,8 +6100,100 @@ }, "regex": { "hashes": [ + "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c", + "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60", + "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d", + "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d", + "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67", + "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773", + "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", + "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef", + "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad", + "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe", + "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", + "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114", + "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", + "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39", + "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e", + "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3", + "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", + "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d", + "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e", + "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", + "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7", + "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f", + "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0", + "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54", + "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b", + "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", + "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd", + "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57", + "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34", + "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", + "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f", + "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b", + "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519", + "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", + "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a", + "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638", + "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b", + "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839", + "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", + "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf", + "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", + "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0", + "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f", + "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95", + "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4", "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e", - "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519" + "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13", + "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", + "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2", + "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008", + "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9", + "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc", + "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48", + "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20", + "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89", + "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e", + "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf", + "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b", + "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd", + "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", + "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29", + "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b", + "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3", + "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45", + "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3", + "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983", + "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e", + "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", + "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4", + "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", + "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467", + "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577", + "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001", + "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", + "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55", + "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9", + "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf", + "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6", + "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e", + "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde", + "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62", + "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df", + "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51", + "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5", + "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86", + "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2", + "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2", + "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0", + "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c", + "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f", + "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", + "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2", + "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9", + "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91" ], "markers": "python_version >= '3.8'", "version": "==2024.11.6" @@ -6109,7 +6203,6 @@ "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" ], - "index": "pypi", "markers": "python_version >= '3.8'", "version": "==2.32.3" }, @@ -6139,11 +6232,11 @@ }, "six": { "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.16.0" + "version": "==1.17.0" }, "snowballstemmer": { "hashes": [ @@ -6154,27 +6247,27 @@ }, "sqlparse": { "hashes": [ - "sha256:9e37b35e16d1cc652a2545f0997c1deb23ea28fa1f3eefe609eee3063c3b105f", - "sha256:e99bc85c78160918c3e1d9230834ab8d80fc06c59d03f8db2618f65f65dda55e" + "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272", + "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca" ], "markers": "python_version >= '3.8'", - "version": "==0.5.2" + "version": "==0.5.3" }, "types-httplib2": { "hashes": [ - "sha256:1eda99fea18ec8a1dc1a725ead35b889d0836fec1b11ae6f1fe05440724c1d15", - "sha256:8cd706fc81f0da32789a4373a28df6f39e9d5657d1281db4d2fd22ee29e83661" + "sha256:42b67f16a6b0abb337a1fcea628dcd335e1e75f32cd198a657f41a6f4d507508", + "sha256:b15aed53ae5430b87205b6ac270d6332cb5e28e27151e2ac4848fe417827eb54" ], "markers": "python_version >= '3.8'", - "version": "==0.22.0.20240310" + "version": "==0.22.0.20241221" }, "types-pyyaml": { "hashes": [ - "sha256:392b267f1c0fe6022952462bf5d6523f31e37f6cea49b14cee7ad634b6301570", - "sha256:d1405a86f9576682234ef83bcb4e6fff7c9305c8b1fbad5e0bcd4f7dbdc9c587" + "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c", + "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6" ], "markers": "python_version >= '3.8'", - "version": "==6.0.12.20240917" + "version": "==6.0.12.20241230" }, "types-requests": { "hashes": [ @@ -6189,7 +6282,7 @@ "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version >= '3.7'", + "markers": "python_version >= '3.8'", "version": "==4.12.2" }, "uritemplate": { @@ -6197,17 +6290,16 @@ "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0", "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e" ], - "index": "pypi", "markers": "python_version >= '3.6'", "version": "==4.1.1" }, "urllib3": { "hashes": [ - "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", - "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.8'", - "version": "==2.2.3" + "markers": "python_version >= '3.9'", + "version": "==2.3.0" }, "virtualenv": { "hashes": [ diff --git a/breathecode/activity/management/commands/upload_activities.py b/breathecode/activity/management/commands/upload_activities.py index db037716f..961de58c4 100644 --- a/breathecode/activity/management/commands/upload_activities.py +++ b/breathecode/activity/management/commands/upload_activities.py @@ -1,10 +1,12 @@ import os + +from django.core.cache import cache from django.core.management.base import BaseCommand from django.utils import timezone -from django.core.cache import cache + from breathecode.activity import tasks -IS_DJANGO_REDIS = hasattr(cache, "delete_pattern") +IS_DJANGO_REDIS = hasattr(cache, "fake") is False def db_backup_bucket(): diff --git a/breathecode/activity/tasks.py b/breathecode/activity/tasks.py index 9349f5378..b38d8e179 100644 --- a/breathecode/activity/tasks.py +++ b/breathecode/activity/tasks.py @@ -8,6 +8,7 @@ from typing import Optional import zstandard +from capyc.core.managers import feature from celery import shared_task from django.core.cache import cache from django.utils import timezone @@ -24,7 +25,6 @@ from breathecode.utils import NDB from breathecode.utils.decorators import TaskPriority from breathecode.utils.redis import Lock -from capyc.core.managers import feature from .models import StudentActivity @@ -38,7 +38,7 @@ def get_activity_sampling_rate(): return 60 -IS_DJANGO_REDIS = hasattr(cache, "delete_pattern") +IS_DJANGO_REDIS = hasattr(cache, "fake") is False API_URL = os.getenv("API_URL", "") diff --git a/breathecode/authenticate/migrations/0062_delete_app.py b/breathecode/authenticate/migrations/0062_delete_app.py new file mode 100644 index 000000000..5b4a8aecc --- /dev/null +++ b/breathecode/authenticate/migrations/0062_delete_app.py @@ -0,0 +1,16 @@ +# Generated by Django 5.1.4 on 2024-12-28 22:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("authenticate", "0061_googlewebhook_type"), + ] + + operations = [ + migrations.DeleteModel( + name="App", + ), + ] diff --git a/breathecode/authenticate/models.py b/breathecode/authenticate/models.py index 106025834..594831a04 100644 --- a/breathecode/authenticate/models.py +++ b/breathecode/authenticate/models.py @@ -281,9 +281,7 @@ def __init__(self, *args, **kwargs): regex=r"^\+?1?\d{9,15}$", message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.", ) - phone = models.CharField( - validators=[phone_regex], max_length=17, blank=True, default="" - ) # validators should be a list + phone = models.CharField(validators=[phone_regex], max_length=17, blank=True, default="") status = models.CharField(max_length=15, choices=PROFILE_ACADEMY_STATUS, default=INVITED, db_index=True) @@ -698,19 +696,6 @@ class GitpodUser(models.Model): ) -class App(models.Model): - """ - The only reason for keeping this model is because this model is really indestructible. - - Remove it as soon as Django team let us do it. - """ - - def __init__(self, *args, **kwargs): - raise DeprecationWarning("authenticate.App was deprecated, use linked_services.App instead") - - name = models.CharField(max_length=25, unique=True, help_text="Descriptive and unique name of the app") - - class GoogleWebhook(models.Model): class Status(models.TextChoices): PENDING = ("PENDING", "Pending") diff --git a/breathecode/authenticate/serializers.py b/breathecode/authenticate/serializers.py index 18237b545..a6d567868 100644 --- a/breathecode/authenticate/serializers.py +++ b/breathecode/authenticate/serializers.py @@ -4,6 +4,7 @@ import random import urllib.parse +import capyc.django.serializer as capy from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from django.contrib.auth.models import Permission, User @@ -14,7 +15,7 @@ from task_manager.django.actions import schedule_task import breathecode.notify.actions as notify_actions -from breathecode.admissions.models import Academy, Cohort, CohortUser +from breathecode.admissions.models import Academy, City, Cohort, CohortUser, Country from breathecode.authenticate.actions import get_app_url, get_user_settings from breathecode.authenticate.tasks import verify_user_invite_email from breathecode.events.models import Event @@ -37,6 +38,98 @@ logger = logging.getLogger(__name__) +class CapyAppUserSerializer(capy.Serializer): + model = User + path = "/v1/auth/app/user" + fields = { + "default": ( + "id", + "username", + "first_name", + "last_name", + "email", + ), + "timestamps": ( + "date_joined", + "last_login", + ), + } + filters = ( + "id", + "username", + "first_name", + "last_name", + "email", + "date_joined", + "last_login", + ) + + +class CapyAppCountrySerializer(capy.Serializer): + model = Country + path = "/v1/auth/app/country" + fields = { + "default": ("code", "name"), + } + filters = ( + "code", + "name", + ) + + +class CapyAppCitySerializer(capy.Serializer): + model = City + path = "/v1/auth/app/city" + fields = {"default": ("id", "name", "country"), "country": ("country[]",)} + filters = ("name",) + country = CapyAppCountrySerializer() + + +class CapyAppAcademySerializer(capy.Serializer): + model = Academy + path = "/v1/auth/app/academy" + fields = { + "default": ("id", "name", "slug", "legal_name", "status"), + "meta": ("white_labeled", "available_as_saas", "is_hidden_on_prework", "timezone"), + "marketing": ("active_campaign_slug", "logistical_information"), + "urls": ("logo_url", "icon_url", "website_url", "white_label_url"), + "emails": ("marketing_email", "feedback_email"), + "social": ("linkedin_url", "youtube_url"), + "location": ("city[]", "country[]", "latitude", "longitude", "zip_code", "street_address"), + "timestamps": ("created_at", "updated_at"), + } + filters = ("name", "slug", "legal_name", "status", "created_at", "available_as_saas") + country = CapyAppCountrySerializer() + city = CapyAppCitySerializer() + + +class CapyAppProfileAcademySerializer(capy.Serializer): + model = ProfileAcademy + path = "/v1/auth/app/student" + fields = { + "default": ( + "id", + "first_name", + "last_name", + "status", + "email", + "phone", + "user", + "academy", + ), + "address": ("address",), + "academy": ("academy[]",), + "user": ("user[]",), + "timestamps": ( + "created_at", + "updated_at", + ), + } + filters = ("status", "email", "id") + academy = CapyAppAcademySerializer() + user = CapyAppUserSerializer() + + class GetSmallCohortSerializer(serpy.Serializer): """The serializer schema definition.""" diff --git a/breathecode/authenticate/tests/serializers/__init__.py b/breathecode/authenticate/tests/serializers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/breathecode/authenticate/tests/serializers/tests_capy_app_academy_serializer.py b/breathecode/authenticate/tests/serializers/tests_capy_app_academy_serializer.py new file mode 100644 index 000000000..61ef72c8f --- /dev/null +++ b/breathecode/authenticate/tests/serializers/tests_capy_app_academy_serializer.py @@ -0,0 +1,58 @@ +import capyc.django.serializer as capy + +from breathecode.authenticate.models import Academy +from breathecode.authenticate.serializers import CapyAppAcademySerializer + + +def test_is_capy_serializer(): + serializer = CapyAppAcademySerializer() + assert isinstance(serializer, capy.Serializer) + + +def test_fields(): + assert CapyAppAcademySerializer.fields == { + "default": ("id", "name", "slug", "legal_name", "status"), + "meta": ("white_labeled", "available_as_saas", "is_hidden_on_prework", "timezone"), + "marketing": ("active_campaign_slug", "logistical_information"), + "urls": ("logo_url", "icon_url", "website_url", "white_label_url"), + "emails": ("marketing_email", "feedback_email"), + "social": ("linkedin_url", "youtube_url"), + "location": ("city[]", "country[]", "latitude", "longitude", "zip_code", "street_address"), + "timestamps": ("created_at", "updated_at"), + } + + +def test_filters(): + assert CapyAppAcademySerializer.filters == ( + "name", + "slug", + "legal_name", + "status", + "created_at", + "available_as_saas", + ) + + +def test_path(): + assert CapyAppAcademySerializer.path == "/v1/auth/app/academy" + + +def test_model(): + assert CapyAppAcademySerializer.model == Academy + + +def test_references(): + serializer = CapyAppAcademySerializer() + + result = {} + for field in dir(serializer): + if field.startswith("_"): + continue + + if isinstance(x := getattr(serializer, field), capy.Serializer): + result[field] = x.__module__ + "." + x.__class__.__name__ + + assert result == { + "city": "breathecode.authenticate.serializers.CapyAppCitySerializer", + "country": "breathecode.authenticate.serializers.CapyAppCountrySerializer", + } diff --git a/breathecode/authenticate/tests/serializers/tests_capy_app_city_serializer.py b/breathecode/authenticate/tests/serializers/tests_capy_app_city_serializer.py new file mode 100644 index 000000000..748bfed61 --- /dev/null +++ b/breathecode/authenticate/tests/serializers/tests_capy_app_city_serializer.py @@ -0,0 +1,42 @@ +import capyc.django.serializer as capy + +from breathecode.admissions.models import City +from breathecode.authenticate.serializers import CapyAppCitySerializer, CapyAppCountrySerializer + + +def test_is_capy_serializer(): + serializer = CapyAppCitySerializer() + assert isinstance(serializer, capy.Serializer) + + +def test_fields(): + assert CapyAppCitySerializer.fields == { + "default": ("id", "name", "country"), + "country": ("country[]",), + } + + +def test_filters(): + assert CapyAppCitySerializer.filters == ("name",) + + +def test_path(): + assert CapyAppCitySerializer.path == "/v1/auth/app/city" + + +def test_model(): + assert CapyAppCitySerializer.model == City + + +def test_references(): + serializer = CapyAppCitySerializer() + + result = {} + for field in dir(serializer): + if field.startswith("_"): + continue + + if isinstance(x := getattr(serializer, field), capy.Serializer): + result[field] = x.__module__ + "." + x.__class__.__name__ + + assert result == {"country": "breathecode.authenticate.serializers.CapyAppCountrySerializer"} diff --git a/breathecode/authenticate/tests/serializers/tests_capy_app_country_serializer.py b/breathecode/authenticate/tests/serializers/tests_capy_app_country_serializer.py new file mode 100644 index 000000000..99520eecf --- /dev/null +++ b/breathecode/authenticate/tests/serializers/tests_capy_app_country_serializer.py @@ -0,0 +1,44 @@ +import capyc.django.serializer as capy + +from breathecode.admissions.models import Country +from breathecode.authenticate.serializers import CapyAppCountrySerializer + + +def test_is_capy_serializer(): + serializer = CapyAppCountrySerializer() + assert isinstance(serializer, capy.Serializer) + + +def test_fields(): + assert CapyAppCountrySerializer.fields == { + "default": ("code", "name"), + } + + +def test_filters(): + assert CapyAppCountrySerializer.filters == ( + "code", + "name", + ) + + +def test_path(): + assert CapyAppCountrySerializer.path == "/v1/auth/app/country" + + +def test_model(): + assert CapyAppCountrySerializer.model == Country + + +def test_references(): + serializer = CapyAppCountrySerializer() + + result = {} + for field in dir(serializer): + if field.startswith("_"): + continue + + if isinstance(x := getattr(serializer, field), capy.Serializer): + result[field] = x.__module__ + "." + x.__class__.__name__ + + assert result == {} diff --git a/breathecode/authenticate/tests/serializers/tests_capy_app_profile_academy_serializer.py b/breathecode/authenticate/tests/serializers/tests_capy_app_profile_academy_serializer.py new file mode 100644 index 000000000..9d2b4581d --- /dev/null +++ b/breathecode/authenticate/tests/serializers/tests_capy_app_profile_academy_serializer.py @@ -0,0 +1,60 @@ +import capyc.django.serializer as capy + +from breathecode.authenticate.models import ProfileAcademy +from breathecode.authenticate.serializers import CapyAppProfileAcademySerializer + + +def test_is_capy_serializer(): + serializer = CapyAppProfileAcademySerializer() + assert isinstance(serializer, capy.Serializer) + + +def test_fields(): + assert CapyAppProfileAcademySerializer.fields == { + "default": ( + "id", + "first_name", + "last_name", + "status", + "email", + "phone", + "user", + "academy", + ), + "address": ("address",), + "academy": ("academy[]",), + "user": ("user[]",), + "timestamps": ( + "created_at", + "updated_at", + ), + } + + +def test_filters(): + assert CapyAppProfileAcademySerializer.filters == ("status", "email", "id") + + +def test_path(): + assert CapyAppProfileAcademySerializer.path == "/v1/auth/app/student" + + +def test_model(): + assert CapyAppProfileAcademySerializer.model == ProfileAcademy + + +def test_references(): + serializer = CapyAppProfileAcademySerializer() + + result = {} + for field in dir(serializer): + if field.startswith("_"): + continue + + if isinstance(x := getattr(serializer, field), capy.Serializer): + result[field] = x.__module__ + "." + x.__class__.__name__ + + assert result == { + "academy": "breathecode.authenticate.serializers.CapyAppAcademySerializer", + "user": "breathecode.authenticate.serializers.CapyAppUserSerializer", + } diff --git a/breathecode/authenticate/tests/serializers/tests_capy_app_user_serializer.py b/breathecode/authenticate/tests/serializers/tests_capy_app_user_serializer.py new file mode 100644 index 000000000..3bbeea798 --- /dev/null +++ b/breathecode/authenticate/tests/serializers/tests_capy_app_user_serializer.py @@ -0,0 +1,59 @@ +import capyc.django.serializer as capy + +from breathecode.authenticate.models import User +from breathecode.authenticate.serializers import CapyAppUserSerializer + + +def test_is_capy_serializer(): + serializer = CapyAppUserSerializer() + assert isinstance(serializer, capy.Serializer) + + +def test_fields(): + assert CapyAppUserSerializer.fields == { + "default": ( + "id", + "username", + "first_name", + "last_name", + "email", + ), + "timestamps": ( + "date_joined", + "last_login", + ), + } + + +def test_filters(): + assert CapyAppUserSerializer.filters == ( + "id", + "username", + "first_name", + "last_name", + "email", + "date_joined", + "last_login", + ) + + +def test_path(): + assert CapyAppUserSerializer.path == "/v1/auth/app/user" + + +def test_model(): + assert CapyAppUserSerializer.model == User + + +def test_references(): + serializer = CapyAppUserSerializer() + + result = {} + for field in dir(serializer): + if field.startswith("_"): + continue + + if isinstance(x := getattr(serializer, field), capy.Serializer): + result[field] = x.__module__ + "." + x.__class__.__name__ + + assert result == {} diff --git a/breathecode/authenticate/tests/urls/v1/__init__.py b/breathecode/authenticate/tests/urls/v1/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/breathecode/authenticate/tests/urls/tests_academy_html_invite.py b/breathecode/authenticate/tests/urls/v1/tests_academy_html_invite.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_html_invite.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_html_invite.py index 2261e487a..758472f9f 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_html_invite.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_html_invite.py @@ -9,7 +9,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase # IMPORTANT: the loader.render_to_string in a function is inside of function render diff --git a/breathecode/authenticate/tests/urls/tests_academy_id_member.py b/breathecode/authenticate/tests/urls/v1/tests_academy_id_member.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_id_member.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_id_member.py index f62e1c005..1498198c2 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_id_member.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_id_member.py @@ -10,7 +10,7 @@ from breathecode.utils import capable_of -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase @capable_of("read_member") diff --git a/breathecode/authenticate/tests/urls/tests_academy_id_member_id.py b/breathecode/authenticate/tests/urls/v1/tests_academy_id_member_id.py similarity index 98% rename from breathecode/authenticate/tests/urls/tests_academy_id_member_id.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_id_member_id.py index 000c2e253..4448022ad 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_id_member_id.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_id_member_id.py @@ -8,10 +8,9 @@ from rest_framework import status from rest_framework.response import Response -from breathecode.services import datetime_to_iso_format from breathecode.utils import capable_of -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase @capable_of("read_member") diff --git a/breathecode/authenticate/tests/urls/tests_academy_invite_id.py b/breathecode/authenticate/tests/urls/v1/tests_academy_invite_id.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_invite_id.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_invite_id.py index 8ece39fe1..9cf6c846e 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_invite_id.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_invite_id.py @@ -10,7 +10,7 @@ from breathecode.utils import capable_of -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase @capable_of("invite_resend") diff --git a/breathecode/authenticate/tests/urls/tests_academy_member.py b/breathecode/authenticate/tests/urls/v1/tests_academy_member.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_member.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_member.py index 2fab6befa..0915f769d 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_member.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_member.py @@ -16,7 +16,7 @@ from breathecode.utils import capable_of from breathecode.utils.api_view_extensions.api_view_extension_handlers import APIViewExtensionHandlers -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase # the test have too must lines, that's split in many test suite diff --git a/breathecode/authenticate/tests/urls/tests_academy_member_id.py b/breathecode/authenticate/tests/urls/v1/tests_academy_member_id.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_member_id.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_member_id.py index 2d803a01a..46fdb94a9 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_member_id.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_member_id.py @@ -11,7 +11,7 @@ from breathecode.services import datetime_to_iso_format from breathecode.utils import capable_of -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase @capable_of("read_member") diff --git a/breathecode/authenticate/tests/urls/tests_academy_member_id_invite.py b/breathecode/authenticate/tests/urls/v1/tests_academy_member_id_invite.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_member_id_invite.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_member_id_invite.py index 6a14d0969..50eb21209 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_member_id_invite.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_member_id_invite.py @@ -9,7 +9,7 @@ import breathecode.notify.actions as actions from breathecode.tests.mocks.requests import apply_requests_post_mock -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def generate_user_invite(self, model, user_invite, arguments={}): diff --git a/breathecode/authenticate/tests/urls/tests_academy_student.py b/breathecode/authenticate/tests/urls/v1/tests_academy_student.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_student.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_student.py index ad3cbc048..ff11ff68c 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_student.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_student.py @@ -4,7 +4,6 @@ import os import urllib.parse -from random import choice from unittest.mock import MagicMock, call, patch from django.urls.base import reverse_lazy @@ -14,8 +13,7 @@ import breathecode.notify.actions as actions from breathecode.utils.api_view_extensions.api_view_extension_handlers import APIViewExtensionHandlers -from ...models import ProfileAcademy -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase PROFILE_ACADEMY_STATUS = [ "INVITED", diff --git a/breathecode/authenticate/tests/urls/tests_academy_student_id.py b/breathecode/authenticate/tests/urls/v1/tests_academy_student_id.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_student_id.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_student_id.py index 9376e014b..b80cc6ce2 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_student_id.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_student_id.py @@ -9,7 +9,7 @@ from breathecode.services import datetime_to_iso_format -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_academy_token.py b/breathecode/authenticate/tests/urls/v1/tests_academy_token.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_token.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_token.py index a407cb3c2..4dc1c18b4 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_token.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_token.py @@ -3,9 +3,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from breathecode.services import datetime_to_iso_format - -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_academy_user_invite.py b/breathecode/authenticate/tests/urls/v1/tests_academy_user_invite.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_academy_user_invite.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_user_invite.py index 15217a88a..4b7b7051d 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_user_invite.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_user_invite.py @@ -7,9 +7,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from breathecode.authenticate.models import ProfileAcademy - -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase STATUSES = [ "PENDING", diff --git a/breathecode/authenticate/tests/urls/tests_academy_user_me_invite.py b/breathecode/authenticate/tests/urls/v1/tests_academy_user_me_invite.py similarity index 97% rename from breathecode/authenticate/tests/urls/tests_academy_user_me_invite.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_user_me_invite.py index 81ce58017..fb2dc6659 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_user_me_invite.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_user_me_invite.py @@ -2,14 +2,13 @@ Set of tests for MeInviteView, this include duck tests """ -from random import choice from unittest.mock import MagicMock, patch from django.urls.base import reverse_lazy from rest_framework import status from rest_framework.response import Response -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def view_method_mock(request, *args, **kwargs): diff --git a/breathecode/authenticate/tests/urls/tests_academy_user_me_invite_status.py b/breathecode/authenticate/tests/urls/v1/tests_academy_user_me_invite_status.py similarity index 96% rename from breathecode/authenticate/tests/urls/tests_academy_user_me_invite_status.py rename to breathecode/authenticate/tests/urls/v1/tests_academy_user_me_invite_status.py index 104703125..adcbc630f 100644 --- a/breathecode/authenticate/tests/urls/tests_academy_user_me_invite_status.py +++ b/breathecode/authenticate/tests/urls/v1/tests_academy_user_me_invite_status.py @@ -2,14 +2,13 @@ Set of tests for MeInviteView, this include duck tests """ -from random import choice from unittest.mock import MagicMock, patch from django.urls.base import reverse_lazy from rest_framework import status from rest_framework.response import Response -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def view_method_mock(request, *args, **kwargs): diff --git a/breathecode/authenticate/tests/urls/tests_app_token.py b/breathecode/authenticate/tests/urls/v1/tests_app_token.py similarity index 100% rename from breathecode/authenticate/tests/urls/tests_app_token.py rename to breathecode/authenticate/tests/urls/v1/tests_app_token.py diff --git a/breathecode/authenticate/tests/urls/tests_app_user.py b/breathecode/authenticate/tests/urls/v1/tests_app_user.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_app_user.py rename to breathecode/authenticate/tests/urls/v1/tests_app_user.py index 51284a072..bb58af90f 100644 --- a/breathecode/authenticate/tests/urls/tests_app_user.py +++ b/breathecode/authenticate/tests/urls/v1/tests_app_user.py @@ -8,7 +8,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def credentials_github_serializer(credentials_github): diff --git a/breathecode/authenticate/tests/urls/tests_app_user_id.py b/breathecode/authenticate/tests/urls/v1/tests_app_user_id.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_app_user_id.py rename to breathecode/authenticate/tests/urls/v1/tests_app_user_id.py index 664dbe277..e3300e592 100644 --- a/breathecode/authenticate/tests/urls/tests_app_user_id.py +++ b/breathecode/authenticate/tests/urls/v1/tests_app_user_id.py @@ -8,7 +8,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def credentials_github_serializer(credentials_github): diff --git a/breathecode/authenticate/tests/urls/tests_app_webhook.py b/breathecode/authenticate/tests/urls/v1/tests_app_webhook.py similarity index 100% rename from breathecode/authenticate/tests/urls/tests_app_webhook.py rename to breathecode/authenticate/tests/urls/v1/tests_app_webhook.py diff --git a/breathecode/authenticate/tests/urls/tests_appuseragreement.py b/breathecode/authenticate/tests/urls/v1/tests_appuseragreement.py similarity index 96% rename from breathecode/authenticate/tests/urls/tests_appuseragreement.py rename to breathecode/authenticate/tests/urls/v1/tests_appuseragreement.py index d550e509d..b8b18e41c 100644 --- a/breathecode/authenticate/tests/urls/tests_appuseragreement.py +++ b/breathecode/authenticate/tests/urls/v1/tests_appuseragreement.py @@ -3,8 +3,6 @@ """ import random -from datetime import timedelta -from unittest.mock import MagicMock, patch from django.urls.base import reverse_lazy from django.utils import timezone @@ -12,7 +10,7 @@ from breathecode.tests.mixins.breathecode_mixin.breathecode import fake -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase UTC_NOW = timezone.now() TOKEN = fake.name() diff --git a/breathecode/authenticate/tests/urls/tests_confirmation_token.py b/breathecode/authenticate/tests/urls/v1/tests_confirmation_token.py similarity index 96% rename from breathecode/authenticate/tests/urls/tests_confirmation_token.py rename to breathecode/authenticate/tests/urls/v1/tests_confirmation_token.py index 4127405fa..f58a37d5f 100644 --- a/breathecode/authenticate/tests/urls/tests_confirmation_token.py +++ b/breathecode/authenticate/tests/urls/v1/tests_confirmation_token.py @@ -3,22 +3,12 @@ """ import os -import random -import re -from unittest.mock import MagicMock, patch, call -from django.urls.base import reverse_lazy -from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase -from rest_framework import status -from rest_framework.response import Response -from django.template import loader - -from breathecode.utils import capable_of -from breathecode.tests.mocks import apply_requests_post_mock -from datetime import timedelta +from django.template import loader +from django.urls.base import reverse_lazy from django.utils import timezone -from breathecode.notify import actions + +from ...mixins.new_auth_test_case import AuthTestCase UTC_NOW = timezone.now() diff --git a/breathecode/authenticate/tests/urls/tests_github.py b/breathecode/authenticate/tests/urls/v1/tests_github.py similarity index 97% rename from breathecode/authenticate/tests/urls/tests_github.py rename to breathecode/authenticate/tests/urls/v1/tests_github.py index 7a224666e..d2aec5d3b 100644 --- a/breathecode/authenticate/tests/urls/tests_github.py +++ b/breathecode/authenticate/tests/urls/v1/tests_github.py @@ -2,11 +2,13 @@ Test cases for /user """ -import urllib import os +import urllib + from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins import AuthTestCase + +from ...mixins import AuthTestCase # from ..mocks import GithubRequestsMock diff --git a/breathecode/authenticate/tests/urls/tests_github_callback.py b/breathecode/authenticate/tests/urls/v1/tests_github_callback.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_github_callback.py rename to breathecode/authenticate/tests/urls/v1/tests_github_callback.py index 55e6ee688..8f190c795 100644 --- a/breathecode/authenticate/tests/urls/tests_github_callback.py +++ b/breathecode/authenticate/tests/urls/v1/tests_github_callback.py @@ -17,7 +17,7 @@ from breathecode.authenticate.tests.mocks.mocks import FakeResponse from breathecode.tests.mixins.breathecode_mixin.breathecode import Breathecode -from ..mocks import GithubRequestsMock +from ...mocks import GithubRequestsMock @pytest.fixture diff --git a/breathecode/authenticate/tests/urls/tests_github_me.py b/breathecode/authenticate/tests/urls/v1/tests_github_me.py similarity index 98% rename from breathecode/authenticate/tests/urls/tests_github_me.py rename to breathecode/authenticate/tests/urls/v1/tests_github_me.py index 6563abcf7..5a79d8ed7 100644 --- a/breathecode/authenticate/tests/urls/tests_github_me.py +++ b/breathecode/authenticate/tests/urls/v1/tests_github_me.py @@ -5,7 +5,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_github_token.py b/breathecode/authenticate/tests/urls/v1/tests_github_token.py similarity index 96% rename from breathecode/authenticate/tests/urls/tests_github_token.py rename to breathecode/authenticate/tests/urls/v1/tests_github_token.py index 4d2eac2b0..a854b618d 100644 --- a/breathecode/authenticate/tests/urls/tests_github_token.py +++ b/breathecode/authenticate/tests/urls/v1/tests_github_token.py @@ -2,13 +2,13 @@ Test cases for /user """ -import urllib import os +import urllib + from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase -# from ..mocks import GithubRequestsMock +from ...mixins.new_auth_test_case import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_google_callback.py b/breathecode/authenticate/tests/urls/v1/tests_google_callback.py similarity index 100% rename from breathecode/authenticate/tests/urls/tests_google_callback.py rename to breathecode/authenticate/tests/urls/v1/tests_google_callback.py diff --git a/breathecode/authenticate/tests/urls/tests_google_token.py b/breathecode/authenticate/tests/urls/v1/tests_google_token.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_google_token.py rename to breathecode/authenticate/tests/urls/v1/tests_google_token.py index 62e2586dd..78d5d7cff 100644 --- a/breathecode/authenticate/tests/urls/tests_google_token.py +++ b/breathecode/authenticate/tests/urls/v1/tests_google_token.py @@ -3,7 +3,6 @@ """ from typing import Any -from unittest.mock import MagicMock from urllib.parse import urlencode import capyc.pytest as capy diff --git a/breathecode/authenticate/tests/urls/tests_google_webhook.py b/breathecode/authenticate/tests/urls/v1/tests_google_webhook.py similarity index 96% rename from breathecode/authenticate/tests/urls/tests_google_webhook.py rename to breathecode/authenticate/tests/urls/v1/tests_google_webhook.py index 1a9effcf6..0a0f79ca0 100644 --- a/breathecode/authenticate/tests/urls/tests_google_webhook.py +++ b/breathecode/authenticate/tests/urls/v1/tests_google_webhook.py @@ -6,7 +6,6 @@ import hashlib import hmac import os -from unittest.mock import MagicMock, call import capyc.pytest as capy import pytest @@ -14,8 +13,6 @@ from django.utils import timezone from rest_framework import status -from breathecode.payments.tasks import process_google_webhook - now = timezone.now() diff --git a/breathecode/authenticate/tests/urls/tests_invite_resend_id.py b/breathecode/authenticate/tests/urls/v1/tests_invite_resend_id.py similarity index 98% rename from breathecode/authenticate/tests/urls/tests_invite_resend_id.py rename to breathecode/authenticate/tests/urls/v1/tests_invite_resend_id.py index cf33406f2..74511de36 100644 --- a/breathecode/authenticate/tests/urls/tests_invite_resend_id.py +++ b/breathecode/authenticate/tests/urls/v1/tests_invite_resend_id.py @@ -4,20 +4,15 @@ import os import random -import re from datetime import timedelta from unittest.mock import MagicMock, call, patch from django.urls.base import reverse_lazy from django.utils import timezone -from rest_framework import status -from rest_framework.response import Response from breathecode.notify import actions -from breathecode.tests.mocks import apply_requests_post_mock -from breathecode.utils import capable_of -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase UTC_NOW = timezone.now() diff --git a/breathecode/authenticate/tests/urls/tests_login.py b/breathecode/authenticate/tests/urls/v1/tests_login.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_login.py rename to breathecode/authenticate/tests/urls/v1/tests_login.py index 80b4d08d6..004bc9b73 100644 --- a/breathecode/authenticate/tests/urls/tests_login.py +++ b/breathecode/authenticate/tests/urls/v1/tests_login.py @@ -3,12 +3,15 @@ """ from unittest.mock import MagicMock, call, patch -from rest_framework import status -from django.urls.base import reverse_lazy + from django.contrib.auth.hashers import make_password -from ..mixins.new_auth_test_case import AuthTestCase +from django.urls.base import reverse_lazy +from rest_framework import status + from breathecode.activity import tasks as activity_tasks +from ...mixins.new_auth_test_case import AuthTestCase + def user_invite_serializer(self, user_invite, academy=None, cohort=None): return { diff --git a/breathecode/authenticate/tests/urls/tests_logout.py b/breathecode/authenticate/tests/urls/v1/tests_logout.py similarity index 96% rename from breathecode/authenticate/tests/urls/tests_logout.py rename to breathecode/authenticate/tests/urls/v1/tests_logout.py index 61919454e..8ec56aaf6 100644 --- a/breathecode/authenticate/tests/urls/tests_logout.py +++ b/breathecode/authenticate/tests/urls/v1/tests_logout.py @@ -2,10 +2,10 @@ Test cases for /user """ -import re from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins import AuthTestCase + +from ...mixins import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_me_app_slug_sync.py b/breathecode/authenticate/tests/urls/v1/tests_me_app_slug_sync.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_me_app_slug_sync.py rename to breathecode/authenticate/tests/urls/v1/tests_me_app_slug_sync.py index 4dd56a93c..3c7aba1c3 100644 --- a/breathecode/authenticate/tests/urls/tests_me_app_slug_sync.py +++ b/breathecode/authenticate/tests/urls/v1/tests_me_app_slug_sync.py @@ -4,7 +4,7 @@ import json import random -from unittest.mock import AsyncMock, MagicMock, call, patch +from unittest.mock import MagicMock, call import aiohttp import pytest diff --git a/breathecode/authenticate/tests/urls/tests_me_profile_academy_invite.py b/breathecode/authenticate/tests/urls/v1/tests_me_profile_academy_invite.py similarity index 100% rename from breathecode/authenticate/tests/urls/tests_me_profile_academy_invite.py rename to breathecode/authenticate/tests/urls/v1/tests_me_profile_academy_invite.py diff --git a/breathecode/authenticate/tests/urls/tests_member_invite.py b/breathecode/authenticate/tests/urls/v1/tests_member_invite.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_member_invite.py rename to breathecode/authenticate/tests/urls/v1/tests_member_invite.py index 9c981a185..8906d3f7c 100644 --- a/breathecode/authenticate/tests/urls/tests_member_invite.py +++ b/breathecode/authenticate/tests/urls/v1/tests_member_invite.py @@ -9,7 +9,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase # IMPORTANT: the loader.render_to_string in a function is inside of function render diff --git a/breathecode/authenticate/tests/urls/tests_member_invite_resend_id.py b/breathecode/authenticate/tests/urls/v1/tests_member_invite_resend_id.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_member_invite_resend_id.py rename to breathecode/authenticate/tests/urls/v1/tests_member_invite_resend_id.py index ddc8bf25f..8f6a4cf55 100644 --- a/breathecode/authenticate/tests/urls/tests_member_invite_resend_id.py +++ b/breathecode/authenticate/tests/urls/v1/tests_member_invite_resend_id.py @@ -3,7 +3,6 @@ """ import os -import re from datetime import timedelta from unittest.mock import MagicMock, patch @@ -15,7 +14,7 @@ from breathecode.tests.mocks import apply_requests_post_mock from breathecode.utils import capable_of -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase @capable_of("invite_resend") diff --git a/breathecode/authenticate/tests/urls/tests_member_invite_token.py b/breathecode/authenticate/tests/urls/v1/tests_member_invite_token.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_member_invite_token.py rename to breathecode/authenticate/tests/urls/v1/tests_member_invite_token.py index 086f9d99a..d5945a395 100644 --- a/breathecode/authenticate/tests/urls/tests_member_invite_token.py +++ b/breathecode/authenticate/tests/urls/v1/tests_member_invite_token.py @@ -17,7 +17,7 @@ from breathecode.authenticate.forms import InviteForm from breathecode.payments.tasks import build_plan_financing -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase CSRF_TOKEN = str(randint(10000, 10000000000000)) render_to_string = loader.render_to_string diff --git a/breathecode/authenticate/tests/urls/tests_password_form.py b/breathecode/authenticate/tests/urls/v1/tests_password_form.py similarity index 100% rename from breathecode/authenticate/tests/urls/tests_password_form.py rename to breathecode/authenticate/tests/urls/v1/tests_password_form.py diff --git a/breathecode/authenticate/tests/urls/tests_password_reset.py b/breathecode/authenticate/tests/urls/v1/tests_password_reset.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_password_reset.py rename to breathecode/authenticate/tests/urls/v1/tests_password_reset.py index ab0c8f1f1..ae164193e 100644 --- a/breathecode/authenticate/tests/urls/tests_password_reset.py +++ b/breathecode/authenticate/tests/urls/v1/tests_password_reset.py @@ -10,7 +10,7 @@ from breathecode.authenticate.models import Token -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_password_token.py b/breathecode/authenticate/tests/urls/v1/tests_password_token.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_password_token.py rename to breathecode/authenticate/tests/urls/v1/tests_password_token.py index 617274def..008b653d3 100644 --- a/breathecode/authenticate/tests/urls/tests_password_token.py +++ b/breathecode/authenticate/tests/urls/v1/tests_password_token.py @@ -5,7 +5,6 @@ import os import random import string -from random import randint from unittest.mock import MagicMock, patch from django.core.handlers.wsgi import WSGIRequest @@ -17,7 +16,7 @@ from breathecode.authenticate.forms import PickPasswordForm -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def set_password(self, raw_password): diff --git a/breathecode/authenticate/tests/urls/tests_profile_academy_github_reset_link.py b/breathecode/authenticate/tests/urls/v1/tests_profile_academy_github_reset_link.py similarity index 96% rename from breathecode/authenticate/tests/urls/tests_profile_academy_github_reset_link.py rename to breathecode/authenticate/tests/urls/v1/tests_profile_academy_github_reset_link.py index d63845c5b..b1097c309 100644 --- a/breathecode/authenticate/tests/urls/tests_profile_academy_github_reset_link.py +++ b/breathecode/authenticate/tests/urls/v1/tests_profile_academy_github_reset_link.py @@ -1,9 +1,9 @@ -from breathecode.authenticate.models import ProfileAcademy, Token -import re from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase -from breathecode.services import datetime_to_iso_format + +from breathecode.authenticate.models import ProfileAcademy, Token + +from ...mixins.new_auth_test_case import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_profile_invite_me.py b/breathecode/authenticate/tests/urls/v1/tests_profile_invite_me.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_profile_invite_me.py rename to breathecode/authenticate/tests/urls/v1/tests_profile_invite_me.py index 3898c0053..ad7424fef 100644 --- a/breathecode/authenticate/tests/urls/tests_profile_invite_me.py +++ b/breathecode/authenticate/tests/urls/v1/tests_profile_invite_me.py @@ -7,9 +7,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from breathecode.services import datetime_to_iso_format - -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def get_serializer(self, mentor_profile, academy, mentorship_service, user): diff --git a/breathecode/authenticate/tests/urls/tests_profile_me.py b/breathecode/authenticate/tests/urls/v1/tests_profile_me.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_profile_me.py rename to breathecode/authenticate/tests/urls/v1/tests_profile_me.py index 0b8977ddc..9cff1c139 100644 --- a/breathecode/authenticate/tests/urls/tests_profile_me.py +++ b/breathecode/authenticate/tests/urls/v1/tests_profile_me.py @@ -3,9 +3,11 @@ """ import random + from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase + +from ...mixins.new_auth_test_case import AuthTestCase def get_serializer(profile, user): diff --git a/breathecode/authenticate/tests/urls/tests_profile_me_picture.py b/breathecode/authenticate/tests/urls/v1/tests_profile_me_picture.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_profile_me_picture.py rename to breathecode/authenticate/tests/urls/v1/tests_profile_me_picture.py index e14f6b744..468de1080 100644 --- a/breathecode/authenticate/tests/urls/tests_profile_me_picture.py +++ b/breathecode/authenticate/tests/urls/v1/tests_profile_me_picture.py @@ -2,18 +2,16 @@ Test cases for /academy/:id/member/:id """ -import os import random from unittest.mock import MagicMock, PropertyMock, call, patch -import numpy as np from django.urls.base import reverse_lazy from rest_framework import status from breathecode.services.google_cloud.storage import File, Storage from breathecode.tests.mocks.requests import apply_requests_request_mock -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase SHAPE_OF_URL = "https://us-central1-labor-day-story.cloudfunctions.net/shape-of-image" diff --git a/breathecode/authenticate/tests/urls/tests_slack.py b/breathecode/authenticate/tests/urls/v1/tests_slack.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_slack.py rename to breathecode/authenticate/tests/urls/v1/tests_slack.py index 2386d7377..750e3725f 100644 --- a/breathecode/authenticate/tests/urls/tests_slack.py +++ b/breathecode/authenticate/tests/urls/v1/tests_slack.py @@ -9,7 +9,7 @@ from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins import AuthTestCase +from ...mixins import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_slack_callback.py b/breathecode/authenticate/tests/urls/v1/tests_slack_callback.py similarity index 98% rename from breathecode/authenticate/tests/urls/tests_slack_callback.py rename to breathecode/authenticate/tests/urls/v1/tests_slack_callback.py index 5242af105..e0a34306c 100644 --- a/breathecode/authenticate/tests/urls/tests_slack_callback.py +++ b/breathecode/authenticate/tests/urls/v1/tests_slack_callback.py @@ -5,10 +5,12 @@ import base64 import urllib from unittest import mock + from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins import AuthTestCase, SlackTestCase -from ..mocks import SlackRequestsMock + +from ...mixins import AuthTestCase, SlackTestCase +from ...mocks import SlackRequestsMock class AuthenticateTestSuite(AuthTestCase, SlackTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_subscribe.py b/breathecode/authenticate/tests/urls/v1/tests_subscribe.py similarity index 100% rename from breathecode/authenticate/tests/urls/tests_subscribe.py rename to breathecode/authenticate/tests/urls/v1/tests_subscribe.py diff --git a/breathecode/authenticate/tests/urls/tests_token_me.py b/breathecode/authenticate/tests/urls/v1/tests_token_me.py similarity index 98% rename from breathecode/authenticate/tests/urls/tests_token_me.py rename to breathecode/authenticate/tests/urls/v1/tests_token_me.py index 33a494b73..1742a2e9e 100644 --- a/breathecode/authenticate/tests/urls/tests_token_me.py +++ b/breathecode/authenticate/tests/urls/v1/tests_token_me.py @@ -11,7 +11,7 @@ from breathecode.tests.mixins.breathecode_mixin.breathecode import fake -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase UTC_NOW = timezone.now() TOKEN = fake.name() diff --git a/breathecode/authenticate/tests/urls/tests_user.py b/breathecode/authenticate/tests/urls/v1/tests_user.py similarity index 97% rename from breathecode/authenticate/tests/urls/tests_user.py rename to breathecode/authenticate/tests/urls/v1/tests_user.py index 1a149bfbf..936f1871e 100644 --- a/breathecode/authenticate/tests/urls/tests_user.py +++ b/breathecode/authenticate/tests/urls/v1/tests_user.py @@ -4,7 +4,8 @@ from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins import AuthTestCase + +from ...mixins import AuthTestCase class AuthenticateTestSuite(AuthTestCase): diff --git a/breathecode/authenticate/tests/urls/tests_user_me.py b/breathecode/authenticate/tests/urls/v1/tests_user_me.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_user_me.py rename to breathecode/authenticate/tests/urls/v1/tests_user_me.py index 047d28452..6632fd990 100644 --- a/breathecode/authenticate/tests/urls/tests_user_me.py +++ b/breathecode/authenticate/tests/urls/v1/tests_user_me.py @@ -2,13 +2,10 @@ Test cases for /user """ -import datetime - -import pytz from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def get_permission_serializer(permission): diff --git a/breathecode/authenticate/tests/urls/tests_user_me_invite.py b/breathecode/authenticate/tests/urls/v1/tests_user_me_invite.py similarity index 99% rename from breathecode/authenticate/tests/urls/tests_user_me_invite.py rename to breathecode/authenticate/tests/urls/v1/tests_user_me_invite.py index c2de2568b..6fc66fa50 100644 --- a/breathecode/authenticate/tests/urls/tests_user_me_invite.py +++ b/breathecode/authenticate/tests/urls/v1/tests_user_me_invite.py @@ -9,7 +9,7 @@ from rest_framework import status from rest_framework.response import Response -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def view_method_mock(request, *args, **kwargs): diff --git a/breathecode/authenticate/tests/urls/tests_user_me_invite_status.py b/breathecode/authenticate/tests/urls/v1/tests_user_me_invite_status.py similarity index 98% rename from breathecode/authenticate/tests/urls/tests_user_me_invite_status.py rename to breathecode/authenticate/tests/urls/v1/tests_user_me_invite_status.py index dcc7e3e99..f93af523d 100644 --- a/breathecode/authenticate/tests/urls/tests_user_me_invite_status.py +++ b/breathecode/authenticate/tests/urls/v1/tests_user_me_invite_status.py @@ -2,14 +2,13 @@ Set of tests for MeInviteView, this include duck tests """ -from random import choice -from unittest.mock import MagicMock, PropertyMock, patch +from unittest.mock import MagicMock, patch from django.urls.base import reverse_lazy from rest_framework import status from rest_framework.response import Response -from ..mixins.new_auth_test_case import AuthTestCase +from ...mixins.new_auth_test_case import AuthTestCase def view_method_mock(request, *args, **kwargs): diff --git a/breathecode/authenticate/tests/urls/tests_user_profile.py b/breathecode/authenticate/tests/urls/v1/tests_user_profile.py similarity index 98% rename from breathecode/authenticate/tests/urls/tests_user_profile.py rename to breathecode/authenticate/tests/urls/v1/tests_user_profile.py index 5e8d5df59..5a3c7f4c1 100644 --- a/breathecode/authenticate/tests/urls/tests_user_profile.py +++ b/breathecode/authenticate/tests/urls/v1/tests_user_profile.py @@ -2,10 +2,10 @@ Test cases for /profile/ """ -import pytz, datetime from django.urls.base import reverse_lazy from rest_framework import status -from ..mixins.new_auth_test_case import AuthTestCase + +from ...mixins.new_auth_test_case import AuthTestCase def get_serializer(self, profile, data={}): diff --git a/breathecode/authenticate/tests/urls/v2/__init__.py b/breathecode/authenticate/tests/urls/v2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_academy.py b/breathecode/authenticate/tests/urls/v2/tests_app_academy.py new file mode 100644 index 000000000..e273565e3 --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_academy.py @@ -0,0 +1,79 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppAcademySerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppAcademySerializer, "filter", m) + + yield obj + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_academy") + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_academy") + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_academy") + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_academy_id.py b/breathecode/authenticate/tests/urls/v2/tests_app_academy_id.py new file mode 100644 index 000000000..882322374 --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_academy_id.py @@ -0,0 +1,82 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppAcademySerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppAcademySerializer, "get", m) + + yield { + **obj, + "id": 1, + } + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_academy_id", kwargs={"academy_id": 1}) + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_academy_id", kwargs={"academy_id": 1}) + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_academy_id", kwargs={"academy_id": 1}) + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_city.py b/breathecode/authenticate/tests/urls/v2/tests_app_city.py new file mode 100644 index 000000000..e4bf4ee01 --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_city.py @@ -0,0 +1,79 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppCitySerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppCitySerializer, "filter", m) + + yield obj + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_city") + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_city") + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_city") + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_city_id.py b/breathecode/authenticate/tests/urls/v2/tests_app_city_id.py new file mode 100644 index 000000000..14b86cd60 --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_city_id.py @@ -0,0 +1,82 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppCitySerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppCitySerializer, "get", m) + + yield { + **obj, + "id": 1, + } + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_city_id", kwargs={"city_id": 1}) + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_city_id", kwargs={"city_id": 1}) + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_city_id", kwargs={"city_id": 1}) + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_country.py b/breathecode/authenticate/tests/urls/v2/tests_app_country.py new file mode 100644 index 000000000..579392722 --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_country.py @@ -0,0 +1,79 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppCountrySerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppCountrySerializer, "filter", m) + + yield obj + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_country") + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_country") + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_country") + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_country_id.py b/breathecode/authenticate/tests/urls/v2/tests_app_country_id.py new file mode 100644 index 000000000..21f742832 --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_country_id.py @@ -0,0 +1,82 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppCountrySerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppCountrySerializer, "get", m) + + yield { + **obj, + "code": 1, + } + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_country_id", kwargs={"country_id": 1}) + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_country_id", kwargs={"country_id": 1}) + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_country_id", kwargs={"country_id": 1}) + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_student.py b/breathecode/authenticate/tests/urls/v2/tests_app_student.py new file mode 100644 index 000000000..b6d6c2e65 --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_student.py @@ -0,0 +1,82 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppProfileAcademySerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppProfileAcademySerializer, "filter", m) + + yield { + **obj, + "role__slug": "student", + } + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_student") + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_student") + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_student") + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_student_id.py b/breathecode/authenticate/tests/urls/v2/tests_app_student_id.py new file mode 100644 index 000000000..1eb30043e --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_student_id.py @@ -0,0 +1,124 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppProfileAcademySerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppProfileAcademySerializer, "get", m) + + yield { + **obj, + "role__slug": "student", + } + + +@pytest.fixture +def numeric_expected(expected): + yield { + **expected, + "id": 1, + } + + +@pytest.fixture +def non_numeric_expected(expected): + yield { + **expected, + "email": "a", + } + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_student_id", kwargs={"user_id_or_email": 1}) + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_student_id", kwargs={"user_id_or_email": 1}) + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + numeric_expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_student_id", kwargs={"user_id_or_email": 1}) + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == numeric_expected + assert response.status_code == status.HTTP_200_OK + + +def test_location_url_( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + non_numeric_expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_student_id", kwargs={"user_id_or_email": "a"}) + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == non_numeric_expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_user.py b/breathecode/authenticate/tests/urls/v2/tests_app_user.py new file mode 100644 index 000000000..22c326288 --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_user.py @@ -0,0 +1,79 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppUserSerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppUserSerializer, "filter", m) + + yield obj + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_user") + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_user") + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_user") + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/tests/urls/v2/tests_app_user_id.py b/breathecode/authenticate/tests/urls/v2/tests_app_user_id.py new file mode 100644 index 000000000..50b5cffbf --- /dev/null +++ b/breathecode/authenticate/tests/urls/v2/tests_app_user_id.py @@ -0,0 +1,82 @@ +from typing import Any, Callable + +import capyc.pytest as capy +import linked_services.pytest as linked_services +import pytest +from django.http import JsonResponse +from django.urls import reverse_lazy +from rest_framework import status + +from breathecode.authenticate.serializers import CapyAppUserSerializer + + +@pytest.fixture(autouse=True) +def setup(db): + yield + + +@pytest.fixture +def expected(monkeypatch: pytest.MonkeyPatch, fake: capy.Fake): + obj = { + "slug": fake.slug(), + "name": fake.name(), + "description": fake.text(), + } + + def m(self, **kwargs): + return JsonResponse({**obj, **kwargs}, status=200) + + monkeypatch.setattr(CapyAppUserSerializer, "get", m) + + yield { + **obj, + "id": 1, + } + + +def test_no_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_user_id", kwargs={"user_id": 1}) + response = client.get(url) + + json = response.json() + expected = {"detail": "no-authorization-header", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_invalid_authorization_header(client: capy.Client): + url = reverse_lazy("v2:authenticate:app_user_id", kwargs={"user_id": 1}) + response = client.get(url, headers={"Authorization": "Bearer 1234"}) + + json = response.json() + expected = {"detail": "unknown-auth-schema", "status_code": 401} + + assert json == expected + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + +def test_location_url( + database: capy.Database, + client: capy.Client, + service: linked_services.Service, + get_app_signature: Callable[[Any], dict[str, Any]], + expected: dict[str, str], +): + url = reverse_lazy("v2:authenticate:app_user_id", kwargs={"user_id": 1}) + + model = database.create( + app={ + "require_an_agreement": False, + "slug": "rigobot", + **get_app_signature(), + }, + ) + + service.sign_jwt(client, model.app) + response = client.get(url) + + json = response.json() + + assert json == expected + assert response.status_code == status.HTTP_200_OK diff --git a/breathecode/authenticate/urls/__init__.py b/breathecode/authenticate/urls/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/breathecode/authenticate/urls.py b/breathecode/authenticate/urls/v1.py similarity index 97% rename from breathecode/authenticate/urls.py rename to breathecode/authenticate/urls/v1.py index 0a024578f..b91ee2347 100644 --- a/breathecode/authenticate/urls.py +++ b/breathecode/authenticate/urls/v1.py @@ -21,7 +21,7 @@ from breathecode.authenticate.actions import get_user_language -from .views import ( +from ..views import ( AcademyAuthSettingsView, AcademyGithubSyncView, AcademyInviteView, @@ -113,6 +113,8 @@ path("academy//member", MemberView.as_view(), name="academy_id_member"), path("academy//member/", MemberView.as_view(), name="academy_id_member_id"), path("academy/member/", MemberView.as_view(), name="academy_member_id"), + path("app/student", StudentView.as_view(), name="app_student"), + path("app/student/", StudentView.as_view(), name="app_student_id"), path("academy/student", StudentView.as_view(), name="academy_student"), path("academy/student/", StudentView.as_view(), name="academy_student_id"), # TODO: these endpoints starts with academy but actually they are related to the user, not to the academy diff --git a/breathecode/authenticate/urls/v2.py b/breathecode/authenticate/urls/v2.py new file mode 100644 index 000000000..104acd178 --- /dev/null +++ b/breathecode/authenticate/urls/v2.py @@ -0,0 +1,24 @@ +from django.urls import path + +from ..views import V2AppAcademyView, V2AppCityView, V2AppCountryView, V2AppStudentView, V2AppUserView +from .v1 import urlpatterns as urlpatterns_v1 + +deprecation_list = [ + "app/user", + "app/user/", +] + +app_name = "authenticate" +urlpatterns = [ + path("app/user", V2AppUserView.as_view(), name="app_user"), + path("app/user/", V2AppUserView.as_view(), name="app_user_id"), + path("app/student", V2AppStudentView.as_view(), name="app_student"), + path("app/student/", V2AppStudentView.as_view(), name="app_student_id"), + path("app/academy", V2AppAcademyView.as_view(), name="app_academy"), + path("app/academy/", V2AppAcademyView.as_view(), name="app_academy_id"), + path("app/city", V2AppCityView.as_view(), name="app_city"), + path("app/city/", V2AppCityView.as_view(), name="app_city_id"), + path("app/country", V2AppCountryView.as_view(), name="app_country"), + path("app/country/", V2AppCountryView.as_view(), name="app_country_id"), + *[r for r in urlpatterns_v1 if r.pattern._route not in deprecation_list], +] diff --git a/breathecode/authenticate/views.py b/breathecode/authenticate/views.py index 27e8e300f..5c3213a6b 100644 --- a/breathecode/authenticate/views.py +++ b/breathecode/authenticate/views.py @@ -98,6 +98,11 @@ AppUserSerializer, AuthSerializer, AuthSettingsBigSerializer, + CapyAppAcademySerializer, + CapyAppCitySerializer, + CapyAppCountrySerializer, + CapyAppProfileAcademySerializer, + CapyAppUserSerializer, GetGitpodUserSerializer, GetProfileAcademySerializer, GetProfileAcademySmallSerializer, @@ -762,6 +767,69 @@ def put(self, request, invite_id=None, profileacademy_id=None, academy_id=None): return Response(serializer.data) +class V2AppUserView(APIView): + permission_classes = [AllowAny] + + @scope(["read:user"]) + def get(self, request: LinkedHttpRequest, app: LinkedApp, token: LinkedToken, user_id: int | None = None): + serializer = CapyAppUserSerializer(request) + if user_id: + return serializer.get(id=user_id) + + return serializer.filter() + + +class V2AppStudentView(APIView): + permission_classes = [AllowAny] + + @scope(["read:student"]) + def get(self, request: LinkedHttpRequest, app: LinkedApp, token: LinkedToken, user_id_or_email: str | None = None): + serializer = CapyAppProfileAcademySerializer(request) + if user_id_or_email: + if user_id_or_email.isnumeric(): + return serializer.get(id=int(user_id_or_email), role__slug="student") + else: + return serializer.get(email=user_id_or_email, role__slug="student") + + return serializer.filter(role__slug="student") + + +class V2AppAcademyView(APIView): + permission_classes = [AllowAny] + + @scope(["read:academy"]) + def get(self, request: LinkedHttpRequest, app: LinkedApp, token: LinkedToken, academy_id: int | None = None): + serializer = CapyAppAcademySerializer(request) + if academy_id: + return serializer.get(id=academy_id) + + return serializer.filter() + + +class V2AppCityView(APIView): + permission_classes = [AllowAny] + + @scope(["read:city"]) + def get(self, request: LinkedHttpRequest, app: LinkedApp, token: LinkedToken, city_id: int | None = None): + serializer = CapyAppCitySerializer(request) + if city_id: + return serializer.get(id=city_id) + + return serializer.filter() + + +class V2AppCountryView(APIView): + permission_classes = [AllowAny] + + @scope(["read:country"]) + def get(self, request: LinkedHttpRequest, app: LinkedApp, token: LinkedToken, country_id: int | None = None): + serializer = CapyAppCountrySerializer(request) + if country_id: + return serializer.get(code=country_id) + + return serializer.filter() + + class StudentView(APIView, GenerateLookupsMixin): extensions = APIViewExtensions(paginate=True, sort="-created_at") diff --git a/breathecode/feedback/tasks.py b/breathecode/feedback/tasks.py index d3b6b27a5..14526b533 100644 --- a/breathecode/feedback/tasks.py +++ b/breathecode/feedback/tasks.py @@ -1,6 +1,7 @@ import os from datetime import timedelta +from capyc.rest_framework.exceptions import ValidationException from django.contrib.auth.models import User from django.core.cache import cache from django.utils import timezone @@ -15,7 +16,6 @@ from breathecode.notify import actions as notify_actions from breathecode.utils import TaskPriority, getLogger from breathecode.utils.redis import Lock -from capyc.rest_framework.exceptions import ValidationException from . import actions from .models import Answer, Survey @@ -27,7 +27,7 @@ ADMIN_URL = os.getenv("ADMIN_URL", "") API_URL = os.getenv("API_URL", "") ENV = os.getenv("ENV", "") -IS_DJANGO_REDIS = hasattr(cache, "delete_pattern") +IS_DJANGO_REDIS = hasattr(cache, "fake") is False def build_question(answer): diff --git a/breathecode/media/tasks.py b/breathecode/media/tasks.py index c7dc29bee..3ac29e057 100644 --- a/breathecode/media/tasks.py +++ b/breathecode/media/tasks.py @@ -14,7 +14,7 @@ from .utils import media_settings logger = logging.getLogger(__name__) -IS_DJANGO_REDIS = hasattr(cache, "delete_pattern") +IS_DJANGO_REDIS = hasattr(cache, "fake") is False @task(bind=False, priority=TaskPriority.STUDENT.value) diff --git a/breathecode/payments/tasks.py b/breathecode/payments/tasks.py index 08129c4b2..8b8484799 100644 --- a/breathecode/payments/tasks.py +++ b/breathecode/payments/tasks.py @@ -43,7 +43,7 @@ ) logger = logging.getLogger(__name__) -IS_DJANGO_REDIS = hasattr(cache, "delete_pattern") +IS_DJANGO_REDIS = hasattr(cache, "fake") is False @task(bind=True, priority=TaskPriority.WEB_SERVICE_PAYMENT.value) diff --git a/breathecode/payments/views.py b/breathecode/payments/views.py index e7711db0e..36858d360 100644 --- a/breathecode/payments/views.py +++ b/breathecode/payments/views.py @@ -83,7 +83,7 @@ logger = getLogger(__name__) -IS_DJANGO_REDIS = hasattr(cache, "delete_pattern") +IS_DJANGO_REDIS = hasattr(cache, "fake") is False class PlanView(APIView): diff --git a/breathecode/settings.py b/breathecode/settings.py index 1fc486aaf..150112dac 100644 --- a/breathecode/settings.py +++ b/breathecode/settings.py @@ -445,6 +445,13 @@ class Key(TypedDict): class CustomMemCache(LocMemCache): _cache = {} + fake = 1 + + def delete_pattern(self, pattern): + for key in self._cache.keys(): + if fnmatch.fnmatch(key, pattern): + del self._cache[key] + def delete_many(self, patterns): for pattern in patterns: self.delete(pattern) diff --git a/breathecode/tests/services/google_cloud/tests_credentials.py b/breathecode/tests/services/google_cloud/tests_credentials.py index 307dd5885..99e522949 100644 --- a/breathecode/tests/services/google_cloud/tests_credentials.py +++ b/breathecode/tests/services/google_cloud/tests_credentials.py @@ -76,15 +76,13 @@ def test_resolve_credentials__credentials_file_not_exists__with_env(self, logger result = resolve_credentials() self.assertEqual(result, True) - self.assertEqual( - open_mock.mock_calls, - [ - call(Path(os.path.join(os.getcwd(), ".lacey_mosley.json")), "w"), - call().__enter__(), - call().write("{}\n"), - call().__exit__(None, None, None), - ], - ) + assert open_mock.mock_calls == [ + call(Path(os.path.join(os.getcwd(), ".lacey_mosley.json")), "w"), + call().__enter__(), + call().write("{}\n"), + call().__exit__(None, None, None), + call().close(), + ] self.assertEqual( exists_mock.mock_calls, diff --git a/breathecode/urls.py b/breathecode/urls.py index ccb430529..1cf1b4f24 100644 --- a/breathecode/urls.py +++ b/breathecode/urls.py @@ -34,11 +34,12 @@ path("activity/", include("breathecode.activity.urls.v2", namespace="activity")), path("registry/", include("breathecode.registry.urls.v2", namespace="registry")), path("media/", include("breathecode.media.urls.v2", namespace="media")), + path("auth/", include("breathecode.authenticate.urls.v2", namespace="auth")), ], } apps = [ - ("v1/auth/", "breathecode.authenticate.urls", "auth"), + ("v1/auth/", "breathecode.authenticate.urls.v1", "auth"), ("v1/admissions/", "breathecode.admissions.urls", "admissions"), ("v1/assignment/", "breathecode.assignments.urls", "assignments"), ("v1/freelance/", "breathecode.freelance.urls", "freelance"), diff --git a/breathecode/utils/cache.py b/breathecode/utils/cache.py index 8b0aaa5c9..195b5dc2d 100644 --- a/breathecode/utils/cache.py +++ b/breathecode/utils/cache.py @@ -1,32 +1,34 @@ from __future__ import annotations -import gzip -import zlib -import brotli -import sys + import functools +import gzip +import json import os +import sys +import urllib.parse +import zlib +from datetime import datetime, timedelta from typing import Optional -import urllib.parse, json + +import brotli +import zstandard +from circuitbreaker import circuit from django.core.cache import cache -from datetime import datetime, timedelta from django.db import models -from circuitbreaker import circuit - from django.db.models.fields.related_descriptors import ( - ReverseManyToOneDescriptor, - ManyToManyDescriptor, ForwardManyToOneDescriptor, - ReverseOneToOneDescriptor, ForwardOneToOneDescriptor, + ManyToManyDescriptor, + ReverseManyToOneDescriptor, + ReverseOneToOneDescriptor, ) -import zstandard __all__ = ["Cache", "CACHE_DESCRIPTORS", "CACHE_DEPENDENCIES"] CACHE_DESCRIPTORS: dict[models.Model, Cache] = {} CACHE_DEPENDENCIES: set[models.Model] = set() ENABLE_LIST_OPTIONS = ["true", "1", "yes", "y"] -IS_DJANGO_REDIS = hasattr(cache, "delete_pattern") +IS_DJANGO_REDIS = hasattr(cache, "fake") is False @functools.lru_cache(maxsize=1) diff --git a/breathecode/utils/redis.py b/breathecode/utils/redis.py index bc621cd15..d4ef74c1d 100644 --- a/breathecode/utils/redis.py +++ b/breathecode/utils/redis.py @@ -1,6 +1,6 @@ from django.core.cache import cache -IS_DJANGO_REDIS = hasattr(cache, "delete_pattern") +IS_DJANGO_REDIS = hasattr(cache, "fake") is False __all__ = ["Lock"] diff --git a/conftest.py b/conftest.py index 5d1f7db94..2f1ca62e3 100644 --- a/conftest.py +++ b/conftest.py @@ -1,5 +1,6 @@ import os -from typing import Generator, Optional +import secrets +from typing import Any, Callable, Generator, Optional from unittest.mock import MagicMock, patch import jwt @@ -8,22 +9,26 @@ from capyc.pytest.django.fixtures.signals import Signals from django.core.cache import cache from django.utils import timezone +from linked_services.django import actions from rest_framework.test import APIClient from breathecode.notify.utils.hook_manager import HookManagerClass -from breathecode.utils.exceptions import TestError # set ENV as test before run django os.environ["ENV"] = "test" os.environ["DATABASE_URL"] = "sqlite:///:memory:" pytest_plugins = ( - "staging.pytest.core", - "capyc.pytest.core", - "capyc.pytest.newrelic", - "capyc.pytest.django", - "capyc.pytest.rest_framework", - "capyc.pytest.circuitbreaker", + # "staging.pytest.core", + "staging.pytest", + # "capyc.pytest.core", + # "capyc.pytest.newrelic", + # "capyc.pytest.django", + # "capyc.pytest.rest_framework", + # "capyc.pytest.circuitbreaker", + "capyc.pytest", + "linked_services.pytest", + "task_manager.pytest.core", ) from breathecode.tests.mixins.breathecode_mixin import Breathecode @@ -142,22 +147,24 @@ def enable_signals(signals: Signals): @pytest.fixture -def patch_request(monkeypatch): +def patch_request( + monkeypatch: pytest.MonkeyPatch, +) -> Generator[Callable[[Optional[list[tuple[Any, Any, int]]]], MagicMock], None, None]: def patcher(conf=None): if not conf: conf = [] def wrapper(*args, **kwargs): - raises = True + found = False for c in conf: if args == c[0].args and kwargs == c[0].kwargs: - raises = False + found = True break - if raises: - raise TestError(f"Avoiding to make a real request to {args} {kwargs}") + if found is False: + raise Exception(f"Avoiding to make a real request to {args} {kwargs}") mock = MagicMock() @@ -174,7 +181,7 @@ def wrapper(*args, **kwargs): return mock mock = MagicMock() - monkeypatch.setattr("requests.api.request", wrapper) + monkeypatch.setattr("requests.api.request", MagicMock(side_effect=wrapper)) return mock @@ -312,3 +319,25 @@ def wrapper( client.credentials(HTTP_AUTHORIZATION=f"Link App={app.slug},Token={token}") yield wrapper + + +@pytest.fixture(autouse=True, scope="function") +def get_app_keys() -> Generator[None, None, None]: + actions.get_app_keys.cache_clear() + actions.get_optional_scopes_set.cache_clear() + actions.get_app.cache_clear() + + yield + + +@pytest.fixture(scope="function") +def get_app_signature() -> Generator[Callable[[], dict[str, Any]], None, None]: + def wrapper() -> dict[str, Any]: + return { + "algorithm": "HMAC_SHA512", + "strategy": "JWT", + "public_key": None, + "private_key": secrets.token_hex(64), + } + + yield wrapper