diff --git a/.flags b/.flags new file mode 100644 index 000000000..ecfccc94a --- /dev/null +++ b/.flags @@ -0,0 +1 @@ +BYPASS_CONSUMPTION=0 diff --git a/Pipfile.lock b/Pipfile.lock index f8340d777..ff40050cc 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -42,111 +42,111 @@ }, "aiohappyeyeballs": { "hashes": [ - "sha256:4ca893e6c5c1f5bf3888b04cb5a3bee24995398efef6e0b9f747b5e89d84fd74", - "sha256:8522691d9a154ba1145b157d6d5c15e5c692527ce6a53c5e5f9876977f6dab2f" + "sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586", + "sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572" ], "markers": "python_version >= '3.8'", - "version": "==2.4.2" + "version": "==2.4.3" }, "aiohttp": { "extras": [ "speedups" ], "hashes": [ - "sha256:0245e1a71f3503b01d2c304529779a70277ccc0fe9847b48d437363de6e4336e", - "sha256:0246659d9a54a23a83f11842bdd58f335a1370aa66b376eeae16b7cf29009dde", - "sha256:02b4aa816cd3ab876f96ce8c6986648392137cbd6feddbf4189322515f34e1f6", - "sha256:0b210484fccff00cafa9bd8abedea8749b6d975df8c8e21c82d92bb25403db85", - "sha256:0d09e40e2ae6723af487ffde019055d0b6ce4eae0749fcfe9de624b61f1af6ec", - "sha256:0f25a79ac4ac0bd94cf283d3e86e6f3ec78fc39e2de6949b902c342148b7b5f6", - "sha256:10d19997f2f8d49d53b76163b71e263bb7b23f48041d0d4050a43445a0052c35", - "sha256:13085c0129a906b001d87dd43e247155f6c76820d98147c079b746e8a0665b17", - "sha256:1378164474a3866f7684a95efede1bee4016cd104bc10bf885e492c4459b715a", - "sha256:14dbfb208ffe3388e0770fd23bf9114cc933c10bb1dba35b538f3c9d685334d8", - "sha256:150deb28d5302cfec89fc31ea4bce774df06f5c03d95519f7588ca6517a472d7", - "sha256:164068b338c52dfe44f3490c70ef7b33c0e73d441c89f599ae2d93f7dcf3e395", - "sha256:171f1f5364a0ef5873480e6fddc3870ee37f1dfe216fa67507bbd4c91306f110", - "sha256:189979c7e9d8f40236534760daf5b41d2026d5ebabdf913e771d9b6bfbc992af", - "sha256:18c72a69ba20713f26fa40932cac17437b0c1d25edff2e27437a204c12275bd9", - "sha256:1d26881d98274ef0dbd4f069f383e5e90eb6e42e957289db14c47186386832ce", - "sha256:278cd430ba93a157ad1faf490fdd6051801085ffa31a27762133472555e56888", - "sha256:2b7794b3d23451e355b4a87959943125afff8dd31d8059651c2734de12f9e7f2", - "sha256:2c6140d6cbf8eebbcf1528364ce0b26d0a95788111659cfc008fba3a12fc874f", - "sha256:2d8d12d6a192f7b9f8a335cad8634a4f081d8319b75dd42257a1a3e557848d00", - "sha256:318824b98a2bdf84e9a21d413737a3c4f27bbad0a9ce16141488f631dbffb9b2", - "sha256:342600665e74eea20b3286045ebeb0aa2f9cececf2eb0acc6f6817205b112b29", - "sha256:365eff442a47b13e0e12c37240a6f75940ebee0b7943af43c84d5b43643fc80c", - "sha256:3915944c87c9bf488db4ca1ae6edca40b5bc77c4c2cf2f49b69886bc47b97db1", - "sha256:4296dd120e7e9728625eef1091039aff1a454c7147913d47839876c94b202226", - "sha256:431852e77cd72f60a0278f8cf557c8e568cd856f755a4b6c5232c7d8c6343d2e", - "sha256:4d23df9f01c8945d03cffcdd9ba9bfd88aa21ac567a39d0ac4d0c80499ed0d23", - "sha256:4f6b014f2176d2774b759b8e2951af4a613385ebcc08841cb5c0ca6d5dee74ee", - "sha256:582536d3d7f95a6d4d072d2326dd03eeb1549c1cc86d02c9bcec71899f4c66f2", - "sha256:5fc3538efae4e4df222a563559f8766234f49e845e8dbb2dd477eb8f3fd97242", - "sha256:636e3efb0bb024817cefa1ef86d678d1a73eb210ae162aff4234214060011ff5", - "sha256:63c9de949e05a5f729aecba6bf4b3d5403846caf546ea5020f8b9bf315bd8f12", - "sha256:68120c12c98bfc0e024ef1279be5f41327a54a5094710adc970ecc9724b91871", - "sha256:6bae913cbb183cd34863905088ef26a17c75332bd6bdd451ee8bf158c987cf19", - "sha256:73f151a1e21369a84d56b91a209590c23270c847463029fdcbda710516217644", - "sha256:77bc82d7b10f377957ba8e99bb1b13d946e9e9038fe89ba0888ad0b12e60c9c0", - "sha256:7a372f9ea521741667cec2ef4a64419448030411af2e844dfa8dbbb8074baea6", - "sha256:7b75cfa1e5fc7c87fc5f9de7124bb039b898791bb87207d2107bed5e3509670f", - "sha256:7ce1b54feaaf264e28a4474e13635d302a59aafb720b18c3c2885b8f35ce5040", - "sha256:7ed4435dcf507ef2de5b4be64276933eb19c78e5c7d00ca376fcd9a67d0139a0", - "sha256:80531f6f4fff5a1f7e495afbc4aff5c4230b605f26d56c40ecad27a269665608", - "sha256:81d3fc1b187656b6b465ed4ed4c9858f16ff2d9864da6225d80b8018abd7739b", - "sha256:82fa5fb983922b03f2b08d1140550c68b50313305115639e19b13489c284c30c", - "sha256:85d8a1d716516ef92c769eadb020600d27223899018ef8d07c09c117001cc7d5", - "sha256:871c2bf68ecc55056e5e3b0ae5929a1149f41c4255bbf99b1f858005f63360d1", - "sha256:87652147515031dafc1b37c9c3c42fbe9e2697af6264ec26080a6fe603cc5196", - "sha256:87d0e52b2905dbc1aeffcbf0611fa82e27874764332c11b984293a4b91cc8e9f", - "sha256:87e243b1df27ff685ab08228b7a938c0530beb60ad3dea7554da1554d46c9ad4", - "sha256:8ddf2c8c9ec6bb3f5c057e5c95605adb8e3f1e2d999e8801736f448aff29280e", - "sha256:8fbf91559400fe1a98d84af36f5a66aa59c359ac3cb113b17d304ced6a4601b4", - "sha256:99c11c5d632fa2222cc5805105841f6f3c40df116368fde40fbd71f8b14ea692", - "sha256:9cd67e5c84cb75a471b2e35f3fb0da52e6d359d1794d3465a87052fb240e64b5", - "sha256:a1fe407bec2f14a3d79ec92aa767b930857a6782589ea87ac76fd8081dea3dab", - "sha256:a84fe27904dbb43a236532d6d841d6132200b7bb53ba73d0300b0b586ceab6cc", - "sha256:aa42c4e78925a438a6f7df0d9b165d29cdc0a44fc5ce838d6c293a0161a2bd9a", - "sha256:aeea07c89a5a53463c70957feb85d4b846982c0f054b521fc44f52862e7871cf", - "sha256:af10344fb1ee195b2cd5840b61d8c8121b16d3b3baa2da5a86cf4001a7e5bd98", - "sha256:b5d8c94fd23f41007799ec657e18661f9f8c5b566a1e4fe944e3514e505a6b49", - "sha256:b5f8270946777d6971c27479cb6e7f54578be960928a8922cb59130e856d8484", - "sha256:b6fb89edeadfd69df75f8cea97c3533805a9960cc56034ad296abe9b18771842", - "sha256:b92100555f86b314ed840ed61d937fc30ca39ad453c9aa9020414a3cce955d9b", - "sha256:bab2544f09cd1db154c105e03b1c941032fd7237da5da184595771999ca90daa", - "sha256:bc1f4e0f4b1ae9289b4d0cc3bf5d6d55176c38ef1d41484550f3f9a0a78bedae", - "sha256:beda1abd7b23d489a5b66a46eba5a9e0db58e4ad91d68697409eeabda343fb9d", - "sha256:befc2f0794bc4bbbb1f8d0e245d32ee13331205b58f54910789e9e78d2a6fbf5", - "sha256:bf1cd9bfd598899396bdb8a4dc5234144a77e482e7489972b7956cf66e272872", - "sha256:bfa8c8af8c92e3d6c1eff02cf5127f62c1e7564e7b0f1a9767035f81a2e6bb20", - "sha256:bff7ef30cb6fc186ea6dda9e19d6105b1c213e3a3f759b5a23c271c778027260", - "sha256:c161f9e353f291d23069a8f67180fd52c76d72d4671f4f53602ea9ac29f47d50", - "sha256:c6052d92b47b8cf3736b1f01ac8f83cf02f188ef7542848055a5e227db0e16cb", - "sha256:caf083bf26b1e286ab1929dbd8d8cab6230160576a0ed5e3bfb3487bb19474c2", - "sha256:cd658aeaa65fb99fcc3b93882bb33cbd600501d40473488aec163a981d7b05ee", - "sha256:ce7c12bfbb1579e81cdf2e7db4338f8c768da2493aa0db60a858a542d551563c", - "sha256:ced77f4dd0c4f0107ee96f8df162b984470ac9f94ef93dd44dba62838fd85cde", - "sha256:da5a03cbe746f182f7b61e119dde24d388cf77965fea320bc8aba61b75039d06", - "sha256:dd8a0a0ef895e4c3f1afd31c2a6f89d68a94baacdbe2eb9bf90ac54b997cf99b", - "sha256:df23cb35bec54b73fba371c7c904994433651458acf8bfb7c84464fef5834c0a", - "sha256:e083e29b6db8e34a507cd678f89eab3ae5f307486ea6010c6473436d3769628d", - "sha256:e152296b2c50417445eacdb2353d3c10e702f6593aa774277510fb7761304302", - "sha256:e19337d6552af197ebb8c886daea0b938ae34eff776c1fa914ad433f6db3970f", - "sha256:e1a9b4026b6fe41adde784e308b0ad0d6a8b5cc9062f9c349125fd57149bc8a9", - "sha256:e2783754bfcee0b13b8e55932b418cf8984c17099fd1b37341d4696447d0c328", - "sha256:e2e0083e6f9f9cb0a0bedd694782e7fb8a54eb4de40e1743d9bb526f1c1eea88", - "sha256:e8ccaa99871303323bd2cda120043039729497642da5c6f53e066b19f73d9df8", - "sha256:eea89c47ae8d592f7563f4355132fe844b5e2f8660292deacc292253bef291cd", - "sha256:f33a6d023b207ad8227e607814c0020b42c53e01a66004fc0f2555e1a4941282", - "sha256:f44f09b67a458400215d9efedb9cfb5e3256dbeb2cc2da68e4592b7b36bac0c9", - "sha256:f8aaa0bc8e39352684982b378ba3f7e32e78a746da433aaeceb7e93d7fdf9ce3", - "sha256:fcfabf9338fed009fd9e11bf496a927ea67b1ce15d34847cb0a98aa6f042b989", - "sha256:fee4d2246b091b7e252cd5bcdbd4362fa21c3cc6a445fef54de793731546ab24", - "sha256:feff2170b23921a526f31d78c8f76bbb9cde825e78035286d8571ce0c81901ab" - ], - "markers": "python_version >= '3.8'", - "version": "==3.10.7" + "sha256:10c7932337285a6bfa3a5fe1fd4da90b66ebfd9d0cbd1544402e1202eb9a8c3e", + "sha256:177126e971782769b34933e94fddd1089cef0fe6b82fee8a885e539f5b0f0c6a", + "sha256:1ce46dfb49cfbf9e92818be4b761d4042230b1f0e05ffec0aad15b3eb162b905", + "sha256:1e7a6af57091056a79a35104d6ec29d98ec7f1fb7270ad9c6fff871b678d1ff8", + "sha256:21a72f4a9c69a8567a0aca12042f12bba25d3139fd5dd8eeb9931f4d9e8599cd", + "sha256:21c1925541ca84f7b5e0df361c0a813a7d6a56d3b0030ebd4b220b8d232015f9", + "sha256:21f8225f7dc187018e8433c9326be01477fb2810721e048b33ac49091b19fb4a", + "sha256:22cdeb684d8552490dd2697a5138c4ecb46f844892df437aaf94f7eea99af879", + "sha256:270e653b5a4b557476a1ed40e6b6ce82f331aab669620d7c95c658ef976c9c5e", + "sha256:2df786c96c57cd6b87156ba4c5f166af7b88f3fc05f9d592252fdc83d8615a3c", + "sha256:32710d6b3b6c09c60c794d84ca887a3a2890131c0b02b3cefdcc6709a2260a7c", + "sha256:33a68011a38020ed4ff41ae0dbf4a96a202562ecf2024bdd8f65385f1d07f6ef", + "sha256:365783e1b7c40b59ed4ce2b5a7491bae48f41cd2c30d52647a5b1ee8604c68ad", + "sha256:3a95d2686bc4794d66bd8de654e41b5339fab542b2bca9238aa63ed5f4f2ce82", + "sha256:3b2036479b6b94afaaca7d07b8a68dc0e67b0caf5f6293bb6a5a1825f5923000", + "sha256:3c7f270f4ca92760f98a42c45a58674fff488e23b144ec80b1cc6fa2effed377", + "sha256:3f6d47e392c27206701565c8df4cac6ebed28fdf6dcaea5b1eea7a4631d8e6db", + "sha256:40d2d719c3c36a7a65ed26400e2b45b2d9ed7edf498f4df38b2ae130f25a0d01", + "sha256:4618f0d2bf523043866a9ff8458900d8eb0a6d4018f251dae98e5f1fb699f3a8", + "sha256:471a8c47344b9cc309558b3fcc469bd2c12b49322b4b31eb386c4a2b2d44e44a", + "sha256:4954e6b06dd0be97e1a5751fc606be1f9edbdc553c5d9b57d72406a8fbd17f9d", + "sha256:497a7d20caea8855c5429db3cdb829385467217d7feb86952a6107e033e031b9", + "sha256:4b91f4f62ad39a8a42d511d66269b46cb2fb7dea9564c21ab6c56a642d28bff5", + "sha256:4dbf252ac19860e0ab56cd480d2805498f47c5a2d04f5995d8d8a6effd04b48c", + "sha256:4e10b04542d27e21538e670156e88766543692a0a883f243ba8fad9ddea82e53", + "sha256:5284997e3d88d0dfb874c43e51ae8f4a6f4ca5b90dcf22995035187253d430db", + "sha256:57359785f27394a8bcab0da6dcd46706d087dfebf59a8d0ad2e64a4bc2f6f94f", + "sha256:597128cb7bc5f068181b49a732961f46cb89f85686206289d6ccb5e27cb5fbe2", + "sha256:5aa1a073514cf59c81ad49a4ed9b5d72b2433638cd53160fd2f3a9cfa94718db", + "sha256:680dbcff5adc7f696ccf8bf671d38366a1f620b5616a1d333d0cb33956065395", + "sha256:6984dda9d79064361ab58d03f6c1e793ea845c6cfa89ffe1a7b9bb400dfd56bd", + "sha256:69de056022e7abf69cb9fec795515973cc3eeaff51e3ea8d72a77aa933a91c52", + "sha256:6c7efa6616a95e3bd73b8a69691012d2ef1f95f9ea0189e42f338fae080c2fc6", + "sha256:6d1ad868624f6cea77341ef2877ad4e71f7116834a6cd7ec36ec5c32f94ee6ae", + "sha256:713dff3f87ceec3bde4f3f484861464e722cf7533f9fa6b824ec82bb5a9010a7", + "sha256:71462f8eeca477cbc0c9700a9464e3f75f59068aed5e9d4a521a103692da72dc", + "sha256:7c38cfd355fd86c39b2d54651bd6ed7d63d4fe3b5553f364bae3306e2445f847", + "sha256:8296edd99d0dd9d0eb8b9e25b3b3506eef55c1854e9cc230f0b3f885f680410b", + "sha256:85431c9131a9a0f65260dc7a65c800ca5eae78c4c9931618f18c8e0933a0e0c1", + "sha256:85e4d7bd05d18e4b348441e7584c681eff646e3bf38f68b2626807f3add21aa2", + "sha256:8885ca09d3a9317219c0831276bfe26984b17b2c37b7bf70dd478d17092a4772", + "sha256:8960fabc20bfe4fafb941067cda8e23c8c17c98c121aa31c7bf0cdab11b07842", + "sha256:9443d9ebc5167ce1fbb552faf2d666fb22ef5716a8750be67efd140a7733738c", + "sha256:9721554bfa9e15f6e462da304374c2f1baede3cb06008c36c47fa37ea32f1dc4", + "sha256:98a4eb60e27033dee9593814ca320ee8c199489fbc6b2699d0f710584db7feb7", + "sha256:98fae99d5c2146f254b7806001498e6f9ffb0e330de55a35e72feb7cb2fa399b", + "sha256:9a281cba03bdaa341c70b7551b2256a88d45eead149f48b75a96d41128c240b3", + "sha256:a087c84b4992160ffef7afd98ef24177c8bd4ad61c53607145a8377457385100", + "sha256:a1ba7bc139592339ddeb62c06486d0fa0f4ca61216e14137a40d626c81faf10c", + "sha256:a3081246bab4d419697ee45e555cef5cd1def7ac193dff6f50be761d2e44f194", + "sha256:a72f89aea712c619b2ca32c6f4335c77125ede27530ad9705f4f349357833695", + "sha256:a78ba86d5a08207d1d1ad10b97aed6ea48b374b3f6831d02d0b06545ac0f181e", + "sha256:a961ee6f2cdd1a2be4735333ab284691180d40bad48f97bb598841bfcbfb94ec", + "sha256:ab1546fc8e00676febc81c548a876c7bde32f881b8334b77f84719ab2c7d28dc", + "sha256:ab2d6523575fc98896c80f49ac99e849c0b0e69cc80bf864eed6af2ae728a52b", + "sha256:aff048793d05e1ce05b62e49dccf81fe52719a13f4861530706619506224992b", + "sha256:b1a012677b8e0a39e181e218de47d6741c5922202e3b0b65e412e2ce47c39337", + "sha256:b667e2a03407d79a76c618dc30cedebd48f082d85880d0c9c4ec2faa3e10f43e", + "sha256:b91557ee0893da52794b25660d4f57bb519bcad8b7df301acd3898f7197c5d81", + "sha256:badb51d851358cd7535b647bb67af4854b64f3c85f0d089c737f75504d5910ec", + "sha256:c36074b26f3263879ba8e4dbd33db2b79874a3392f403a70b772701363148b9f", + "sha256:c4916070e12ae140110aa598031876c1bf8676a36a750716ea0aa5bd694aa2e7", + "sha256:c6769d71bfb1ed60321363a9bc05e94dcf05e38295ef41d46ac08919e5b00d19", + "sha256:c887019dbcb4af58a091a45ccf376fffe800b5531b45c1efccda4bedf87747ea", + "sha256:cd9716ef0224fe0d0336997eb242f40619f9f8c5c57e66b525a1ebf9f1d8cebe", + "sha256:ceacea31f8a55cdba02bc72c93eb2e1b77160e91f8abd605969c168502fd71eb", + "sha256:d088ca05381fd409793571d8e34eca06daf41c8c50a05aeed358d2d340c7af81", + "sha256:d3a79200a9d5e621c4623081ddb25380b713c8cf5233cd11c1aabad990bb9381", + "sha256:d82404a0e7b10e0d7f022cf44031b78af8a4f99bd01561ac68f7c24772fed021", + "sha256:d95ae4420669c871667aad92ba8cce6251d61d79c1a38504621094143f94a8b4", + "sha256:da57af0c54a302b7c655fa1ccd5b1817a53739afa39924ef1816e7b7c8a07ccb", + "sha256:ddb9b9764cfb4459acf01c02d2a59d3e5066b06a846a364fd1749aa168efa2be", + "sha256:de23085cf90911600ace512e909114385026b16324fa203cc74c81f21fd3276a", + "sha256:e1f0f7b27171b2956a27bd8f899751d0866ddabdd05cbddf3520f945130a908c", + "sha256:e32148b4a745e70a255a1d44b5664de1f2e24fcefb98a75b60c83b9e260ddb5b", + "sha256:e45fdfcb2d5bcad83373e4808825b7512953146d147488114575780640665027", + "sha256:e56bb7e31c4bc79956b866163170bc89fd619e0581ce813330d4ea46921a4881", + "sha256:e860985f30f3a015979e63e7ba1a391526cdac1b22b7b332579df7867848e255", + "sha256:ee3587506898d4a404b33bd19689286ccf226c3d44d7a73670c8498cd688e42c", + "sha256:ee97c4e54f457c366e1f76fbbf3e8effee9de57dae671084a161c00f481106ce", + "sha256:ef9b484604af05ca745b6108ca1aaa22ae1919037ae4f93aaf9a37ba42e0b835", + "sha256:f21e8f2abed9a44afc3d15bba22e0dfc71e5fa859bea916e42354c16102b036f", + "sha256:f23a6c1d09de5de89a33c9e9b229106cb70dcfdd55e81a3a3580eaadaa32bc92", + "sha256:f5d5d5401744dda50b943d8764508d0e60cc2d3305ac1e6420935861a9d544bc", + "sha256:f78e2a78432c537ae876a93013b7bc0027ba5b93ad7b3463624c4b6906489332", + "sha256:f8179855a4e4f3b931cb1764ec87673d3fbdcca2af496c8d30567d7b034a13db", + "sha256:fc0e7f91705445d79beafba9bb3057dd50830e40fe5417017a76a214af54e122", + "sha256:fe285a697c851734285369614443451462ce78aac2b77db23567507484b1dc6f", + "sha256:fe3d79d6af839ffa46fdc5d2cf34295390894471e9875050eafa584cb781508d", + "sha256:fecd55e7418fabd297fd836e65cbd6371aa4035a264998a091bbf13f94d9c44d", + "sha256:ffef3d763e4c8fc97e740da5b4d0f080b78630a3914f4e772a122bbfa608c1db" + ], + "markers": "python_version >= '3.8'", + "version": "==3.10.8" }, "aiohttp-retry": { "hashes": [ @@ -379,11 +379,11 @@ "django" ], "hashes": [ - "sha256:6fd5b17cda53adf9ec3829ada084e91091ea293cad93d2295c2a6ddde8bacaa1", - "sha256:ea70dd183a3a999f329ab7ff52e3b65f442f3a418b8acec81367f57f36a58012" + "sha256:702794d0db45746118ec63b02e81f8d8edd1b87b69337a9c3898eb6ea2830f0e", + "sha256:cefa43f74ba301d4f60d5ed6bfdc5b50152228922958415d2fd9a99b3eca103f" ], "markers": "python_version >= '3.11'", - "version": "==1.0.2" + "version": "==1.0.3" }, "celery": { "hashes": [ @@ -1358,66 +1358,75 @@ "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.11' and platform_python_implementation == 'CPython'", "version": "==3.1.1" }, "grpcio": { "hashes": [ - "sha256:0e6c9b42ded5d02b6b1fea3a25f036a2236eeb75d0579bfd43c0018c88bf0a3e", - "sha256:161d5c535c2bdf61b95080e7f0f017a1dfcb812bf54093e71e5562b16225b4ce", - "sha256:17663598aadbedc3cacd7bbde432f541c8e07d2496564e22b214b22c7523dac8", - "sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d", - "sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858", - "sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0", - "sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a", - "sha256:30a1c2cf9390c894c90bbc70147f2372130ad189cffef161f0432d0157973f45", - "sha256:31a049daa428f928f21090403e5d18ea02670e3d5d172581670be006100db9ef", - "sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2", - "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac", - "sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd", - "sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1", - "sha256:4825a3aa5648010842e1c9d35a082187746aa0cdbf1b7a2a930595a94fb10fce", - "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492", - "sha256:48b0d92d45ce3be2084b92fb5bae2f64c208fea8ceed7fccf6a7b524d3c4942e", - "sha256:4d813316d1a752be6f5c4360c49f55b06d4fe212d7df03253dfdae90c8a402bb", - "sha256:5dd67ed9da78e5121efc5c510f0122a972216808d6de70953a740560c572eb44", - "sha256:6f914386e52cbdeb5d2a7ce3bf1fdfacbe9d818dd81b6099a05b741aaf3848bb", - "sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759", - "sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e", - "sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761", - "sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26", - "sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791", - "sha256:9c9bebc6627873ec27a70fc800f6083a13c70b23a5564788754b9ee52c5aef6c", - "sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60", - "sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df", - "sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a", - "sha256:aa8ba945c96e73de29d25331b26f3e416e0c0f621e984a3ebdb2d0d0b596a3b3", - "sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734", - "sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f", - "sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083", - "sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524", - "sha256:bff2096bdba686019fb32d2dde45b95981f0d1490e054400f70fc9a8af34b49d", - "sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a", - "sha256:c9f80f9fad93a8cf71c7f161778ba47fd730d13a343a46258065c4deb4b550c0", - "sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb", - "sha256:d0cd7050397b3609ea51727b1811e663ffda8bda39c6a5bb69525ef12414b503", - "sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815", - "sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22", - "sha256:ecfe735e7a59e5a98208447293ff8580e9db1e890e232b8b292dc8bd15afc0d2", - "sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c", - "sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d", - "sha256:f1fe60d0772831d96d263b53d83fb9a3d050a94b0e94b6d004a5ad111faa5b5b", - "sha256:f517fd7259fe823ef3bd21e508b653d5492e706e9f0ef82c16ce3347a8a5620c", - "sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9" - ], - "version": "==1.66.1" + "sha256:02697eb4a5cbe5a9639f57323b4c37bcb3ab2d48cec5da3dc2f13334d72790dd", + "sha256:03b0b307ba26fae695e067b94cbb014e27390f8bc5ac7a3a39b7723fed085604", + "sha256:05bc2ceadc2529ab0b227b1310d249d95d9001cd106aa4d31e8871ad3c428d73", + "sha256:06de8ec0bd71be123eec15b0e0d457474931c2c407869b6c349bd9bed4adbac3", + "sha256:0be4e0490c28da5377283861bed2941d1d20ec017ca397a5df4394d1c31a9b50", + "sha256:12fda97ffae55e6526825daf25ad0fa37483685952b5d0f910d6405c87e3adb6", + "sha256:1caa38fb22a8578ab8393da99d4b8641e3a80abc8fd52646f1ecc92bcb8dee34", + "sha256:2018b053aa15782db2541ca01a7edb56a0bf18c77efed975392583725974b249", + "sha256:20657d6b8cfed7db5e11b62ff7dfe2e12064ea78e93f1434d61888834bc86d75", + "sha256:2335c58560a9e92ac58ff2bc5649952f9b37d0735608242973c7a8b94a6437d8", + "sha256:31fd163105464797a72d901a06472860845ac157389e10f12631025b3e4d0453", + "sha256:38b68498ff579a3b1ee8f93a05eb48dc2595795f2f62716e797dc24774c1aaa8", + "sha256:3b00efc473b20d8bf83e0e1ae661b98951ca56111feb9b9611df8efc4fe5d55d", + "sha256:3ed71e81782966ffead60268bbda31ea3f725ebf8aa73634d5dda44f2cf3fb9c", + "sha256:45a3d462826f4868b442a6b8fdbe8b87b45eb4f5b5308168c156b21eca43f61c", + "sha256:49f0ca7ae850f59f828a723a9064cadbed90f1ece179d375966546499b8a2c9c", + "sha256:4e504572433f4e72b12394977679161d495c4c9581ba34a88d843eaf0f2fbd39", + "sha256:4ea1d062c9230278793820146c95d038dc0f468cbdd172eec3363e42ff1c7d01", + "sha256:563588c587b75c34b928bc428548e5b00ea38c46972181a4d8b75ba7e3f24231", + "sha256:6001e575b8bbd89eee11960bb640b6da6ae110cf08113a075f1e2051cc596cae", + "sha256:66a0cd8ba6512b401d7ed46bb03f4ee455839957f28b8d61e7708056a806ba6a", + "sha256:6851de821249340bdb100df5eacfecfc4e6075fa85c6df7ee0eb213170ec8e5d", + "sha256:728bdf36a186e7f51da73be7f8d09457a03061be848718d0edf000e709418987", + "sha256:73e3b425c1e155730273f73e419de3074aa5c5e936771ee0e4af0814631fb30a", + "sha256:73fc8f8b9b5c4a03e802b3cd0c18b2b06b410d3c1dcbef989fdeb943bd44aff7", + "sha256:78fa51ebc2d9242c0fc5db0feecc57a9943303b46664ad89921f5079e2e4ada7", + "sha256:7b2c86457145ce14c38e5bf6bdc19ef88e66c5fee2c3d83285c5aef026ba93b3", + "sha256:7d69ce1f324dc2d71e40c9261d3fdbe7d4c9d60f332069ff9b2a4d8a257c7b2b", + "sha256:802d84fd3d50614170649853d121baaaa305de7b65b3e01759247e768d691ddf", + "sha256:80fd702ba7e432994df208f27514280b4b5c6843e12a48759c9255679ad38db8", + "sha256:8ac475e8da31484efa25abb774674d837b343afb78bb3bcdef10f81a93e3d6bf", + "sha256:950da58d7d80abd0ea68757769c9db0a95b31163e53e5bb60438d263f4bed7b7", + "sha256:99a641995a6bc4287a6315989ee591ff58507aa1cbe4c2e70d88411c4dcc0839", + "sha256:9c3a99c519f4638e700e9e3f83952e27e2ea10873eecd7935823dab0c1c9250e", + "sha256:9c509a4f78114cbc5f0740eb3d7a74985fd2eff022971bc9bc31f8bc93e66a3b", + "sha256:a18e20d8321c6400185b4263e27982488cb5cdd62da69147087a76a24ef4e7e3", + "sha256:a917d26e0fe980b0ac7bfcc1a3c4ad6a9a4612c911d33efb55ed7833c749b0ee", + "sha256:a9539f01cb04950fd4b5ab458e64a15f84c2acc273670072abe49a3f29bbad54", + "sha256:ad2efdbe90c73b0434cbe64ed372e12414ad03c06262279b104a029d1889d13e", + "sha256:b672abf90a964bfde2d0ecbce30f2329a47498ba75ce6f4da35a2f4532b7acbc", + "sha256:bbd27c24a4cc5e195a7f56cfd9312e366d5d61b86e36d46bbe538457ea6eb8dd", + "sha256:c400ba5675b67025c8a9f48aa846f12a39cf0c44df5cd060e23fda5b30e9359d", + "sha256:c408f5ef75cfffa113cacd8b0c0e3611cbfd47701ca3cdc090594109b9fcbaed", + "sha256:c806852deaedee9ce8280fe98955c9103f62912a5b2d5ee7e3eaa284a6d8d8e7", + "sha256:ce89f5876662f146d4c1f695dda29d4433a5d01c8681fbd2539afff535da14d4", + "sha256:d25a14af966438cddf498b2e338f88d1c9706f3493b1d73b93f695c99c5f0e2a", + "sha256:d8d4732cc5052e92cea2f78b233c2e2a52998ac40cd651f40e398893ad0d06ec", + "sha256:d9a9724a156c8ec6a379869b23ba3323b7ea3600851c91489b871e375f710bc8", + "sha256:e636ce23273683b00410f1971d209bf3689238cf5538d960adc3cdfe80dd0dbd", + "sha256:e88264caad6d8d00e7913996030bac8ad5f26b7411495848cc218bd3a9040b6c", + "sha256:f145cc21836c332c67baa6fc81099d1d27e266401565bf481948010d6ea32d46", + "sha256:fb57870449dfcfac428afbb5a877829fcb0d6db9d9baa1148705739e9083880e", + "sha256:fb70487c95786e345af5e854ffec8cb8cc781bcc5df7930c4fbb7feaa72e1cdf", + "sha256:fe96281713168a3270878255983d2cb1a97e034325c8c2c25169a69289d3ecfa", + "sha256:ff1f7882e56c40b0d33c4922c15dfa30612f05fb785074a012f7cda74d1c3679" + ], + "version": "==1.66.2" }, "grpcio-status": { "hashes": [ - "sha256:b3f7d34ccc46d83fea5261eea3786174459f763c31f6e34f1d24eba6d515d024", - "sha256:cf9ed0b4a83adbe9297211c95cb5488b0cd065707e812145b842c85c4782ff02" + "sha256:e5fe189f6897d12aa9cd74408a17ca41e44fad30871cf84f5cbd17bd713d2455", + "sha256:fb55cbb5c2e67062f7a4d5c99e489d074fb57e98678d5c3c6692a2d74d89e9ae" ], - "version": "==1.66.1" + "version": "==1.66.2" }, "gunicorn": { "hashes": [ @@ -1554,11 +1563,11 @@ }, "httpcore": { "hashes": [ - "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61", - "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5" + "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f", + "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f" ], "markers": "python_version >= '3.8'", - "version": "==1.0.5" + "version": "==1.0.6" }, "httplib2": { "hashes": [ @@ -1634,12 +1643,12 @@ }, "icalendar": { "hashes": [ - "sha256:5ded5415e2e1edef5ab230024a75878a7a81d518a3b1ae4f34bf20b173c84dc2", - "sha256:92799fde8cce0b61daa8383593836d1e19136e504fa1671f471f98be9b029706" + "sha256:567e718551d800362db04ca09777295336e1803f6fc6bc0a7a5e258917fa8ed0", + "sha256:7ddf60d343f3c1f716de9b62f6e80ffd95d03cab62464894a0539feab7b5c76e" ], "index": "pypi", - "markers": "python_version >= '3.7'", - "version": "==5.0.13" + "markers": "python_version >= '3.8'", + "version": "==6.0.0" }, "idna": { "hashes": [ @@ -1807,12 +1816,12 @@ }, "launchdarkly-server-sdk": { "hashes": [ - "sha256:42f4cb25ebf547d5ebf228f0852bc3e435f395a6eb437de68c47e393729502b2", - "sha256:e547fe5d49aaf5c9537718467545dc1e38f837bb396259465035e30c1a54798a" + "sha256:192396e1f2b02416722d4ce279abeea38978b606d8553307e4b7bd0f756fc096", + "sha256:249e9cf4095ac4f2fa3bf9b1df151e1d96421d68f1580b3ca2a51c47a8bd2940" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==9.7.1" + "version": "==9.7.2" }, "linked-services": { "extras": [ @@ -2448,12 +2457,12 @@ }, "openai": { "hashes": [ - "sha256:7967fc8372d5e005ad61514586fb286d593facafccedbee00416bc38ee07c2e6", - "sha256:80cbdf275488894c70bfbad711dbba6f31ea71d579b97e364bfd99cdf030158e" + "sha256:8dc4f9d75ccdd5466fc8c99a952186eddceb9fd6ba694044773f3736a847149d", + "sha256:d9affafb7e51e5a27dce78589d4964ce4d6f6d560307265933a94b2e3f3c5d2c" ], "index": "pypi", "markers": "python_full_version >= '3.7.1'", - "version": "==1.50.1" + "version": "==1.51.0" }, "packaging": { "hashes": [ @@ -2699,80 +2708,80 @@ "pool" ], "hashes": [ - "sha256:8bad2e497ce22d556dac1464738cb948f8d6bab450d965cf1d8a8effd52412e0", - "sha256:babf565d459d8f72fb65da5e211dd0b58a52c51e4e1fa9cadecff42d6b7619b2" + "sha256:644d3973fe26908c73d4be746074f6e5224b03c1101d302d9a53bf565ad64907", + "sha256:a5764f67c27bec8bfac85764d23c534af2c27b893550377e37ce59c12aac47a2" ], "markers": "python_version >= '3.8'", - "version": "==3.2.2" + "version": "==3.2.3" }, "psycopg-binary": { "hashes": [ - "sha256:00273dd011892e8216fcef76b42f775ddaa6348664a7fffae2a27c9557f45bfa", - "sha256:020c5154be144a1440cf87eae012b9004fb414ae4b9e7b1b9fb808fe39e96e83", - "sha256:035753f80cbbf6aceca6386f53e139df70c7aca057b0592711047b5a8cfef8bb", - "sha256:05406b96139912574571b1c56bb023839a9146cf4b57c4548f36251dd5909fa1", - "sha256:059aa5e8fa119de328b4cb02ee80775443763b25682a02dd7d026b8d4f565834", - "sha256:05a50f94e1e4fa37a0074b09263b83b0aa038c3c72068a61f1ad61ea449ef9d5", - "sha256:06963f88916a177df95aaed27101af0989ba206654743b1a0e050b9d8e734686", - "sha256:0718be095cefdad712542169d16fa58b3bd9200a3de1b0217ae761cdec1cf569", - "sha256:0ad9c09de4c262f516ae6891d042a4325649b18efa39dd82bbe0f7bc95c37bfb", - "sha256:0b32b0e838841d5b109d32fc706b8bc64e50c161fee3f1371ccf696e5598bc49", - "sha256:0dd314229885a81f9497875295d8788e651b78945627540f1e78ed71595e614a", - "sha256:1a4eb737682c02a602a12aa85a492608066f77793dab681b1c4e885fedc160b1", - "sha256:1b3c5a04eaf8866e399315cff2e810260cce10b797437a9f49fd71b5f4b94d0a", - "sha256:1e1f013bfb744023df23750fde51edcb606def8328473361db3c192c392c6060", - "sha256:1ee891287c2da57e7fee31fbe2fbcdf57125768133d811b02e9523d5a052eb28", - "sha256:2eb6f8f410dbbb71b8c633f283b8588b63bee0a7321f00ab76e9c800c593f732", - "sha256:2ec4986c4ac2503e865acd3943d179531c3bbfa5a1c8ee81fcfccb551dad645f", - "sha256:366cc4e194f7feb4e3038d6775fd4b69835e7d923972aee5baec986de972abd6", - "sha256:3c482c3236ded54add31136a91d5223b233ec301f297fa2db79747404222dca6", - "sha256:3c701507a49340de422d77a6ce95918a0019990bbf27daec35aa40050c6eadb6", - "sha256:43b209be0424e8abece428a884cb711f504e3526dfbcb0bf51529907a55eda15", - "sha256:4afbb97d64cd8078edec859b07859a18ef3de7261a3a873ba52f32548373ae92", - "sha256:4bcb489615d7e56d1de42937e6a0fc13f766505729afdb54c2947a52db295220", - "sha256:4cf64e41e238620f05aad862f06bc8424f8f320d8075f1499bd85a225d18bd57", - "sha256:4f12640ba92c538b3b64a199a918d3bb0cc0d7f7123c6ba93cb065e1a2d049f0", - "sha256:51f56ae2898acaa33623adad96ddc5acbb5e2f72f2fc020065c8be05c0e01dce", - "sha256:554d208757129d34fa47b7c890f9ef922f754e99c6b089cb3a209aa0fe282682", - "sha256:566b1c530898590f0ac9d949cf94351c08d73c89f8800c74c0a63ffd89a383c8", - "sha256:5e95e4a8076ac7611e571623e1113fa84fd48c0459601969ffbf534d7aa236e7", - "sha256:6269d79a3d7d76b6fcf0fafae8444da00e83777a6c68c43851351a571ad37155", - "sha256:66de2dd7d37bf66eb234ca9d907f5cd8caca43ff8d8a50dd5c15844d1cf0390c", - "sha256:68d03efab7e2830a0df3aa4c29a708930e3f6b9fd98774ff9c4fd1f33deafecc", - "sha256:6c7b6a8d4e1b77cdb50192b61235b33fc2f1d28c67627fc93a1d43e9130dd479", - "sha256:705da5bc4364bd7529473225fca02b795653bc5bd824dbe43e1df0b1a40fe691", - "sha256:71dc3cc10d1fd7d26a3079d0a5b4a8e8ad0d7b89a702ceb7605a52e4395be122", - "sha256:7c357cf87e8d7612cfe781225be7669f35038a765d1b53ec9605f6c5aef9ee85", - "sha256:849d518e7d4c6186e1e48ea2ac2671912edf7e732fffe6f01dfed61cf0245de4", - "sha256:87cceaf07760a04023596f9ca1d4e929d38ae8d778161cb3e8d27a0f990dd264", - "sha256:8937dc548621b336b0d8383a3470fb7192b42a108c760a152282909867bf5b26", - "sha256:8eacbf58d4f8d7bc82e0a60476afa2622b5a58f639a3cc2710e3e37b72aff3cb", - "sha256:8ee2b19152bcec8f356f989c31768702be5f139b4d51094273c4a9ddc8c55380", - "sha256:951507b3d77a64c907afe893e01e09b41051fd7e27e9462f450fb8bb64bc22b0", - "sha256:989acbe2f552769cdb780346cea32d86e7c117044238d5172ac10b025fe47194", - "sha256:9e120a576e74e4e612c48f4b021e322e320ca102534d78a0ca4db2ffd058ae8d", - "sha256:9efe0ca78be4a573b4b81226904c711cfadc4783d64bfdf58a3394da7c1a1354", - "sha256:9fee41c99312002e5d1f7462b1954aefed44c6efe5f021c3eac311640c16f6b7", - "sha256:a06136aab55a2de7dd4e2555badae276846827cfb023e6ba1b22f7a7b88e3f1b", - "sha256:a60674dff4a4194e88312b463fb84ac80924c2b9e25d0e0460f3176bf1af4a6b", - "sha256:a86f578d63f2e1fdf87c9adaed4ff23d7919bda8791cf1380fa4cf3a857ccb8b", - "sha256:b286ed65a891928bd457ffa0cd5fec09b9b5208bfd096d087e45369f07c5cb85", - "sha256:b45553c6b614d02e1486585980afdfd18f0000aac668e2e87c6e32da1adb051a", - "sha256:bf1d3582185cb43ecc27403bee2f5405b7a45ccaab46c8508d9a9327341574fc", - "sha256:c22e615ee0ecfc6687bb8a39a4ed9d6bac030b5e72ac15e7324fd6e48979af71", - "sha256:c432710bdf8ccfdd75b0bc9cdf1fd21ff394363e4daec099c667f3c5f1721e2b", - "sha256:c9ee99336151ff7c30682f2ef9cb1174d235bc1471322faabba97f9db1398167", - "sha256:d07e62476ee8c54853b2b8cfdf3858a574218103b4cd213211f64326c7812437", - "sha256:d3c147eea9f3950a34133dc187e8d3534e54ff4a178a4ebd8993b2c97e123200", - "sha256:d6dd5d21a298c3c53af20ced8da4ae4cd038c6fe88c80842a8888fa3660b2094", - "sha256:e234edc4bb746d8ac3daae8753ee38eaa7af2ee333a1d35ce6b02a02874aed18", - "sha256:ec29c7ec136263628e3f09a53e51d0a4b1ad765a6e45135707bfa848b39113f9", - "sha256:ed1ad836a0c21890c7f84e73c7ef1ed0950e0e4b0d8e49b609b6fd9c13f2ca21", - "sha256:ef341c556aeaa43a2729b07b04e20bfffdcf3d96c4a96e728ca94fe4ce632d8c", - "sha256:fb303b03c243a9041e1873b596e246f7caaf01710b312fafa65b1db5cd77dd6f", - "sha256:fdc74a83348477b28bea9e7b391c9fc189b480fe3cd0e46bb989514410b64d60" + "sha256:0463a11b1cace5a6aeffaf167920707b912b8986a9c7920341c75e3686277920", + "sha256:05a1bdce30356e70a05428928717765f4a9229999421013f41338d9680d03a63", + "sha256:06b5cc915e57621eebf2393f4173793ed7e3387295f07fed93ed3fb6a6ccf585", + "sha256:07d019a786eb020c0f984691aa1b994cb79430061065a694cf6f94056c603d26", + "sha256:09baa041856b35598d335b1a74e19a49da8500acedf78164600694c0ba8ce21b", + "sha256:1303bf8347d6be7ad26d1362af2c38b3a90b8293e8d56244296488ee8591058e", + "sha256:192a5f8496e6e1243fdd9ac20e117e667c0712f148c5f9343483b84435854c78", + "sha256:1985ab05e9abebfbdf3163a16ebb37fbc5d49aff2bf5b3d7375ff0920bbb54cd", + "sha256:1f8b0d0e99d8e19923e6e07379fa00570be5182c201a8c0b5aaa9a4d4a4ea20b", + "sha256:257c4aea6f70a9aef39b2a77d0658a41bf05c243e2bf41895eb02220ac6306f3", + "sha256:261f0031ee6074765096a19b27ed0f75498a8338c3dcd7f4f0d831e38adf12d1", + "sha256:2773f850a778575dd7158a6dd072f7925b67f3ba305e2003538e8831fec77a1d", + "sha256:2a29f5294b0b6360bfda69653697eff70aaf2908f58d1073b0acd6f6ab5b5a4f", + "sha256:2bb342a01c76f38a12432848e6013c57eb630103e7556cf79b705b53814c3949", + "sha256:2c0419cdad8c70eaeb3116bb28e7b42d546f91baf5179d7556f230d40942dc78", + "sha256:3bffb61e198a91f712cc3d7f2d176a697cb05b284b2ad150fb8edb308eba9002", + "sha256:41fdec0182efac66b27478ac15ef54c9ebcecf0e26ed467eb7d6f262a913318b", + "sha256:48f8ca6ee8939bab760225b2ab82934d54330eec10afe4394a92d3f2a0c37dd6", + "sha256:4926ea5c46da30bec4a85907aa3f7e4ea6313145b2aa9469fdb861798daf1502", + "sha256:4c57615791a337378fe5381143259a6c432cdcbb1d3e6428bfb7ce59fff3fb5c", + "sha256:4e76ce2475ed4885fe13b8254058be710ec0de74ebd8ef8224cf44a9a3358e5f", + "sha256:5361ea13c241d4f0ec3f95e0bf976c15e2e451e9cc7ef2e5ccfc9d170b197a40", + "sha256:5905729668ef1418bd36fbe876322dcb0f90b46811bba96d505af89e6fbdce2f", + "sha256:5938b257b04c851c2d1e6cb2f8c18318f06017f35be9a5fe761ee1e2e344dfb7", + "sha256:5e37d5027e297a627da3551a1e962316d0f88ee4ada74c768f6c9234e26346d9", + "sha256:64a607e630d9f4b2797f641884e52b9f8e239d35943f51bef817a384ec1678fe", + "sha256:64dc6e9ec64f592f19dc01a784e87267a64a743d34f68488924251253da3c818", + "sha256:69320f05de8cdf4077ecd7fefdec223890eea232af0d58f2530cbda2871244a0", + "sha256:6d8f2144e0d5808c2e2aed40fbebe13869cd00c2ae745aca4b3b16a435edb056", + "sha256:700679c02f9348a0d0a2adcd33a0275717cd0d0aee9d4482b47d935023629505", + "sha256:709447bd7203b0b2debab1acec23123eb80b386f6c29e7604a5d4326a11e5bd6", + "sha256:71adcc8bc80a65b776510bc39992edf942ace35b153ed7a9c6c573a6849ce308", + "sha256:71db8896b942770ed7ab4efa59b22eee5203be2dfdee3c5258d60e57605d688c", + "sha256:74fbf5dd3ef09beafd3557631e282f00f8af4e7a78fbfce8ab06d9cd5a789aae", + "sha256:79498df398970abcee3d326edd1d4655de7d77aa9aecd578154f8af35ce7bbd2", + "sha256:7ad357e426b0ea5c3043b8ec905546fa44b734bf11d33b3da3959f6e4447d350", + "sha256:7d784f614e4d53050cbe8abf2ae9d1aaacf8ed31ce57b42ce3bf2a48a66c3a5c", + "sha256:80a2337e2dfb26950894c8301358961430a0304f7bfe729d34cc036474e9c9b1", + "sha256:824c867a38521d61d62b60aca7db7ca013a2b479e428a0db47d25d8ca5067410", + "sha256:842da42a63ecb32612bb7f5b9e9f8617eab9bc23bd58679a441f4150fcc51c96", + "sha256:8b7be9a6c06518967b641fb15032b1ed682fd3b0443f64078899c61034a0bca6", + "sha256:9099e443d4cc24ac6872e6a05f93205ba1a231b1a8917317b07c9ef2b955f1f4", + "sha256:94253be2b57ef2fea7ffe08996067aabf56a1eb9648342c9e3bad9e10c46e045", + "sha256:949551752930d5e478817e0b49956350d866b26578ced0042a61967e3fcccdea", + "sha256:96334bb64d054e36fed346c50c4190bad9d7c586376204f50bede21a913bf942", + "sha256:965455eac8547f32b3181d5ec9ad8b9be500c10fe06193543efaaebe3e4ce70c", + "sha256:967b47a0fd237aa17c2748fdb7425015c394a6fb57cdad1562e46a6eb070f96d", + "sha256:9994f7db390c17fc2bd4c09dca722fd792ff8a49bb3bdace0c50a83f22f1767d", + "sha256:9b60b465773a52c7d4705b0a751f7f1cdccf81dd12aee3b921b31a6e76b07b0e", + "sha256:aeddf7b3b3f6e24ccf7d0edfe2d94094ea76b40e831c16eff5230e040ce3b76b", + "sha256:c64c4cd0d50d5b2288ab1bcb26c7126c772bbdebdfadcd77225a77df01c4a57e", + "sha256:cb987f14af7da7c24f803111dbc7392f5070fd350146af3345103f76ea82e339", + "sha256:dc4fa2240c9fceddaa815a58f29212826fafe43ce80ff666d38c4a03fb036955", + "sha256:e56b1fd529e5dde2d1452a7d72907b37ed1b4f07fdced5d8fb1e963acfff6749", + "sha256:e8630943143c6d6ca9aefc88bbe5e76c90553f4e1a3b2dc339e67dc34aa86f7e", + "sha256:e8eb9a4e394926b93ad919cad1b0a918e9b4c846609e8c1cfb6b743683f64da0", + "sha256:e90352d7b610b4693fad0feea48549d4315d10f1eba5605421c92bb834e90170", + "sha256:f0b018e37608c3bfc6039a1dc4eb461e89334465a19916be0153c757a78ea426", + "sha256:f73adc05452fb85e7a12ed3f69c81540a8875960739082e6ea5e28c373a30774", + "sha256:fa33ead69ed133210d96af0c63448b1385df48b9c0247eda735c5896b9e6dbbf", + "sha256:fc6d87a1c44df8d493ef44988a3ded751e284e02cdf785f746c2d357e99782a6", + "sha256:fd40af959173ea0d087b6b232b855cfeaa6738f47cb2a0fd10a7f4fa8b74293f", + "sha256:fd65774ed7d65101b314808b6893e1a75b7664f680c3ef18d2e5c84d570fa393", + "sha256:fda0162b0dbfa5eaed6cdc708179fa27e148cb8490c7d62e5cf30713909658ea" ], - "version": "==3.2.2" + "version": "==3.2.3" }, "psycopg-pool": { "hashes": [ @@ -3109,12 +3118,12 @@ }, "pyright": { "hashes": [ - "sha256:21a4749dd1740e209f88d3a601e9f40748670d39481ea32b9d77edf7f3f1fb2e", - "sha256:66a5d4e83be9452853d73e9dd9e95ba0ac3061845270e4e331d0070a597d3445" + "sha256:1df7f12407f3710c9c6df938d98ec53f70053e6c6bbf71ce7bcb038d42f10070", + "sha256:d864d1182a313f45aaf99e9bfc7d2668eeabc99b29a556b5344894fd73cb1959" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.1.382.post1" + "version": "==1.1.383" }, "pytest": { "hashes": [ @@ -3656,12 +3665,12 @@ }, "stripe": { "hashes": [ - "sha256:0c79c1f3a844533c8d30cc283b43afb622aaa402539fca19167a9004fea3471c", - "sha256:5abec44548d3814bc1e070aa1852bcb3fc5cc029e947c0f733156eb1f8c87030" + "sha256:37a1f6ab0cee4ad0fa7d01e6f1e5ed9be33ee4aeae85e1a0b4ed81d42b9721bd", + "sha256:d144b49fc51a50be67d5025ab59fc0884e120929798a699e775369b0c214b9ae" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==10.12.0" + "version": "==11.0.0" }, "text-unidecode": { "hashes": [ @@ -4450,11 +4459,11 @@ "django" ], "hashes": [ - "sha256:6fd5b17cda53adf9ec3829ada084e91091ea293cad93d2295c2a6ddde8bacaa1", - "sha256:ea70dd183a3a999f329ab7ff52e3b65f442f3a418b8acec81367f57f36a58012" + "sha256:702794d0db45746118ec63b02e81f8d8edd1b87b69337a9c3898eb6ea2830f0e", + "sha256:cefa43f74ba301d4f60d5ed6bfdc5b50152228922958415d2fd9a99b3eca103f" ], "markers": "python_version >= '3.11'", - "version": "==1.0.2" + "version": "==1.0.3" }, "certifi": { "hashes": [ @@ -4844,12 +4853,12 @@ }, "google-api-python-client-stubs": { "hashes": [ - "sha256:148e16613e070969727f39691e23a73cdb87c65a4fc8133abd4c41d17b80b313", - "sha256:3c1f9f2a7cac8d1e9a7e84ed24e6c29cf4c643b0f94e39ed09ac1b7e91ab239a" + "sha256:7327c058fb5ba975309922f962f17931b9c82af51d95a5dc04061ed0c20b9f06", + "sha256:75b3dfe67b9d74ac3b58d78725326836769d0b2df1cbef354a5455a5cc57d68d" ], "index": "pypi", - "markers": "python_version >= '3.7' and python_version < '4.0'", - "version": "==1.27.0" + "markers": "python_version >= '3.7'", + "version": "==1.28.0" }, "google-apps-meet": { "hashes": [ @@ -4969,74 +4978,83 @@ "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.11' and platform_python_implementation == 'CPython'", "version": "==3.1.1" }, "griffe": { "hashes": [ - "sha256:3f86a716b631a4c0f96a43cb75d05d3c85975003c20540426c0eba3b0581c56a", - "sha256:940aeb630bc3054b4369567f150b6365be6f11eef46b0ed8623aea96e6d17b19" + "sha256:1ec50335aa507ed2445f2dd45a15c9fa3a45f52c9527e880571dfc61912fd60c", + "sha256:2e34b5e46507d615915c8e6288bb1a2234bd35dee44d01e40a2bc2f25bd4d10c" ], "markers": "python_version >= '3.8'", - "version": "==1.3.1" + "version": "==1.3.2" }, "grpcio": { "hashes": [ - "sha256:0e6c9b42ded5d02b6b1fea3a25f036a2236eeb75d0579bfd43c0018c88bf0a3e", - "sha256:161d5c535c2bdf61b95080e7f0f017a1dfcb812bf54093e71e5562b16225b4ce", - "sha256:17663598aadbedc3cacd7bbde432f541c8e07d2496564e22b214b22c7523dac8", - "sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d", - "sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858", - "sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0", - "sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a", - "sha256:30a1c2cf9390c894c90bbc70147f2372130ad189cffef161f0432d0157973f45", - "sha256:31a049daa428f928f21090403e5d18ea02670e3d5d172581670be006100db9ef", - "sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2", - "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac", - "sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd", - "sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1", - "sha256:4825a3aa5648010842e1c9d35a082187746aa0cdbf1b7a2a930595a94fb10fce", - "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492", - "sha256:48b0d92d45ce3be2084b92fb5bae2f64c208fea8ceed7fccf6a7b524d3c4942e", - "sha256:4d813316d1a752be6f5c4360c49f55b06d4fe212d7df03253dfdae90c8a402bb", - "sha256:5dd67ed9da78e5121efc5c510f0122a972216808d6de70953a740560c572eb44", - "sha256:6f914386e52cbdeb5d2a7ce3bf1fdfacbe9d818dd81b6099a05b741aaf3848bb", - "sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759", - "sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e", - "sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761", - "sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26", - "sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791", - "sha256:9c9bebc6627873ec27a70fc800f6083a13c70b23a5564788754b9ee52c5aef6c", - "sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60", - "sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df", - "sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a", - "sha256:aa8ba945c96e73de29d25331b26f3e416e0c0f621e984a3ebdb2d0d0b596a3b3", - "sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734", - "sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f", - "sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083", - "sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524", - "sha256:bff2096bdba686019fb32d2dde45b95981f0d1490e054400f70fc9a8af34b49d", - "sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a", - "sha256:c9f80f9fad93a8cf71c7f161778ba47fd730d13a343a46258065c4deb4b550c0", - "sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb", - "sha256:d0cd7050397b3609ea51727b1811e663ffda8bda39c6a5bb69525ef12414b503", - "sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815", - "sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22", - "sha256:ecfe735e7a59e5a98208447293ff8580e9db1e890e232b8b292dc8bd15afc0d2", - "sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c", - "sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d", - "sha256:f1fe60d0772831d96d263b53d83fb9a3d050a94b0e94b6d004a5ad111faa5b5b", - "sha256:f517fd7259fe823ef3bd21e508b653d5492e706e9f0ef82c16ce3347a8a5620c", - "sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9" - ], - "version": "==1.66.1" + "sha256:02697eb4a5cbe5a9639f57323b4c37bcb3ab2d48cec5da3dc2f13334d72790dd", + "sha256:03b0b307ba26fae695e067b94cbb014e27390f8bc5ac7a3a39b7723fed085604", + "sha256:05bc2ceadc2529ab0b227b1310d249d95d9001cd106aa4d31e8871ad3c428d73", + "sha256:06de8ec0bd71be123eec15b0e0d457474931c2c407869b6c349bd9bed4adbac3", + "sha256:0be4e0490c28da5377283861bed2941d1d20ec017ca397a5df4394d1c31a9b50", + "sha256:12fda97ffae55e6526825daf25ad0fa37483685952b5d0f910d6405c87e3adb6", + "sha256:1caa38fb22a8578ab8393da99d4b8641e3a80abc8fd52646f1ecc92bcb8dee34", + "sha256:2018b053aa15782db2541ca01a7edb56a0bf18c77efed975392583725974b249", + "sha256:20657d6b8cfed7db5e11b62ff7dfe2e12064ea78e93f1434d61888834bc86d75", + "sha256:2335c58560a9e92ac58ff2bc5649952f9b37d0735608242973c7a8b94a6437d8", + "sha256:31fd163105464797a72d901a06472860845ac157389e10f12631025b3e4d0453", + "sha256:38b68498ff579a3b1ee8f93a05eb48dc2595795f2f62716e797dc24774c1aaa8", + "sha256:3b00efc473b20d8bf83e0e1ae661b98951ca56111feb9b9611df8efc4fe5d55d", + "sha256:3ed71e81782966ffead60268bbda31ea3f725ebf8aa73634d5dda44f2cf3fb9c", + "sha256:45a3d462826f4868b442a6b8fdbe8b87b45eb4f5b5308168c156b21eca43f61c", + "sha256:49f0ca7ae850f59f828a723a9064cadbed90f1ece179d375966546499b8a2c9c", + "sha256:4e504572433f4e72b12394977679161d495c4c9581ba34a88d843eaf0f2fbd39", + "sha256:4ea1d062c9230278793820146c95d038dc0f468cbdd172eec3363e42ff1c7d01", + "sha256:563588c587b75c34b928bc428548e5b00ea38c46972181a4d8b75ba7e3f24231", + "sha256:6001e575b8bbd89eee11960bb640b6da6ae110cf08113a075f1e2051cc596cae", + "sha256:66a0cd8ba6512b401d7ed46bb03f4ee455839957f28b8d61e7708056a806ba6a", + "sha256:6851de821249340bdb100df5eacfecfc4e6075fa85c6df7ee0eb213170ec8e5d", + "sha256:728bdf36a186e7f51da73be7f8d09457a03061be848718d0edf000e709418987", + "sha256:73e3b425c1e155730273f73e419de3074aa5c5e936771ee0e4af0814631fb30a", + "sha256:73fc8f8b9b5c4a03e802b3cd0c18b2b06b410d3c1dcbef989fdeb943bd44aff7", + "sha256:78fa51ebc2d9242c0fc5db0feecc57a9943303b46664ad89921f5079e2e4ada7", + "sha256:7b2c86457145ce14c38e5bf6bdc19ef88e66c5fee2c3d83285c5aef026ba93b3", + "sha256:7d69ce1f324dc2d71e40c9261d3fdbe7d4c9d60f332069ff9b2a4d8a257c7b2b", + "sha256:802d84fd3d50614170649853d121baaaa305de7b65b3e01759247e768d691ddf", + "sha256:80fd702ba7e432994df208f27514280b4b5c6843e12a48759c9255679ad38db8", + "sha256:8ac475e8da31484efa25abb774674d837b343afb78bb3bcdef10f81a93e3d6bf", + "sha256:950da58d7d80abd0ea68757769c9db0a95b31163e53e5bb60438d263f4bed7b7", + "sha256:99a641995a6bc4287a6315989ee591ff58507aa1cbe4c2e70d88411c4dcc0839", + "sha256:9c3a99c519f4638e700e9e3f83952e27e2ea10873eecd7935823dab0c1c9250e", + "sha256:9c509a4f78114cbc5f0740eb3d7a74985fd2eff022971bc9bc31f8bc93e66a3b", + "sha256:a18e20d8321c6400185b4263e27982488cb5cdd62da69147087a76a24ef4e7e3", + "sha256:a917d26e0fe980b0ac7bfcc1a3c4ad6a9a4612c911d33efb55ed7833c749b0ee", + "sha256:a9539f01cb04950fd4b5ab458e64a15f84c2acc273670072abe49a3f29bbad54", + "sha256:ad2efdbe90c73b0434cbe64ed372e12414ad03c06262279b104a029d1889d13e", + "sha256:b672abf90a964bfde2d0ecbce30f2329a47498ba75ce6f4da35a2f4532b7acbc", + "sha256:bbd27c24a4cc5e195a7f56cfd9312e366d5d61b86e36d46bbe538457ea6eb8dd", + "sha256:c400ba5675b67025c8a9f48aa846f12a39cf0c44df5cd060e23fda5b30e9359d", + "sha256:c408f5ef75cfffa113cacd8b0c0e3611cbfd47701ca3cdc090594109b9fcbaed", + "sha256:c806852deaedee9ce8280fe98955c9103f62912a5b2d5ee7e3eaa284a6d8d8e7", + "sha256:ce89f5876662f146d4c1f695dda29d4433a5d01c8681fbd2539afff535da14d4", + "sha256:d25a14af966438cddf498b2e338f88d1c9706f3493b1d73b93f695c99c5f0e2a", + "sha256:d8d4732cc5052e92cea2f78b233c2e2a52998ac40cd651f40e398893ad0d06ec", + "sha256:d9a9724a156c8ec6a379869b23ba3323b7ea3600851c91489b871e375f710bc8", + "sha256:e636ce23273683b00410f1971d209bf3689238cf5538d960adc3cdfe80dd0dbd", + "sha256:e88264caad6d8d00e7913996030bac8ad5f26b7411495848cc218bd3a9040b6c", + "sha256:f145cc21836c332c67baa6fc81099d1d27e266401565bf481948010d6ea32d46", + "sha256:fb57870449dfcfac428afbb5a877829fcb0d6db9d9baa1148705739e9083880e", + "sha256:fb70487c95786e345af5e854ffec8cb8cc781bcc5df7930c4fbb7feaa72e1cdf", + "sha256:fe96281713168a3270878255983d2cb1a97e034325c8c2c25169a69289d3ecfa", + "sha256:ff1f7882e56c40b0d33c4922c15dfa30612f05fb785074a012f7cda74d1c3679" + ], + "version": "==1.66.2" }, "grpcio-status": { "hashes": [ - "sha256:b3f7d34ccc46d83fea5261eea3786174459f763c31f6e34f1d24eba6d515d024", - "sha256:cf9ed0b4a83adbe9297211c95cb5488b0cd065707e812145b842c85c4782ff02" + "sha256:e5fe189f6897d12aa9cd74408a17ca41e44fad30871cf84f5cbd17bd713d2455", + "sha256:fb55cbb5c2e67062f7a4d5c99e489d074fb57e98678d5c3c6692a2d74d89e9ae" ], - "version": "==1.66.1" + "version": "==1.66.2" }, "httplib2": { "hashes": [ @@ -5197,12 +5215,12 @@ }, "mkdocs-material": { "hashes": [ - "sha256:1843c5171ad6b489550aeaf7358e5b7128cc03ddcf0fb4d91d19aa1e691a63b8", - "sha256:d4779051d52ba9f1e7e344b34de95449c7c366c212b388e4a2db9a3db043c228" + "sha256:0f2f68c8db89523cb4a59705cd01b4acd62b2f71218ccb67e1e004e560410d2b", + "sha256:25faa06142afa38549d2b781d475a86fb61de93189f532b88e69bf11e5e5c3be" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==9.5.38" + "version": "==9.5.39" }, "mkdocs-material-extensions": { "hashes": [ @@ -5567,11 +5585,11 @@ }, "pymdown-extensions": { "hashes": [ - "sha256:2653fb658bca5f278029f8c67a67f0f08b7bd3c657e2630d261ad542e97c4192", - "sha256:e68080eac44634406b31f4aec58fbad17b0ec5fca6b086e29008616d54c3906b" + "sha256:41cdde0a77290e480cf53892f5c5e50921a7ee3e5cd60ba91bf19837b33badcf", + "sha256:bc8847ecc9e784a098efd35e20cba772bc5a1b529dfcef9dc1972db9021a1049" ], "markers": "python_version >= '3.8'", - "version": "==10.11" + "version": "==10.11.2" }, "pyparsing": { "hashes": [ @@ -5583,12 +5601,12 @@ }, "pyright": { "hashes": [ - "sha256:21a4749dd1740e209f88d3a601e9f40748670d39481ea32b9d77edf7f3f1fb2e", - "sha256:66a5d4e83be9452853d73e9dd9e95ba0ac3061845270e4e331d0070a597d3445" + "sha256:1df7f12407f3710c9c6df938d98ec53f70053e6c6bbf71ce7bcb038d42f10070", + "sha256:d864d1182a313f45aaf99e9bfc7d2668eeabc99b29a556b5344894fd73cb1959" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.1.382.post1" + "version": "==1.1.383" }, "pytest": { "hashes": [ diff --git a/breathecode/authenticate/tests/management/commands/tests_set_permissions.py b/breathecode/authenticate/tests/management/commands/tests_set_permissions.py index 12e968672..59a296535 100644 --- a/breathecode/authenticate/tests/management/commands/tests_set_permissions.py +++ b/breathecode/authenticate/tests/management/commands/tests_set_permissions.py @@ -63,8 +63,8 @@ def setUp(self): # the behavior of permissions is not exact, this changes every time you add a model self.latest_content_type_id = content_type.id self.latest_permission_id = permission.id - self.job_content_type_id = self.latest_content_type_id - 63 - self.can_delete_job_permission_id = self.latest_permission_id - 253 + self.job_content_type_id = self.latest_content_type_id - 64 + self.can_delete_job_permission_id = self.latest_permission_id - 257 """ 🔽🔽🔽 format of PERMISSIONS diff --git a/breathecode/media/tests/urls/v1/tests_upload.py b/breathecode/media/tests/urls/v1/tests_upload.py index ff20f2102..53e0c820e 100644 --- a/breathecode/media/tests/urls/v1/tests_upload.py +++ b/breathecode/media/tests/urls/v1/tests_upload.py @@ -791,9 +791,7 @@ def test_upload_invalid_format(self): model = self.generate_models(authenticate=True, profile_academy=True, capability="crud_media", role="potato") url = reverse_lazy("media:upload") - file = tempfile.NamedTemporaryFile(suffix=".txt", delete=False) - text = self.bc.fake.text() - file.write(text.encode("utf-8")) + file = open("breathecode/settings.py", "r") file.close() with open(file.name, "rb") as data: @@ -807,7 +805,7 @@ def test_upload_invalid_format(self): self.assertHash(hash) expected = { - "detail": f'You can upload only files on the following formats: {",".join(MIME_ALLOWED)}, got text/plain', + "detail": f'You can upload only files on the following formats: {",".join(MIME_ALLOWED)}, got text/x-python', "status_code": 400, } diff --git a/breathecode/mentorship/permissions/consumers.py b/breathecode/mentorship/permissions/consumers.py index ffd033a94..4d3419b4e 100644 --- a/breathecode/mentorship/permissions/consumers.py +++ b/breathecode/mentorship/permissions/consumers.py @@ -1,5 +1,8 @@ import logging +from capyc.core.managers import feature +from capyc.rest_framework.exceptions import PaymentException, ValidationException + from breathecode.admissions.actions import is_no_saas_student_up_to_date_in_any_cohort from breathecode.authenticate.actions import get_user_language from breathecode.authenticate.models import User @@ -7,7 +10,6 @@ from breathecode.payments.models import Consumable, ConsumptionSession from breathecode.utils.decorators import ServiceContext from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import PaymentException, ValidationException logger = logging.getLogger(__name__) @@ -111,16 +113,17 @@ def mentorship_service_by_url_param(context: ServiceContext, args: tuple, kwargs ) ) ): - - raise ValidationException( - translation( - lang, - en=f'Mentee do not have enough credits to access this service: {context["service"]}', - es="El mentee no tiene suficientes créditos para acceder a este servicio: " f'{context["service"]}', - ), - slug="mentee-not-enough-consumables", - code=402, - ) + c = feature.context(context=context, user=mentee) + if feature.is_enabled("payments.bypass_consumption", c, False) is False: + raise ValidationException( + translation( + lang, + en=f'Mentee do not have enough credits to access this service: {context["service"]}', + es="El mentee no tiene suficientes créditos para acceder a este servicio: " f'{context["service"]}', + ), + slug="mentee-not-enough-consumables", + code=402, + ) if consumable: session = ConsumptionSession.build_session(request, consumable, mentorship_service.max_duration, mentee) diff --git a/breathecode/mentorship/tests/urls_shortner/tests_meet_slug_service_slug.py b/breathecode/mentorship/tests/urls_shortner/tests_meet_slug_service_slug.py index 6da3b58b5..d1ed9253c 100644 --- a/breathecode/mentorship/tests/urls_shortner/tests_meet_slug_service_slug.py +++ b/breathecode/mentorship/tests/urls_shortner/tests_meet_slug_service_slug.py @@ -10,6 +10,7 @@ import capyc.pytest as capy import pytest import timeago +from capyc.core.managers import feature from django.core.handlers.wsgi import WSGIRequest from django.template import loader from django.test.client import FakePayload @@ -3241,7 +3242,8 @@ def test_with_mentor_profile__redirect_to_session__no_saas(self): ), ) @patch("django.utils.timezone.now", MagicMock(return_value=UTC_NOW)) - def test_with_mentor_profile__redirect_to_session__saas(self): + @patch("capyc.core.managers.feature.is_enabled", MagicMock(return_value=False)) + def test_with_mentor_profile__redirect_to_session__saas__bypass_consumption_false(self): mentor_profile_cases = [ { "status": x, @@ -3322,12 +3324,231 @@ def test_with_mentor_profile__redirect_to_session__saas(self): ) self.assertEqual(self.bc.database.list_of("payments.Consumable"), []) self.assertEqual(self.bc.database.list_of("payments.ConsumptionSession"), []) + calls = [ + call( + args[0], + { + **args[1], + "context": { + **args[1]["context"], + "request": type(args[1]["context"]["request"]), + "consumer": callable(args[1]["context"]["consumer"]), + "consumables": [x for x in args[1]["context"]["consumables"]], + }, + }, + *args[2:], + **kwargs, + ) + for args, kwargs in feature.is_enabled.call_args_list + ] + context1 = feature.context( + context={ + "utc_now": UTC_NOW, + "consumer": True, + "service": "join_mentorship", + "request": WSGIRequest, + "consumables": [], + "lifetime": None, + "price": 0, + "is_consumption_session": False, + "flags": {"bypass_consumption": False}, + }, + ) + context2 = feature.context( + context={ + "utc_now": UTC_NOW, + "consumer": True, + "service": "join_mentorship", + "request": WSGIRequest, + "consumables": [], + "lifetime": None, + "price": 0, + "is_consumption_session": False, + "flags": {"bypass_consumption": False}, + }, + user=base.user, + ) + assert calls == [ + call("payments.bypass_consumption", context1, False), + call("payments.bypass_consumption", context2, False), + ] + + # teardown + self.bc.database.delete("mentorship.MentorProfile") + + self.bc.database.delete("auth.Permission") + self.bc.database.delete("payments.Service") + feature.is_enabled.call_args_list = [] + + @patch("breathecode.mentorship.actions.mentor_is_ready", MagicMock()) + @patch( + "os.getenv", + MagicMock( + side_effect=apply_get_env( + { + "DAILY_API_URL": URL, + "DAILY_API_KEY": API_KEY, + } + ) + ), + ) + @patch( + "requests.request", + apply_requests_request_mock( + [ + ( + 201, + f"{URL}/v1/rooms", + { + "name": ROOM_NAME, + "url": ROOM_URL, + }, + ) + ] + ), + ) + @patch("django.utils.timezone.now", MagicMock(return_value=UTC_NOW)) + @patch("capyc.core.managers.feature.is_enabled", MagicMock(side_effect=[False, True, False, True])) + def test_with_mentor_profile__redirect_to_session__saas__bypass_consumption_true(self): + mentor_profile_cases = [ + { + "status": x, + "online_meeting_url": self.bc.fake.url(), + "booking_url": self.bc.fake.url(), + } + for x in ["ACTIVE", "UNLISTED"] + ] + + id = 0 + for mentor_profile in mentor_profile_cases: + id += 1 + + user = {"first_name": "", "last_name": ""} + service = {"consumer": "JOIN_MENTORSHIP"} + base = self.bc.database.create(user=user, token=1, service=service) + + ends_at = UTC_NOW - timedelta(seconds=3600 / 2 + 1) + + academy = {"available_as_saas": True} + mentorship_session = { + "mentee_id": base.user.id, + "ends_at": ends_at, + "allow_mentee_to_extend": True, + } + token = 1 + + model = self.bc.database.create( + mentor_profile=mentor_profile, + mentorship_session=mentorship_session, + user=user, + token=token, + mentorship_service={"language": "en", "video_provider": "DAILY"}, + service=base.service, + academy=academy, + ) + + model.mentorship_session.mentee = None + model.mentorship_session.save() + + token = model.token if "token" in model else base.token + + querystring = self.bc.format.to_querystring( + { + "token": token.key, + "extend": "true", + "mentee": base.user.id, + "session": model.mentorship_session.id, + } + ) + url = ( + reverse_lazy( + "mentorship_shortner:meet_slug_service_slug", + kwargs={"mentor_slug": model.mentor_profile.slug, "service_slug": model.mentorship_service.slug}, + ) + + f"?{querystring}" + ) + response = self.client.get(url) + + content = self.bc.format.from_bytes(response.content) + expected = "" + + # dump error in external files + if content != expected: + with open("content.html", "w") as f: + f.write(content) + + with open("expected.html", "w") as f: + f.write(expected) + + self.assertEqual(content, expected) + self.assertEqual(response.status_code, status.HTTP_302_FOUND) + assert ( + response.url + == f"/mentor/session/{model.mentorship_session.id}?token={token.key}&message=You%20have%20a%20session%20that%20expired%2030%20minutes%20ago.%20Only%20sessions%20with%20less%20than%2030min%20from%20expiration%20can%20be%20extended%20(if%20allowed%20by%20the%20academy)" + ) + self.assertEqual( + self.bc.database.list_of("mentorship.MentorProfile"), + [ + self.bc.format.to_dict(model.mentor_profile), + ], + ) + self.assertEqual(self.bc.database.list_of("payments.Consumable"), []) + self.assertEqual(self.bc.database.list_of("payments.ConsumptionSession"), []) + calls = [ + call( + args[0], + { + **args[1], + "context": { + **args[1]["context"], + "request": type(args[1]["context"]["request"]), + "consumer": callable(args[1]["context"]["consumer"]), + "consumables": [x for x in args[1]["context"]["consumables"]], + }, + }, + *args[2:], + **kwargs, + ) + for args, kwargs in feature.is_enabled.call_args_list + ] + context1 = feature.context( + context={ + "utc_now": UTC_NOW, + "consumer": True, + "service": "join_mentorship", + "request": WSGIRequest, + "consumables": [], + "lifetime": None, + "price": 0, + "is_consumption_session": False, + "flags": {"bypass_consumption": False}, + }, + ) + context2 = feature.context( + context={ + "utc_now": UTC_NOW, + "consumer": True, + "service": "join_mentorship", + "request": WSGIRequest, + "consumables": [], + "lifetime": None, + "price": 0, + "is_consumption_session": False, + "flags": {"bypass_consumption": False}, + }, + user=base.user, + ) + assert calls == [ + call("payments.bypass_consumption", context1, False), + call("payments.bypass_consumption", context2, False), + ] # teardown self.bc.database.delete("mentorship.MentorProfile") self.bc.database.delete("auth.Permission") self.bc.database.delete("payments.Service") + feature.is_enabled.call_args_list = [] @patch("breathecode.mentorship.actions.mentor_is_ready", MagicMock()) @patch( diff --git a/breathecode/payments/apps.py b/breathecode/payments/apps.py index 83529ece9..0d7c3b9d9 100644 --- a/breathecode/payments/apps.py +++ b/breathecode/payments/apps.py @@ -6,5 +6,6 @@ class PaymentsConfig(AppConfig): name = "breathecode.payments" def ready(self): + from . import flags # noqa: F401 from . import receivers # noqa: F401 from . import supervisors # noqa: F401 diff --git a/breathecode/payments/flags.py b/breathecode/payments/flags.py new file mode 100644 index 000000000..56a6ef509 --- /dev/null +++ b/breathecode/payments/flags.py @@ -0,0 +1,29 @@ +from typing import Optional + +from capyc.core.managers import feature + +from breathecode.authenticate.models import User +from breathecode.utils.decorators.consume import ServiceContext + +flags = feature.flags + + +@feature.availability("payments.bypass_consumption") +def bypass_consumption(context: ServiceContext, user: Optional[User] = None) -> bool: + """ + This flag is used to bypass the consumption of a service. + + Arguments: + context: ServiceContext - The context of the service. + user: Optional[User] - The user to bypass the consumption for, if none it will use request.user. + """ + + if flags.get("BYPASS_CONSUMPTION") not in feature.TRUE: + return False + + # write logic here + + return False + + +feature.add(bypass_consumption) diff --git a/breathecode/registry/tests/urls/v1/tests_academy_asset.py b/breathecode/registry/tests/urls/v1/tests_academy_asset.py index d54b39375..ce33174d5 100644 --- a/breathecode/registry/tests/urls/v1/tests_academy_asset.py +++ b/breathecode/registry/tests/urls/v1/tests_academy_asset.py @@ -19,6 +19,8 @@ def database_item(academy, category, data={}): return { "academy_id": academy.id, + "learnpack_deploy_url": None, + "agent": None, "assessment_id": None, "asset_type": "PROJECT", "author_id": None, @@ -88,6 +90,7 @@ def post_serializer(academy, category, data={}): "slug": category.slug, "title": category.title, }, + "agent": None, "delivery_formats": "url", "delivery_instructions": None, "delivery_regex_url": None, diff --git a/breathecode/registry/tests/urls/v1/tests_asset.py b/breathecode/registry/tests/urls/v1/tests_asset.py index 4805cc93c..9703736d1 100644 --- a/breathecode/registry/tests/urls/v1/tests_asset.py +++ b/breathecode/registry/tests/urls/v1/tests_asset.py @@ -95,6 +95,7 @@ def get_serializer_technology(technology, data={}): def get_mid_serializer(asset, data={}): return { **get_serializer(asset), + "agent": None, "with_solutions": asset.with_solutions, "with_video": asset.with_solutions, "updated_at": asset.updated_at, @@ -260,7 +261,6 @@ def test_assets_expand_readme_ipynb(bc: Breathecode, client): json = response.json() asset_readme = model.asset.get_readme() - print(asset_readme) expected = [ get_mid_serializer( diff --git a/breathecode/services/activecampaign/actions/deal_update.py b/breathecode/services/activecampaign/actions/deal_update.py index 1f3bff869..165c5b3e5 100644 --- a/breathecode/services/activecampaign/actions/deal_update.py +++ b/breathecode/services/activecampaign/actions/deal_update.py @@ -31,7 +31,9 @@ def deal_update(ac_cls, webhook, payload: dict, acp_ids): ) if entry is None and "deal[contact_email]" in payload: entry = ( - FormEntry.objects.filter(email=payload["deal[contact_email]"], storage_status__in=["PERSISTED", "MANUALLY_PERSISTED"]) + FormEntry.objects.filter( + email=payload["deal[contact_email]"], storage_status__in=["PERSISTED", "MANUALLY_PERSISTED"] + ) .order_by("-created_at") .first() ) diff --git a/breathecode/utils/decorators/consume.py b/breathecode/utils/decorators/consume.py index 66688bdc7..8df59a3b7 100644 --- a/breathecode/utils/decorators/consume.py +++ b/breathecode/utils/decorators/consume.py @@ -7,6 +7,8 @@ from adrf.requests import AsyncRequest from asgiref.sync import sync_to_async +from capyc.core.managers import feature +from capyc.rest_framework.exceptions import PaymentException, ValidationException from django.contrib.auth.models import AnonymousUser from django.core.handlers.wsgi import WSGIRequest from django.db.models import QuerySet, Sum @@ -18,7 +20,6 @@ from breathecode.authenticate.models import User from breathecode.payments.signals import consume_service -from capyc.rest_framework.exceptions import PaymentException, ValidationException from ..exceptions import ProgrammingError @@ -27,6 +28,14 @@ logger = logging.getLogger(__name__) +class Flags(TypedDict): + bypass_consumption: bool + + +class FlagsParams(Flags, total=False): + pass + + class ServiceContext(TypedDict): utc_now: datetime consumer: bool @@ -36,6 +45,7 @@ class ServiceContext(TypedDict): lifetime: Optional[timedelta] price: float is_consumption_session: bool + flags: Flags type Consumer = Callable[[ServiceContext, tuple, dict], tuple[ServiceContext, tuple, dict, Optional[timedelta]]] @@ -200,8 +210,15 @@ def validate_and_get_request(permission: str, args: Any) -> HttpRequest | AsyncR return request def build_context( - request: HttpRequest | AsyncRequest, utc_now: datetime, **opts: Unpack[ServiceContext] + request: HttpRequest | AsyncRequest, + utc_now: datetime, + flags: Optional[FlagsParams] = None, + **opts: Unpack[ServiceContext], ) -> ServiceContext: + + if flags is None: + flags = {} + return { "utc_now": utc_now, "consumer": consumer, @@ -211,6 +228,10 @@ def build_context( "lifetime": None, "price": 1, "is_consumption_session": False, + "flags": { + "bypass_consumption": False, + **flags, + }, **opts, } @@ -238,9 +259,16 @@ def wrapper(*args, **kwargs): items = Consumable.list(user=request.user, service=service) context["consumables"] = items + flag_context = feature.context(context=context) + bypass_consumption = feature.is_enabled("payments.bypass_consumption", flag_context, False) + context["flags"]["bypass_consumption"] = bypass_consumption + if callable(consumer): context, args, kwargs = consumer(context, args, kwargs) + if bypass_consumption: + return function(*args, **kwargs) + # exclude consumables that is being used in a session. if consumer and context["lifetime"]: consumables = context["consumables"] @@ -343,12 +371,19 @@ async def async_wrapper(*args, **kwargs): items = await Consumable.alist(user=user, service=service) context["consumables"] = items + flag_context = feature.context(context=context) + bypass_consumption = feature.is_enabled("payments.bypass_consumption", flag_context, False) + context["flags"]["bypass_consumption"] = bypass_consumption + if callable(consumer): if asyncio.iscoroutinefunction(consumer) is False: consumer = sync_to_async(consumer) context, args, kwargs = await consumer(context, args, kwargs) + if bypass_consumption: + return await function(*args, **kwargs) + # exclude consumables that is being used in a session. if consumer and context["lifetime"]: consumables: QuerySet[Consumable] = context["consumables"] diff --git a/breathecode/utils/tests/decorators/tests_consume.py b/breathecode/utils/tests/decorators/tests_consume.py index cc90fe533..44af072ec 100644 --- a/breathecode/utils/tests/decorators/tests_consume.py +++ b/breathecode/utils/tests/decorators/tests_consume.py @@ -6,7 +6,9 @@ import capyc.pytest as capy import pytest from adrf.decorators import APIView, api_view +from adrf.requests import AsyncRequest from asgiref.sync import sync_to_async +from capyc.core.managers import feature from django.http.response import JsonResponse from django.utils import timezone from rest_framework import status @@ -60,6 +62,27 @@ def consumer(context: ServiceContext, args: tuple, kwargs: dict) -> tuple[dict, time_of_life = timedelta(days=random.randint(1, 100)) +@sync_to_async +def is_enabled_call_list(): + return [ + call( + args[0], + { + **args[1], + "context": { + **args[1]["context"], + "request": type(args[1]["context"]["request"]), + "consumer": callable(args[1]["context"]["consumer"]), + "consumables": [x for x in args[1]["context"]["consumables"]], + }, + }, + *args[2:], + **kwargs, + ) + for args, kwargs in feature.is_enabled.call_args_list + ] + + def consumer_with_time_of_life(context: ServiceContext, args: tuple, kwargs: dict) -> tuple[dict, tuple, dict]: # remember the objects are passed by reference, so you need to clone them to avoid modify the object # receive by the mock causing side effects @@ -398,11 +421,13 @@ def check_consume_service(): @pytest.mark.asyncio @pytest.mark.django_db(reset_sequences=True) - async def test_with_user__with_group_related_to_permission__consumable__how_many_0( - self, bc: Breathecode, make_view_all_cases + async def test_with_user__with_group_related_to_permission__consumable__how_many_0__bypass_consumption_false( + self, bc: Breathecode, make_view_all_cases, monkeypatch, utc_now ): + monkeypatch.setattr(feature, "is_enabled", MagicMock(return_value=False)) user = {"user_permissions": []} - services = [{}, {"consumer": SERVICE.upper()}] + consumer = SERVICE.upper() + services = [{}, {"consumer": consumer}] consumable = {"how_many": 0} model = await bc.database.acreate( @@ -426,6 +451,67 @@ def check_consume_service(): await check_consume_service() + context = feature.context( + context={ + "utc_now": utc_now, + "consumer": False, + "service": consumer, + "request": AsyncRequest, + "consumables": [], + "lifetime": None, + "price": 1, + "is_consumption_session": False, + "flags": {"bypass_consumption": False}, + } + ) + assert await is_enabled_call_list() == [call("payments.bypass_consumption", context, False)] + + @pytest.mark.asyncio + @pytest.mark.django_db(reset_sequences=True) + async def test_with_user__with_group_related_to_permission__consumable__how_many_0__bypass_consumption_true( + self, bc: Breathecode, make_view_all_cases, monkeypatch, utc_now + ): + monkeypatch.setattr(feature, "is_enabled", MagicMock(return_value=True)) + user = {"user_permissions": []} + consumer = SERVICE.upper() + services = [{}, {"consumer": consumer}] + + consumable = {"how_many": 0} + model = await bc.database.acreate( + user=user, service=services, service_item={"service_id": 2}, consumable=consumable + ) + + view, expected, _, _ = await make_view_all_cases(user=model.user, decorator_params={}, url_params={}) + + response, _ = await view() + + assert json.loads(response.content.decode("utf-8")) == expected + assert response.status_code == status.HTTP_200_OK + # self.assertEqual(CONSUMER_MOCK.call_args_list, []) + assert await bc.database.alist_of("payments.ConsumptionSession") == [] + assert models.ConsumptionSession.build_session.call_args_list == [] + + @sync_to_async + def check_consume_service(): + assert payments_signals.consume_service.send_robust.call_args_list == [] + + await check_consume_service() + + context = feature.context( + context={ + "utc_now": utc_now, + "consumer": False, + "service": consumer, + "request": AsyncRequest, + "consumables": [], + "lifetime": None, + "price": 1, + "is_consumption_session": False, + "flags": {"bypass_consumption": True}, + } + ) + assert await is_enabled_call_list() == [call("payments.bypass_consumption", context, False)] + @pytest.mark.asyncio @pytest.mark.django_db(reset_sequences=True) async def test_with_user__with_group_related_to_permission__consumable__how_many_gte_1(