diff --git a/.env.example b/.env.example
index fd21e08ff..d0d140e7c 100644
--- a/.env.example
+++ b/.env.example
@@ -96,3 +96,4 @@ SCREENSHOT_MACHINE_KEY=00000
# Email validation
MAILBOX_LAYER_KEY=adsasd
+SET_GOOGLE_CREDENTIALS=1
diff --git a/.flags b/.flags
new file mode 100644
index 000000000..e69de29bb
diff --git a/Pipfile.lock b/Pipfile.lock
index f8340d777..080d6dae7 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -25,12 +25,12 @@
},
"adrf": {
"hashes": [
- "sha256:2a29a7621767ea670655e744a65ee1f19e8208fffbc5e71d2cf43def4c352740",
- "sha256:815c4ce1179931e41f966eb8d36903fcc36bad6964e61cfc0f360d107725bd18"
+ "sha256:18844630dd9272c38cc3f761fce6bfb50f91c4f84dadf99846f86d4527f19c7f",
+ "sha256:3032b987085d75cfd59eb3d4dcd7138fc20085de1782b065603559ccec69531f"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
- "version": "==0.1.7"
+ "version": "==0.1.8"
},
"aiodns": {
"hashes": [
@@ -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:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138",
+ "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c",
+ "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24",
+ "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480",
+ "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2",
+ "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5",
+ "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a",
+ "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8",
+ "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf",
+ "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871",
+ "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486",
+ "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9",
+ "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d",
+ "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb",
+ "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68",
+ "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1",
+ "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d",
+ "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd",
+ "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1",
+ "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8",
+ "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7",
+ "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959",
+ "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7",
+ "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42",
+ "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79",
+ "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38",
+ "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a",
+ "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8",
+ "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8",
+ "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151",
+ "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6",
+ "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e",
+ "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7",
+ "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce",
+ "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b",
+ "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8",
+ "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628",
+ "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f",
+ "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a",
+ "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7",
+ "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc",
+ "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab",
+ "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b",
+ "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911",
+ "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9",
+ "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572",
+ "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554",
+ "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d",
+ "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257",
+ "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c",
+ "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b",
+ "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742",
+ "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090",
+ "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6",
+ "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc",
+ "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142",
+ "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16",
+ "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a",
+ "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28",
+ "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e",
+ "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94",
+ "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026",
+ "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb",
+ "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28",
+ "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9",
+ "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3",
+ "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f",
+ "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983",
+ "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205",
+ "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f",
+ "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa",
+ "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c",
+ "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2",
+ "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb",
+ "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67",
+ "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762",
+ "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a",
+ "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8",
+ "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a",
+ "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a",
+ "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc",
+ "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91",
+ "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23",
+ "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527",
+ "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6",
+ "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c",
+ "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7",
+ "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f",
+ "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a",
+ "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092",
+ "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==3.10.10"
},
"aiohttp-retry": {
"hashes": [
@@ -172,13 +172,6 @@
"markers": "python_version >= '3.6'",
"version": "==5.2.0"
},
- "aniso8601": {
- "hashes": [
- "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f",
- "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973"
- ],
- "version": "==9.0.1"
- },
"annotated-types": {
"hashes": [
"sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53",
@@ -189,11 +182,11 @@
},
"anyio": {
"hashes": [
- "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb",
- "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"
+ "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c",
+ "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"
],
"markers": "python_version >= '3.9'",
- "version": "==4.6.0"
+ "version": "==4.6.2.post1"
},
"asgiref": {
"hashes": [
@@ -282,6 +275,7 @@
"sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208",
"sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48",
"sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354",
+ "sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419",
"sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a",
"sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128",
"sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c",
@@ -289,43 +283,67 @@
"sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9",
"sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a",
"sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3",
+ "sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757",
+ "sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2",
"sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438",
"sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578",
"sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b",
"sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b",
"sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68",
+ "sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0",
"sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d",
+ "sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943",
"sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd",
"sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409",
+ "sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28",
"sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da",
"sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50",
+ "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f",
"sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0",
+ "sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547",
"sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180",
+ "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0",
"sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d",
+ "sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a",
+ "sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb",
"sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112",
"sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc",
+ "sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2",
"sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265",
"sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327",
"sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95",
+ "sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec",
"sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd",
+ "sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c",
+ "sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38",
"sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914",
"sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0",
"sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a",
"sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7",
+ "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368",
+ "sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c",
"sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0",
+ "sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f",
"sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451",
"sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f",
+ "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8",
"sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e",
"sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248",
+ "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c",
"sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91",
"sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724",
+ "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7",
"sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966",
+ "sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9",
"sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97",
"sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d",
+ "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5",
"sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf",
"sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac",
+ "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b",
"sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951",
"sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74",
+ "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648",
"sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60",
"sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c",
"sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1",
@@ -336,27 +354,44 @@
"sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460",
"sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751",
"sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9",
+ "sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2",
+ "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0",
"sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1",
"sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474",
+ "sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75",
+ "sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5",
+ "sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f",
"sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2",
+ "sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f",
+ "sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb",
"sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6",
"sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9",
+ "sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111",
"sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2",
+ "sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01",
"sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467",
"sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619",
"sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf",
"sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408",
"sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579",
"sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84",
+ "sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7",
+ "sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c",
+ "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284",
+ "sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52",
"sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b",
"sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59",
"sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752",
+ "sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1",
"sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80",
+ "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839",
"sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0",
"sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2",
"sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3",
"sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64",
+ "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089",
"sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643",
+ "sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b",
"sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e",
"sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985",
"sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596",
@@ -379,11 +414,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": [
@@ -507,99 +542,114 @@
},
"charset-normalizer": {
"hashes": [
- "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027",
- "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087",
- "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786",
- "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8",
- "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09",
- "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185",
- "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574",
- "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e",
- "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519",
- "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898",
- "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269",
- "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3",
- "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f",
- "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6",
- "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8",
- "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a",
- "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73",
- "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc",
- "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714",
- "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2",
- "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc",
- "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce",
- "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d",
- "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e",
- "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6",
- "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269",
- "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96",
- "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d",
- "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a",
- "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4",
- "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77",
- "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d",
- "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0",
- "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed",
- "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068",
- "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac",
- "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25",
- "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8",
- "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab",
- "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26",
- "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2",
- "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db",
- "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f",
- "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5",
- "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99",
- "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c",
- "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d",
- "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811",
- "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa",
- "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a",
- "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03",
- "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b",
- "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04",
- "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c",
- "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001",
- "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458",
- "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389",
- "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99",
- "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985",
- "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537",
- "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238",
- "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f",
- "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d",
- "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796",
- "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a",
- "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143",
- "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8",
- "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c",
- "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5",
- "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5",
- "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711",
- "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4",
- "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6",
- "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c",
- "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7",
- "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4",
- "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b",
- "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae",
- "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12",
- "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c",
- "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae",
- "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8",
- "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887",
- "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b",
- "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4",
- "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f",
- "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5",
- "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33",
- "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519",
- "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"
+ "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"
],
"markers": "python_full_version >= '3.7.0'",
- "version": "==3.3.2"
+ "version": "==3.4.0"
},
"circuitbreaker": {
"hashes": [
@@ -668,37 +718,37 @@
},
"cryptography": {
"hashes": [
- "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494",
- "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806",
- "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d",
- "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062",
- "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2",
- "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4",
- "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1",
- "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85",
- "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84",
- "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042",
- "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d",
- "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962",
- "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2",
- "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa",
- "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d",
- "sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365",
- "sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96",
- "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47",
- "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d",
- "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d",
- "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c",
- "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb",
- "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277",
- "sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172",
- "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034",
- "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a",
- "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289"
+ "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362",
+ "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4",
+ "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa",
+ "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83",
+ "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff",
+ "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805",
+ "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6",
+ "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664",
+ "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08",
+ "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e",
+ "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18",
+ "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f",
+ "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73",
+ "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5",
+ "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984",
+ "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd",
+ "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3",
+ "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e",
+ "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405",
+ "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2",
+ "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c",
+ "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995",
+ "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73",
+ "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16",
+ "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7",
+ "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd",
+ "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
- "version": "==43.0.1"
+ "version": "==43.0.3"
},
"cssselect": {
"hashes": [
@@ -768,12 +818,12 @@
},
"django": {
"hashes": [
- "sha256:021ffb7fdab3d2d388bc8c7c2434eb9c1f6f4d09e6119010bbb1694dda286bc2",
- "sha256:71603f27dac22a6533fb38d83072eea9ddb4017fead6f67f2562a40402d61c3f"
+ "sha256:bd7376f90c99f96b643722eee676498706c9fd7dc759f55ebfaf2c08ebcdf4f0",
+ "sha256:f11aa87ad8d5617171e3f77e1d5d16f004b79a2cf5d2e1d2b97a6a1f8e9ba5ed"
],
"index": "pypi",
"markers": "python_version >= '3.10'",
- "version": "==5.1.1"
+ "version": "==5.1.2"
},
"django-appconf": {
"hashes": [
@@ -785,12 +835,12 @@
},
"django-cors-headers": {
"hashes": [
- "sha256:5c6e3b7fe870876a1efdfeb4f433782c3524078fa0dc9e0195f6706ce7a242f6",
- "sha256:92cf4633e22af67a230a1456cb1b7a02bb213d6536d2dcb2a4a24092ea9cebc2"
+ "sha256:28c1ded847aa70208798de3e42422a782f427b8b720e8d7319d34b654b5978e6",
+ "sha256:6c01a85cf1ec779a7bde621db853aa3ce5c065a5ba8e27df7a9f9e8dac310f4f"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==4.4.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==4.5.0"
},
"django-cryptography-django5": {
"hashes": [
@@ -810,12 +860,12 @@
},
"django-minify-html": {
"hashes": [
- "sha256:c5c66c9c8bdf5e03aea4e680e90b155a20d90667409efceea521e048fa9f0918",
- "sha256:d67c6455d6ea7907a403e22888b4e810a997d51c0eaab4f3539accc6ff528d4f"
+ "sha256:1bae5742b54388b69346a6c29a7b193ab71f3cada038d633c36186c515fca228",
+ "sha256:ed6a2e06c290107bc0ff38f26f5faa703c952cca9c142c191088493087482b5a"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==1.9.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==1.10.0"
},
"django-phonenumber-field": {
"extras": [
@@ -878,20 +928,20 @@
},
"dnspython": {
"hashes": [
- "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50",
- "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"
+ "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86",
+ "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"
],
- "markers": "python_version >= '3.8'",
- "version": "==2.6.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==2.7.0"
},
"drf-yasg": {
"hashes": [
- "sha256:4c3b93068b3dfca6969ab111155e4dd6f7b2d680b98778de8fd460b7837bdb0d",
- "sha256:f85642072c35e684356475781b7ecf5d218fff2c6185c040664dd49f0a4be181"
+ "sha256:a410b235e7cc2c0f6b9d4f671e8efe6f2d27cba398fbd16064e16ef814998444",
+ "sha256:cbb7f81c3d140f2207392b4bc5dde65384eeb58e1b7eea1a6d641dec2f7352a9"
],
"index": "pypi",
"markers": "python_version >= '3.6'",
- "version": "==1.21.7"
+ "version": "==1.21.8"
},
"eventbrite": {
"hashes": [
@@ -1025,71 +1075,68 @@
},
"gevent": {
"hashes": [
- "sha256:03aa5879acd6b7076f6a2a307410fb1e0d288b84b03cdfd8c74db8b4bc882fc5",
- "sha256:117e5837bc74a1673605fb53f8bfe22feb6e5afa411f524c835b2ddf768db0de",
- "sha256:141a2b24ad14f7b9576965c0c84927fc85f824a9bb19f6ec1e61e845d87c9cd8",
- "sha256:14532a67f7cb29fb055a0e9b39f16b88ed22c66b96641df8c04bdc38c26b9ea5",
- "sha256:1dffb395e500613e0452b9503153f8f7ba587c67dd4a85fc7cd7aa7430cb02cc",
- "sha256:2955eea9c44c842c626feebf4459c42ce168685aa99594e049d03bedf53c2800",
- "sha256:2ae3a25ecce0a5b0cd0808ab716bfca180230112bb4bc89b46ae0061d62d4afe",
- "sha256:2e9ac06f225b696cdedbb22f9e805e2dd87bf82e8fa5e17756f94e88a9d37cf7",
- "sha256:368a277bd9278ddb0fde308e6a43f544222d76ed0c4166e0d9f6b036586819d9",
- "sha256:3adfb96637f44010be8abd1b5e73b5070f851b817a0b182e601202f20fa06533",
- "sha256:3d5325ccfadfd3dcf72ff88a92fb8fc0b56cacc7225f0f4b6dcf186c1a6eeabc",
- "sha256:432fc76f680acf7cf188c2ee0f5d3ab73b63c1f03114c7cd8a34cebbe5aa2056",
- "sha256:44098038d5e2749b0784aabb27f1fcbb3f43edebedf64d0af0d26955611be8d6",
- "sha256:5a1df555431f5cd5cc189a6ee3544d24f8c52f2529134685f1e878c4972ab026",
- "sha256:6c47ae7d1174617b3509f5d884935e788f325eb8f1a7efc95d295c68d83cce40",
- "sha256:6f947a9abc1a129858391b3d9334c45041c08a0f23d14333d5b844b6e5c17a07",
- "sha256:782a771424fe74bc7e75c228a1da671578c2ba4ddb2ca09b8f959abdf787331e",
- "sha256:7899a38d0ae7e817e99adb217f586d0a4620e315e4de577444ebeeed2c5729be",
- "sha256:7b00f8c9065de3ad226f7979154a7b27f3b9151c8055c162332369262fc025d8",
- "sha256:8f4b8e777d39013595a7740b4463e61b1cfe5f462f1b609b28fbc1e4c4ff01e5",
- "sha256:90cbac1ec05b305a1b90ede61ef73126afdeb5a804ae04480d6da12c56378df1",
- "sha256:918cdf8751b24986f915d743225ad6b702f83e1106e08a63b736e3a4c6ead789",
- "sha256:9202f22ef811053077d01f43cc02b4aaf4472792f9fd0f5081b0b05c926cca19",
- "sha256:94138682e68ec197db42ad7442d3cf9b328069c3ad8e4e5022e6b5cd3e7ffae5",
- "sha256:968581d1717bbcf170758580f5f97a2925854943c45a19be4d47299507db2eb7",
- "sha256:9d8d0642c63d453179058abc4143e30718b19a85cbf58c2744c9a63f06a1d388",
- "sha256:a7ceb59986456ce851160867ce4929edaffbd2f069ae25717150199f8e1548b8",
- "sha256:b9913c45d1be52d7a5db0c63977eebb51f68a2d5e6fd922d1d9b5e5fd758cc98",
- "sha256:bde283313daf0b34a8d1bab30325f5cb0f4e11b5869dbe5bc61f8fe09a8f66f3",
- "sha256:bf5b9c72b884c6f0c4ed26ef204ee1f768b9437330422492c319470954bc4cc7",
- "sha256:ca80b121bbec76d7794fcb45e65a7eca660a76cc1a104ed439cdbd7df5f0b060",
- "sha256:cdf66977a976d6a3cfb006afdf825d1482f84f7b81179db33941f2fc9673bb1d",
- "sha256:d4faf846ed132fd7ebfbbf4fde588a62d21faa0faa06e6f468b7faa6f436b661",
- "sha256:d7f87c2c02e03d99b95cfa6f7a776409083a9e4d468912e18c7680437b29222c",
- "sha256:dd23df885318391856415e20acfd51a985cba6919f0be78ed89f5db9ff3a31cb",
- "sha256:f5de3c676e57177b38857f6e3cdfbe8f38d1cd754b63200c0615eaa31f514b4f",
- "sha256:f5e8e8d60e18d5f7fd49983f0c4696deeddaf6e608fbab33397671e2fcc6cc91",
- "sha256:f7cac622e11b4253ac4536a654fe221249065d9a69feb6cdcd4d9af3503602e0",
- "sha256:f8a04cf0c5b7139bc6368b461257d4a757ea2fe89b3773e494d235b7dd51119f",
- "sha256:f8bb35ce57a63c9a6896c71a285818a3922d8ca05d150fd1fe49a7f57287b836",
- "sha256:fbfdce91239fe306772faab57597186710d5699213f4df099d1612da7320d682"
+ "sha256:051b22e2758accfddb0457728bfc9abf8c3f2ce6bca43f1ff6e07b5ed9e49bf4",
+ "sha256:0de6eb3d55c03138fda567d9bfed28487ce5d0928c5107549767a93efdf2be26",
+ "sha256:18e6984ec96fc95fd67488555c38ece3015be1f38b1bcceb27b7d6c36b343008",
+ "sha256:1c3a828b033fb02b7c31da4d75014a1f82e6c072fc0523456569a57f8b025861",
+ "sha256:1ce6dab94c0b0d24425ba55712de2f8c9cb21267150ca63f5bb3a0e1f165da99",
+ "sha256:1e24ffea72e27987979c009536fd0868e52239b44afe6cf7135ce8aafd0f108e",
+ "sha256:26ca7a6b42d35129617025ac801135118333cad75856ffc3217b38e707383eba",
+ "sha256:34aea15f9c79f27a8faeaa361bc1e72c773a9b54a1996a2ec4eefc8bcd59a824",
+ "sha256:385710355eadecdb70428a5ae3e7e5a45dcf888baa1426884588be9d25ac4290",
+ "sha256:3ac83b74304487afa211a01909c7dd257e574db0cd429d866c298e21df7aeedf",
+ "sha256:3ad8fb70aa0ebc935729c9699ac31b210a49b689a7b27b7ac9f91676475f3f53",
+ "sha256:40ea3e40e8bb4fdb143c2a8edf2ccfdebd56016c7317c341ce8094c7bee08818",
+ "sha256:57a5c4e0bdac482c5f02f240d0354e61362df73501ef6ebafce8ef635cad7527",
+ "sha256:5d850a453d66336272be4f1d3a8126777f3efdaea62d053b4829857f91e09755",
+ "sha256:68c3a0d8402755eba7f69022e42e8021192a721ca8341908acc222ea597029b6",
+ "sha256:7021e26d70189b33c27173d4173f27bf4685d6b6f1c0ea50e5335f8491cb110c",
+ "sha256:70e9ed7ecb70e0df7dc97c3bc420de9a45a7c76bd5861c6cfec8c549700e681e",
+ "sha256:89c4115e3f5ada55f92b61701a46043fe42f702b5af863b029e4c1a76f6cc2d4",
+ "sha256:8af65a4d4feaec6042c666d22c322a310fba3b47e841ad52f724b9c3ce5da48e",
+ "sha256:8e58ee3723f1fbe07d66892f1caa7481c306f653a6829b6fd16cb23d618a5915",
+ "sha256:9ca2266e08f43c0e22c028801dff7d92a0b102ef20e4caeb6a46abfb95f6a328",
+ "sha256:9e1210334a9bc9f76c3d008e0785ca62214f8a54e1325f6c2ecab3b6a572a015",
+ "sha256:a9a89d6e396ef6f1e3968521bf56e8c4bee25b193bbf5d428b7782d582410822",
+ "sha256:aa7ee1bd5cabb2b7ef35105f863b386c8d5e332f754b60cfc354148bd70d35d1",
+ "sha256:b52382124eca13135a3abe4f65c6bd428656975980a48e51b17aeab68bdb14db",
+ "sha256:c1d80090485da1ea3d99205fe97908b31188c1f4857f08b333ffaf2de2e89d18",
+ "sha256:ce417bcaaab496bc9c77f75566531e9d93816262037b8b2dbb88b0fdcd66587c",
+ "sha256:d67daed8383326dc8b5e58d88e148d29b6b52274a489e383530b0969ae7b9cb9",
+ "sha256:d758f0d4dbf32502ec87bb9b536ca8055090a16f8305f0ada3ce6f34e70f2fd7",
+ "sha256:d7a1ad0f2da582f5bd238bca067e1c6c482c30c15a6e4d14aaa3215cbb2232f3",
+ "sha256:e534e6a968d74463b11de6c9c67f4b4bf61775fb00f2e6e0f7fcdd412ceade18",
+ "sha256:eb5edb6433764119a664bbb148d2aea9990950aa89cc3498f475c2408d523ea3",
+ "sha256:f0c129f81d60cda614acb4b0c5731997ca05b031fb406fcb58ad53a7ade53b13",
+ "sha256:f147e38423fbe96e8731f60a63475b3d2cab2f3d10578d8ee9d10c507c58a2ff",
+ "sha256:f18689f7a70d2ed0e75bad5036ec3c89690a493d4cfac8d7cdb258ac04b132bd",
+ "sha256:f2ae3efbbd120cdf4a68b7abc27a37e61e6f443c5a06ec2c6ad94c37cd8471ec",
+ "sha256:f4e526fdc279c655c1e809b0c34b45844182c2a6b219802da5e411bd2cf5a8ad",
+ "sha256:f7f4f171d4d2018170454d84c934842e1b5f6ce7468ba298f6e7f7cff15000a3"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==24.2.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==24.10.3"
},
"google-api-core": {
"extras": [
"grpc"
],
"hashes": [
- "sha256:ef0591ef03c30bb83f79b3d0575c3f31219001fc9c5cf37024d08310aeffed8a",
- "sha256:f74dff1889ba291a4b76c5079df0711810e2d9da81abfdc99957bc961c1eb28f"
+ "sha256:4a152fd11a9f774ea606388d423b68aa7e6d6a0ffe4c8266f74979613ec09f81",
+ "sha256:6869eacb2a37720380ba5898312af79a4d30b8bca1548fb4093e0697dc4bdf5d"
],
"markers": "python_version >= '3.7'",
- "version": "==2.20.0"
+ "version": "==2.21.0"
},
"google-api-python-client": {
"hashes": [
- "sha256:c6ecfa193c695baa41e84562d8f8f244fcd164419eca3fc9fd7565646668f9b2",
- "sha256:e864c2cf61d34c00f05278b8bdb72b93b6fa34f0de9ead51d20435f3b65f91be"
+ "sha256:1a5232e9cfed8c201799d9327e4d44dc7ea7daa3c6e1627fca41aa201539c0da",
+ "sha256:b9d68c6b14ec72580d66001bd33c5816b78e2134b93ccc5cf8f624516b561750"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
- "version": "==2.147.0"
+ "version": "==2.149.0"
},
"google-apps-meet": {
"hashes": [
@@ -1136,10 +1183,10 @@
},
"google-cloud-bigquery-storage": {
"hashes": [
- "sha256:375927703afb0a057d3abcbe1a1d644a2a6852c43b864c0b5c93c18e4d3cd999",
- "sha256:840275bd0a4b207c0ac821bcc6741406ffb3b5ef940fa05089a90eb4403453fa"
+ "sha256:3bfa8f74a61ceaffd3bfe90be5bbef440ad81c1c19ac9075188cccab34bffc2b",
+ "sha256:522faba9a68bea7e9857071c33fafce5ee520b7b175da00489017242ade8ec27"
],
- "version": "==2.26.0"
+ "version": "==2.27.0"
},
"google-cloud-core": {
"hashes": [
@@ -1245,10 +1292,10 @@
},
"graphene": {
"hashes": [
- "sha256:529bf40c2a698954217d3713c6041d69d3f719ad0080857d7ee31327112446b0",
- "sha256:bb3810be33b54cb3e6969506671eb72319e8d7ba0d5ca9c8066472f75bf35a38"
+ "sha256:28bf359b802cdb808130a5521135d4c88a262564598cfdc91628d2c172b99dce",
+ "sha256:65e5ec84c5b7fb4fc41518acfbafb62ebb393d3982fbba00cd5393e431a80b97"
],
- "version": "==3.3"
+ "version": "==3.4"
},
"graphene-django": {
"hashes": [
@@ -1268,11 +1315,11 @@
},
"graphql-core": {
"hashes": [
- "sha256:1604f2042edc5f3114f49cac9d77e25863be51b23a54a61a23245cf32f6476f0",
- "sha256:acbe2e800980d0e39b4685dd058c2f4042660b89ebca38af83020fd872ff1264"
+ "sha256:2f150d5096448aa4f8ab26268567bbfeef823769893b39c1a2e1409590939c8a",
+ "sha256:e671b90ed653c808715645e3998b7ab67d382d55467b7e2978549111bbabf8d5"
],
"markers": "python_version >= '3.6' and python_version < '4'",
- "version": "==3.2.4"
+ "version": "==3.2.5"
},
"graphql-relay": {
"hashes": [
@@ -1358,66 +1405,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' 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'))))))",
"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:014dfc020e28a0d9be7e93a91f85ff9f4a87158b7df9952fe23cc42d29d31e1e",
+ "sha256:0892dd200ece4822d72dd0952f7112c542a487fc48fe77568deaaa399c1e717d",
+ "sha256:0bb94e66cd8f0baf29bd3184b6aa09aeb1a660f9ec3d85da615c5003154bc2bf",
+ "sha256:0c69bf11894cad9da00047f46584d5758d6ebc9b5950c0dc96fec7e0bce5cde9",
+ "sha256:15c05a26a0f7047f720da41dc49406b395c1470eef44ff7e2c506a47ac2c0591",
+ "sha256:16724ffc956ea42967f5758c2f043faef43cb7e48a51948ab593570570d1e68b",
+ "sha256:227316b5631260e0bef8a3ce04fa7db4cc81756fea1258b007950b6efc90c05d",
+ "sha256:2b7183c80b602b0ad816315d66f2fb7887614ead950416d60913a9a71c12560d",
+ "sha256:2f55c1e0e2ae9bdd23b3c63459ee4c06d223b68aeb1961d83c48fb63dc29bc03",
+ "sha256:30d47dbacfd20cbd0c8be9bfa52fdb833b395d4ec32fe5cff7220afc05d08571",
+ "sha256:323741b6699cd2b04a71cb38f502db98f90532e8a40cb675393d248126a268af",
+ "sha256:3840994689cc8cbb73d60485c594424ad8adb56c71a30d8948d6453083624b52",
+ "sha256:391df8b0faac84d42f5b8dfc65f5152c48ed914e13c522fd05f2aca211f8bfad",
+ "sha256:42199e704095b62688998c2d84c89e59a26a7d5d32eed86d43dc90e7a3bd04aa",
+ "sha256:54d16383044e681f8beb50f905249e4e7261dd169d4aaf6e52eab67b01cbbbe2",
+ "sha256:5a1e03c3102b6451028d5dc9f8591131d6ab3c8a0e023d94c28cb930ed4b5f81",
+ "sha256:62492bd534979e6d7127b8a6b29093161a742dee3875873e01964049d5250a74",
+ "sha256:662c8e105c5e5cee0317d500eb186ed7a93229586e431c1bf0c9236c2407352c",
+ "sha256:682968427a63d898759474e3b3178d42546e878fdce034fd7474ef75143b64e3",
+ "sha256:74b900566bdf68241118f2918d312d3bf554b2ce0b12b90178091ea7d0a17b3d",
+ "sha256:77196216d5dd6f99af1c51e235af2dd339159f657280e65ce7e12c1a8feffd1d",
+ "sha256:7f200aca719c1c5dc72ab68be3479b9dafccdf03df530d137632c534bb6f1ee3",
+ "sha256:7fc1d2b9fd549264ae585026b266ac2db53735510a207381be509c315b4af4e8",
+ "sha256:82e5bd4b67b17c8c597273663794a6a46a45e44165b960517fe6d8a2f7f16d23",
+ "sha256:8c9a35b8bc50db35ab8e3e02a4f2a35cfba46c8705c3911c34ce343bd777813a",
+ "sha256:985b2686f786f3e20326c4367eebdaed3e7aa65848260ff0c6644f817042cb15",
+ "sha256:9d75641a2fca9ae1ae86454fd25d4c298ea8cc195dbc962852234d54a07060ad",
+ "sha256:a4e95e43447a02aa603abcc6b5e727d093d161a869c83b073f50b9390ecf0fa8",
+ "sha256:a6b9a5c18863fd4b6624a42e2712103fb0f57799a3b29651c0e5b8119a519d65",
+ "sha256:aa8d025fae1595a207b4e47c2e087cb88d47008494db258ac561c00877d4c8f8",
+ "sha256:ac11ecb34a86b831239cc38245403a8de25037b448464f95c3315819e7519772",
+ "sha256:ae6de510f670137e755eb2a74b04d1041e7210af2444103c8c95f193340d17ee",
+ "sha256:b2a44e572fb762c668e4812156b81835f7aba8a721b027e2d4bb29fb50ff4d33",
+ "sha256:b6eb68493a05d38b426604e1dc93bfc0137c4157f7ab4fac5771fd9a104bbaa6",
+ "sha256:b9bca3ca0c5e74dea44bf57d27e15a3a3996ce7e5780d61b7c72386356d231db",
+ "sha256:bd79929b3bb96b54df1296cd3bf4d2b770bd1df6c2bdf549b49bab286b925cdc",
+ "sha256:c4c425f440fb81f8d0237c07b9322fc0fb6ee2b29fbef5f62a322ff8fcce240d",
+ "sha256:cb204a742997277da678611a809a8409657b1398aaeebf73b3d9563b7d154c13",
+ "sha256:cf51d28063338608cd8d3cd64677e922134837902b70ce00dad7f116e3998210",
+ "sha256:cfd9306511fdfc623a1ba1dc3bc07fbd24e6cfbe3c28b4d1e05177baa2f99617",
+ "sha256:cff8e54d6a463883cda2fab94d2062aad2f5edd7f06ae3ed030f2a74756db365",
+ "sha256:d01793653248f49cf47e5695e0a79805b1d9d4eacef85b310118ba1dfcd1b955",
+ "sha256:d4ea4509d42c6797539e9ec7496c15473177ce9abc89bc5c71e7abe50fc25737",
+ "sha256:d90cfdafcf4b45a7a076e3e2a58e7bc3d59c698c4f6470b0bb13a4d869cf2273",
+ "sha256:e090b2553e0da1c875449c8e75073dd4415dd71c9bde6a406240fdf4c0ee467c",
+ "sha256:e91d154689639932305b6ea6f45c6e46bb51ecc8ea77c10ef25aa77f75443ad4",
+ "sha256:eef1dce9d1a46119fd09f9a992cf6ab9d9178b696382439446ca5f399d7b96fe",
+ "sha256:efe32b45dd6d118f5ea2e5deaed417d8a14976325c93812dd831908522b402c9",
+ "sha256:f4d613fbf868b2e2444f490d18af472ccb47660ea3df52f068c9c8801e1f3e85",
+ "sha256:f55f077685f61f0fbd06ea355142b71e47e4a26d2d678b3ba27248abfe67163a",
+ "sha256:f623c57a5321461c84498a99dddf9d13dac0e40ee056d884d6ec4ebcab647a78",
+ "sha256:f6bd2ab135c64a4d1e9e44679a616c9bc944547357c830fafea5c3caa3de5153",
+ "sha256:f95e15db43e75a534420e04822df91f645664bf4ad21dfaad7d51773c80e6bb4",
+ "sha256:fd6bc27861e460fe28e94226e3673d46e294ca4673d46b224428d197c5935e69",
+ "sha256:fe89295219b9c9e47780a0f1c75ca44211e706d1c598242249fe717af3385ec8"
+ ],
+ "version": "==1.67.0"
},
"grpcio-status": {
"hashes": [
- "sha256:b3f7d34ccc46d83fea5261eea3786174459f763c31f6e34f1d24eba6d515d024",
- "sha256:cf9ed0b4a83adbe9297211c95cb5488b0cd065707e812145b842c85c4782ff02"
+ "sha256:0e79e2e01ba41a6ca6ed9d7a825323c511fe1653a646f8014c7e3c8132527acc",
+ "sha256:c3e5a86fa007e9e263cd5f988a8a907484da4caab582874ea2a4a6092734046b"
],
- "version": "==1.66.1"
+ "version": "==1.67.0"
},
"gunicorn": {
"hashes": [
@@ -1554,11 +1610,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": [
@@ -1570,44 +1626,51 @@
},
"httptools": {
"hashes": [
- "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563",
- "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142",
- "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d",
- "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b",
- "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4",
- "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb",
- "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658",
- "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084",
- "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2",
- "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97",
- "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837",
- "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3",
- "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58",
- "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da",
- "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d",
- "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90",
- "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0",
- "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1",
- "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2",
- "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e",
- "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0",
- "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf",
- "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc",
- "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3",
- "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503",
- "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a",
- "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3",
- "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949",
- "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84",
- "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb",
- "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a",
- "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f",
- "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e",
- "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81",
- "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185",
- "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"
- ],
- "version": "==0.6.1"
+ "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a",
+ "sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd",
+ "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2",
+ "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17",
+ "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8",
+ "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3",
+ "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5",
+ "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da",
+ "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0",
+ "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721",
+ "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636",
+ "sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff",
+ "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0",
+ "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071",
+ "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c",
+ "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4",
+ "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1",
+ "sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9",
+ "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44",
+ "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083",
+ "sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003",
+ "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959",
+ "sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc",
+ "sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076",
+ "sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490",
+ "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660",
+ "sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6",
+ "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c",
+ "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50",
+ "sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547",
+ "sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba",
+ "sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440",
+ "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988",
+ "sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab",
+ "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970",
+ "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1",
+ "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2",
+ "sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f",
+ "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81",
+ "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069",
+ "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975",
+ "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f",
+ "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43"
+ ],
+ "version": "==0.6.4"
},
"httpx": {
"hashes": [
@@ -1634,12 +1697,12 @@
},
"icalendar": {
"hashes": [
- "sha256:5ded5415e2e1edef5ab230024a75878a7a81d518a3b1ae4f34bf20b173c84dc2",
- "sha256:92799fde8cce0b61daa8383593836d1e19136e504fa1671f471f98be9b029706"
+ "sha256:1ff44825d7b41c3f77eac9e09cc67a770dd3c2377430c23b0eb7d91603088892",
+ "sha256:9bf3d69203bd0366a9a29a8b0e220574580b86d7918afcb628fc6920287922f3"
],
"index": "pypi",
- "markers": "python_version >= '3.7'",
- "version": "==5.0.13"
+ "markers": "python_version >= '3.8'",
+ "version": "==6.0.1"
},
"idna": {
"hashes": [
@@ -1683,70 +1746,82 @@
},
"jiter": {
"hashes": [
- "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df",
- "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06",
- "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566",
- "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc",
- "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a",
- "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148",
- "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9",
- "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5",
- "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646",
- "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a",
- "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7",
- "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61",
- "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f",
- "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653",
- "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614",
- "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf",
- "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc",
- "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a",
- "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6",
- "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544",
- "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961",
- "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4",
- "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a",
- "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14",
- "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf",
- "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d",
- "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e",
- "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3",
- "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248",
- "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e",
- "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6",
- "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba",
- "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e",
- "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b",
- "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a",
- "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749",
- "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e",
- "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5",
- "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb",
- "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae",
- "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104",
- "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28",
- "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e",
- "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e",
- "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389",
- "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e",
- "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f",
- "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e",
- "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e",
- "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631",
- "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3",
- "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87",
- "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb",
- "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1",
- "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553",
- "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4",
- "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403",
- "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338",
- "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6",
- "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf",
- "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"
+ "sha256:03a025b52009f47e53ea619175d17e4ded7c035c6fbd44935cb3ada11e1fd592",
+ "sha256:08be33db6dcc374c9cc19d3633af5e47961a7b10d4c61710bd39e48d52a35824",
+ "sha256:0b809e39e342c346df454b29bfcc7bca3d957f5d7b60e33dae42b0e5ec13e027",
+ "sha256:13f9084e3e871a7c0b6e710db54444088b1dd9fbefa54d449b630d5e73bb95d0",
+ "sha256:15f8395e835cf561c85c1adee72d899abf2733d9df72e9798e6d667c9b5c1f30",
+ "sha256:18aa9d1626b61c0734b973ed7088f8a3d690d0b7f5384a5270cd04f4d9f26c86",
+ "sha256:1fad93654d5a7dcce0809aff66e883c98e2618b86656aeb2129db2cd6f26f867",
+ "sha256:220e0963b4fb507c525c8f58cde3da6b1be0bfddb7ffd6798fb8f2531226cdb1",
+ "sha256:25f0d2f6e01a8a0fb0eab6d0e469058dab2be46ff3139ed2d1543475b5a1d8e7",
+ "sha256:26d2bdd5da097e624081c6b5d416d3ee73e5b13f1703bcdadbb1881f0caa1933",
+ "sha256:31d8e00e1fb4c277df8ab6f31a671f509ebc791a80e5c61fdc6bc8696aaa297c",
+ "sha256:3343d4706a2b7140e8bd49b6c8b0a82abf9194b3f0f5925a78fc69359f8fc33c",
+ "sha256:33af2b7d2bf310fdfec2da0177eab2fedab8679d1538d5b86a633ebfbbac4edd",
+ "sha256:352cd24121e80d3d053fab1cc9806258cad27c53cad99b7a3cac57cf934b12e4",
+ "sha256:36c0b51a285b68311e207a76c385650322734c8717d16c2eb8af75c9d69506e7",
+ "sha256:3c843e7c1633470708a3987e8ce617ee2979ee18542d6eb25ae92861af3f1d62",
+ "sha256:3cbc1a66b4e41511209e97a2866898733c0110b7245791ac604117b7fb3fedb7",
+ "sha256:3e36a320634f33a07794bb15b8da995dccb94f944d298c8cfe2bd99b1b8a574a",
+ "sha256:40b03b75f903975f68199fc4ec73d546150919cb7e534f3b51e727c4d6ccca5a",
+ "sha256:47fee1be677b25d0ef79d687e238dc6ac91a8e553e1a68d0839f38c69e0ee491",
+ "sha256:4e6e340e8cd92edab7f6a3a904dbbc8137e7f4b347c49a27da9814015cc0420c",
+ "sha256:51b58f7a0d9e084a43b28b23da2b09fc5e8df6aa2b6a27de43f991293cab85fd",
+ "sha256:540fcb224d7dc1bcf82f90f2ffb652df96f2851c031adca3c8741cb91877143b",
+ "sha256:59e2b37f3b9401fc9e619f4d4badcab2e8643a721838bcf695c2318a0475ae42",
+ "sha256:5a99d4e0b5fc3b05ea732d67eb2092fe894e95a90e6e413f2ea91387e228a307",
+ "sha256:5f79ce15099154c90ef900d69c6b4c686b64dfe23b0114e0971f2fecd306ec6c",
+ "sha256:67723a011964971864e0b484b0ecfee6a14de1533cff7ffd71189e92103b38a8",
+ "sha256:677be9550004f5e010d673d3b2a2b815a8ea07a71484a57d3f85dde7f14cf132",
+ "sha256:691352e5653af84ed71763c3c427cff05e4d658c508172e01e9c956dfe004aba",
+ "sha256:77c296d65003cd7ee5d7b0965f6acbe6cffaf9d1fa420ea751f60ef24e85fed5",
+ "sha256:7a3567c8228afa5ddcce950631c6b17397ed178003dc9ee7e567c4c4dcae9fa0",
+ "sha256:7cea41c4c673353799906d940eee8f2d8fd1d9561d734aa921ae0f75cb9732f4",
+ "sha256:7d72fc86474862c9c6d1f87b921b70c362f2b7e8b2e3c798bb7d58e419a6bc0f",
+ "sha256:81116a6c272a11347b199f0e16b6bd63f4c9d9b52bc108991397dd80d3c78aba",
+ "sha256:82521000d18c71e41c96960cb36e915a357bc83d63a8bed63154b89d95d05ad1",
+ "sha256:825651a3f04cf92a661d22cad61fc913400e33aa89b3e3ad9a6aa9dc8a1f5a71",
+ "sha256:852508a54fe3228432e56019da8b69208ea622a3069458252f725d634e955b31",
+ "sha256:883d2ced7c21bf06874fdeecab15014c1c6d82216765ca6deef08e335fa719e0",
+ "sha256:8c97e90fec2da1d5f68ef121444c2c4fa72eabf3240829ad95cf6bbeca42a301",
+ "sha256:91e63273563401aadc6c52cca64a7921c50b29372441adc104127b910e98a5b6",
+ "sha256:928bf25eb69ddb292ab8177fe69d3fbf76c7feab5fce1c09265a7dccf25d3991",
+ "sha256:9df588e9c830b72d8db1dd7d0175af6706b0904f682ea9b1ca8b46028e54d6e9",
+ "sha256:a2e861658c3fe849efc39b06ebb98d042e4a4c51a8d7d1c3ddc3b1ea091d0784",
+ "sha256:a311df1fa6be0ccd64c12abcd85458383d96e542531bafbfc0a16ff6feda588f",
+ "sha256:a31c6fcbe7d6c25d6f1cc6bb1cba576251d32795d09c09961174fe461a1fb5bd",
+ "sha256:aa25c7a9bf7875a141182b9c95aed487add635da01942ef7ca726e42a0c09058",
+ "sha256:adef59d5e2394ebbad13b7ed5e0306cceb1df92e2de688824232a91588e77aa7",
+ "sha256:aeeb0c0325ef96c12a48ea7e23e2e86fe4838e6e0a995f464cf4c79fa791ceeb",
+ "sha256:b03c24e7da7e75b170c7b2b172d9c5e463aa4b5c95696a368d52c295b3f6847f",
+ "sha256:b2019d966e98f7c6df24b3b8363998575f47d26471bfb14aade37630fae836a1",
+ "sha256:b3e02f7a27f2bcc15b7d455c9df05df8ffffcc596a2a541eeda9a3110326e7a3",
+ "sha256:bae5ae4853cb9644144e9d0755854ce5108d470d31541d83f70ca7ecdc2d1637",
+ "sha256:bd95375ce3609ec079a97c5d165afdd25693302c071ca60c7ae1cf826eb32022",
+ "sha256:be7503dd6f4bf02c2a9bacb5cc9335bc59132e7eee9d3e931b13d76fd80d7fda",
+ "sha256:c74a8d93718137c021d9295248a87c2f9fdc0dcafead12d2930bc459ad40f885",
+ "sha256:cc56c8f0b2a28ad4d8047f3ae62d25d0e9ae01b99940ec0283263a04724de1f3",
+ "sha256:d08510593cb57296851080018006dfc394070178d238b767b1879dc1013b106c",
+ "sha256:d465db62d2d10b489b7e7a33027c4ae3a64374425d757e963f86df5b5f2e7fc5",
+ "sha256:d71c962f0971347bd552940ab96aa42ceefcd51b88c4ced8a27398182efa8d80",
+ "sha256:db459ed22d0208940d87f614e1f0ea5a946d29a3cfef71f7e1aab59b6c6b2afb",
+ "sha256:defee3949313c1f5b55e18be45089970cdb936eb2a0063f5020c4185db1b63c9",
+ "sha256:e19cd21221fc139fb032e4112986656cb2739e9fe6d84c13956ab30ccc7d4449",
+ "sha256:e4e85f9e12cd8418ab10e1fcf0e335ae5bb3da26c4d13a0fd9e6a17a674783b6",
+ "sha256:e51a2d80d5fe0ffb10ed2c82b6004458be4a3f2b9c7d09ed85baa2fbf033f54b",
+ "sha256:e5c0507131c922defe3f04c527d6838932fcdfd69facebafd7d3574fa3395314",
+ "sha256:e7b75436d4fa2032b2530ad989e4cb0ca74c655975e3ff49f91a1a3d7f4e1df2",
+ "sha256:e8bd065be46c2eecc328e419d6557bbc37844c88bb07b7a8d2d6c91c7c4dedc9",
+ "sha256:e90552109ca8ccd07f47ca99c8a1509ced93920d271bb81780a973279974c5ab",
+ "sha256:e9ac7c2f092f231f5620bef23ce2e530bd218fc046098747cc390b21b8738a7a",
+ "sha256:ed69a7971d67b08f152c17c638f0e8c2aa207e9dd3a5fcd3cba294d39b5a8d2d",
+ "sha256:f1c53615fcfec3b11527c08d19cff6bc870da567ce4e57676c059a3102d3a082",
+ "sha256:f491cc69ff44e5a1e8bc6bf2b94c1f98d179e1aaf4a554493c171a5b2316b701",
+ "sha256:f791b6a4da23238c17a81f44f5b55d08a420c5692c1fda84e301a4b036744eb1"
],
"markers": "python_version >= '3.8'",
- "version": "==0.5.0"
+ "version": "==0.6.1"
},
"jsonschema": {
"hashes": [
@@ -1758,11 +1833,11 @@
},
"jsonschema-specifications": {
"hashes": [
- "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc",
- "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"
+ "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272",
+ "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"
],
- "markers": "python_version >= '3.8'",
- "version": "==2023.12.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==2024.10.1"
},
"jupyter-client": {
"hashes": [
@@ -1807,12 +1882,12 @@
},
"launchdarkly-server-sdk": {
"hashes": [
- "sha256:42f4cb25ebf547d5ebf228f0852bc3e435f395a6eb437de68c47e393729502b2",
- "sha256:e547fe5d49aaf5c9537718467545dc1e38f837bb396259465035e30c1a54798a"
+ "sha256:8cb72f3cd283bd3b1954d59b8197f1467b35d5c10449904aaf560d59d4ceb368",
+ "sha256:e50a5eef770a5d0c609cf823c60ad9526f2f645e67efc638af31e7582ff62050"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
- "version": "==9.7.1"
+ "version": "==9.8.0"
},
"linked-services": {
"extras": [
@@ -1983,69 +2058,70 @@
},
"markupsafe": {
"hashes": [
- "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf",
- "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff",
- "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f",
- "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3",
- "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532",
- "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f",
- "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617",
- "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df",
- "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4",
- "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906",
- "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f",
- "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4",
- "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8",
- "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371",
- "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2",
- "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465",
- "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52",
- "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6",
- "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169",
- "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad",
- "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2",
- "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0",
- "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029",
- "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f",
- "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a",
- "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced",
- "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5",
- "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c",
- "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf",
- "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9",
- "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb",
- "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad",
- "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3",
- "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1",
- "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46",
- "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc",
- "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a",
- "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee",
- "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900",
- "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5",
- "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea",
- "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f",
- "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5",
- "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e",
- "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a",
- "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f",
- "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50",
- "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a",
- "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b",
- "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4",
- "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff",
- "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2",
- "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46",
- "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b",
- "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf",
- "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5",
- "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5",
- "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab",
- "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd",
- "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"
+ "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4",
+ "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30",
+ "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0",
+ "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9",
+ "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396",
+ "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13",
+ "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028",
+ "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca",
+ "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557",
+ "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832",
+ "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0",
+ "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b",
+ "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579",
+ "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a",
+ "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c",
+ "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff",
+ "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c",
+ "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22",
+ "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094",
+ "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb",
+ "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e",
+ "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5",
+ "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a",
+ "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d",
+ "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a",
+ "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b",
+ "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8",
+ "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225",
+ "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c",
+ "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144",
+ "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f",
+ "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87",
+ "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d",
+ "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93",
+ "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf",
+ "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158",
+ "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84",
+ "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb",
+ "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48",
+ "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171",
+ "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c",
+ "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6",
+ "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd",
+ "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d",
+ "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1",
+ "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d",
+ "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca",
+ "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a",
+ "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29",
+ "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe",
+ "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798",
+ "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c",
+ "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8",
+ "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f",
+ "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f",
+ "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a",
+ "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178",
+ "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0",
+ "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79",
+ "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430",
+ "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"
],
- "markers": "python_version >= '3.7'",
- "version": "==2.1.5"
+ "markers": "python_version >= '3.9'",
+ "version": "==3.0.2"
},
"minify-html": {
"hashes": [
@@ -2273,37 +2349,42 @@
},
"mypy": {
"hashes": [
- "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36",
- "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce",
- "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6",
- "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b",
- "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca",
- "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24",
- "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383",
- "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7",
- "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86",
- "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d",
- "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4",
- "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8",
- "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987",
- "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385",
- "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79",
- "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef",
- "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6",
- "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70",
- "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca",
- "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70",
- "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12",
- "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104",
- "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a",
- "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318",
- "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1",
- "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b",
- "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"
+ "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66",
+ "sha256:0dcc1e843d58f444fce19da4cce5bd35c282d4bde232acdeca8279523087088a",
+ "sha256:0e6fe449223fa59fbee351db32283838a8fee8059e0028e9e6494a03802b4004",
+ "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735",
+ "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931",
+ "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a",
+ "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02",
+ "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0",
+ "sha256:3d7d4371829184e22fda4015278fbfdef0327a4b955a483012bd2d423a788801",
+ "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635",
+ "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179",
+ "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81",
+ "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811",
+ "sha256:8135ffec02121a75f75dc97c81af7c14aa4ae0dda277132cfcd6abcd21551bfd",
+ "sha256:843826966f1d65925e8b50d2b483065c51fc16dc5d72647e0236aae51dc8d77e",
+ "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042",
+ "sha256:96af62050971c5241afb4701c15189ea9507db89ad07794a4ee7b4e092dc0627",
+ "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f",
+ "sha256:9fe20f89da41a95e14c34b1ddb09c80262edcc295ad891f22cc4b60013e8f78d",
+ "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6",
+ "sha256:a7b76fa83260824300cc4834a3ab93180db19876bce59af921467fd03e692810",
+ "sha256:b16fe09f9c741d85a2e3b14a5257a27a4f4886c171d562bc5a5e90d8591906b8",
+ "sha256:b947097fae68004b8328c55161ac9db7d3566abfef72d9d41b47a021c2fba6b1",
+ "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e",
+ "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc",
+ "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4",
+ "sha256:d90da248f4c2dba6c44ddcfea94bb361e491962f05f41990ff24dbd09969ce20",
+ "sha256:dc6e2a2195a290a7fd5bac3e60b586d77fc88e986eba7feced8b778c373f9afe",
+ "sha256:de5b2a8988b4e1269a98beaf0e7cc71b510d050dce80c343b53b4955fff45f19",
+ "sha256:e10ba7de5c616e44ad21005fa13450cd0de7caaa303a626147d45307492e4f2d",
+ "sha256:f59f1dfbf497d473201356966e353ef09d4daec48caeacc0254db8ef633a28a5",
+ "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
- "version": "==1.11.2"
+ "version": "==1.12.1"
},
"mypy-extensions": {
"hashes": [
@@ -2340,35 +2421,39 @@
},
"newrelic": {
"hashes": [
- "sha256:002e21527c77c0c9640402c152d40a114b4cc821e7de93cf445fffaef160f1aa",
- "sha256:01e68cf6826a3d456aaa0a4c88a7b864403428369b855c3d9c5c27958ef48adb",
- "sha256:03a5068d68f22d80797a048a4018d673b8cdd646bc5f9fb63328b53b08bc6de7",
- "sha256:0d1f0c1c54a301ee8f7c4372a8905a18cd36d9a2f9b6550898dd7bac147480d3",
- "sha256:14e675e0a73e52fde94df9de89201de945cc3a2a046b4fdfe5ba1717b15cad78",
- "sha256:1f4cd5ca11f08badd4b1cdd746053cfb30a09d5d9b9c1f5d911718d2870b4493",
- "sha256:27d2f34bf714ef9d7ff8a68265a2094b87a4bdc7b1bbbd0a1421cf5cf8f33311",
- "sha256:34b60d16d6e8fbc3e65a7d5171718999ecf7bc369cf8baae1bee3c6317972e18",
- "sha256:4d09af04f86d40c534d3753bdc1e45e9ca76ce85cea7ea87994c77b3d0677381",
- "sha256:548b538c3e95b589a30565bff668285ca74bb64069eb1d6f643bde9768944f53",
- "sha256:6257413c9e261e8256be5cadb488945dbb3830dcc6091805fa3a5c70992a03a6",
- "sha256:78bc57206c7747f7096ed081d828719def7c0952ea7834c7769d383bd7ba0aa6",
- "sha256:8716867245ebe97656017e7a6ef17ebccb730e59062531e3e7b9ce9ffc7b4e4b",
- "sha256:94c94a0a05e2995dff812f4fb85113227bcc5a24635539031842af9c1ddc4368",
- "sha256:a8a16dfac53914dd0b930a2c087df701585d4f372b2c138466418e78d067b50f",
- "sha256:a8c1b480bbe5c3e2e156f8de86182aa207430dbb32e0e5dc523ba8c3731328fc",
- "sha256:b1352b6d357e82899ff102acb6971fb9c2cebe70c783081f11c3e53fddfedc4e",
- "sha256:b60407fdb9798eee54488130bf87dfe542c3f04475c0c6b8c14e84274db5b1eb",
- "sha256:bd3c73bbfac0a48402583aada21bf026161df8b73c6552cb8654f4a93f409860",
- "sha256:c633972d88d89a2a17471b834961a889709f4970016e9641e3ddc0234669aadf",
- "sha256:d6e09a66088431356c6c1a75bd1cdac2e425d547b47026138b254ac51d5df23d",
- "sha256:d8bfbbb50ccc39a51a3449cdfb61970d7e61be0eb93336e3725857b7c1d17ff7",
- "sha256:d90d41d78bd72d7fab7ed1cf34bf3dc519ab2d8c6820554061b8708eb7951374",
- "sha256:f1aac4a5fe1d0cbe2bb9e2c52152604fb872a6bce28e129febd29d1d307df1f4",
- "sha256:f446bf0943220e114e861bbc96761733e0877684ee860cf61755abe2d9805367"
+ "sha256:00df1aa613294cb592a52157f789e75166dbf439cfa9e6cf59f6cf4a265dada9",
+ "sha256:03ab987eae0452aeb5aed8571c100d1735613a3a227387f99fe54ed38f1ae0e9",
+ "sha256:23400846dad2283693eade90b6d3c3462301a4b7735c7f76009b1fa445660aeb",
+ "sha256:32bd34e4cd73c2435472c0b67869fd2db914d6c99d3e1e404e09affe61a8551e",
+ "sha256:3415b1c7cab5e586e72cca467dd80cd0507f23a3139c02911cf75892fdbb48a6",
+ "sha256:3521d646c0032db53b7320fe6b6859eebd863f1b47d7c7dd480073727091e50e",
+ "sha256:36a2218c9e79897d9b5671cdeac30c467d7fbac10cda4f2d79062f2bd0fcaed8",
+ "sha256:3bee0b9ce1eccf6ac63e51113781743853b1b84c98ae48ed17d0410c352ccb4d",
+ "sha256:3cd5aeade6462519328fc42f4e98948a45571f3d22360a0559e19a6525c723a6",
+ "sha256:3d9c8297ba158ce4570fc48cfea7bdf3678b2054baaf0cad4debcbca33c2af3a",
+ "sha256:3f15a940b6794b4008ab983e7ac3b4d179efe609e040ee96ed5744723fc580c8",
+ "sha256:501cc575b3fd702a21542a0f5dac59b83f47e2806f5b7c0f4e4510b5474ed77f",
+ "sha256:60d01303807228718c4099d8550f72d21ee8b61a33555d8974800f6868f2144a",
+ "sha256:62d521a5d7269c8a5c5838c4ca3b757ef63a13257302c901223c75510cc6f9f5",
+ "sha256:69aa68cae47c595bdeb95f275d78693ec27a9fd9353bf81257e21f8607134db6",
+ "sha256:7b449546ebb89feaadfd36fda7735ce06023fc90979b838e244f98369aba5ccb",
+ "sha256:7f021eac4c2e3b14eab90c608d8bd25b4e3c6b0b0d40796ec1c1260cc47b5e83",
+ "sha256:a15df23effd09bb1d1f5c38866b75cc5f380b6aa953efbca9e95e79b72744db4",
+ "sha256:a6d4094d19db924c51ca35da603344907bcbca030822f7a78d5d9c6ad361d419",
+ "sha256:a6ff022c7556b61b067e8e6b729fe60f437a8356f319ae3b8342858792f3930d",
+ "sha256:b4220b97669d214e75d2039fea9e0505fde5bc450832210abbc76b9a635785ed",
+ "sha256:bc693e0db87ab4cf6623847c3949debbcc991554edfb4dd8c02c136e0770b367",
+ "sha256:c57e79d37ed87e2790c5e66253f9a5d91ed8cc218f160d5a4d062fc759791a78",
+ "sha256:c6aa9cf936b16d13b65c1b7aa6c722a76a0702469f91bcfc3c5b39f3293181eb",
+ "sha256:e5809b4111ef3b1d0b5fa66ad06a81de512842370707863d44888c9439f16c4c",
+ "sha256:e6f822e6a43151af13a748fb2de6ff298aeb6eee03bf6512afba6aaa79211172",
+ "sha256:ef5d27001d3b5ca53f19d150c60b570c1b0c774d082ab9bf8349f4430ed85b48",
+ "sha256:f6333aa7051544ddc7f8a85f344bc3f401ddd8635540878da34de7bfd91f5d95",
+ "sha256:fc3d34db12133b481636384663f45b9ccd7f0f41554a59c15ec37aeb4f77227d"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
- "version": "==10.0.0"
+ "version": "==10.2.0"
},
"nodeenv": {
"hashes": [
@@ -2380,63 +2465,63 @@
},
"numpy": {
"hashes": [
- "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5",
- "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0",
- "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550",
- "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c",
- "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7",
- "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2",
- "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b",
- "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df",
- "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f",
- "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d",
- "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270",
- "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd",
- "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504",
- "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec",
- "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647",
- "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f",
- "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab",
- "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe",
- "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5",
- "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5",
- "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e",
- "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd",
- "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313",
- "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0",
- "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f",
- "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6",
- "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553",
- "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed",
- "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb",
- "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e",
- "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39",
- "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728",
- "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e",
- "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a",
- "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95",
- "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f",
- "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480",
- "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9",
- "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0",
- "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f",
- "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd",
- "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae",
- "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201",
- "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136",
- "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf",
- "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78",
- "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468",
- "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca",
- "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef",
- "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0",
- "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556",
- "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521",
- "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"
+ "sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8",
+ "sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466",
+ "sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35",
+ "sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c",
+ "sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4",
+ "sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6",
+ "sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0",
+ "sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7",
+ "sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a",
+ "sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a",
+ "sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e",
+ "sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62",
+ "sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2",
+ "sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5",
+ "sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee",
+ "sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe",
+ "sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a",
+ "sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e",
+ "sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf",
+ "sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c",
+ "sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3",
+ "sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86",
+ "sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df",
+ "sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98",
+ "sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d",
+ "sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2",
+ "sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146",
+ "sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550",
+ "sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8",
+ "sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb",
+ "sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e",
+ "sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d",
+ "sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366",
+ "sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0",
+ "sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db",
+ "sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe",
+ "sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426",
+ "sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952",
+ "sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03",
+ "sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f",
+ "sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7",
+ "sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b",
+ "sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17",
+ "sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5",
+ "sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1",
+ "sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142",
+ "sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884",
+ "sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a",
+ "sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9",
+ "sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445",
+ "sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1",
+ "sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1",
+ "sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648"
],
"index": "pypi",
"markers": "python_version >= '3.10'",
- "version": "==2.1.1"
+ "version": "==2.1.2"
},
"oauthlib": {
"hashes": [
@@ -2448,12 +2533,12 @@
},
"openai": {
"hashes": [
- "sha256:7967fc8372d5e005ad61514586fb286d593facafccedbee00416bc38ee07c2e6",
- "sha256:80cbdf275488894c70bfbad711dbba6f31ea71d579b97e364bfd99cdf030158e"
+ "sha256:0c249f20920183b0a2ca4f7dba7b0452df3ecd0fa7985eb1d91ad884bc3ced9c",
+ "sha256:95c65a5f77559641ab8f3e4c3a050804f7b51d278870e2ec1f7444080bfe565a"
],
"index": "pypi",
"markers": "python_full_version >= '3.7.1'",
- "version": "==1.50.1"
+ "version": "==1.52.0"
},
"packaging": {
"hashes": [
@@ -2522,97 +2607,92 @@
},
"phonenumberslite": {
"hashes": [
- "sha256:636946fb0b236c447aba5bd8215d64a924ac8b0b8e3a3532ac9c0db4754ffcd0",
- "sha256:f8a25e37498b5368d2c5b929e8dc7ea83219434e19705869b4e04e7313355fec"
+ "sha256:9548bc4c3a7c4d67f7945ba0286e9a37c3ee4ea5531f7ea2518d1cbdc857f50f",
+ "sha256:db060fd07421306f8fbc4332ca16b8785df0fa70371d3ed632519546c1a11274"
],
- "version": "==8.13.46"
+ "version": "==8.13.48"
},
"pillow": {
"hashes": [
- "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885",
- "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea",
- "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df",
- "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5",
- "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c",
- "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d",
- "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd",
- "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06",
- "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908",
- "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a",
- "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be",
- "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0",
- "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b",
- "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80",
- "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a",
- "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e",
- "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9",
- "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696",
- "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b",
- "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309",
- "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e",
- "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab",
- "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d",
- "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060",
- "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d",
- "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d",
- "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4",
- "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3",
- "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6",
- "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb",
- "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94",
- "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b",
- "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496",
- "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0",
- "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319",
- "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b",
- "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856",
- "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef",
- "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680",
- "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b",
- "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42",
- "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e",
- "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597",
- "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a",
- "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8",
- "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3",
- "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736",
- "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da",
- "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126",
- "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd",
- "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5",
- "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b",
- "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026",
- "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b",
- "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc",
- "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46",
- "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2",
- "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c",
- "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe",
- "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984",
- "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a",
- "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70",
- "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca",
- "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b",
- "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91",
- "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3",
- "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84",
- "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1",
- "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5",
- "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be",
- "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f",
- "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc",
- "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9",
- "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e",
- "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141",
- "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef",
- "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22",
- "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27",
- "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e",
- "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"
+ "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7",
+ "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5",
+ "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903",
+ "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2",
+ "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38",
+ "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2",
+ "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9",
+ "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f",
+ "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc",
+ "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8",
+ "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d",
+ "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2",
+ "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316",
+ "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a",
+ "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25",
+ "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd",
+ "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba",
+ "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc",
+ "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273",
+ "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa",
+ "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a",
+ "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b",
+ "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a",
+ "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae",
+ "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291",
+ "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97",
+ "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06",
+ "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904",
+ "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b",
+ "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b",
+ "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8",
+ "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527",
+ "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947",
+ "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb",
+ "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003",
+ "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5",
+ "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f",
+ "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739",
+ "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944",
+ "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830",
+ "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f",
+ "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3",
+ "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4",
+ "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84",
+ "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7",
+ "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6",
+ "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6",
+ "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9",
+ "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de",
+ "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4",
+ "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47",
+ "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd",
+ "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50",
+ "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c",
+ "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086",
+ "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba",
+ "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306",
+ "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699",
+ "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e",
+ "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488",
+ "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa",
+ "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2",
+ "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3",
+ "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9",
+ "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923",
+ "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2",
+ "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790",
+ "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734",
+ "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916",
+ "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1",
+ "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f",
+ "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798",
+ "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb",
+ "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2",
+ "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==10.4.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==11.0.0"
},
"pip": {
"hashes": [
@@ -2668,6 +2748,110 @@
"markers": "python_full_version >= '3.7.0'",
"version": "==3.0.48"
},
+ "propcache": {
+ "hashes": [
+ "sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9",
+ "sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763",
+ "sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325",
+ "sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb",
+ "sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b",
+ "sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09",
+ "sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957",
+ "sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68",
+ "sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f",
+ "sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798",
+ "sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418",
+ "sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6",
+ "sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162",
+ "sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f",
+ "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036",
+ "sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8",
+ "sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2",
+ "sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110",
+ "sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23",
+ "sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8",
+ "sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638",
+ "sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a",
+ "sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44",
+ "sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2",
+ "sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2",
+ "sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850",
+ "sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136",
+ "sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b",
+ "sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887",
+ "sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89",
+ "sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87",
+ "sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348",
+ "sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4",
+ "sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861",
+ "sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e",
+ "sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c",
+ "sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b",
+ "sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb",
+ "sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1",
+ "sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de",
+ "sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354",
+ "sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563",
+ "sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5",
+ "sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf",
+ "sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9",
+ "sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12",
+ "sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4",
+ "sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5",
+ "sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71",
+ "sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9",
+ "sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed",
+ "sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336",
+ "sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90",
+ "sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063",
+ "sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad",
+ "sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6",
+ "sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8",
+ "sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e",
+ "sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2",
+ "sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7",
+ "sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d",
+ "sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d",
+ "sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df",
+ "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b",
+ "sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178",
+ "sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2",
+ "sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630",
+ "sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48",
+ "sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61",
+ "sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89",
+ "sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb",
+ "sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3",
+ "sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6",
+ "sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562",
+ "sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b",
+ "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58",
+ "sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db",
+ "sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99",
+ "sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37",
+ "sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83",
+ "sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a",
+ "sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d",
+ "sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04",
+ "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70",
+ "sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544",
+ "sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394",
+ "sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea",
+ "sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7",
+ "sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1",
+ "sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793",
+ "sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577",
+ "sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7",
+ "sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57",
+ "sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d",
+ "sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032",
+ "sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d",
+ "sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016",
+ "sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==0.2.0"
+ },
"proto-plus": {
"hashes": [
"sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445",
@@ -2699,80 +2883,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": [
@@ -2783,22 +2967,18 @@
},
"psycopg2": {
"hashes": [
- "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981",
- "sha256:38a8dcc6856f569068b47de286b472b7c473ac7977243593a288ebce0dc89516",
- "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3",
- "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa",
- "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a",
- "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693",
- "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372",
- "sha256:bac58c024c9922c23550af2a581998624d6e02350f4ae9c5f0bc642c633a2d5e",
- "sha256:c92811b2d4c9b6ea0285942b2e7cac98a59e166d59c588fe5cfe1eda58e72d59",
- "sha256:d1454bde93fb1e224166811694d600e746430c006fbb031ea06ecc2ea41bf156",
- "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024",
- "sha256:de80739447af31525feddeb8effd640782cf5998e1a4e9192ebdf829717e3913",
- "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"
+ "sha256:0435034157049f6846e95103bd8f5a668788dd913a7c30162ca9503fdf542cb4",
+ "sha256:12ec0b40b0273f95296233e8750441339298e6a572f7039da5b260e3c8b60e11",
+ "sha256:47c4f9875125344f4c2b870e41b6aad585901318068acd01de93f3677a6522c2",
+ "sha256:4a579d6243da40a7b3182e0430493dbd55950c493d8c68f4eec0b302f6bbf20e",
+ "sha256:5df2b672140f95adb453af93a7d669d7a7bf0a56bcd26f1502329166f4a61716",
+ "sha256:65a63d7ab0e067e2cdb3cf266de39663203d38d6a8ed97f5ca0cb315c73fe067",
+ "sha256:88138c8dedcbfa96408023ea2b0c369eda40fe5d75002c0964c78f46f11fa442",
+ "sha256:9d5b3b94b79a844a986d029eee38998232451119ad653aea42bb9220a8c5066b",
+ "sha256:c6f7b8561225f9e711a9c47087388a97fdc948211c10a4bccbf0ba68ab7b3b5a"
],
- "markers": "python_version >= '3.7'",
- "version": "==2.9.9"
+ "markers": "python_version >= '3.8'",
+ "version": "==2.9.10"
},
"pyarrow": {
"hashes": [
@@ -3094,11 +3274,11 @@
},
"pyparsing": {
"hashes": [
- "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c",
- "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"
+ "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84",
+ "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c"
],
- "markers": "python_version >= '3.1'",
- "version": "==3.1.4"
+ "markers": "python_version > '3.0'",
+ "version": "==3.2.0"
},
"pyrfc3339": {
"hashes": [
@@ -3109,12 +3289,12 @@
},
"pyright": {
"hashes": [
- "sha256:21a4749dd1740e209f88d3a601e9f40748670d39481ea32b9d77edf7f3f1fb2e",
- "sha256:66a5d4e83be9452853d73e9dd9e95ba0ac3061845270e4e331d0070a597d3445"
+ "sha256:1bf042b8f080441534aa02101dea30f8fc2efa8f7b6f1ab05197c21317f5bfa7",
+ "sha256:e5b9a1b8d492e13004d822af94d07d235f2c7c158457293b51ab2214c8c5b375"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
- "version": "==1.1.382.post1"
+ "version": "==1.1.385"
},
"pytest": {
"hashes": [
@@ -3147,7 +3327,7 @@
"sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3",
"sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"
],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
+ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==2.9.0.post0"
},
"python-dotenv": {
@@ -3373,11 +3553,11 @@
"hiredis"
],
"hashes": [
- "sha256:b756df1e4a3858fcc0ef861f3fc53623a96c41e2b1f5304e09e0fe758d333d40",
- "sha256:fd4fccba0d7f6aa48c58a78d76ddb4afc698f5da4a2c1d03d916e4fd7ab88cdd"
+ "sha256:f6c997521fedbae53387307c5d0bf784d9acc28d9f1d058abeac566ec4dbed72",
+ "sha256:f8ea06b7482a668c6475ae202ed8d9bcaa409f6e87fb77ed1043d912afd62e24"
],
"markers": "python_version >= '3.8'",
- "version": "==5.1.0"
+ "version": "==5.1.1"
},
"referencing": {
"hashes": [
@@ -3554,18 +3734,18 @@
},
"setuptools": {
"hashes": [
- "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2",
- "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"
+ "sha256:753bb6ebf1f465a1912e19ed1d41f403a79173a9acf66a42e7e6aec45c3c16ec",
+ "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8"
],
"markers": "python_version >= '3.8'",
- "version": "==75.1.0"
+ "version": "==75.2.0"
},
"six": {
"hashes": [
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
+ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==1.16.0"
},
"sniffio": {
@@ -3640,11 +3820,11 @@
"bqstorage"
],
"hashes": [
- "sha256:09a2b99b8591d441eef66d34d13057d0f09423fe259fef98c0502df61419d242",
- "sha256:99f868cfdd103b13f921ec1c1b748826b4b1187457dda48040da5ab5ba63c705"
+ "sha256:12783ad83ffad34e8e6e14046cb14bb2f1a3e7fb52676f5a24e940ff5cdeb864",
+ "sha256:5b2b77bdaefe9c0663db213d9475a5abbae88fa46108c352d19fa6fc51a47a1a"
],
"markers": "python_version < '3.13' and python_version >= '3.8'",
- "version": "==1.11.0"
+ "version": "==1.12.0"
},
"sqlparse": {
"hashes": [
@@ -3656,12 +3836,12 @@
},
"stripe": {
"hashes": [
- "sha256:0c79c1f3a844533c8d30cc283b43afb622aaa402539fca19167a9004fea3471c",
- "sha256:5abec44548d3814bc1e070aa1852bcb3fc5cc029e947c0f733156eb1f8c87030"
+ "sha256:0bbdfe54a09728fc54db6bb099b2f440ffc111d07d9674b0f04bfd0d3c1cbdcf",
+ "sha256:e79e02238d0ec7c89a64986af941dcae41e4857489b7cc83497acce9def356e5"
],
"index": "pypi",
"markers": "python_version >= '3.6'",
- "version": "==10.12.0"
+ "version": "==11.1.1"
},
"text-unidecode": {
"hashes": [
@@ -3720,12 +3900,12 @@
},
"twilio": {
"hashes": [
- "sha256:250fc6ce6960aa97a2e2ee7e718e3bc0e73d69731b97fe160ed2097f3cbeb5a8",
- "sha256:7fcb2da241d2264b17fbab9ac0ca829c0f0abe23ce6db15d4bb0d4d2d583f953"
+ "sha256:2cae99f0f7aecbd9da02fa59ad8f11b360db4a9281fc3fb3237ad50be21d8a9b",
+ "sha256:38a6ab04752f44313dcf736eae45236a901528d3f53dfc21d3afd33539243c7f"
],
"index": "pypi",
"markers": "python_full_version >= '3.7.0'",
- "version": "==9.3.2"
+ "version": "==9.3.4"
},
"twisted": {
"extras": [
@@ -3785,11 +3965,11 @@
"standard"
],
"hashes": [
- "sha256:13bc21373d103859f68fe739608e2eb054a816dea79189bc3ca08ea89a275906",
- "sha256:cac7be4dd4d891c363cd942160a7b02e69150dcbc7a36be04d5f4af4b17c8ced"
+ "sha256:60b8f3a5ac027dcd31448f411ced12b5ef452c646f76f02f8cc3f25d8d26fd82",
+ "sha256:f78b36b143c16f54ccdb8190d0a26b5f1901fe5a3c777e1ab29f26391af8551e"
],
"markers": "python_version >= '3.8'",
- "version": "==0.31.0"
+ "version": "==0.32.0"
},
"uvicorn-worker": {
"hashes": [
@@ -3802,39 +3982,45 @@
},
"uvloop": {
"hashes": [
- "sha256:265a99a2ff41a0fd56c19c3838b29bf54d1d177964c300dad388b27e84fd7847",
- "sha256:2beee18efd33fa6fdb0976e18475a4042cd31c7433c866e8a09ab604c7c22ff2",
- "sha256:35968fc697b0527a06e134999eef859b4034b37aebca537daeb598b9d45a137b",
- "sha256:36c530d8fa03bfa7085af54a48f2ca16ab74df3ec7108a46ba82fd8b411a2315",
- "sha256:3a609780e942d43a275a617c0839d85f95c334bad29c4c0918252085113285b5",
- "sha256:4603ca714a754fc8d9b197e325db25b2ea045385e8a3ad05d3463de725fdf469",
- "sha256:4b75f2950ddb6feed85336412b9a0c310a2edbcf4cf931aa5cfe29034829676d",
- "sha256:4f44af67bf39af25db4c1ac27e82e9665717f9c26af2369c404be865c8818dcf",
- "sha256:6462c95f48e2d8d4c993a2950cd3d31ab061864d1c226bbf0ee2f1a8f36674b9",
- "sha256:649c33034979273fa71aa25d0fe120ad1777c551d8c4cd2c0c9851d88fcb13ab",
- "sha256:746242cd703dc2b37f9d8b9f173749c15e9a918ddb021575a0205ec29a38d31e",
- "sha256:77fbc69c287596880ecec2d4c7a62346bef08b6209749bf6ce8c22bbaca0239e",
- "sha256:80dc1b139516be2077b3e57ce1cb65bfed09149e1d175e0478e7a987863b68f0",
- "sha256:82edbfd3df39fb3d108fc079ebc461330f7c2e33dbd002d146bf7c445ba6e756",
- "sha256:89e8d33bb88d7263f74dc57d69f0063e06b5a5ce50bb9a6b32f5fcbe655f9e73",
- "sha256:94707205efbe809dfa3a0d09c08bef1352f5d3d6612a506f10a319933757c006",
- "sha256:95720bae002ac357202e0d866128eb1ac82545bcf0b549b9abe91b5178d9b541",
- "sha256:9b04d96188d365151d1af41fa2d23257b674e7ead68cfd61c725a422764062ae",
- "sha256:9d0fba61846f294bce41eb44d60d58136090ea2b5b99efd21cbdf4e21927c56a",
- "sha256:9ebafa0b96c62881d5cafa02d9da2e44c23f9f0cd829f3a32a6aff771449c996",
- "sha256:a0fac7be202596c7126146660725157d4813aa29a4cc990fe51346f75ff8fde7",
- "sha256:aea15c78e0d9ad6555ed201344ae36db5c63d428818b4b2a42842b3870127c00",
- "sha256:b10c2956efcecb981bf9cfb8184d27d5d64b9033f917115a960b83f11bfa0d6b",
- "sha256:b16696f10e59d7580979b420eedf6650010a4a9c3bd8113f24a103dfdb770b10",
- "sha256:d8c36fdf3e02cec92aed2d44f63565ad1522a499c654f07935c8f9d04db69e95",
- "sha256:e237f9c1e8a00e7d9ddaa288e535dc337a39bcbf679f290aee9d26df9e72bce9",
- "sha256:e50289c101495e0d1bb0bfcb4a60adde56e32f4449a67216a1ab2750aa84f037",
- "sha256:e7d61fe8e8d9335fac1bf8d5d82820b4808dd7a43020c149b63a1ada953d48a6",
- "sha256:e97152983442b499d7a71e44f29baa75b3b02e65d9c44ba53b10338e98dedb66",
- "sha256:f0e94b221295b5e69de57a1bd4aeb0b3a29f61be6e1b478bb8a69a73377db7ba",
- "sha256:fee6044b64c965c425b65a4e17719953b96e065c5b7e09b599ff332bb2744bdf"
- ],
- "version": "==0.20.0"
+ "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0",
+ "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f",
+ "sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc",
+ "sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414",
+ "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f",
+ "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d",
+ "sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd",
+ "sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff",
+ "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c",
+ "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3",
+ "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d",
+ "sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a",
+ "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb",
+ "sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2",
+ "sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0",
+ "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6",
+ "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c",
+ "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af",
+ "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc",
+ "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb",
+ "sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75",
+ "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb",
+ "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553",
+ "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e",
+ "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6",
+ "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d",
+ "sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206",
+ "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc",
+ "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281",
+ "sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b",
+ "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8",
+ "sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79",
+ "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f",
+ "sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe",
+ "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26",
+ "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816",
+ "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2"
+ ],
+ "version": "==0.21.0"
},
"vine": {
"hashes": [
@@ -4133,141 +4319,134 @@
},
"yarl": {
"hashes": [
- "sha256:08d7148ff11cb8e886d86dadbfd2e466a76d5dd38c7ea8ebd9b0e07946e76e4b",
- "sha256:098b870c18f1341786f290b4d699504e18f1cd050ed179af8123fd8232513424",
- "sha256:11b3ca8b42a024513adce810385fcabdd682772411d95bbbda3b9ed1a4257644",
- "sha256:1891d69a6ba16e89473909665cd355d783a8a31bc84720902c5911dbb6373465",
- "sha256:1bbb418f46c7f7355084833051701b2301092e4611d9e392360c3ba2e3e69f88",
- "sha256:1d0828e17fa701b557c6eaed5edbd9098eb62d8838344486248489ff233998b8",
- "sha256:1d8e3ca29f643dd121f264a7c89f329f0fcb2e4461833f02de6e39fef80f89da",
- "sha256:1fa56f34b2236f5192cb5fceba7bbb09620e5337e0b6dfe2ea0ddbd19dd5b154",
- "sha256:216a6785f296169ed52cd7dcdc2612f82c20f8c9634bf7446327f50398732a51",
- "sha256:22b739f99c7e4787922903f27a892744189482125cc7b95b747f04dd5c83aa9f",
- "sha256:2430cf996113abe5aee387d39ee19529327205cda975d2b82c0e7e96e5fdabdc",
- "sha256:269c201bbc01d2cbba5b86997a1e0f73ba5e2f471cfa6e226bcaa7fd664b598d",
- "sha256:298c1eecfd3257aa16c0cb0bdffb54411e3e831351cd69e6b0739be16b1bdaa8",
- "sha256:2a93a4557f7fc74a38ca5a404abb443a242217b91cd0c4840b1ebedaad8919d4",
- "sha256:2b2442a415a5f4c55ced0fade7b72123210d579f7d950e0b5527fc598866e62c",
- "sha256:2db874dd1d22d4c2c657807562411ffdfabec38ce4c5ce48b4c654be552759dc",
- "sha256:309c104ecf67626c033845b860d31594a41343766a46fa58c3309c538a1e22b2",
- "sha256:31497aefd68036d8e31bfbacef915826ca2e741dbb97a8d6c7eac66deda3b606",
- "sha256:373f16f38721c680316a6a00ae21cc178e3a8ef43c0227f88356a24c5193abd6",
- "sha256:396e59b8de7e4d59ff5507fb4322d2329865b909f29a7ed7ca37e63ade7f835c",
- "sha256:3bb83a0f12701c0b91112a11148b5217617982e1e466069d0555be9b372f2734",
- "sha256:3de86547c820e4f4da4606d1c8ab5765dd633189791f15247706a2eeabc783ae",
- "sha256:3fdbf0418489525231723cdb6c79e7738b3cbacbaed2b750cb033e4ea208f220",
- "sha256:40c6e73c03a6befb85b72da213638b8aaa80fe4136ec8691560cf98b11b8ae6e",
- "sha256:44a4c40a6f84e4d5955b63462a0e2a988f8982fba245cf885ce3be7618f6aa7d",
- "sha256:44b07e1690f010c3c01d353b5790ec73b2f59b4eae5b0000593199766b3f7a5c",
- "sha256:45d23c4668d4925688e2ea251b53f36a498e9ea860913ce43b52d9605d3d8177",
- "sha256:45f209fb4bbfe8630e3d2e2052535ca5b53d4ce2d2026bed4d0637b0416830da",
- "sha256:4afdf84610ca44dcffe8b6c22c68f309aff96be55f5ea2fa31c0c225d6b83e23",
- "sha256:4feaaa4742517eaceafcbe74595ed335a494c84634d33961214b278126ec1485",
- "sha256:576365c9f7469e1f6124d67b001639b77113cfd05e85ce0310f5f318fd02fe85",
- "sha256:5820bd4178e6a639b3ef1db8b18500a82ceab6d8b89309e121a6859f56585b05",
- "sha256:5989a38ba1281e43e4663931a53fbf356f78a0325251fd6af09dd03b1d676a09",
- "sha256:5a9bacedbb99685a75ad033fd4de37129449e69808e50e08034034c0bf063f99",
- "sha256:5b66c87da3c6da8f8e8b648878903ca54589038a0b1e08dde2c86d9cd92d4ac9",
- "sha256:5c5e32fef09ce101fe14acd0f498232b5710effe13abac14cd95de9c274e689e",
- "sha256:658e8449b84b92a4373f99305de042b6bd0d19bf2080c093881e0516557474a5",
- "sha256:6a2acde25be0cf9be23a8f6cbd31734536a264723fca860af3ae5e89d771cd71",
- "sha256:6a5185ad722ab4dd52d5fb1f30dcc73282eb1ed494906a92d1a228d3f89607b0",
- "sha256:6b7f6e699304717fdc265a7e1922561b02a93ceffdaefdc877acaf9b9f3080b8",
- "sha256:703b0f584fcf157ef87816a3c0ff868e8c9f3c370009a8b23b56255885528f10",
- "sha256:7055bbade838d68af73aea13f8c86588e4bcc00c2235b4b6d6edb0dbd174e246",
- "sha256:78f271722423b2d4851cf1f4fa1a1c4833a128d020062721ba35e1a87154a049",
- "sha256:7addd26594e588503bdef03908fc207206adac5bd90b6d4bc3e3cf33a829f57d",
- "sha256:81bad32c8f8b5897c909bf3468bf601f1b855d12f53b6af0271963ee67fff0d2",
- "sha256:82e692fb325013a18a5b73a4fed5a1edaa7c58144dc67ad9ef3d604eccd451ad",
- "sha256:84bbcdcf393139f0abc9f642bf03f00cac31010f3034faa03224a9ef0bb74323",
- "sha256:86c438ce920e089c8c2388c7dcc8ab30dfe13c09b8af3d306bcabb46a053d6f7",
- "sha256:8be8cdfe20787e6a5fcbd010f8066227e2bb9058331a4eccddec6c0db2bb85b2",
- "sha256:8c723c91c94a3bc8033dd2696a0f53e5d5f8496186013167bddc3fb5d9df46a3",
- "sha256:8ca53632007c69ddcdefe1e8cbc3920dd88825e618153795b57e6ebcc92e752a",
- "sha256:8f722f30366474a99745533cc4015b1781ee54b08de73260b2bbe13316079851",
- "sha256:942c80a832a79c3707cca46bd12ab8aa58fddb34b1626d42b05aa8f0bcefc206",
- "sha256:94a993f976cdcb2dc1b855d8b89b792893220db8862d1a619efa7451817c836b",
- "sha256:95c6737f28069153c399d875317f226bbdea939fd48a6349a3b03da6829fb550",
- "sha256:9915300fe5a0aa663c01363db37e4ae8e7c15996ebe2c6cce995e7033ff6457f",
- "sha256:9a18595e6a2ee0826bf7dfdee823b6ab55c9b70e8f80f8b77c37e694288f5de1",
- "sha256:9c8854b9f80693d20cec797d8e48a848c2fb273eb6f2587b57763ccba3f3bd4b",
- "sha256:9cec42a20eae8bebf81e9ce23fb0d0c729fc54cf00643eb251ce7c0215ad49fe",
- "sha256:9d2e1626be8712333a9f71270366f4a132f476ffbe83b689dd6dc0d114796c74",
- "sha256:9d74f3c335cfe9c21ea78988e67f18eb9822f5d31f88b41aec3a1ec5ecd32da5",
- "sha256:9fb4134cc6e005b99fa29dbc86f1ea0a298440ab6b07c6b3ee09232a3b48f495",
- "sha256:a0ae6637b173d0c40b9c1462e12a7a2000a71a3258fa88756a34c7d38926911c",
- "sha256:a31d21089894942f7d9a8df166b495101b7258ff11ae0abec58e32daf8088813",
- "sha256:a3442c31c11088e462d44a644a454d48110f0588de830921fd201060ff19612a",
- "sha256:ab9524e45ee809a083338a749af3b53cc7efec458c3ad084361c1dbf7aaf82a2",
- "sha256:b1481c048fe787f65e34cb06f7d6824376d5d99f1231eae4778bbe5c3831076d",
- "sha256:b8c837ab90c455f3ea8e68bee143472ee87828bff19ba19776e16ff961425b57",
- "sha256:bbf2c3f04ff50f16404ce70f822cdc59760e5e2d7965905f0e700270feb2bbfc",
- "sha256:bbf9c2a589be7414ac4a534d54e4517d03f1cbb142c0041191b729c2fa23f320",
- "sha256:bcd5bf4132e6a8d3eb54b8d56885f3d3a38ecd7ecae8426ecf7d9673b270de43",
- "sha256:c14c16831b565707149c742d87a6203eb5597f4329278446d5c0ae7a1a43928e",
- "sha256:c49f3e379177f4477f929097f7ed4b0622a586b0aa40c07ac8c0f8e40659a1ac",
- "sha256:c92b89bffc660f1274779cb6fbb290ec1f90d6dfe14492523a0667f10170de26",
- "sha256:cd66152561632ed4b2a9192e7f8e5a1d41e28f58120b4761622e0355f0fe034c",
- "sha256:cf1ad338620249f8dd6d4b6a91a69d1f265387df3697ad5dc996305cf6c26fb2",
- "sha256:d07b52c8c450f9366c34aa205754355e933922c79135125541daae6cbf31c799",
- "sha256:d0d12fe78dcf60efa205e9a63f395b5d343e801cf31e5e1dda0d2c1fb618073d",
- "sha256:d4ee1d240b84e2f213565f0ec08caef27a0e657d4c42859809155cf3a29d1735",
- "sha256:d959fe96e5c2712c1876d69af0507d98f0b0e8d81bee14cfb3f6737470205419",
- "sha256:dcaef817e13eafa547cdfdc5284fe77970b891f731266545aae08d6cce52161e",
- "sha256:df4e82e68f43a07735ae70a2d84c0353e58e20add20ec0af611f32cd5ba43fb4",
- "sha256:ec8cfe2295f3e5e44c51f57272afbd69414ae629ec7c6b27f5a410efc78b70a0",
- "sha256:ec9dd328016d8d25702a24ee274932aebf6be9787ed1c28d021945d264235b3c",
- "sha256:ef9b85fa1bc91c4db24407e7c4da93a5822a73dd4513d67b454ca7064e8dc6a3",
- "sha256:f3bf60444269345d712838bb11cc4eadaf51ff1a364ae39ce87a5ca8ad3bb2c8",
- "sha256:f452cc1436151387d3d50533523291d5f77c6bc7913c116eb985304abdbd9ec9",
- "sha256:f7917697bcaa3bc3e83db91aa3a0e448bf5cde43c84b7fc1ae2427d2417c0224",
- "sha256:f90575e9fe3aae2c1e686393a9689c724cd00045275407f71771ae5d690ccf38",
- "sha256:fb382fd7b4377363cc9f13ba7c819c3c78ed97c36a82f16f3f92f108c787cbbf",
- "sha256:fb9f59f3848edf186a76446eb8bcf4c900fe147cb756fbbd730ef43b2e67c6a7",
- "sha256:fc2931ac9ce9c61c9968989ec831d3a5e6fcaaff9474e7cfa8de80b7aff5a093"
+ "sha256:019f5d58093402aa8f6661e60fd82a28746ad6d156f6c5336a70a39bd7b162b9",
+ "sha256:0fd9c227990f609c165f56b46107d0bc34553fe0387818c42c02f77974402c36",
+ "sha256:1208ca14eed2fda324042adf8d6c0adf4a31522fa95e0929027cd487875f0240",
+ "sha256:122d8e7986043d0549e9eb23c7fd23be078be4b70c9eb42a20052b3d3149c6f2",
+ "sha256:147b0fcd0ee33b4b5f6edfea80452d80e419e51b9a3f7a96ce98eaee145c1581",
+ "sha256:178ccb856e265174a79f59721031060f885aca428983e75c06f78aa24b91d929",
+ "sha256:1a5cf32539373ff39d97723e39a9283a7277cbf1224f7aef0c56c9598b6486c3",
+ "sha256:1a5e9d8ce1185723419c487758d81ac2bde693711947032cce600ca7c9cda7d6",
+ "sha256:1bc22e00edeb068f71967ab99081e9406cd56dbed864fc3a8259442999d71552",
+ "sha256:1cf936ba67bc6c734f3aa1c01391da74ab7fc046a9f8bbfa230b8393b90cf472",
+ "sha256:234f3a3032b505b90e65b5bc6652c2329ea7ea8855d8de61e1642b74b4ee65d2",
+ "sha256:26768342f256e6e3c37533bf9433f5f15f3e59e3c14b2409098291b3efaceacb",
+ "sha256:27e11db3f1e6a51081a981509f75617b09810529de508a181319193d320bc5c7",
+ "sha256:2bd6a51010c7284d191b79d3b56e51a87d8e1c03b0902362945f15c3d50ed46b",
+ "sha256:2f1fe2b2e3ee418862f5ebc0c0083c97f6f6625781382f828f6d4e9b614eba9b",
+ "sha256:32468f41242d72b87ab793a86d92f885355bcf35b3355aa650bfa846a5c60058",
+ "sha256:35b4f7842154176523e0a63c9b871168c69b98065d05a4f637fce342a6a2693a",
+ "sha256:38fec8a2a94c58bd47c9a50a45d321ab2285ad133adefbbadf3012c054b7e656",
+ "sha256:3a91654adb7643cb21b46f04244c5a315a440dcad63213033826549fa2435f71",
+ "sha256:3ab3ed42c78275477ea8e917491365e9a9b69bb615cb46169020bd0aa5e2d6d3",
+ "sha256:3d375a19ba2bfe320b6d873f3fb165313b002cef8b7cc0a368ad8b8a57453837",
+ "sha256:4199db024b58a8abb2cfcedac7b1292c3ad421684571aeb622a02f242280e8d6",
+ "sha256:4f32c4cb7386b41936894685f6e093c8dfaf0960124d91fe0ec29fe439e201d0",
+ "sha256:4ffb7c129707dd76ced0a4a4128ff452cecf0b0e929f2668ea05a371d9e5c104",
+ "sha256:504e1fe1cc4f170195320eb033d2b0ccf5c6114ce5bf2f617535c01699479bca",
+ "sha256:542fa8e09a581bcdcbb30607c7224beff3fdfb598c798ccd28a8184ffc18b7eb",
+ "sha256:5570e6d47bcb03215baf4c9ad7bf7c013e56285d9d35013541f9ac2b372593e7",
+ "sha256:571f781ae8ac463ce30bacebfaef2c6581543776d5970b2372fbe31d7bf31a07",
+ "sha256:595ca5e943baed31d56b33b34736461a371c6ea0038d3baec399949dd628560b",
+ "sha256:5b8e265a0545637492a7e12fd7038370d66c9375a61d88c5567d0e044ded9202",
+ "sha256:5b9101f528ae0f8f65ac9d64dda2bb0627de8a50344b2f582779f32fda747c1d",
+ "sha256:5ff96da263740779b0893d02b718293cc03400c3a208fc8d8cd79d9b0993e532",
+ "sha256:621280719c4c5dad4c1391160a9b88925bb8b0ff6a7d5af3224643024871675f",
+ "sha256:62c7da0ad93a07da048b500514ca47b759459ec41924143e2ddb5d7e20fd3db5",
+ "sha256:649bddcedee692ee8a9b7b6e38582cb4062dc4253de9711568e5620d8707c2a3",
+ "sha256:66ea8311422a7ba1fc79b4c42c2baa10566469fe5a78500d4e7754d6e6db8724",
+ "sha256:676d96bafc8c2d0039cea0cd3fd44cee7aa88b8185551a2bb93354668e8315c2",
+ "sha256:707ae579ccb3262dfaef093e202b4c3fb23c3810e8df544b1111bd2401fd7b09",
+ "sha256:7118bdb5e3ed81acaa2095cba7ec02a0fe74b52a16ab9f9ac8e28e53ee299732",
+ "sha256:789a3423f28a5fff46fbd04e339863c169ece97c827b44de16e1a7a42bc915d2",
+ "sha256:7ace71c4b7a0c41f317ae24be62bb61e9d80838d38acb20e70697c625e71f120",
+ "sha256:7c7c30fb38c300fe8140df30a046a01769105e4cf4282567a29b5cdb635b66c4",
+ "sha256:7d7aaa8ff95d0840e289423e7dc35696c2b058d635f945bf05b5cd633146b027",
+ "sha256:7f8713717a09acbfee7c47bfc5777e685539fefdd34fa72faf504c8be2f3df4e",
+ "sha256:858728086914f3a407aa7979cab743bbda1fe2bdf39ffcd991469a370dd7414d",
+ "sha256:8791d66d81ee45866a7bb15a517b01a2bcf583a18ebf5d72a84e6064c417e64b",
+ "sha256:87dd10bc0618991c66cee0cc65fa74a45f4ecb13bceec3c62d78ad2e42b27a16",
+ "sha256:8994c42f4ca25df5380ddf59f315c518c81df6a68fed5bb0c159c6cb6b92f120",
+ "sha256:8a0296040e5cddf074c7f5af4a60f3fc42c0237440df7bcf5183be5f6c802ed5",
+ "sha256:8b37d5ec034e668b22cf0ce1074d6c21fd2a08b90d11b1b73139b750a8b0dd97",
+ "sha256:8c42998fd1cbeb53cd985bff0e4bc25fbe55fd6eb3a545a724c1012d69d5ec84",
+ "sha256:8f639e3f5795a6568aa4f7d2ac6057c757dcd187593679f035adbf12b892bb00",
+ "sha256:921b81b8d78f0e60242fb3db615ea3f368827a76af095d5a69f1c3366db3f596",
+ "sha256:995d0759004c08abd5d1b81300a91d18c8577c6389300bed1c7c11675105a44d",
+ "sha256:99a9dcd4b71dd5f5f949737ab3f356cfc058c709b4f49833aeffedc2652dac56",
+ "sha256:9a91217208306d82357c67daeef5162a41a28c8352dab7e16daa82e3718852a7",
+ "sha256:a5ace0177520bd4caa99295a9b6fb831d0e9a57d8e0501a22ffaa61b4c024283",
+ "sha256:a5b6c09b9b4253d6a208b0f4a2f9206e511ec68dce9198e0fbec4f160137aa67",
+ "sha256:a9394c65ae0ed95679717d391c862dece9afacd8fa311683fc8b4362ce8a410c",
+ "sha256:aa7943f04f36d6cafc0cf53ea89824ac2c37acbdb4b316a654176ab8ffd0f968",
+ "sha256:ab2b2ac232110a1fdb0d3ffcd087783edd3d4a6ced432a1bf75caf7b7be70916",
+ "sha256:ad7a852d1cd0b8d8b37fc9d7f8581152add917a98cfe2ea6e241878795f917ae",
+ "sha256:b140e532fe0266003c936d017c1ac301e72ee4a3fd51784574c05f53718a55d8",
+ "sha256:b439cae82034ade094526a8f692b9a2b5ee936452de5e4c5f0f6c48df23f8604",
+ "sha256:b6f687ced5510a9a2474bbae96a4352e5ace5fa34dc44a217b0537fec1db00b4",
+ "sha256:b9ca7b9147eb1365c8bab03c003baa1300599575effad765e0b07dd3501ea9af",
+ "sha256:bdcf667a5dec12a48f669e485d70c54189f0639c2157b538a4cffd24a853624f",
+ "sha256:cdcffe1dbcb4477d2b4202f63cd972d5baa155ff5a3d9e35801c46a415b7f71a",
+ "sha256:d1aab176dd55b59f77a63b27cffaca67d29987d91a5b615cbead41331e6b7428",
+ "sha256:d1b0796168b953bca6600c5f97f5ed407479889a36ad7d17183366260f29a6b9",
+ "sha256:d3f1cc3d3d4dc574bebc9b387f6875e228ace5748a7c24f49d8f01ac1bc6c31b",
+ "sha256:d743e3118b2640cef7768ea955378c3536482d95550222f908f392167fe62059",
+ "sha256:d8643975a0080f361639787415a038bfc32d29208a4bf6b783ab3075a20b1ef3",
+ "sha256:d9525f03269e64310416dbe6c68d3b23e5d34aaa8f47193a1c45ac568cecbc49",
+ "sha256:de6c14dd7c7c0badba48157474ea1f03ebee991530ba742d381b28d4f314d6f3",
+ "sha256:e49e0fd86c295e743fd5be69b8b0712f70a686bc79a16e5268386c2defacaade",
+ "sha256:e6980a558d8461230c457218bd6c92dfc1d10205548215c2c21d79dc8d0a96f3",
+ "sha256:e8be3aff14f0120ad049121322b107f8a759be76a6a62138322d4c8a337a9e2c",
+ "sha256:e9951afe6557c75a71045148890052cb942689ee4c9ec29f5436240e1fcc73b7",
+ "sha256:ed097b26f18a1f5ff05f661dc36528c5f6735ba4ce8c9645e83b064665131349",
+ "sha256:f1d1f45e3e8d37c804dca99ab3cf4ab3ed2e7a62cd82542924b14c0a4f46d243",
+ "sha256:fe8bba2545427418efc1929c5c42852bdb4143eb8d0a46b09de88d1fe99258e7"
],
- "markers": "python_version >= '3.8'",
- "version": "==1.13.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==1.16.0"
},
"zope-interface": {
"hashes": [
- "sha256:01e6e58078ad2799130c14a1d34ec89044ada0e1495329d72ee0407b9ae5100d",
- "sha256:064ade95cb54c840647205987c7b557f75d2b2f7d1a84bfab4cf81822ef6e7d1",
- "sha256:11fa1382c3efb34abf16becff8cb214b0b2e3144057c90611621f2d186b7e1b7",
- "sha256:1bee1b722077d08721005e8da493ef3adf0b7908e0cd85cc7dc836ac117d6f32",
- "sha256:1eeeb92cb7d95c45e726e3c1afe7707919370addae7ed14f614e22217a536958",
- "sha256:21a207c6b2c58def5011768140861a73f5240f4f39800625072ba84e76c9da0b",
- "sha256:2545d6d7aac425d528cd9bf0d9e55fcd47ab7fd15f41a64b1c4bf4c6b24946dc",
- "sha256:2c4316a30e216f51acbd9fb318aa5af2e362b716596d82cbb92f9101c8f8d2e7",
- "sha256:35062d93bc49bd9b191331c897a96155ffdad10744ab812485b6bad5b588d7e4",
- "sha256:382d31d1e68877061daaa6499468e9eb38eb7625d4369b1615ac08d3860fe896",
- "sha256:3aa8fcbb0d3c2be1bfd013a0f0acd636f6ed570c287743ae2bbd467ee967154d",
- "sha256:3d4b91821305c8d8f6e6207639abcbdaf186db682e521af7855d0bea3047c8ca",
- "sha256:3de1d553ce72868b77a7e9d598c9bff6d3816ad2b4cc81c04f9d8914603814f3",
- "sha256:3fcdc76d0cde1c09c37b7c6b0f8beba2d857d8417b055d4f47df9c34ec518bdd",
- "sha256:5112c530fa8aa2108a3196b9c2f078f5738c1c37cfc716970edc0df0414acda8",
- "sha256:53d678bb1c3b784edbfb0adeebfeea6bf479f54da082854406a8f295d36f8386",
- "sha256:6195c3c03fef9f87c0dbee0b3b6451df6e056322463cf35bca9a088e564a3c58",
- "sha256:6d04b11ea47c9c369d66340dbe51e9031df2a0de97d68f442305ed7625ad6493",
- "sha256:6dd647fcd765030638577fe6984284e0ebba1a1008244c8a38824be096e37fe3",
- "sha256:799ef7a444aebbad5a145c3b34bff012b54453cddbde3332d47ca07225792ea4",
- "sha256:7d92920416f31786bc1b2f34cc4fc4263a35a407425319572cbf96b51e835cd3",
- "sha256:7e0c151a6c204f3830237c59ee4770cc346868a7a1af6925e5e38650141a7f05",
- "sha256:84f8794bd59ca7d09d8fce43ae1b571be22f52748169d01a13d3ece8394d8b5b",
- "sha256:95e5913ec718010dc0e7c215d79a9683b4990e7026828eedfda5268e74e73e11",
- "sha256:9b9369671a20b8d039b8e5a1a33abd12e089e319a3383b4cc0bf5c67bd05fe7b",
- "sha256:ab985c566a99cc5f73bc2741d93f1ed24a2cc9da3890144d37b9582965aff996",
- "sha256:af94e429f9d57b36e71ef4e6865182090648aada0cb2d397ae2b3f7fc478493a",
- "sha256:c96b3e6b0d4f6ddfec4e947130ec30bd2c7b19db6aa633777e46c8eecf1d6afd",
- "sha256:cd2690d4b08ec9eaf47a85914fe513062b20da78d10d6d789a792c0b20307fb1",
- "sha256:d3b7ce6d46fb0e60897d62d1ff370790ce50a57d40a651db91a3dde74f73b738",
- "sha256:d976fa7b5faf5396eb18ce6c132c98e05504b52b60784e3401f4ef0b2e66709b",
- "sha256:db6237e8fa91ea4f34d7e2d16d74741187e9105a63bbb5686c61fea04cdbacca",
- "sha256:ecd32f30f40bfd8511b17666895831a51b532e93fc106bfa97f366589d3e4e0e",
- "sha256:f418c88f09c3ba159b95a9d1cfcdbe58f208443abb1f3109f4b9b12fd60b187c"
- ],
- "markers": "python_version >= '3.8'",
- "version": "==7.0.3"
+ "sha256:07add15de0cc7e69917f7d286b64d54125c950aeb43efed7a5ea7172f000fbc1",
+ "sha256:0ac20581fc6cd7c754f6dff0ae06fedb060fa0e9ea6309d8be8b2701d9ea51c4",
+ "sha256:124149e2d42067b9c6597f4dafdc7a0983d0163868f897b7bb5dc850b14f9a87",
+ "sha256:27cfb5205d68b12682b6e55ab8424662d96e8ead19550aad0796b08dd2c9a45e",
+ "sha256:2a29ac607e970b5576547f0e3589ec156e04de17af42839eedcf478450687317",
+ "sha256:2b6a4924f5bad9fe21d99f66a07da60d75696a136162427951ec3cb223a5570d",
+ "sha256:2bd9e9f366a5df08ebbdc159f8224904c1c5ce63893984abb76954e6fbe4381a",
+ "sha256:3bcff5c09d0215f42ba64b49205a278e44413d9bf9fa688fd9e42bfe472b5f4f",
+ "sha256:3f005869a1a05e368965adb2075f97f8ee9a26c61898a9e52a9764d93774f237",
+ "sha256:4a00ead2e24c76436e1b457a5132d87f83858330f6c923640b7ef82d668525d1",
+ "sha256:4af4a12b459a273b0b34679a5c3dc5e34c1847c3dd14a628aa0668e19e638ea2",
+ "sha256:5501e772aff595e3c54266bc1bfc5858e8f38974ce413a8f1044aae0f32a83a3",
+ "sha256:5e28ea0bc4b084fc93a483877653a033062435317082cdc6388dec3438309faf",
+ "sha256:5e956b1fd7f3448dd5e00f273072e73e50dfafcb35e4227e6d5af208075593c9",
+ "sha256:5fcf379b875c610b5a41bc8a891841533f98de0520287d7f85e25386cd10d3e9",
+ "sha256:6159e767d224d8f18deff634a1d3722e68d27488c357f62ebeb5f3e2f5288b1f",
+ "sha256:661d5df403cd3c5b8699ac480fa7f58047a3253b029db690efa0c3cf209993ef",
+ "sha256:711eebc77f2092c6a8b304bad0b81a6ce3cf5490b25574e7309fbc07d881e3af",
+ "sha256:80a3c00b35f6170be5454b45abe2719ea65919a2f09e8a6e7b1362312a872cd3",
+ "sha256:848b6fa92d7c8143646e64124ed46818a0049a24ecc517958c520081fd147685",
+ "sha256:91b6c30689cfd87c8f264acb2fc16ad6b3c72caba2aec1bf189314cf1a84ca33",
+ "sha256:9733a9a0f94ef53d7aa64661811b20875b5bc6039034c6e42fb9732170130573",
+ "sha256:9940d5bc441f887c5f375ec62bcf7e7e495a2d5b1da97de1184a88fb567f06af",
+ "sha256:9e3e48f3dea21c147e1b10c132016cb79af1159facca9736d231694ef5a740a8",
+ "sha256:a14c9decf0eb61e0892631271d500c1e306c7b6901c998c7035e194d9150fdd1",
+ "sha256:a735f82d2e3ed47ca01a20dfc4c779b966b16352650a8036ab3955aad151ed8a",
+ "sha256:a99240b1d02dc469f6afbe7da1bf617645e60290c272968f4e53feec18d7dce8",
+ "sha256:b7b25db127db3e6b597c5f74af60309c4ad65acd826f89609662f0dc33a54728",
+ "sha256:b936d61dbe29572fd2cfe13e30b925e5383bed1aba867692670f5a2a2eb7b4e9",
+ "sha256:bec001798ab62c3fc5447162bf48496ae9fba02edc295a9e10a0b0c639a6452e",
+ "sha256:cc8a318162123eddbdf22fcc7b751288ce52e4ad096d3766ff1799244352449d",
+ "sha256:d0a45b5af9f72c805ee668d1479480ca85169312211bed6ed18c343e39307d5f",
+ "sha256:e53c291debef523b09e1fe3dffe5f35dde164f1c603d77f770b88a1da34b7ed6",
+ "sha256:ec1ef1fdb6f014d5886b97e52b16d0f852364f447d2ab0f0c6027765777b6667",
+ "sha256:ec59fe53db7d32abb96c6d4efeed84aab4a7c38c62d7a901a9b20c09dd936e7a",
+ "sha256:f245d039f72e6f802902375755846f5de1ee1e14c3e8736c078565599bcab621",
+ "sha256:ff115ef91c0eeac69cd92daeba36a9d8e14daee445b504eeea2b1c0b55821984"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==7.1.0"
},
"zope.event": {
"hashes": [
@@ -4410,32 +4589,32 @@
},
"black": {
"hashes": [
- "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6",
- "sha256:1f13f7f386f86f8121d76599114bb8c17b69d962137fc70efe56137727c7047e",
- "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f",
- "sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018",
- "sha256:3c4285573d4897a7610054af5a890bde7c65cb466040c5f0c8b732812d7f0e5e",
- "sha256:505289f17ceda596658ae81b61ebbe2d9b25aa78067035184ed0a9d855d18afd",
- "sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4",
- "sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed",
- "sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2",
- "sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42",
- "sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af",
- "sha256:73bbf84ed136e45d451a260c6b73ed674652f90a2b3211d6a35e78054563a9bb",
- "sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368",
- "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb",
- "sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af",
- "sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed",
- "sha256:9e84e33b37be070ba135176c123ae52a51f82306def9f7d063ee302ecab2cf47",
- "sha256:b19c9ad992c7883ad84c9b22aaa73562a16b819c1d8db7a1a1a49fb7ec13c7d2",
- "sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a",
- "sha256:eab4dd44ce80dea27dc69db40dab62d4ca96112f87996bca68cd75639aeb2e4c",
- "sha256:f490dbd59680d809ca31efdae20e634f3fae27fba3ce0ba3208333b713bc3920",
- "sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1"
+ "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f",
+ "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd",
+ "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea",
+ "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981",
+ "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b",
+ "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7",
+ "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8",
+ "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175",
+ "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d",
+ "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392",
+ "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad",
+ "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f",
+ "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f",
+ "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b",
+ "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875",
+ "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3",
+ "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800",
+ "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65",
+ "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2",
+ "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812",
+ "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50",
+ "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==24.8.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==24.10.0"
},
"cachetools": {
"hashes": [
@@ -4450,11 +4629,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": [
@@ -4475,99 +4654,114 @@
},
"charset-normalizer": {
"hashes": [
- "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027",
- "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087",
- "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786",
- "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8",
- "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09",
- "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185",
- "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574",
- "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e",
- "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519",
- "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898",
- "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269",
- "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3",
- "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f",
- "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6",
- "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8",
- "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a",
- "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73",
- "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc",
- "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714",
- "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2",
- "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc",
- "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce",
- "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d",
- "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e",
- "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6",
- "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269",
- "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96",
- "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d",
- "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a",
- "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4",
- "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77",
- "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d",
- "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0",
- "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed",
- "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068",
- "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac",
- "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25",
- "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8",
- "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab",
- "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26",
- "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2",
- "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db",
- "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f",
- "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5",
- "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99",
- "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c",
- "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d",
- "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811",
- "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa",
- "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a",
- "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03",
- "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b",
- "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04",
- "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c",
- "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001",
- "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458",
- "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389",
- "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99",
- "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985",
- "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537",
- "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238",
- "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f",
- "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d",
- "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796",
- "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a",
- "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143",
- "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8",
- "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c",
- "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5",
- "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5",
- "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711",
- "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4",
- "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6",
- "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c",
- "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7",
- "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4",
- "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b",
- "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae",
- "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12",
- "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c",
- "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae",
- "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8",
- "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887",
- "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b",
- "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4",
- "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f",
- "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5",
- "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33",
- "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519",
- "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"
+ "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"
],
"markers": "python_full_version >= '3.7.0'",
- "version": "==3.3.2"
+ "version": "==3.4.0"
},
"click": {
"hashes": [
@@ -4590,82 +4784,72 @@
"toml"
],
"hashes": [
- "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca",
- "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d",
- "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6",
- "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989",
- "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c",
- "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b",
- "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223",
- "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f",
- "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56",
- "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3",
- "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8",
- "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb",
- "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388",
- "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0",
- "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a",
- "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8",
- "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f",
- "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a",
- "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962",
- "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8",
- "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391",
- "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc",
- "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2",
- "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155",
- "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb",
- "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0",
- "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c",
- "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a",
- "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004",
- "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060",
- "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232",
- "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93",
- "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129",
- "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163",
- "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de",
- "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6",
- "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23",
- "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569",
- "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d",
- "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778",
- "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d",
- "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36",
- "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a",
- "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6",
- "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34",
- "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704",
- "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106",
- "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9",
- "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862",
- "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b",
- "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255",
- "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16",
- "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3",
- "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133",
- "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb",
- "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657",
- "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d",
- "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca",
- "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36",
- "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c",
- "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e",
- "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff",
- "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7",
- "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5",
- "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02",
- "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c",
- "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df",
- "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3",
- "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a",
- "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959",
- "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234",
- "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"
+ "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376",
+ "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9",
+ "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111",
+ "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172",
+ "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491",
+ "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546",
+ "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2",
+ "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11",
+ "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08",
+ "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c",
+ "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2",
+ "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963",
+ "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613",
+ "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0",
+ "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db",
+ "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf",
+ "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73",
+ "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117",
+ "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1",
+ "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e",
+ "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522",
+ "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25",
+ "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc",
+ "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea",
+ "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52",
+ "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a",
+ "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07",
+ "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06",
+ "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa",
+ "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901",
+ "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b",
+ "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17",
+ "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0",
+ "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21",
+ "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19",
+ "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5",
+ "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51",
+ "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3",
+ "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3",
+ "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f",
+ "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076",
+ "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a",
+ "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718",
+ "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba",
+ "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e",
+ "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27",
+ "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e",
+ "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09",
+ "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e",
+ "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70",
+ "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f",
+ "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72",
+ "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a",
+ "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef",
+ "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b",
+ "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b",
+ "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f",
+ "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806",
+ "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b",
+ "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1",
+ "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c",
+ "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==7.6.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==7.6.4"
},
"coveralls": {
"hashes": [
@@ -4678,19 +4862,19 @@
},
"distlib": {
"hashes": [
- "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784",
- "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"
+ "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87",
+ "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"
],
- "version": "==0.3.8"
+ "version": "==0.3.9"
},
"django": {
"hashes": [
- "sha256:021ffb7fdab3d2d388bc8c7c2434eb9c1f6f4d09e6119010bbb1694dda286bc2",
- "sha256:71603f27dac22a6533fb38d83072eea9ddb4017fead6f67f2562a40402d61c3f"
+ "sha256:bd7376f90c99f96b643722eee676498706c9fd7dc759f55ebfaf2c08ebcdf4f0",
+ "sha256:f11aa87ad8d5617171e3f77e1d5d16f004b79a2cf5d2e1d2b97a6a1f8e9ba5ed"
],
"index": "pypi",
"markers": "python_version >= '3.10'",
- "version": "==5.1.1"
+ "version": "==5.1.2"
},
"django-stubs": {
"hashes": [
@@ -4769,51 +4953,48 @@
},
"gevent": {
"hashes": [
- "sha256:03aa5879acd6b7076f6a2a307410fb1e0d288b84b03cdfd8c74db8b4bc882fc5",
- "sha256:117e5837bc74a1673605fb53f8bfe22feb6e5afa411f524c835b2ddf768db0de",
- "sha256:141a2b24ad14f7b9576965c0c84927fc85f824a9bb19f6ec1e61e845d87c9cd8",
- "sha256:14532a67f7cb29fb055a0e9b39f16b88ed22c66b96641df8c04bdc38c26b9ea5",
- "sha256:1dffb395e500613e0452b9503153f8f7ba587c67dd4a85fc7cd7aa7430cb02cc",
- "sha256:2955eea9c44c842c626feebf4459c42ce168685aa99594e049d03bedf53c2800",
- "sha256:2ae3a25ecce0a5b0cd0808ab716bfca180230112bb4bc89b46ae0061d62d4afe",
- "sha256:2e9ac06f225b696cdedbb22f9e805e2dd87bf82e8fa5e17756f94e88a9d37cf7",
- "sha256:368a277bd9278ddb0fde308e6a43f544222d76ed0c4166e0d9f6b036586819d9",
- "sha256:3adfb96637f44010be8abd1b5e73b5070f851b817a0b182e601202f20fa06533",
- "sha256:3d5325ccfadfd3dcf72ff88a92fb8fc0b56cacc7225f0f4b6dcf186c1a6eeabc",
- "sha256:432fc76f680acf7cf188c2ee0f5d3ab73b63c1f03114c7cd8a34cebbe5aa2056",
- "sha256:44098038d5e2749b0784aabb27f1fcbb3f43edebedf64d0af0d26955611be8d6",
- "sha256:5a1df555431f5cd5cc189a6ee3544d24f8c52f2529134685f1e878c4972ab026",
- "sha256:6c47ae7d1174617b3509f5d884935e788f325eb8f1a7efc95d295c68d83cce40",
- "sha256:6f947a9abc1a129858391b3d9334c45041c08a0f23d14333d5b844b6e5c17a07",
- "sha256:782a771424fe74bc7e75c228a1da671578c2ba4ddb2ca09b8f959abdf787331e",
- "sha256:7899a38d0ae7e817e99adb217f586d0a4620e315e4de577444ebeeed2c5729be",
- "sha256:7b00f8c9065de3ad226f7979154a7b27f3b9151c8055c162332369262fc025d8",
- "sha256:8f4b8e777d39013595a7740b4463e61b1cfe5f462f1b609b28fbc1e4c4ff01e5",
- "sha256:90cbac1ec05b305a1b90ede61ef73126afdeb5a804ae04480d6da12c56378df1",
- "sha256:918cdf8751b24986f915d743225ad6b702f83e1106e08a63b736e3a4c6ead789",
- "sha256:9202f22ef811053077d01f43cc02b4aaf4472792f9fd0f5081b0b05c926cca19",
- "sha256:94138682e68ec197db42ad7442d3cf9b328069c3ad8e4e5022e6b5cd3e7ffae5",
- "sha256:968581d1717bbcf170758580f5f97a2925854943c45a19be4d47299507db2eb7",
- "sha256:9d8d0642c63d453179058abc4143e30718b19a85cbf58c2744c9a63f06a1d388",
- "sha256:a7ceb59986456ce851160867ce4929edaffbd2f069ae25717150199f8e1548b8",
- "sha256:b9913c45d1be52d7a5db0c63977eebb51f68a2d5e6fd922d1d9b5e5fd758cc98",
- "sha256:bde283313daf0b34a8d1bab30325f5cb0f4e11b5869dbe5bc61f8fe09a8f66f3",
- "sha256:bf5b9c72b884c6f0c4ed26ef204ee1f768b9437330422492c319470954bc4cc7",
- "sha256:ca80b121bbec76d7794fcb45e65a7eca660a76cc1a104ed439cdbd7df5f0b060",
- "sha256:cdf66977a976d6a3cfb006afdf825d1482f84f7b81179db33941f2fc9673bb1d",
- "sha256:d4faf846ed132fd7ebfbbf4fde588a62d21faa0faa06e6f468b7faa6f436b661",
- "sha256:d7f87c2c02e03d99b95cfa6f7a776409083a9e4d468912e18c7680437b29222c",
- "sha256:dd23df885318391856415e20acfd51a985cba6919f0be78ed89f5db9ff3a31cb",
- "sha256:f5de3c676e57177b38857f6e3cdfbe8f38d1cd754b63200c0615eaa31f514b4f",
- "sha256:f5e8e8d60e18d5f7fd49983f0c4696deeddaf6e608fbab33397671e2fcc6cc91",
- "sha256:f7cac622e11b4253ac4536a654fe221249065d9a69feb6cdcd4d9af3503602e0",
- "sha256:f8a04cf0c5b7139bc6368b461257d4a757ea2fe89b3773e494d235b7dd51119f",
- "sha256:f8bb35ce57a63c9a6896c71a285818a3922d8ca05d150fd1fe49a7f57287b836",
- "sha256:fbfdce91239fe306772faab57597186710d5699213f4df099d1612da7320d682"
+ "sha256:051b22e2758accfddb0457728bfc9abf8c3f2ce6bca43f1ff6e07b5ed9e49bf4",
+ "sha256:0de6eb3d55c03138fda567d9bfed28487ce5d0928c5107549767a93efdf2be26",
+ "sha256:18e6984ec96fc95fd67488555c38ece3015be1f38b1bcceb27b7d6c36b343008",
+ "sha256:1c3a828b033fb02b7c31da4d75014a1f82e6c072fc0523456569a57f8b025861",
+ "sha256:1ce6dab94c0b0d24425ba55712de2f8c9cb21267150ca63f5bb3a0e1f165da99",
+ "sha256:1e24ffea72e27987979c009536fd0868e52239b44afe6cf7135ce8aafd0f108e",
+ "sha256:26ca7a6b42d35129617025ac801135118333cad75856ffc3217b38e707383eba",
+ "sha256:34aea15f9c79f27a8faeaa361bc1e72c773a9b54a1996a2ec4eefc8bcd59a824",
+ "sha256:385710355eadecdb70428a5ae3e7e5a45dcf888baa1426884588be9d25ac4290",
+ "sha256:3ac83b74304487afa211a01909c7dd257e574db0cd429d866c298e21df7aeedf",
+ "sha256:3ad8fb70aa0ebc935729c9699ac31b210a49b689a7b27b7ac9f91676475f3f53",
+ "sha256:40ea3e40e8bb4fdb143c2a8edf2ccfdebd56016c7317c341ce8094c7bee08818",
+ "sha256:57a5c4e0bdac482c5f02f240d0354e61362df73501ef6ebafce8ef635cad7527",
+ "sha256:5d850a453d66336272be4f1d3a8126777f3efdaea62d053b4829857f91e09755",
+ "sha256:68c3a0d8402755eba7f69022e42e8021192a721ca8341908acc222ea597029b6",
+ "sha256:7021e26d70189b33c27173d4173f27bf4685d6b6f1c0ea50e5335f8491cb110c",
+ "sha256:70e9ed7ecb70e0df7dc97c3bc420de9a45a7c76bd5861c6cfec8c549700e681e",
+ "sha256:89c4115e3f5ada55f92b61701a46043fe42f702b5af863b029e4c1a76f6cc2d4",
+ "sha256:8af65a4d4feaec6042c666d22c322a310fba3b47e841ad52f724b9c3ce5da48e",
+ "sha256:8e58ee3723f1fbe07d66892f1caa7481c306f653a6829b6fd16cb23d618a5915",
+ "sha256:9ca2266e08f43c0e22c028801dff7d92a0b102ef20e4caeb6a46abfb95f6a328",
+ "sha256:9e1210334a9bc9f76c3d008e0785ca62214f8a54e1325f6c2ecab3b6a572a015",
+ "sha256:a9a89d6e396ef6f1e3968521bf56e8c4bee25b193bbf5d428b7782d582410822",
+ "sha256:aa7ee1bd5cabb2b7ef35105f863b386c8d5e332f754b60cfc354148bd70d35d1",
+ "sha256:b52382124eca13135a3abe4f65c6bd428656975980a48e51b17aeab68bdb14db",
+ "sha256:c1d80090485da1ea3d99205fe97908b31188c1f4857f08b333ffaf2de2e89d18",
+ "sha256:ce417bcaaab496bc9c77f75566531e9d93816262037b8b2dbb88b0fdcd66587c",
+ "sha256:d67daed8383326dc8b5e58d88e148d29b6b52274a489e383530b0969ae7b9cb9",
+ "sha256:d758f0d4dbf32502ec87bb9b536ca8055090a16f8305f0ada3ce6f34e70f2fd7",
+ "sha256:d7a1ad0f2da582f5bd238bca067e1c6c482c30c15a6e4d14aaa3215cbb2232f3",
+ "sha256:e534e6a968d74463b11de6c9c67f4b4bf61775fb00f2e6e0f7fcdd412ceade18",
+ "sha256:eb5edb6433764119a664bbb148d2aea9990950aa89cc3498f475c2408d523ea3",
+ "sha256:f0c129f81d60cda614acb4b0c5731997ca05b031fb406fcb58ad53a7ade53b13",
+ "sha256:f147e38423fbe96e8731f60a63475b3d2cab2f3d10578d8ee9d10c507c58a2ff",
+ "sha256:f18689f7a70d2ed0e75bad5036ec3c89690a493d4cfac8d7cdb258ac04b132bd",
+ "sha256:f2ae3efbbd120cdf4a68b7abc27a37e61e6f443c5a06ec2c6ad94c37cd8471ec",
+ "sha256:f4e526fdc279c655c1e809b0c34b45844182c2a6b219802da5e411bd2cf5a8ad",
+ "sha256:f7f4f171d4d2018170454d84c934842e1b5f6ce7468ba298f6e7f7cff15000a3"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==24.2.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==24.10.3"
},
"ghp-import": {
"hashes": [
@@ -4827,29 +5008,29 @@
"grpc"
],
"hashes": [
- "sha256:ef0591ef03c30bb83f79b3d0575c3f31219001fc9c5cf37024d08310aeffed8a",
- "sha256:f74dff1889ba291a4b76c5079df0711810e2d9da81abfdc99957bc961c1eb28f"
+ "sha256:4a152fd11a9f774ea606388d423b68aa7e6d6a0ffe4c8266f74979613ec09f81",
+ "sha256:6869eacb2a37720380ba5898312af79a4d30b8bca1548fb4093e0697dc4bdf5d"
],
"markers": "python_version >= '3.7'",
- "version": "==2.20.0"
+ "version": "==2.21.0"
},
"google-api-python-client": {
"hashes": [
- "sha256:c6ecfa193c695baa41e84562d8f8f244fcd164419eca3fc9fd7565646668f9b2",
- "sha256:e864c2cf61d34c00f05278b8bdb72b93b6fa34f0de9ead51d20435f3b65f91be"
+ "sha256:1a5232e9cfed8c201799d9327e4d44dc7ea7daa3c6e1627fca41aa201539c0da",
+ "sha256:b9d68c6b14ec72580d66001bd33c5816b78e2134b93ccc5cf8f624516b561750"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
- "version": "==2.147.0"
+ "version": "==2.149.0"
},
"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 +5150,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' 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'))))))",
"version": "==3.1.1"
},
"griffe": {
"hashes": [
- "sha256:3f86a716b631a4c0f96a43cb75d05d3c85975003c20540426c0eba3b0581c56a",
- "sha256:940aeb630bc3054b4369567f150b6365be6f11eef46b0ed8623aea96e6d17b19"
+ "sha256:72964f93e08c553257706d6cd2c42d1c172213feb48b2be386f243380b405d4b",
+ "sha256:ad6a7980f8c424c9102160aafa3bcdf799df0e75f7829d75af9ee5aef656f860"
],
- "markers": "python_version >= '3.8'",
- "version": "==1.3.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==1.5.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:014dfc020e28a0d9be7e93a91f85ff9f4a87158b7df9952fe23cc42d29d31e1e",
+ "sha256:0892dd200ece4822d72dd0952f7112c542a487fc48fe77568deaaa399c1e717d",
+ "sha256:0bb94e66cd8f0baf29bd3184b6aa09aeb1a660f9ec3d85da615c5003154bc2bf",
+ "sha256:0c69bf11894cad9da00047f46584d5758d6ebc9b5950c0dc96fec7e0bce5cde9",
+ "sha256:15c05a26a0f7047f720da41dc49406b395c1470eef44ff7e2c506a47ac2c0591",
+ "sha256:16724ffc956ea42967f5758c2f043faef43cb7e48a51948ab593570570d1e68b",
+ "sha256:227316b5631260e0bef8a3ce04fa7db4cc81756fea1258b007950b6efc90c05d",
+ "sha256:2b7183c80b602b0ad816315d66f2fb7887614ead950416d60913a9a71c12560d",
+ "sha256:2f55c1e0e2ae9bdd23b3c63459ee4c06d223b68aeb1961d83c48fb63dc29bc03",
+ "sha256:30d47dbacfd20cbd0c8be9bfa52fdb833b395d4ec32fe5cff7220afc05d08571",
+ "sha256:323741b6699cd2b04a71cb38f502db98f90532e8a40cb675393d248126a268af",
+ "sha256:3840994689cc8cbb73d60485c594424ad8adb56c71a30d8948d6453083624b52",
+ "sha256:391df8b0faac84d42f5b8dfc65f5152c48ed914e13c522fd05f2aca211f8bfad",
+ "sha256:42199e704095b62688998c2d84c89e59a26a7d5d32eed86d43dc90e7a3bd04aa",
+ "sha256:54d16383044e681f8beb50f905249e4e7261dd169d4aaf6e52eab67b01cbbbe2",
+ "sha256:5a1e03c3102b6451028d5dc9f8591131d6ab3c8a0e023d94c28cb930ed4b5f81",
+ "sha256:62492bd534979e6d7127b8a6b29093161a742dee3875873e01964049d5250a74",
+ "sha256:662c8e105c5e5cee0317d500eb186ed7a93229586e431c1bf0c9236c2407352c",
+ "sha256:682968427a63d898759474e3b3178d42546e878fdce034fd7474ef75143b64e3",
+ "sha256:74b900566bdf68241118f2918d312d3bf554b2ce0b12b90178091ea7d0a17b3d",
+ "sha256:77196216d5dd6f99af1c51e235af2dd339159f657280e65ce7e12c1a8feffd1d",
+ "sha256:7f200aca719c1c5dc72ab68be3479b9dafccdf03df530d137632c534bb6f1ee3",
+ "sha256:7fc1d2b9fd549264ae585026b266ac2db53735510a207381be509c315b4af4e8",
+ "sha256:82e5bd4b67b17c8c597273663794a6a46a45e44165b960517fe6d8a2f7f16d23",
+ "sha256:8c9a35b8bc50db35ab8e3e02a4f2a35cfba46c8705c3911c34ce343bd777813a",
+ "sha256:985b2686f786f3e20326c4367eebdaed3e7aa65848260ff0c6644f817042cb15",
+ "sha256:9d75641a2fca9ae1ae86454fd25d4c298ea8cc195dbc962852234d54a07060ad",
+ "sha256:a4e95e43447a02aa603abcc6b5e727d093d161a869c83b073f50b9390ecf0fa8",
+ "sha256:a6b9a5c18863fd4b6624a42e2712103fb0f57799a3b29651c0e5b8119a519d65",
+ "sha256:aa8d025fae1595a207b4e47c2e087cb88d47008494db258ac561c00877d4c8f8",
+ "sha256:ac11ecb34a86b831239cc38245403a8de25037b448464f95c3315819e7519772",
+ "sha256:ae6de510f670137e755eb2a74b04d1041e7210af2444103c8c95f193340d17ee",
+ "sha256:b2a44e572fb762c668e4812156b81835f7aba8a721b027e2d4bb29fb50ff4d33",
+ "sha256:b6eb68493a05d38b426604e1dc93bfc0137c4157f7ab4fac5771fd9a104bbaa6",
+ "sha256:b9bca3ca0c5e74dea44bf57d27e15a3a3996ce7e5780d61b7c72386356d231db",
+ "sha256:bd79929b3bb96b54df1296cd3bf4d2b770bd1df6c2bdf549b49bab286b925cdc",
+ "sha256:c4c425f440fb81f8d0237c07b9322fc0fb6ee2b29fbef5f62a322ff8fcce240d",
+ "sha256:cb204a742997277da678611a809a8409657b1398aaeebf73b3d9563b7d154c13",
+ "sha256:cf51d28063338608cd8d3cd64677e922134837902b70ce00dad7f116e3998210",
+ "sha256:cfd9306511fdfc623a1ba1dc3bc07fbd24e6cfbe3c28b4d1e05177baa2f99617",
+ "sha256:cff8e54d6a463883cda2fab94d2062aad2f5edd7f06ae3ed030f2a74756db365",
+ "sha256:d01793653248f49cf47e5695e0a79805b1d9d4eacef85b310118ba1dfcd1b955",
+ "sha256:d4ea4509d42c6797539e9ec7496c15473177ce9abc89bc5c71e7abe50fc25737",
+ "sha256:d90cfdafcf4b45a7a076e3e2a58e7bc3d59c698c4f6470b0bb13a4d869cf2273",
+ "sha256:e090b2553e0da1c875449c8e75073dd4415dd71c9bde6a406240fdf4c0ee467c",
+ "sha256:e91d154689639932305b6ea6f45c6e46bb51ecc8ea77c10ef25aa77f75443ad4",
+ "sha256:eef1dce9d1a46119fd09f9a992cf6ab9d9178b696382439446ca5f399d7b96fe",
+ "sha256:efe32b45dd6d118f5ea2e5deaed417d8a14976325c93812dd831908522b402c9",
+ "sha256:f4d613fbf868b2e2444f490d18af472ccb47660ea3df52f068c9c8801e1f3e85",
+ "sha256:f55f077685f61f0fbd06ea355142b71e47e4a26d2d678b3ba27248abfe67163a",
+ "sha256:f623c57a5321461c84498a99dddf9d13dac0e40ee056d884d6ec4ebcab647a78",
+ "sha256:f6bd2ab135c64a4d1e9e44679a616c9bc944547357c830fafea5c3caa3de5153",
+ "sha256:f95e15db43e75a534420e04822df91f645664bf4ad21dfaad7d51773c80e6bb4",
+ "sha256:fd6bc27861e460fe28e94226e3673d46e294ca4673d46b224428d197c5935e69",
+ "sha256:fe89295219b9c9e47780a0f1c75ca44211e706d1c598242249fe717af3385ec8"
+ ],
+ "version": "==1.67.0"
},
"grpcio-status": {
"hashes": [
- "sha256:b3f7d34ccc46d83fea5261eea3786174459f763c31f6e34f1d24eba6d515d024",
- "sha256:cf9ed0b4a83adbe9297211c95cb5488b0cd065707e812145b842c85c4782ff02"
+ "sha256:0e79e2e01ba41a6ca6ed9d7a825323c511fe1653a646f8014c7e3c8132527acc",
+ "sha256:c3e5a86fa007e9e263cd5f988a8a907484da4caab582874ea2a4a6092734046b"
],
- "version": "==1.66.1"
+ "version": "==1.67.0"
},
"httplib2": {
"hashes": [
@@ -5089,69 +5279,70 @@
},
"markupsafe": {
"hashes": [
- "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf",
- "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff",
- "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f",
- "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3",
- "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532",
- "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f",
- "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617",
- "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df",
- "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4",
- "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906",
- "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f",
- "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4",
- "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8",
- "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371",
- "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2",
- "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465",
- "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52",
- "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6",
- "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169",
- "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad",
- "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2",
- "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0",
- "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029",
- "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f",
- "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a",
- "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced",
- "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5",
- "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c",
- "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf",
- "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9",
- "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb",
- "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad",
- "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3",
- "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1",
- "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46",
- "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc",
- "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a",
- "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee",
- "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900",
- "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5",
- "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea",
- "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f",
- "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5",
- "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e",
- "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a",
- "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f",
- "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50",
- "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a",
- "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b",
- "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4",
- "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff",
- "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2",
- "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46",
- "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b",
- "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf",
- "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5",
- "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5",
- "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab",
- "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd",
- "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"
+ "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4",
+ "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30",
+ "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0",
+ "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9",
+ "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396",
+ "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13",
+ "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028",
+ "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca",
+ "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557",
+ "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832",
+ "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0",
+ "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b",
+ "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579",
+ "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a",
+ "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c",
+ "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff",
+ "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c",
+ "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22",
+ "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094",
+ "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb",
+ "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e",
+ "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5",
+ "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a",
+ "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d",
+ "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a",
+ "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b",
+ "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8",
+ "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225",
+ "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c",
+ "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144",
+ "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f",
+ "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87",
+ "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d",
+ "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93",
+ "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf",
+ "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158",
+ "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84",
+ "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb",
+ "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48",
+ "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171",
+ "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c",
+ "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6",
+ "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd",
+ "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d",
+ "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1",
+ "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d",
+ "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca",
+ "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a",
+ "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29",
+ "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe",
+ "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798",
+ "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c",
+ "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8",
+ "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f",
+ "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f",
+ "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a",
+ "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178",
+ "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0",
+ "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79",
+ "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430",
+ "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"
],
- "markers": "python_version >= '3.7'",
- "version": "==2.1.5"
+ "markers": "python_version >= '3.9'",
+ "version": "==3.0.2"
},
"mccabe": {
"hashes": [
@@ -5197,12 +5388,12 @@
},
"mkdocs-material": {
"hashes": [
- "sha256:1843c5171ad6b489550aeaf7358e5b7128cc03ddcf0fb4d91d19aa1e691a63b8",
- "sha256:d4779051d52ba9f1e7e344b34de95449c7c366c212b388e4a2db9a3db043c228"
+ "sha256:452a7c5d21284b373f36b981a2cbebfff59263feebeede1bc28652e9c5bbe316",
+ "sha256:92779b5e9b5934540c574c11647131d217dc540dce72b05feeda088c8eb1b8f2"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
- "version": "==9.5.38"
+ "version": "==9.5.42"
},
"mkdocs-material-extensions": {
"hashes": [
@@ -5214,55 +5405,60 @@
},
"mkdocstrings": {
"hashes": [
- "sha256:29738bfb72b4608e8e55cc50fb8a54f325dc7ebd2014e4e3881a49892d5983cf",
- "sha256:bb8b8854d6713d5348ad05b069a09f3b79edbc6a0f33a34c6821141adb03fe33"
+ "sha256:1248f3228464f3b8d1a15bd91249ce1701fe3104ac517a5f167a0e01ca850ba5",
+ "sha256:34a8b50f1e6cfd29546c6c09fbe02154adfb0b361bb758834bf56aa284ba876e"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==0.26.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==0.26.2"
},
"mkdocstrings-python": {
"hashes": [
- "sha256:8824b115c5359304ab0b5378a91f6202324a849e1da907a3485b59208b797322",
- "sha256:a21a1c05acef129a618517bb5aae3e33114f569b11588b1e7af3e9d4061a71af"
+ "sha256:7a1760941c0b52a2cd87b960a9e21112ffe52e7df9d0b9583d04d47ed2e186f3",
+ "sha256:7f7d40d6db3cb1f5d19dbcd80e3efe4d0ba32b073272c0c0de9de2e604eda62a"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==1.11.1"
+ "markers": "python_version >= '3.9'",
+ "version": "==1.12.2"
},
"mypy": {
"hashes": [
- "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36",
- "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce",
- "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6",
- "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b",
- "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca",
- "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24",
- "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383",
- "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7",
- "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86",
- "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d",
- "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4",
- "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8",
- "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987",
- "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385",
- "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79",
- "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef",
- "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6",
- "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70",
- "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca",
- "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70",
- "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12",
- "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104",
- "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a",
- "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318",
- "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1",
- "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b",
- "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"
+ "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66",
+ "sha256:0dcc1e843d58f444fce19da4cce5bd35c282d4bde232acdeca8279523087088a",
+ "sha256:0e6fe449223fa59fbee351db32283838a8fee8059e0028e9e6494a03802b4004",
+ "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735",
+ "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931",
+ "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a",
+ "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02",
+ "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0",
+ "sha256:3d7d4371829184e22fda4015278fbfdef0327a4b955a483012bd2d423a788801",
+ "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635",
+ "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179",
+ "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81",
+ "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811",
+ "sha256:8135ffec02121a75f75dc97c81af7c14aa4ae0dda277132cfcd6abcd21551bfd",
+ "sha256:843826966f1d65925e8b50d2b483065c51fc16dc5d72647e0236aae51dc8d77e",
+ "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042",
+ "sha256:96af62050971c5241afb4701c15189ea9507db89ad07794a4ee7b4e092dc0627",
+ "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f",
+ "sha256:9fe20f89da41a95e14c34b1ddb09c80262edcc295ad891f22cc4b60013e8f78d",
+ "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6",
+ "sha256:a7b76fa83260824300cc4834a3ab93180db19876bce59af921467fd03e692810",
+ "sha256:b16fe09f9c741d85a2e3b14a5257a27a4f4886c171d562bc5a5e90d8591906b8",
+ "sha256:b947097fae68004b8328c55161ac9db7d3566abfef72d9d41b47a021c2fba6b1",
+ "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e",
+ "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc",
+ "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4",
+ "sha256:d90da248f4c2dba6c44ddcfea94bb361e491962f05f41990ff24dbd09969ce20",
+ "sha256:dc6e2a2195a290a7fd5bac3e60b586d77fc88e986eba7feced8b778c373f9afe",
+ "sha256:de5b2a8988b4e1269a98beaf0e7cc71b510d050dce80c343b53b4955fff45f19",
+ "sha256:e10ba7de5c616e44ad21005fa13450cd0de7caaa303a626147d45307492e4f2d",
+ "sha256:f59f1dfbf497d473201356966e353ef09d4daec48caeacc0254db8ef633a28a5",
+ "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
- "version": "==1.11.2"
+ "version": "==1.12.1"
},
"mypy-extensions": {
"hashes": [
@@ -5282,63 +5478,63 @@
},
"numpy": {
"hashes": [
- "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5",
- "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0",
- "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550",
- "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c",
- "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7",
- "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2",
- "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b",
- "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df",
- "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f",
- "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d",
- "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270",
- "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd",
- "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504",
- "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec",
- "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647",
- "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f",
- "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab",
- "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe",
- "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5",
- "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5",
- "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e",
- "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd",
- "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313",
- "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0",
- "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f",
- "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6",
- "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553",
- "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed",
- "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb",
- "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e",
- "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39",
- "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728",
- "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e",
- "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a",
- "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95",
- "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f",
- "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480",
- "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9",
- "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0",
- "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f",
- "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd",
- "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae",
- "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201",
- "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136",
- "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf",
- "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78",
- "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468",
- "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca",
- "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef",
- "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0",
- "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556",
- "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521",
- "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"
+ "sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8",
+ "sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466",
+ "sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35",
+ "sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c",
+ "sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4",
+ "sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6",
+ "sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0",
+ "sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7",
+ "sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a",
+ "sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a",
+ "sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e",
+ "sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62",
+ "sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2",
+ "sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5",
+ "sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee",
+ "sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe",
+ "sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a",
+ "sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e",
+ "sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf",
+ "sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c",
+ "sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3",
+ "sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86",
+ "sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df",
+ "sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98",
+ "sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d",
+ "sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2",
+ "sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146",
+ "sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550",
+ "sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8",
+ "sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb",
+ "sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e",
+ "sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d",
+ "sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366",
+ "sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0",
+ "sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db",
+ "sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe",
+ "sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426",
+ "sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952",
+ "sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03",
+ "sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f",
+ "sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7",
+ "sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b",
+ "sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17",
+ "sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5",
+ "sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1",
+ "sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142",
+ "sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884",
+ "sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a",
+ "sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9",
+ "sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445",
+ "sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1",
+ "sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1",
+ "sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648"
],
"index": "pypi",
"markers": "python_version >= '3.10'",
- "version": "==2.1.1"
+ "version": "==2.1.2"
},
"oauthlib": {
"hashes": [
@@ -5382,90 +5578,85 @@
},
"pillow": {
"hashes": [
- "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885",
- "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea",
- "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df",
- "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5",
- "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c",
- "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d",
- "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd",
- "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06",
- "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908",
- "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a",
- "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be",
- "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0",
- "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b",
- "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80",
- "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a",
- "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e",
- "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9",
- "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696",
- "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b",
- "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309",
- "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e",
- "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab",
- "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d",
- "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060",
- "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d",
- "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d",
- "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4",
- "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3",
- "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6",
- "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb",
- "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94",
- "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b",
- "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496",
- "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0",
- "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319",
- "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b",
- "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856",
- "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef",
- "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680",
- "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b",
- "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42",
- "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e",
- "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597",
- "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a",
- "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8",
- "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3",
- "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736",
- "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da",
- "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126",
- "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd",
- "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5",
- "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b",
- "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026",
- "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b",
- "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc",
- "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46",
- "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2",
- "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c",
- "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe",
- "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984",
- "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a",
- "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70",
- "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca",
- "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b",
- "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91",
- "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3",
- "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84",
- "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1",
- "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5",
- "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be",
- "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f",
- "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc",
- "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9",
- "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e",
- "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141",
- "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef",
- "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22",
- "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27",
- "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e",
- "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"
+ "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7",
+ "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5",
+ "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903",
+ "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2",
+ "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38",
+ "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2",
+ "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9",
+ "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f",
+ "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc",
+ "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8",
+ "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d",
+ "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2",
+ "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316",
+ "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a",
+ "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25",
+ "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd",
+ "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba",
+ "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc",
+ "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273",
+ "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa",
+ "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a",
+ "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b",
+ "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a",
+ "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae",
+ "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291",
+ "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97",
+ "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06",
+ "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904",
+ "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b",
+ "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b",
+ "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8",
+ "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527",
+ "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947",
+ "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb",
+ "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003",
+ "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5",
+ "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f",
+ "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739",
+ "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944",
+ "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830",
+ "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f",
+ "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3",
+ "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4",
+ "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84",
+ "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7",
+ "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6",
+ "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6",
+ "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9",
+ "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de",
+ "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4",
+ "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47",
+ "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd",
+ "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50",
+ "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c",
+ "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086",
+ "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba",
+ "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306",
+ "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699",
+ "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e",
+ "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488",
+ "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa",
+ "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2",
+ "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3",
+ "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9",
+ "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923",
+ "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2",
+ "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790",
+ "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734",
+ "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916",
+ "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1",
+ "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f",
+ "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798",
+ "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb",
+ "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2",
+ "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"
],
"index": "pypi",
- "markers": "python_version >= '3.8'",
- "version": "==10.4.0"
+ "markers": "python_version >= '3.9'",
+ "version": "==11.0.0"
},
"platformdirs": {
"hashes": [
@@ -5485,12 +5676,12 @@
},
"pre-commit": {
"hashes": [
- "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af",
- "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"
+ "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2",
+ "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
- "version": "==3.8.0"
+ "version": "==4.0.1"
},
"proto-plus": {
"hashes": [
@@ -5567,28 +5758,28 @@
},
"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": [
- "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c",
- "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"
+ "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84",
+ "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c"
],
- "markers": "python_version >= '3.1'",
- "version": "==3.1.4"
+ "markers": "python_version > '3.0'",
+ "version": "==3.2.0"
},
"pyright": {
"hashes": [
- "sha256:21a4749dd1740e209f88d3a601e9f40748670d39481ea32b9d77edf7f3f1fb2e",
- "sha256:66a5d4e83be9452853d73e9dd9e95ba0ac3061845270e4e331d0070a597d3445"
+ "sha256:1bf042b8f080441534aa02101dea30f8fc2efa8f7b6f1ab05197c21317f5bfa7",
+ "sha256:e5b9a1b8d492e13004d822af94d07d235f2c7c158457293b51ab2214c8c5b375"
],
"index": "pypi",
"markers": "python_version >= '3.7'",
- "version": "==1.1.382.post1"
+ "version": "==1.1.385"
},
"pytest": {
"hashes": [
@@ -5639,7 +5830,7 @@
"sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3",
"sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"
],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
+ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==2.9.0.post0"
},
"pytz": {
@@ -5720,100 +5911,8 @@
},
"regex": {
"hashes": [
- "sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623",
- "sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199",
- "sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664",
- "sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f",
- "sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca",
- "sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066",
- "sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca",
- "sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39",
- "sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d",
- "sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6",
- "sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35",
- "sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408",
- "sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5",
- "sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a",
- "sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9",
- "sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92",
- "sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766",
- "sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168",
- "sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca",
- "sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508",
- "sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df",
- "sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf",
- "sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b",
- "sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4",
- "sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268",
- "sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6",
- "sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c",
- "sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62",
- "sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231",
- "sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36",
- "sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba",
- "sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4",
- "sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e",
- "sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822",
- "sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4",
- "sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d",
- "sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71",
- "sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50",
- "sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d",
- "sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad",
- "sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8",
- "sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8",
- "sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8",
"sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd",
- "sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16",
- "sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664",
- "sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a",
- "sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f",
- "sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd",
- "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a",
- "sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9",
- "sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199",
- "sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d",
- "sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963",
- "sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009",
- "sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a",
- "sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679",
- "sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96",
- "sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42",
- "sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8",
- "sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e",
- "sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7",
- "sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8",
- "sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802",
- "sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366",
- "sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137",
- "sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784",
- "sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29",
- "sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3",
- "sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771",
- "sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60",
- "sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a",
- "sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4",
- "sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0",
- "sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84",
- "sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd",
- "sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1",
- "sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776",
- "sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142",
- "sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89",
- "sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c",
- "sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8",
- "sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35",
- "sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a",
- "sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86",
- "sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9",
- "sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64",
- "sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554",
- "sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85",
- "sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb",
- "sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0",
- "sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8",
- "sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb",
- "sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919"
+ "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a"
],
"markers": "python_version >= '3.8'",
"version": "==2024.9.11"
@@ -5845,18 +5944,18 @@
},
"setuptools": {
"hashes": [
- "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2",
- "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"
+ "sha256:753bb6ebf1f465a1912e19ed1d41f403a79173a9acf66a42e7e6aec45c3c16ec",
+ "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8"
],
"markers": "python_version >= '3.8'",
- "version": "==75.1.0"
+ "version": "==75.2.0"
},
"six": {
"hashes": [
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
+ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
"version": "==1.16.0"
},
"snowballstemmer": {
@@ -5892,11 +5991,11 @@
},
"types-requests": {
"hashes": [
- "sha256:2850e178db3919d9bf809e434eef65ba49d0e7e33ac92d588f4a5e295fffd405",
- "sha256:59c2f673eb55f32a99b2894faf6020e1a9f4a402ad0f192bfee0b64469054310"
+ "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95",
+ "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"
],
"markers": "python_version >= '3.8'",
- "version": "==2.32.0.20240914"
+ "version": "==2.32.0.20241016"
},
"typing-extensions": {
"hashes": [
@@ -5925,11 +6024,11 @@
},
"virtualenv": {
"hashes": [
- "sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48",
- "sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2"
+ "sha256:2ca56a68ed615b8fe4326d11a0dca5dfbe8fd68510fb6c6349163bed3c15f2b2",
+ "sha256:44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655"
],
- "markers": "python_version >= '3.7'",
- "version": "==20.26.6"
+ "markers": "python_version >= '3.8'",
+ "version": "==20.27.0"
},
"watchdog": {
"hashes": [
@@ -5977,43 +6076,46 @@
},
"zope.interface": {
"hashes": [
- "sha256:01e6e58078ad2799130c14a1d34ec89044ada0e1495329d72ee0407b9ae5100d",
- "sha256:064ade95cb54c840647205987c7b557f75d2b2f7d1a84bfab4cf81822ef6e7d1",
- "sha256:11fa1382c3efb34abf16becff8cb214b0b2e3144057c90611621f2d186b7e1b7",
- "sha256:1bee1b722077d08721005e8da493ef3adf0b7908e0cd85cc7dc836ac117d6f32",
- "sha256:1eeeb92cb7d95c45e726e3c1afe7707919370addae7ed14f614e22217a536958",
- "sha256:21a207c6b2c58def5011768140861a73f5240f4f39800625072ba84e76c9da0b",
- "sha256:2545d6d7aac425d528cd9bf0d9e55fcd47ab7fd15f41a64b1c4bf4c6b24946dc",
- "sha256:2c4316a30e216f51acbd9fb318aa5af2e362b716596d82cbb92f9101c8f8d2e7",
- "sha256:35062d93bc49bd9b191331c897a96155ffdad10744ab812485b6bad5b588d7e4",
- "sha256:382d31d1e68877061daaa6499468e9eb38eb7625d4369b1615ac08d3860fe896",
- "sha256:3aa8fcbb0d3c2be1bfd013a0f0acd636f6ed570c287743ae2bbd467ee967154d",
- "sha256:3d4b91821305c8d8f6e6207639abcbdaf186db682e521af7855d0bea3047c8ca",
- "sha256:3de1d553ce72868b77a7e9d598c9bff6d3816ad2b4cc81c04f9d8914603814f3",
- "sha256:3fcdc76d0cde1c09c37b7c6b0f8beba2d857d8417b055d4f47df9c34ec518bdd",
- "sha256:5112c530fa8aa2108a3196b9c2f078f5738c1c37cfc716970edc0df0414acda8",
- "sha256:53d678bb1c3b784edbfb0adeebfeea6bf479f54da082854406a8f295d36f8386",
- "sha256:6195c3c03fef9f87c0dbee0b3b6451df6e056322463cf35bca9a088e564a3c58",
- "sha256:6d04b11ea47c9c369d66340dbe51e9031df2a0de97d68f442305ed7625ad6493",
- "sha256:6dd647fcd765030638577fe6984284e0ebba1a1008244c8a38824be096e37fe3",
- "sha256:799ef7a444aebbad5a145c3b34bff012b54453cddbde3332d47ca07225792ea4",
- "sha256:7d92920416f31786bc1b2f34cc4fc4263a35a407425319572cbf96b51e835cd3",
- "sha256:7e0c151a6c204f3830237c59ee4770cc346868a7a1af6925e5e38650141a7f05",
- "sha256:84f8794bd59ca7d09d8fce43ae1b571be22f52748169d01a13d3ece8394d8b5b",
- "sha256:95e5913ec718010dc0e7c215d79a9683b4990e7026828eedfda5268e74e73e11",
- "sha256:9b9369671a20b8d039b8e5a1a33abd12e089e319a3383b4cc0bf5c67bd05fe7b",
- "sha256:ab985c566a99cc5f73bc2741d93f1ed24a2cc9da3890144d37b9582965aff996",
- "sha256:af94e429f9d57b36e71ef4e6865182090648aada0cb2d397ae2b3f7fc478493a",
- "sha256:c96b3e6b0d4f6ddfec4e947130ec30bd2c7b19db6aa633777e46c8eecf1d6afd",
- "sha256:cd2690d4b08ec9eaf47a85914fe513062b20da78d10d6d789a792c0b20307fb1",
- "sha256:d3b7ce6d46fb0e60897d62d1ff370790ce50a57d40a651db91a3dde74f73b738",
- "sha256:d976fa7b5faf5396eb18ce6c132c98e05504b52b60784e3401f4ef0b2e66709b",
- "sha256:db6237e8fa91ea4f34d7e2d16d74741187e9105a63bbb5686c61fea04cdbacca",
- "sha256:ecd32f30f40bfd8511b17666895831a51b532e93fc106bfa97f366589d3e4e0e",
- "sha256:f418c88f09c3ba159b95a9d1cfcdbe58f208443abb1f3109f4b9b12fd60b187c"
- ],
- "markers": "python_version >= '3.8'",
- "version": "==7.0.3"
+ "sha256:07add15de0cc7e69917f7d286b64d54125c950aeb43efed7a5ea7172f000fbc1",
+ "sha256:0ac20581fc6cd7c754f6dff0ae06fedb060fa0e9ea6309d8be8b2701d9ea51c4",
+ "sha256:124149e2d42067b9c6597f4dafdc7a0983d0163868f897b7bb5dc850b14f9a87",
+ "sha256:27cfb5205d68b12682b6e55ab8424662d96e8ead19550aad0796b08dd2c9a45e",
+ "sha256:2a29ac607e970b5576547f0e3589ec156e04de17af42839eedcf478450687317",
+ "sha256:2b6a4924f5bad9fe21d99f66a07da60d75696a136162427951ec3cb223a5570d",
+ "sha256:2bd9e9f366a5df08ebbdc159f8224904c1c5ce63893984abb76954e6fbe4381a",
+ "sha256:3bcff5c09d0215f42ba64b49205a278e44413d9bf9fa688fd9e42bfe472b5f4f",
+ "sha256:3f005869a1a05e368965adb2075f97f8ee9a26c61898a9e52a9764d93774f237",
+ "sha256:4a00ead2e24c76436e1b457a5132d87f83858330f6c923640b7ef82d668525d1",
+ "sha256:4af4a12b459a273b0b34679a5c3dc5e34c1847c3dd14a628aa0668e19e638ea2",
+ "sha256:5501e772aff595e3c54266bc1bfc5858e8f38974ce413a8f1044aae0f32a83a3",
+ "sha256:5e28ea0bc4b084fc93a483877653a033062435317082cdc6388dec3438309faf",
+ "sha256:5e956b1fd7f3448dd5e00f273072e73e50dfafcb35e4227e6d5af208075593c9",
+ "sha256:5fcf379b875c610b5a41bc8a891841533f98de0520287d7f85e25386cd10d3e9",
+ "sha256:6159e767d224d8f18deff634a1d3722e68d27488c357f62ebeb5f3e2f5288b1f",
+ "sha256:661d5df403cd3c5b8699ac480fa7f58047a3253b029db690efa0c3cf209993ef",
+ "sha256:711eebc77f2092c6a8b304bad0b81a6ce3cf5490b25574e7309fbc07d881e3af",
+ "sha256:80a3c00b35f6170be5454b45abe2719ea65919a2f09e8a6e7b1362312a872cd3",
+ "sha256:848b6fa92d7c8143646e64124ed46818a0049a24ecc517958c520081fd147685",
+ "sha256:91b6c30689cfd87c8f264acb2fc16ad6b3c72caba2aec1bf189314cf1a84ca33",
+ "sha256:9733a9a0f94ef53d7aa64661811b20875b5bc6039034c6e42fb9732170130573",
+ "sha256:9940d5bc441f887c5f375ec62bcf7e7e495a2d5b1da97de1184a88fb567f06af",
+ "sha256:9e3e48f3dea21c147e1b10c132016cb79af1159facca9736d231694ef5a740a8",
+ "sha256:a14c9decf0eb61e0892631271d500c1e306c7b6901c998c7035e194d9150fdd1",
+ "sha256:a735f82d2e3ed47ca01a20dfc4c779b966b16352650a8036ab3955aad151ed8a",
+ "sha256:a99240b1d02dc469f6afbe7da1bf617645e60290c272968f4e53feec18d7dce8",
+ "sha256:b7b25db127db3e6b597c5f74af60309c4ad65acd826f89609662f0dc33a54728",
+ "sha256:b936d61dbe29572fd2cfe13e30b925e5383bed1aba867692670f5a2a2eb7b4e9",
+ "sha256:bec001798ab62c3fc5447162bf48496ae9fba02edc295a9e10a0b0c639a6452e",
+ "sha256:cc8a318162123eddbdf22fcc7b751288ce52e4ad096d3766ff1799244352449d",
+ "sha256:d0a45b5af9f72c805ee668d1479480ca85169312211bed6ed18c343e39307d5f",
+ "sha256:e53c291debef523b09e1fe3dffe5f35dde164f1c603d77f770b88a1da34b7ed6",
+ "sha256:ec1ef1fdb6f014d5886b97e52b16d0f852364f447d2ab0f0c6027765777b6667",
+ "sha256:ec59fe53db7d32abb96c6d4efeed84aab4a7c38c62d7a901a9b20c09dd936e7a",
+ "sha256:f245d039f72e6f802902375755846f5de1ee1e14c3e8736c078565599bcab621",
+ "sha256:ff115ef91c0eeac69cd92daeba36a9d8e14daee445b504eeea2b1c0b55821984"
+ ],
+ "markers": "python_version >= '3.8'",
+ "version": "==7.1.0"
}
}
}
diff --git a/breathecode/authenticate/admin.py b/breathecode/authenticate/admin.py
index 05ef34d05..d5491a409 100644
--- a/breathecode/authenticate/admin.py
+++ b/breathecode/authenticate/admin.py
@@ -35,6 +35,7 @@
GithubAcademyUser,
GithubAcademyUserLog,
GitpodUser,
+ GoogleWebhook,
Profile,
ProfileAcademy,
Role,
@@ -498,3 +499,11 @@ def authenticate(self, obj):
return format_html(
f"connect owner"
)
+
+
+@admin.register(GoogleWebhook)
+class GoogleWebhookAdmin(admin.ModelAdmin):
+ list_display = ("id", "type", "status", "status_text", "created_at", "updated_at")
+ search_fields = ["status", "status_text"]
+ list_filter = ("type", "status")
+ actions = []
diff --git a/breathecode/authenticate/apps.py b/breathecode/authenticate/apps.py
index 29576ae1a..68209c176 100644
--- a/breathecode/authenticate/apps.py
+++ b/breathecode/authenticate/apps.py
@@ -6,3 +6,4 @@ class AcademyConfig(AppConfig):
def ready(self):
from . import receivers # noqa: F401
+ from . import flags # noqa: F401
diff --git a/breathecode/authenticate/flags.py b/breathecode/authenticate/flags.py
new file mode 100644
index 000000000..a83082775
--- /dev/null
+++ b/breathecode/authenticate/flags.py
@@ -0,0 +1,16 @@
+import os
+
+from capyc.core.managers import feature
+
+flags = feature.flags
+
+
+@feature.availability("authenticate.set_google_credentials")
+def set_google_credentials() -> bool:
+ if os.getenv("SET_GOOGLE_CREDENTIALS") in feature.TRUE:
+ return True
+
+ return False
+
+
+feature.add(set_google_credentials)
diff --git a/breathecode/authenticate/migrations/0059_googlewebhook.py b/breathecode/authenticate/migrations/0059_googlewebhook.py
new file mode 100644
index 000000000..1932e7c1f
--- /dev/null
+++ b/breathecode/authenticate/migrations/0059_googlewebhook.py
@@ -0,0 +1,34 @@
+# Generated by Django 5.1.2 on 2024-10-22 19:28
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("authenticate", "0058_credentialsgoogle_google_id"),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name="GoogleWebhook",
+ fields=[
+ ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
+ (
+ "message",
+ models.SlugField(blank=True, help_text="base64 message provided by google", max_length=124),
+ ),
+ (
+ "status",
+ models.CharField(
+ choices=[("PENDING", "Pending"), ("DONE", "Done"), ("ERROR", "Error")],
+ default="PENDING",
+ max_length=9,
+ ),
+ ),
+ ("status_text", models.CharField(default="", max_length=255)),
+ ("created_at", models.DateTimeField(auto_now_add=True)),
+ ("updated_at", models.DateTimeField(auto_now=True)),
+ ],
+ ),
+ ]
diff --git a/breathecode/authenticate/migrations/0060_alter_googlewebhook_message.py b/breathecode/authenticate/migrations/0060_alter_googlewebhook_message.py
new file mode 100644
index 000000000..7421316d0
--- /dev/null
+++ b/breathecode/authenticate/migrations/0060_alter_googlewebhook_message.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.1.2 on 2024-10-22 19:48
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("authenticate", "0059_googlewebhook"),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name="googlewebhook",
+ name="message",
+ field=models.SlugField(blank=True, help_text="base64 message provided by google", max_length=512),
+ ),
+ ]
diff --git a/breathecode/authenticate/migrations/0061_googlewebhook_type.py b/breathecode/authenticate/migrations/0061_googlewebhook_type.py
new file mode 100644
index 000000000..0552b92fd
--- /dev/null
+++ b/breathecode/authenticate/migrations/0061_googlewebhook_type.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.1.2 on 2024-10-22 22:28
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("authenticate", "0060_alter_googlewebhook_message"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="googlewebhook",
+ name="type",
+ field=models.CharField(default="noSet", max_length=40),
+ ),
+ ]
diff --git a/breathecode/authenticate/models.py b/breathecode/authenticate/models.py
index 0f6139f16..418ad9e9f 100644
--- a/breathecode/authenticate/models.py
+++ b/breathecode/authenticate/models.py
@@ -24,7 +24,7 @@
)
from breathecode.utils.validators import validate_language_code
-from .signals import academy_invite_accepted
+from .signals import academy_invite_accepted, google_webhook_saved
__all__ = [
"User",
@@ -704,3 +704,25 @@ 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")
+ DONE = ("DONE", "Done")
+ ERROR = ("ERROR", "Error")
+
+ message = models.SlugField(max_length=512, blank=True, help_text="base64 message provided by google")
+ type = models.CharField(max_length=40, default="noSet")
+
+ status = models.CharField(max_length=9, choices=Status, default=Status.PENDING)
+ status_text = models.CharField(max_length=255, default="")
+
+ created_at = models.DateTimeField(auto_now_add=True, editable=False)
+ updated_at = models.DateTimeField(auto_now=True, editable=False)
+
+ def save(self, *args, **kwargs):
+ created = self.pk is None
+ super().save(*args, **kwargs)
+ if created:
+ google_webhook_saved.send_robust(sender=self.__class__, instance=self, created=created)
diff --git a/breathecode/authenticate/serializers.py b/breathecode/authenticate/serializers.py
index 44061412e..123f47966 100644
--- a/breathecode/authenticate/serializers.py
+++ b/breathecode/authenticate/serializers.py
@@ -106,6 +106,7 @@ class CohortTinySerializer(serpy.Serializer):
"""The serializer schema definition."""
# Use a Field subclass like IntField if you need more validation.
+ id = serpy.Field()
slug = serpy.Field()
name = serpy.Field()
@@ -1290,6 +1291,7 @@ class Meta:
"conversion_info",
"asset_slug",
"event_slug",
+ "has_marketing_consent",
)
def validate(self, data: dict[str, str]):
diff --git a/breathecode/authenticate/signals.py b/breathecode/authenticate/signals.py
index d49a34602..73b3a5e9e 100644
--- a/breathecode/authenticate/signals.py
+++ b/breathecode/authenticate/signals.py
@@ -13,3 +13,4 @@
user_info_deleted = emisor.signal("user_info_deleted")
cohort_user_deleted = emisor.signal("cohort_user_deleted")
+google_webhook_saved = emisor.signal("google_webhook_saved")
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/authenticate/tests/signals/tests_google_webhook_saved.py b/breathecode/authenticate/tests/signals/tests_google_webhook_saved.py
new file mode 100644
index 000000000..18f11cf42
--- /dev/null
+++ b/breathecode/authenticate/tests/signals/tests_google_webhook_saved.py
@@ -0,0 +1,32 @@
+from unittest.mock import MagicMock, call
+
+import capyc.pytest as capy
+import pytest
+
+from breathecode.notify import tasks
+from breathecode.payments.tasks import process_google_webhook
+from breathecode.tests.mixins.breathecode_mixin.breathecode import Breathecode
+
+
+@pytest.fixture(autouse=True)
+def setup(db, monkeypatch):
+ monkeypatch.setattr("breathecode.payments.tasks.process_google_webhook.delay", MagicMock())
+ yield
+
+
+def test_each_webhook_is_processed(database: capy.Database, signals: capy.Signals, format: capy.Format):
+ signals.enable("breathecode.authenticate.signals.google_webhook_saved")
+
+ model = database.create(
+ google_webhook=2,
+ )
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ format.to_obj_repr(model.google_webhook[0]),
+ format.to_obj_repr(model.google_webhook[1]),
+ ]
+
+ assert process_google_webhook.delay.call_args_list == [
+ call(1),
+ call(2),
+ ]
diff --git a/breathecode/authenticate/tests/tasks/tests_verify_user_invite_email.py b/breathecode/authenticate/tests/tasks/tests_verify_user_invite_email.py
index cae9bbc92..4fe03aa66 100644
--- a/breathecode/authenticate/tests/tasks/tests_verify_user_invite_email.py
+++ b/breathecode/authenticate/tests/tasks/tests_verify_user_invite_email.py
@@ -45,7 +45,6 @@ def test_1_invite(database: capy.Database, format: capy.Format):
assert logging.Logger.error.call_args_list == [
call("User not found for user invite 1", exc_info=True),
]
- # assert 0
@pytest.mark.parametrize(
diff --git a/breathecode/authenticate/tests/urls/tests_academy_member_id_invite.py b/breathecode/authenticate/tests/urls/tests_academy_member_id_invite.py
index bb4ca4574..6a14d0969 100644
--- a/breathecode/authenticate/tests/urls/tests_academy_member_id_invite.py
+++ b/breathecode/authenticate/tests/urls/tests_academy_member_id_invite.py
@@ -21,6 +21,7 @@ def generate_user_invite(self, model, user_invite, arguments={}):
"logo_url": model.academy.logo_url,
},
"cohort": {
+ "id": model.cohort.id,
"name": model.cohort.name,
"slug": model.cohort.slug,
},
@@ -362,6 +363,7 @@ def test_resend_invite_with_invitation(self):
},
"role": {"id": "potato", "name": "potato", "slug": "potato"},
"cohort": {
+ "id": model["cohort"].id,
"slug": model["cohort"].slug,
"name": model["cohort"].name,
},
diff --git a/breathecode/authenticate/tests/urls/tests_academy_user_invite.py b/breathecode/authenticate/tests/urls/tests_academy_user_invite.py
index 182ebce5f..15217a88a 100644
--- a/breathecode/authenticate/tests/urls/tests_academy_user_invite.py
+++ b/breathecode/authenticate/tests/urls/tests_academy_user_invite.py
@@ -28,6 +28,7 @@ def generate_user_invite(self, model, user_invite, arguments={}):
"logo_url": model.academy.logo_url,
},
"cohort": {
+ "id": model.cohort.id,
"name": model.cohort.name,
"slug": model.cohort.slug,
},
diff --git a/breathecode/authenticate/tests/urls/tests_google_callback.py b/breathecode/authenticate/tests/urls/tests_google_callback.py
index 042642885..09cc94eda 100644
--- a/breathecode/authenticate/tests/urls/tests_google_callback.py
+++ b/breathecode/authenticate/tests/urls/tests_google_callback.py
@@ -2,17 +2,17 @@
Test /v1/auth/subscribe
"""
-from datetime import datetime, timedelta
import random
-from unittest.mock import call
+from datetime import datetime, timedelta
+from unittest.mock import MagicMock, call
+from urllib.parse import quote
+import capyc.pytest as capy
import pytest
from django.urls.base import reverse_lazy
from rest_framework import status
-import capyc.pytest as capy
import staging.pytest as staging
-from urllib.parse import quote
@pytest.fixture(autouse=True)
@@ -20,6 +20,11 @@ def setup(monkeypatch: pytest.MonkeyPatch, db):
monkeypatch.setenv("GOOGLE_CLIENT_ID", "123456.apps.googleusercontent.com")
monkeypatch.setenv("GOOGLE_SECRET", "123456")
monkeypatch.setenv("GOOGLE_REDIRECT_URL", "https://breathecode.herokuapp.com/v1/auth/google/callback")
+ monkeypatch.setattr("breathecode.services.google_apps.GoogleApps.__init__", MagicMock(return_value=None))
+ monkeypatch.setattr("breathecode.services.google_apps.GoogleApps.subscribe_meet_webhook", MagicMock())
+ monkeypatch.setattr(
+ "breathecode.services.google_apps.GoogleApps.get_user_info", MagicMock(return_value={"id": 123})
+ )
yield
@@ -152,7 +157,13 @@ def test_token(
json=payload,
headers={"Accept": "application/json"},
).response(
- {"access_token": "test_access_token", "expires_in": 3600, "refresh_token": "test_refresh_token"}, status=200
+ {
+ "access_token": "test_access_token",
+ "expires_in": 3600,
+ "refresh_token": "test_refresh_token",
+ "id_token": "test_id_token",
+ },
+ status=200,
)
response = client.get(url, format="json")
@@ -167,6 +178,8 @@ def test_token(
{
"expires_at": utc_now + timedelta(seconds=3600),
"id": 1,
+ "google_id": "123",
+ "id_token": "test_id_token",
"refresh_token": "test_refresh_token",
"token": "test_access_token",
"user_id": 1,
diff --git a/breathecode/authenticate/tests/urls/tests_google_token.py b/breathecode/authenticate/tests/urls/tests_google_token.py
index cc0f84544..62e2586dd 100644
--- a/breathecode/authenticate/tests/urls/tests_google_token.py
+++ b/breathecode/authenticate/tests/urls/tests_google_token.py
@@ -3,8 +3,10 @@
"""
from typing import Any
+from unittest.mock import MagicMock
from urllib.parse import urlencode
+import capyc.pytest as capy
import pytest
from django.urls.base import reverse_lazy
from django.utils import timezone
@@ -12,7 +14,6 @@
from rest_framework.test import APIClient
from breathecode.tests.mixins.breathecode_mixin.breathecode import Breathecode
-import capyc.pytest as capy
now = timezone.now()
@@ -22,6 +23,7 @@ def setup(monkeypatch: pytest.MonkeyPatch, db):
monkeypatch.setenv("GOOGLE_CLIENT_ID", "123456.apps.googleusercontent.com")
monkeypatch.setenv("GOOGLE_SECRET", "123456")
monkeypatch.setenv("GOOGLE_REDIRECT_URL", "https://breathecode.herokuapp.com/v1/auth/google/callback")
+ monkeypatch.setenv("SET_GOOGLE_CREDENTIALS", "true")
yield
@@ -83,12 +85,56 @@ def test_redirect(database: capy.Database, client: capy.Client, token: Any):
"scope": " ".join(
[
"https://www.googleapis.com/auth/meetings.space.created",
- # "https://www.googleapis.com/auth/meetings.space.readonly",
"https://www.googleapis.com/auth/drive.meet.readonly",
- # "https://www.googleapis.com/auth/calendar.events",
+ "https://www.googleapis.com/auth/userinfo.profile",
+ ]
+ ),
+ "state": f"token={model.token.key}&url={callback_url}&academysettings=none",
+ }
+
+ assert response.url == f"https://accounts.google.com/o/oauth2/v2/auth?{urlencode(params)}"
+
+
+@pytest.mark.parametrize(
+ "token",
+ [
+ {"token_type": "temporal"},
+ ],
+)
+@pytest.mark.parametrize(
+ "academy_settings",
+ [
+ "overwrite",
+ "set",
+ ],
+)
+def test_redirect_with_academy_settings(
+ database: capy.Database, client: capy.Client, token: Any, academy_settings: str
+):
+ model = database.create(token=token)
+ callback_url = "https://4geeks.com/"
+
+ url = (
+ reverse_lazy("authenticate:google_token", kwargs={"token": model.token.key})
+ + f"?url={callback_url}&academysettings={academy_settings}"
+ )
+ response = client.get(url, format="json")
+
+ assert response.status_code == status.HTTP_302_FOUND
+ params = {
+ "response_type": "code",
+ "client_id": "123456.apps.googleusercontent.com",
+ "redirect_uri": "https://breathecode.herokuapp.com/v1/auth/google/callback",
+ "access_type": "offline",
+ "scope": " ".join(
+ [
+ "https://www.googleapis.com/auth/meetings.space.created",
+ "https://www.googleapis.com/auth/drive.meet.readonly",
+ "https://www.googleapis.com/auth/userinfo.profile",
+ "https://www.googleapis.com/auth/pubsub",
]
),
- "state": f"token={model.token.key}&url={callback_url}",
+ "state": f"token={model.token.key}&url={callback_url}&academysettings={academy_settings}",
}
assert response.url == f"https://accounts.google.com/o/oauth2/v2/auth?{urlencode(params)}"
diff --git a/breathecode/authenticate/tests/urls/tests_google_webhook.py b/breathecode/authenticate/tests/urls/tests_google_webhook.py
new file mode 100644
index 000000000..1a9effcf6
--- /dev/null
+++ b/breathecode/authenticate/tests/urls/tests_google_webhook.py
@@ -0,0 +1,92 @@
+"""
+Test /v1/auth/subscribe
+"""
+
+import base64
+import hashlib
+import hmac
+import os
+from unittest.mock import MagicMock, call
+
+import capyc.pytest as capy
+import pytest
+from django.urls.base import reverse_lazy
+from django.utils import timezone
+from rest_framework import status
+
+from breathecode.payments.tasks import process_google_webhook
+
+now = timezone.now()
+
+
+@pytest.fixture(autouse=True)
+def setup(monkeypatch: pytest.MonkeyPatch, db):
+ monkeypatch.setenv("GOOGLE_WEBHOOK_SECRET", "123456")
+
+ yield
+
+
+def test_no_data(database: capy.Database, client: capy.Client):
+ url = reverse_lazy("authenticate:google_token", kwargs={"token": "78c9c2defd3be7f3f5b3ddd542ade55a2d35281b"})
+ response = client.get(url, format="json")
+
+ json = response.json()
+ expected = {"detail": "no-callback-url", "status_code": 400}
+
+ assert json == expected
+ assert response.status_code == status.HTTP_400_BAD_REQUEST
+ assert database.list_of("authenticate.GoogleWebhook") == []
+
+
+def test_not_authorized_event(database: capy.Database, client: capy.Client):
+
+ url = reverse_lazy("authenticate:google_webhook")
+ data = {}
+ response = client.post(url, data=data, format="json")
+
+ json = response.json()
+ expected = {"detail": "invalid-webhook-data", "status_code": 400}
+
+ assert json == expected
+ assert response.status_code == status.HTTP_400_BAD_REQUEST
+ assert database.list_of("authenticate.GoogleWebhook") == []
+
+
+def test_invalid_signature(database: capy.Database, client: capy.Client):
+ url = reverse_lazy("authenticate:google_webhook")
+ data = {
+ "data": "invalid-data",
+ "signature": "invalid-signature",
+ }
+ response = client.post(url, data=data, format="json")
+
+ json = response.json()
+ expected = {"detail": "invalid-signature", "status_code": 400}
+
+ assert json == expected
+ assert response.status_code == status.HTTP_400_BAD_REQUEST
+ assert database.list_of("authenticate.GoogleWebhook") == []
+
+
+def test_authorized_event(database: capy.Database, client: capy.Client):
+ message = base64.b64encode(b'{"credential_id": "123456"}').decode("utf-8")
+ signature = hmac.new(
+ key=os.getenv("GOOGLE_WEBHOOK_SECRET").encode("utf-8"), msg=message.encode("utf-8"), digestmod=hashlib.sha256
+ ).hexdigest()
+ url = reverse_lazy("authenticate:google_webhook")
+ data = {
+ "data": message,
+ "signature": signature,
+ }
+ response = client.post(url, data=data, format="json")
+
+ assert response.status_code == status.HTTP_202_ACCEPTED
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ "id": 1,
+ "message": message,
+ "status": "PENDING",
+ "status_text": "",
+ "type": "noSet",
+ },
+ ]
diff --git a/breathecode/authenticate/tests/urls/tests_me_profile_academy_invite.py b/breathecode/authenticate/tests/urls/tests_me_profile_academy_invite.py
new file mode 100644
index 000000000..94359143e
--- /dev/null
+++ b/breathecode/authenticate/tests/urls/tests_me_profile_academy_invite.py
@@ -0,0 +1,116 @@
+import pytest
+from django.urls.base import reverse_lazy
+from rest_framework import status
+
+from breathecode.tests.mixins.breathecode_mixin import Breathecode
+
+
+# enable this file to use the database
+pytestmark = pytest.mark.usefixtures("db")
+
+
+def put_serializer(profile_academy, data={}):
+
+ return {
+ "id": profile_academy.id,
+ "first_name": profile_academy.first_name,
+ "last_name": profile_academy.last_name,
+ "user": {
+ "id": profile_academy.user.id,
+ "email": profile_academy.user.email,
+ "first_name": profile_academy.user.first_name,
+ "last_name": profile_academy.user.last_name,
+ "profile": None,
+ },
+ "academy": {
+ "id": profile_academy.academy.id,
+ "name": profile_academy.academy.name,
+ "slug": profile_academy.academy.slug,
+ },
+ "role": {"id": profile_academy.role.slug, "slug": profile_academy.role.slug, "name": profile_academy.role.name},
+ "created_at": profile_academy.created_at,
+ "email": profile_academy.email,
+ "address": profile_academy.address,
+ "phone": profile_academy.phone,
+ "status": profile_academy.status,
+ **data,
+ }
+
+
+def test_with_no_auth(bc: Breathecode, client):
+
+ url = reverse_lazy("auth:me_profile_academy_invite", kwargs={"profile_academy_id": 1, "new_status": "active"})
+ response = client.put(url)
+ json = response.json()
+
+ expected = {"detail": "Authentication credentials were not provided.", "status_code": status.HTTP_401_UNAUTHORIZED}
+
+ assert json == expected
+ assert response.status_code == status.HTTP_401_UNAUTHORIZED
+
+
+def test_active_profile_academy_not_found(bc: Breathecode, client):
+
+ model = bc.database.create(user=1)
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("auth:me_profile_academy_invite", kwargs={"profile_academy_id": 1, "new_status": "active"})
+
+ response = client.put(url)
+ json = response.json()
+
+ expected = {"detail": "profile-academy-not-found", "status_code": status.HTTP_400_BAD_REQUEST}
+
+ assert json == expected
+ assert response.status_code == status.HTTP_400_BAD_REQUEST
+
+
+def test_update_someone_else_profile_academy(bc: Breathecode, client):
+
+ model = bc.database.create(user=2, profile_academy=1)
+ client.force_authenticate(model.user[1])
+
+ url = reverse_lazy("auth:me_profile_academy_invite", kwargs={"profile_academy_id": 1, "new_status": "active"})
+
+ response = client.put(url)
+ json = response.json()
+
+ expected = {"detail": "profile-academy-not-found", "status_code": status.HTTP_400_BAD_REQUEST}
+
+ assert json == expected
+ assert response.status_code == status.HTTP_400_BAD_REQUEST
+
+
+def test_active_profile_wrong_status(bc: Breathecode, client):
+
+ model = bc.database.create(user=1, profile_academy=1)
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("auth:me_profile_academy_invite", kwargs={"profile_academy_id": 1, "new_status": "sss"})
+
+ response = client.put(url)
+ json = response.json()
+
+ expected = {"detail": "invalid-status", "status_code": status.HTTP_400_BAD_REQUEST}
+
+ assert json == expected
+ assert response.status_code == status.HTTP_400_BAD_REQUEST
+
+
+def test_active_profile_academy(bc: Breathecode, client):
+
+ model = bc.database.create(user=1, profile_academy=1)
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("auth:me_profile_academy_invite", kwargs={"profile_academy_id": 1, "new_status": "active"})
+
+ response = client.put(url)
+ json = response.json()
+
+ expected = put_serializer(
+ model.profile_academy,
+ data={"status": "ACTIVE", "created_at": bc.datetime.to_iso_string(model.profile_academy.created_at)},
+ )
+
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
diff --git a/breathecode/authenticate/tests/urls/tests_member_invite_resend_id.py b/breathecode/authenticate/tests/urls/tests_member_invite_resend_id.py
index 3158d907e..ddc8bf25f 100644
--- a/breathecode/authenticate/tests/urls/tests_member_invite_resend_id.py
+++ b/breathecode/authenticate/tests/urls/tests_member_invite_resend_id.py
@@ -33,6 +33,7 @@ def generate_user_invite(self, model, user_invite, arguments={}):
"logo_url": model.academy.logo_url,
},
"cohort": {
+ "id": model.cohort.id,
"name": model.cohort.name,
"slug": model.cohort.slug,
},
@@ -393,6 +394,7 @@ def test_resend_invite_with_invitation(self):
},
"role": {"id": "potato", "name": "potato", "slug": "potato"},
"cohort": {
+ "id": model["cohort"].id,
"slug": model["cohort"].slug,
"name": model["cohort"].name,
},
diff --git a/breathecode/authenticate/tests/urls/tests_subscribe.py b/breathecode/authenticate/tests/urls/tests_subscribe.py
index 73c1d85f4..a7c1d5993 100644
--- a/breathecode/authenticate/tests/urls/tests_subscribe.py
+++ b/breathecode/authenticate/tests/urls/tests_subscribe.py
@@ -127,6 +127,7 @@ def post_serializer(plans=[], data={}):
"conversion_info": None,
"asset_slug": None,
"event_slug": None,
+ "has_marketing_consent": False,
**data,
}
@@ -151,6 +152,7 @@ def put_serializer(user_invite, cohort=None, syllabus=None, user=None, plans=[],
"asset_slug": None,
"event_slug": None,
"status": user_invite.status,
+ "has_marketing_consent": False,
**data,
}
diff --git a/breathecode/authenticate/urls.py b/breathecode/authenticate/urls.py
index d42812bf0..5e7c1a3c7 100644
--- a/breathecode/authenticate/urls.py
+++ b/breathecode/authenticate/urls.py
@@ -37,6 +37,7 @@
LoginView,
LogoutView,
MeInviteView,
+ MeProfileAcademyInvite,
MemberView,
PasswordResetView,
ProfileInviteMeView,
@@ -117,6 +118,11 @@
path("academy/user/me/invite", MeInviteView.as_view(), name="academy_user_me_invite"),
path("academy/user/me/invite/", MeInviteView.as_view(), name="academy_user_me_invite_status"),
# 🔼🔼🔼
+ path(
+ "user/me/profile_academy//",
+ MeProfileAcademyInvite.as_view(),
+ name="me_profile_academy_invite",
+ ),
path("academy/invite/", AcademyInviteView.as_view(), name="academy_invite_id"),
path("academy/user/invite", AcademyInviteView.as_view(), name="academy_user_invite"),
path("academy/html/invite", render_academy_invite, name="academy_html_invite"),
diff --git a/breathecode/authenticate/views.py b/breathecode/authenticate/views.py
index e8f77973c..54a585145 100644
--- a/breathecode/authenticate/views.py
+++ b/breathecode/authenticate/views.py
@@ -1,5 +1,6 @@
import base64
import hashlib
+import hmac
import logging
import os
import re
@@ -12,6 +13,7 @@
from adrf.decorators import api_view
from adrf.views import APIView
from asgiref.sync import sync_to_async
+from capyc.core.managers import feature
from capyc.rest_framework.exceptions import ValidationException
from circuitbreaker import CircuitBreakerError
from django.conf import settings
@@ -82,6 +84,7 @@
CredentialsSlack,
GithubAcademyUser,
GitpodUser,
+ GoogleWebhook,
Profile,
ProfileAcademy,
Role,
@@ -486,6 +489,41 @@ def put(self, request, new_status=None):
raise ValidationException("Invite ids were not provided", code=400, slug="missing-ids")
+class MeProfileAcademyInvite(APIView, HeaderLimitOffsetPagination, GenerateLookupsMixin):
+
+ def put(self, request, profile_academy_id=None, new_status=None):
+ lang = get_user_language(request)
+ profile_academy = ProfileAcademy.objects.filter(id=profile_academy_id, user=request.user).first()
+
+ if profile_academy is None:
+ raise ValidationException(
+ translation(
+ lang,
+ en="Profile academy was not found",
+ es="No se encontro el Profile Academy",
+ slug="profile-academy-not-found",
+ ),
+ code=400,
+ )
+
+ if new_status.upper() not in ["ACTIVE", "INVITED"]:
+ raise ValidationException(
+ translation(
+ lang,
+ en=f"Invalid invite status {new_status}",
+ es=f"Estatus inválido {new_status}",
+ slug="invalid-status",
+ ),
+ code=400,
+ )
+
+ profile_academy.status = new_status.upper()
+ profile_academy.save()
+
+ serializer = GetProfileAcademySmallSerializer(profile_academy, many=False)
+ return Response(serializer.data)
+
+
class ConfirmEmailView(APIView):
permission_classes = [AllowAny]
@@ -2043,6 +2081,12 @@ def get_google_token(request, token=None):
]
if academy_settings in ["overwrite", "set"]:
+ if feature.is_enabled("authenticate.set_google_credentials", default=True) is False:
+ raise ValidationException(
+ "Setting academy google credentials is not available",
+ slug="set-google-credentials-not-available",
+ )
+
state += f"&academysettings={academy_settings}"
scopes.append("https://www.googleapis.com/auth/pubsub")
@@ -2119,6 +2163,12 @@ async def async_iter(iterable: list):
roles = ["admin", "staff", "country_manager", "academy_token"]
academy_settings = state.get("academysettings", "none")
if academy_settings != "none":
+ if feature.is_enabled("authenticate.set-google-credentials", default=False) is False:
+ raise ValidationException(
+ "Setting academy google credentials is not available",
+ slug="set-google-credentials-not-available",
+ )
+
ids = ProfileAcademy.objects.filter(user=token.user, status="ACTIVE", role__slug__in=roles).values_list(
"academy_id", flat=True
)
@@ -2205,10 +2255,26 @@ async def async_iter(iterable: list):
def receive_google_webhook(request):
logger.info("Received Google webhook")
logger.info(request.data)
- print("Received Google webhook")
- print(request.data)
- return Response({"message": "Webhook received"}, status=200)
+ data = request.data
+ if "data" not in data or "signature" not in data:
+ raise ValidationException("Invalid webhook data", slug="invalid-webhook-data")
+
+ signature = data["signature"]
+ encoded_data = data["data"]
+
+ # Verify the signature
+ secret_key = os.getenv("GOOGLE_WEBHOOK_SECRET", "") # Ensure this is set in your Django settings
+ expected_signature = hmac.new(
+ key=secret_key.encode("utf-8"), msg=encoded_data.encode("utf-8"), digestmod=hashlib.sha256
+ ).hexdigest()
+
+ if hmac.compare_digest(expected_signature, signature) is False:
+ raise ValidationException("Invalid signature", slug="invalid-signature")
+
+ GoogleWebhook.objects.create(message=encoded_data)
+
+ return Response({"message": "ok"}, status=status.HTTP_202_ACCEPTED)
class GithubUserView(APIView, GenerateLookupsMixin):
diff --git a/breathecode/marketing/tests/tasks/tests_persist_single_lead.py b/breathecode/marketing/tests/tasks/tests_persist_single_lead.py
index 9366edfc7..1333b9b75 100644
--- a/breathecode/marketing/tests/tasks/tests_persist_single_lead.py
+++ b/breathecode/marketing/tests/tasks/tests_persist_single_lead.py
@@ -2,21 +2,24 @@
Test /answer/:id
"""
-import requests
-from breathecode.marketing.tasks import persist_single_lead
import logging
-import string, os
-from unittest.mock import patch, MagicMock, call
-
+import os
+import string
from random import choice, choices, randint
+from unittest.mock import MagicMock, call, patch
+
+import requests
+from faker import Faker
+
+from breathecode.marketing.tasks import persist_single_lead
from breathecode.tests.mocks import (
OLD_BREATHECODE_INSTANCES,
apply_old_breathecode_requests_request_mock,
apply_requests_get_mock,
)
from breathecode.tests.mocks.requests import apply_requests_post_mock
+
from ..mixins import MarketingTestCase
-from faker import Faker
MAILGUN_URL = f"https://api.mailgun.net/v3/{os.environ.get('MAILGUN_DOMAIN')}/messages"
@@ -199,9 +202,13 @@ def test_dict_with_bad_location(self):
call("Starting persist_single_lead"),
],
)
- self.assertEqual(
- logging.Logger.error.call_args_list, [call("No academy found with slug they-killed-kenny", exc_info=True)]
- )
+ assert logging.Logger.error.call_args_list == [
+ call(
+ "No CRM vendor information for academy with slug they-killed-kenny. "
+ "Is Active Campaign or Brevo used?",
+ exc_info=True,
+ )
+ ]
self.assertEqual(requests.get.error.call_args_list, [])
self.assertEqual(requests.post.error.call_args_list, [])
@@ -330,7 +337,9 @@ def test_with_bad_tags(self):
str(
[
call(
- "Some tag applied to the contact not found or have tag_type different than [STRONG, SOFT, DISCOVER, OTHER]: Check for the follow tags: they-killed-kenny",
+ "Some tag applied to the contact not found or have tag_type different than "
+ f"[STRONG, SOFT, DISCOVER, OTHER] for this academy {model.academy.name}. "
+ "Check for the follow tags: they-killed-kenny",
exc_info=True,
),
]
@@ -380,7 +389,9 @@ def test_with_tag_type_strong(self):
self.assertEqual(
logging.Logger.error.call_args_list,
[
- call("No automation was specified and the the specified tag has no automation either", exc_info=True),
+ call(
+ "No automation was specified and the specified tag (if any) has no automation either", exc_info=True
+ ),
],
)
@@ -493,7 +504,7 @@ def test_with_automations_slug(self):
[
call("Starting persist_single_lead"),
call("found automations"),
- call([model.automation.acp_id]),
+ call([model.automation]),
call("found tags"),
call({model.tag.slug}),
],
@@ -544,7 +555,7 @@ def test_with_email(self):
[
call("Starting persist_single_lead"),
call("found automations"),
- call([model.automation.acp_id]),
+ call([model.automation]),
call("found tags"),
call({model.tag.slug}),
],
@@ -601,7 +612,7 @@ def test_with_first_name(self):
[
call("Starting persist_single_lead"),
call("found automations"),
- call([model.automation.acp_id]),
+ call([model.automation]),
call("found tags"),
call({model.tag.slug}),
],
@@ -659,7 +670,7 @@ def test_with_last_name(self):
[
call("Starting persist_single_lead"),
call("found automations"),
- call([model.automation.acp_id]),
+ call([model.automation]),
call("found tags"),
call({model.tag.slug}),
],
@@ -718,7 +729,7 @@ def test_with_phone(self):
[
call("Starting persist_single_lead"),
call("found automations"),
- call([model.automation.acp_id]),
+ call([model.automation]),
call("found tags"),
call({model.tag.slug}),
],
@@ -778,7 +789,7 @@ def test_with_id(self):
[
call("Starting persist_single_lead"),
call("found automations"),
- call([model.automation.acp_id]),
+ call([model.automation]),
call("found tags"),
call({model.tag.slug}),
],
@@ -842,7 +853,7 @@ def test_with_form_entry_with_data_invalid(self):
[
call("Starting persist_single_lead"),
call("found automations"),
- call([model.automation.acp_id]),
+ call([model.automation]),
call("found tags"),
call({model.tag.slug}),
],
@@ -925,7 +936,7 @@ def test_with_form_entry_with_data_invalid(self):
# self.assertEqual(logging.Logger.info.call_args_list, [
# call('Starting persist_single_lead'),
# call('found automations'),
- # call([model.automation.acp_id]),
+ # call([model.automation]),
# call('found tags'),
# call({model.tag.slug}),
# call('ready to send contact with following details: ' + str({
@@ -1058,7 +1069,6 @@ def test_with_form_entry_with_data__two_form_entries_found(self):
fix_db_field(self.bc.format.to_dict(model.form_entry[0])),
{
**db,
- "ac_contact_id": "1",
"ac_expected_cohort": None,
"latitude": form.latitude,
"longitude": form.longitude,
@@ -1074,49 +1084,14 @@ def test_with_form_entry_with_data__two_form_entries_found(self):
[
call("Starting persist_single_lead"),
call("found automations"),
- call([model.automation.acp_id]),
+ call([model.automation]),
call("found tags"),
call({model.tag.slug}),
- call(
- "ready to send contact with following details: "
- + str(
- {
- "email": "pokemon@potato.io",
- "first_name": "Konan",
- "last_name": "Amegakure",
- "phone": "123123123",
- "field[18,0]": model.academy.slug,
- "field[2,0]": "asdasd",
- }
- )
- ),
- call("FormEntry is considered a duplicate, no automations or tags added"),
+ call("FormEntry is considered a duplicate, not sent to CRM and no automations or tags added"),
],
)
self.assertEqual(logging.Logger.error.call_args_list, [])
self.assertEqual(requests.get.call_args_list, [])
self.assertEqual(requests.post.call_args_list, [])
- self.assertEqual(
- requests.request.call_args_list,
- [
- call(
- "POST",
- "https://old.hardcoded.breathecode.url/admin/api.php",
- params=[
- ("api_action", "contact_sync"),
- ("api_key", model["active_campaign_academy"].ac_key),
- ("api_output", "json"),
- ],
- data={
- "email": "pokemon@potato.io",
- "first_name": "Konan",
- "last_name": "Amegakure",
- "phone": "123123123",
- "field[18,0]": model["academy"].slug,
- "field[2,0]": "asdasd",
- },
- timeout=3,
- ),
- ],
- )
+ self.assertEqual(requests.request.call_args_list, [])
diff --git a/breathecode/marketing/tests/urls/tests_active_campaign.py b/breathecode/marketing/tests/urls/tests_active_campaign.py
index b218210da..9597e6c6e 100644
--- a/breathecode/marketing/tests/urls/tests_active_campaign.py
+++ b/breathecode/marketing/tests/urls/tests_active_campaign.py
@@ -4,7 +4,9 @@
from django.urls.base import reverse_lazy
from rest_framework import status
+
from breathecode.services import datetime_to_iso_format
+
from ..mixins import MarketingTestCase
@@ -189,6 +191,7 @@ def test_post_active_campaign(self):
expected = {
"id": 1,
+ "crm_vendor": "ACTIVE_CAMPAIGN",
"event_attendancy_automation": None,
"last_interaction_at": None,
"sync_message": None,
diff --git a/breathecode/marketing/tests/urls/tests_active_campaign_id.py b/breathecode/marketing/tests/urls/tests_active_campaign_id.py
index 19a6605d3..db0ec6931 100644
--- a/breathecode/marketing/tests/urls/tests_active_campaign_id.py
+++ b/breathecode/marketing/tests/urls/tests_active_campaign_id.py
@@ -4,7 +4,9 @@
from django.urls.base import reverse_lazy
from rest_framework import status
+
from breathecode.services import datetime_to_iso_format
+
from ..mixins import MarketingTestCase
@@ -130,6 +132,7 @@ def test_put_active_campaign(self):
expected = {
"id": 1,
+ "crm_vendor": "ACTIVE_CAMPAIGN",
"event_attendancy_automation": None,
"last_interaction_at": None,
"sync_message": None,
diff --git a/breathecode/marketing/tests/urls/tests_lead.py b/breathecode/marketing/tests/urls/tests_lead.py
index 07d2721cf..bec08e4db 100644
--- a/breathecode/marketing/tests/urls/tests_lead.py
+++ b/breathecode/marketing/tests/urls/tests_lead.py
@@ -2,16 +2,17 @@
Test /academy/lead
"""
-from datetime import datetime
-from decimal import Decimal
import re
import string
+from datetime import datetime
+from decimal import Decimal
from random import choice, choices, randint
from unittest.mock import MagicMock, PropertyMock
-from django.urls.base import reverse_lazy
+
import pytest
-from rest_framework import status
+from django.urls.base import reverse_lazy
from faker import Faker
+from rest_framework import status
from rest_framework.test import APIClient
from breathecode.tests.mixins.breathecode_mixin.breathecode import Breathecode
@@ -317,7 +318,8 @@ def test_lead__with__data(bc: Breathecode, client: APIClient):
"latitude": Decimal(data["latitude"]),
"longitude": Decimal(data["longitude"]),
"storage_status": "ERROR",
- "storage_status_text": f"No academy found with slug {data['location']}",
+ "storage_status_text": f'No CRM vendor information for academy with slug {data["location"]}. Is Active '
+ "Campaign or Brevo used?",
"attribution_id": "75b36c508866d18732305da14fe9a0",
}
)
@@ -377,7 +379,8 @@ def test_passing_slug_of_academy_or_academy_alias(
"latitude": Decimal(data["latitude"]),
"longitude": Decimal(data["longitude"]),
"storage_status": "ERROR",
- "storage_status_text": "No academy found with slug midgard",
+ "storage_status_text": "No CRM vendor information for academy with slug midgard. Is Active "
+ "Campaign or Brevo used?",
"attribution_id": "75b36c508866d18732305da14fe9a0",
}
)
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/media/utils.py b/breathecode/media/utils.py
index c640978c3..fad5387c1 100644
--- a/breathecode/media/utils.py
+++ b/breathecode/media/utils.py
@@ -327,6 +327,83 @@ async def validate_meta(self, schema: Schema, meta: dict[str, Any]):
for key in to_delete:
del meta[key]
+ async def upload_file(self, file_name: str, mime: dict[str, Any], academy: Academy, file: Optional[File] = None):
+ request = self.request
+ total_chunks = self.total_chunks
+
+ chunks = (
+ Chunk.objects.filter(
+ academy=academy,
+ user=request.user,
+ name=file_name,
+ operation_type=self.op_type,
+ total_chunks=total_chunks,
+ mime=mime,
+ )
+ .prefetch_related("user", "academy")
+ .order_by("chunk_index")
+ )
+
+ if (n := await chunks.acount()) < total_chunks:
+ missing_chunks = total_chunks - n
+ raise ValidationException(
+ translation(
+ self.lang,
+ en=f"{missing_chunks}/{total_chunks} chunks are missing",
+ es=f"{missing_chunks}/{total_chunks} chunks están faltando",
+ slug="some-chunks-not-found",
+ ),
+ code=400,
+ )
+ res = BytesIO()
+
+ storage = Storage()
+
+ # separate it to a cloud function to avoid memory issues
+ async for chunk in chunks:
+ f = BytesIO()
+
+ uploaded_chunk = storage.file(chunk.bucket, chunk.file_name)
+ uploaded_chunk.download(f)
+
+ res.write(f.getvalue())
+
+ await schedule_deletion.adelay(instance=chunk, sender=chunk.__class__)
+
+ bucket = os.getenv("UPLOAD_BUCKET", "upload-bucket")
+ size = res.tell()
+ res.seek(0)
+
+ hash = hashlib.md5(res.getvalue()).hexdigest()
+ res.seek(0)
+
+ new_file = storage.file(bucket, hash)
+ new_file.upload(res, content_type=mime)
+
+ if file is None:
+ file = await File.objects.acreate(
+ academy=academy,
+ user=request.user,
+ name=file_name,
+ mime=mime,
+ operation_type=self.op_type,
+ size=size,
+ hash=hash,
+ bucket=bucket,
+ )
+ else:
+ file.academy = academy
+ file.user = request.user
+ file.name = file_name
+ file.mime = mime
+ file.operation_type = self.op_type
+ file.size = size
+ file.hash = hash
+ file.bucket = bucket
+ await file.asave()
+
+ return file
+
async def upload(self, academy_id: Optional[int] = None):
from breathecode.media.tasks import process_file
from breathecode.notify.models import Notification
@@ -334,7 +411,6 @@ async def upload(self, academy_id: Optional[int] = None):
await super().upload(academy_id, format="json")
request = self.request
- total_chunks = self.total_chunks
file_name = request.data.get("filename")
mime = request.data.get("mime")
@@ -403,7 +479,7 @@ async def upload(self, academy_id: Optional[int] = None):
mime=mime,
operation_type=self.op_type,
).afirst()
- if file:
+ if file and file.status in [File.Status.TRANSFERRING]:
raise ValidationException(
translation(
self.lang,
@@ -414,67 +490,10 @@ async def upload(self, academy_id: Optional[int] = None):
code=400,
)
- chunks = (
- Chunk.objects.filter(
- academy=academy,
- user=request.user,
- name=file_name,
- operation_type=self.op_type,
- total_chunks=total_chunks,
- mime=mime,
- )
- .prefetch_related("user", "academy")
- .order_by("chunk_index")
- )
-
- if (n := await chunks.acount()) < total_chunks:
- missing_chunks = total_chunks - n
- raise ValidationException(
- translation(
- self.lang,
- en=f"{missing_chunks}/{total_chunks} chunks are missing",
- es=f"{missing_chunks}/{total_chunks} chunks están faltando",
- slug="some-chunks-not-found",
- ),
- code=400,
- )
- res = BytesIO()
-
- storage = Storage()
-
- # separate it to a cloud function to avoid memory issues
- async for chunk in chunks:
- f = BytesIO()
-
- uploaded_chunk = storage.file(chunk.bucket, chunk.file_name)
- uploaded_chunk.download(f)
-
- res.write(f.getvalue())
-
- await schedule_deletion.adelay(instance=chunk, sender=chunk.__class__)
-
- bucket = os.getenv("UPLOAD_BUCKET", "upload-bucket")
- size = res.tell()
- res.seek(0)
-
- hash = hashlib.md5(res.getvalue()).hexdigest()
- res.seek(0)
-
- new_file = storage.file(bucket, hash)
- new_file.upload(res, content_type=mime)
+ file = await self.upload_file(file_name, mime, academy)
notification_id = None
- file = await File.objects.acreate(
- academy=academy,
- user=request.user,
- name=file_name,
- mime=mime,
- operation_type=self.op_type,
- size=size,
- hash=hash,
- bucket=bucket,
- )
if MEDIA_SETTINGS[self.op_type]["process"]:
file.status = File.Status.TRANSFERRING
await file.asave()
diff --git a/breathecode/mentorship/actions.py b/breathecode/mentorship/actions.py
index 19d0cf689..63ee0fb27 100644
--- a/breathecode/mentorship/actions.py
+++ b/breathecode/mentorship/actions.py
@@ -484,7 +484,6 @@ def create_room_on_google_meet(session: MentorshipSession, mentee: User) -> None
session.online_meeting_url = space.meeting_uri
session.name = s.name
session.mentee = mentee
- session.meta = {}
session.save()
diff --git a/breathecode/mentorship/management/commands/mentorship.py b/breathecode/mentorship/management/commands/mentorship.py
index 2d0dc18b6..b7cebd546 100644
--- a/breathecode/mentorship/management/commands/mentorship.py
+++ b/breathecode/mentorship/management/commands/mentorship.py
@@ -2,22 +2,10 @@
# import urllib.parse
# from datetime import timedelta
-# from asgiref.sync import async_to_sync
-
-# from django.core.cache import cache
from django.core.management.base import BaseCommand
-# from breathecode.authenticate.models import AcademyAuthSettings, CredentialsGoogle
from breathecode.mentorship import tasks
-from breathecode.mentorship.models import MentorProfile # , MentorshipSession
-
-# from breathecode.services.google_apps.google_apps import GoogleApps
-# from breathecode.services.google_meet.google_meet import GoogleMeet
-
-# from django.db.models import Q
-# from django.utils import timezone
-# from google.apps import meet_v2
-# from google.apps.meet_v2.types import Space, SpaceConfig
+from breathecode.mentorship.models import MentorProfile
class Command(BaseCommand):
@@ -25,7 +13,6 @@ class Command(BaseCommand):
def handle(self, *args, **options):
self.check_mentorship_profiles()
- # self.aaaaa()
def check_mentorship_profiles(self):
self.stdout.write(self.style.SUCCESS("Checking mentorship profiles"))
@@ -35,176 +22,3 @@ def check_mentorship_profiles(self):
tasks.check_mentorship_profile.delay(mentor_profile.id)
self.stdout.write(self.style.SUCCESS(f"Scheduled {len(mentor_profiles)} mentorship profiles"))
-
- # @async_to_sync
- # async def aaaaa(self):
-
- # c = GoogleApps(id_token, refresh1)
- # print(await c.get_user_info())
- # # return
- # client = GoogleMeet(token, refresh2)
-
- # # sessions = MentorshipSession.objects.filter(
- # # Q(online_meeting_url__startswith="https://meet.google.com/"),
- # # service__video_provider="GOOGLE_MEET",
- # # meta__isnull=False,
- # # mentor__isnull=False,
- # # mentor__academy__isnull=False,
- # # status__in=["STARTED", "PENDING"],
- # # started_at__isnull=False,
- # # ends_at__lte=timezone.now(),
- # # )
-
- # sessions = [MentorshipSession(online_meeting_url="https://meet.google.com/ydm-qixs-aya")]
-
- # # async for session in sessions:
- # for session in sessions:
- # # settings = AcademyAuthSettings.objects.filter(
- # # academy_id=session.mentor.academy.id, google_cloud_owner__isnull=False
- # # ).first()
- # # if not settings:
- # # self.stderr.write(
- # # self.style.ERROR(f"Academy {session.mentor.academy.id} has no google cloud owner, skipped")
- # # )
- # # continue
-
- # # credentials = CredentialsGoogle.objects.filter(user=settings.google_cloud_owner).first()
- # # if not credentials:
- # # self.stderr.write(
- # # self.style.ERROR(f"Academy {session.mentor.academy.id} has no google cloud credentials, skipped")
- # # )
- # # continue
-
- # # client = GoogleMeet(credentials.token, credentials.refresh_token)
-
- # # meeting_code: str = session.meta.get("meeting_code")
- # # conference_record: str = session.meta.get("conference_record")
-
- # # pylance error
- # if session.online_meeting_url is None:
- # continue
-
- # meeting_code = session.online_meeting_url.split("/")[-1].split("?")[0]
-
- # # if not meeting_code or not conference_record:
- # # continue
-
- # # instances of a meeting, maybe differents meetings within the same space?
- # time_expended = {}
- # resources = {
- # "transcripts": [],
- # "recordings": [],
- # "members": [],
- # }
- # phone_time = {}
- # is_conference_ongoing = False
- # conference_records = await client.alist_conference_records(filter=f'space.meeting_code="{meeting_code}"')
- # async for record in conference_records:
- # if not record.end_time:
- # is_conference_ongoing = True
- # break
-
- # participants = await client.alist_participants(parent=record.name)
- # async for participant in participants:
- # if participant.signedin_user.user and participant.signedin_user.user not in time_expended:
- # time_expended[participant.signedin_user.user] = {
- # "time_expended": timedelta(0),
- # "display_name": participant.signedin_user.display_name,
- # }
-
- # if participant.phone_user.display_name and participant.phone_user.display_name not in time_expended:
- # phone_time[participant.phone_user.display_name] = {
- # "time_expended": timedelta(0),
- # "display_name": participant.phone_user.display_name,
- # }
-
- # time = timedelta(0)
-
- # # each time that the participant join to the meeting
- # participant_sessions = await client.alist_participant_sessions(parent=participant.name)
- # async for participant_session in participant_sessions:
- # time += participant_session.end_time - participant_session.start_time
-
- # if participant.signedin_user.user:
- # time_expended[participant.signedin_user.user]["time_expended"] += time
-
- # elif participant.phone_user.display_name:
- # phone_time[participant.phone_user.display_name]["time_expended"] += time
-
- # recordings = await client.alist_recordings(parent=record.name)
-
- # async for recording in recordings:
- # resources["recordings"].append(
- # {
- # "file": recording.drive_destination.file,
- # "export_uri": recording.drive_destination.export_uri,
- # "start_time": recording.start_time,
- # "end_time": recording.end_time,
- # }
- # )
-
- # transcripts = await client.alist_transcripts(parent=record.name)
- # async for transcript in transcripts:
- # resources["transcripts"].append(
- # {
- # "export_uri": transcript.docs_destination.export_uri,
- # "document": transcript.docs_destination.document,
- # "start_time": transcript.start_time,
- # "end_time": transcript.end_time,
- # }
- # )
-
- # if is_conference_ongoing:
- # continue
-
- # # kick everyone out of the meeting
- # # try:
- # # await client.aend_active_conference(name=record.space)
- # # except Exception as e:
- # # # this always emit an exception
-
- # # remove the access to them
- # # s = Space(
- # # name=record.space,
- # # config=SpaceConfig(access_type=SpaceConfig.AccessType.RESTRICTED),
- # # )
- # # space = client.update_space(space=s)
-
- # # mentor = None
- # # for key, value in time_expended.items():
- # # if value["display_name"] == session.mentor.name:
- # # mentor = key
-
- # # elif value["display_name"] in [
- # # session.mentor.user.first_name + " " + session.mentor.user.last_name,
- # # session.mentor.user.last_name + " " + session.mentor.user.first_name,
- # # session.mentor.user.first_name,
- # # session.mentor.user.last_name,
- # # ]:
- # # mentor = key
-
- # # if not mentor and time_expended:
- # # mentor = max(time_expended, key=lambda k: time_expended[k]["time_expended"])
-
- # # if mentor:
- # # mentor = time_expended[mentor]
- # # del time_expended[mentor]
-
- # # mentee = max(time_expended, key=lambda k: time_expended[k]["time_expended"]) if time_expended else None
- # # if mentee:
- # # mentee = time_expended[mentee]
- # # del time_expended[mentee]
-
- # # session.mentor_joined_at
- # # session.mentor_left_at = session.mentor_joined_at + mentor["time_expended"]
- # # session.mentee_left_at = session.started_at + mentee["time_expended"]
- # prev_meta = session.meta or {}
- # session.meta = {**prev_meta, **resources}
- # print("session.meta")
- # print(session.meta)
- # print("time_expended")
- # print(time_expended)
- # print("phone_time")
- # print(phone_time)
-
- # # await session.asave()
diff --git a/breathecode/mentorship/migrations/0033_remove_mentorshipsession_meta.py b/breathecode/mentorship/migrations/0033_remove_mentorshipsession_meta.py
new file mode 100644
index 000000000..3068804e0
--- /dev/null
+++ b/breathecode/mentorship/migrations/0033_remove_mentorshipsession_meta.py
@@ -0,0 +1,17 @@
+# Generated by Django 5.1.2 on 2024-10-22 19:28
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("mentorship", "0032_mentorshipsession_meta_and_more"),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name="mentorshipsession",
+ name="meta",
+ ),
+ ]
diff --git a/breathecode/mentorship/models.py b/breathecode/mentorship/models.py
index a82bf9834..6b28351f5 100644
--- a/breathecode/mentorship/models.py
+++ b/breathecode/mentorship/models.py
@@ -456,7 +456,6 @@ def __init__(self, *args, **kwargs):
)
questions_and_answers = models.JSONField(null=True, blank=True, default=None)
- meta = models.JSONField(null=True, blank=True, default=None, help_text="Meta information related to meeting vendor")
created_at = models.DateTimeField(auto_now_add=True, editable=False)
updated_at = models.DateTimeField(auto_now=True, editable=False)
diff --git a/breathecode/mentorship/tests/actions/tests_generate_mentor_bills.py b/breathecode/mentorship/tests/actions/tests_generate_mentor_bills.py
index ff6c93688..1bd97ef69 100644
--- a/breathecode/mentorship/tests/actions/tests_generate_mentor_bills.py
+++ b/breathecode/mentorship/tests/actions/tests_generate_mentor_bills.py
@@ -61,7 +61,6 @@ def mentorship_session_field(data={}):
"mentee_left_at": None,
"suggested_accounted_duration": None,
"questions_and_answers": None,
- "meta": None,
**data,
}
diff --git a/breathecode/mentorship/tests/actions/tests_get_pending_sessions_or_create.py b/breathecode/mentorship/tests/actions/tests_get_pending_sessions_or_create.py
index c7d44311f..8aa9c045a 100644
--- a/breathecode/mentorship/tests/actions/tests_get_pending_sessions_or_create.py
+++ b/breathecode/mentorship/tests/actions/tests_get_pending_sessions_or_create.py
@@ -9,6 +9,7 @@
from django.utils import timezone
from breathecode.authenticate.models import Token
+from breathecode.services.google_apps.google_apps import GoogleApps
from breathecode.tests.mocks.requests import REQUESTS_PATH, apply_requests_request_mock
from ... import actions
@@ -51,7 +52,6 @@ def format_mentorship_session_attrs(attrs={}):
"suggested_accounted_duration": None,
"summary": None,
"questions_and_answers": None,
- "meta": None,
**attrs,
}
@@ -60,6 +60,7 @@ class GoogleMeetMock:
def __init__(self, meeting_uri="https://meet.google.com/fake"):
self.meeting_uri = meeting_uri
+ self.name = "asdasd"
def get_title(pk, service, mentor) -> str:
@@ -114,6 +115,11 @@ def test_create_session_mentor_first_no_previous_nothing__daily(self):
__init__=MagicMock(return_value=None),
create_space=MagicMock(return_value=GoogleMeetMock(meeting_uri="https://meet.google.com/fake")),
)
+ @patch.multiple(
+ "breathecode.services.google_apps.google_apps.GoogleApps",
+ __init__=MagicMock(return_value=None),
+ subscribe_meet_webhook=MagicMock(),
+ )
@patch("breathecode.mentorship.signals.mentorship_session_status.send", MagicMock())
@patch("django.utils.timezone.now", MagicMock(return_value=ENDS_AT))
@patch("breathecode.mentorship.actions.close_older_sessions", MagicMock())
@@ -137,12 +143,19 @@ def test_no_auth_settings__google_meet(self):
self.assertEqual(self.bc.database.list_of("mentorship.MentorshipSession"), [])
self.assertEqual(actions.close_older_sessions.call_args_list, [call()])
+ assert GoogleApps.__init__.call_args_list == []
+ assert GoogleApps.subscribe_meet_webhook.call_args_list == []
@patch.multiple(
"breathecode.services.google_meet.google_meet.GoogleMeet",
__init__=MagicMock(return_value=None),
create_space=MagicMock(return_value=GoogleMeetMock(meeting_uri="https://meet.google.com/fake")),
)
+ @patch.multiple(
+ "breathecode.services.google_apps.google_apps.GoogleApps",
+ __init__=MagicMock(return_value=None),
+ subscribe_meet_webhook=MagicMock(),
+ )
@patch("breathecode.mentorship.signals.mentorship_session_status.send", MagicMock())
@patch("django.utils.timezone.now", MagicMock(return_value=ENDS_AT))
@patch("breathecode.mentorship.actions.close_older_sessions", MagicMock())
@@ -167,12 +180,19 @@ def test_no_google_cloud_owner__google_meet(self):
self.assertEqual(self.bc.database.list_of("mentorship.MentorshipSession"), [])
self.assertEqual(actions.close_older_sessions.call_args_list, [call()])
+ assert GoogleApps.__init__.call_args_list == []
+ assert GoogleApps.subscribe_meet_webhook.call_args_list == []
@patch.multiple(
"breathecode.services.google_meet.google_meet.GoogleMeet",
__init__=MagicMock(return_value=None),
create_space=MagicMock(return_value=GoogleMeetMock(meeting_uri="https://meet.google.com/fake")),
)
+ @patch.multiple(
+ "breathecode.services.google_apps.google_apps.GoogleApps",
+ __init__=MagicMock(return_value=None),
+ subscribe_meet_webhook=MagicMock(),
+ )
@patch("breathecode.mentorship.signals.mentorship_session_status.send", MagicMock())
@patch("django.utils.timezone.now", MagicMock(return_value=ENDS_AT))
@patch("breathecode.mentorship.actions.close_older_sessions", MagicMock())
@@ -214,13 +234,28 @@ def test_create_session_mentor_first_no_previous_nothing__google_meet(self):
# "name": get_title(1, models.mentorship_service, models.mentor_profile),
"online_meeting_url": "https://meet.google.com/fake",
"ends_at": ENDS_AT + timedelta(seconds=3600),
- "meta": {},
}
),
],
)
self.assertEqual(actions.close_older_sessions.call_args_list, [call()])
+ assert GoogleApps.__init__.call_args_list == [
+ call(id_token=models.credentials_google.id_token, refresh_token=models.credentials_google.refresh_token)
+ ]
+ assert GoogleApps.subscribe_meet_webhook.call_args_list == [
+ call(
+ name="asdasd",
+ event_types=[
+ "google.workspace.meet.conference.v2.started",
+ "google.workspace.meet.conference.v2.ended",
+ "google.workspace.meet.participant.v2.joined",
+ "google.workspace.meet.participant.v2.left",
+ "google.workspace.meet.recording.v2.fileGenerated",
+ "google.workspace.meet.transcript.v2.fileGenerated",
+ ],
+ )
+ ]
@patch(REQUESTS_PATH["request"], apply_requests_request_mock([(200, daily_url, daily_payload)]))
@patch("breathecode.mentorship.signals.mentorship_session_status.send_robust", MagicMock())
@@ -403,6 +438,11 @@ def test_create_session_mentee_first_no_previous_nothing__daily(self):
__init__=MagicMock(return_value=None),
create_space=MagicMock(return_value=GoogleMeetMock(meeting_uri="https://meet.google.com/fake")),
)
+ @patch.multiple(
+ "breathecode.services.google_apps.google_apps.GoogleApps",
+ __init__=MagicMock(return_value=None),
+ subscribe_meet_webhook=MagicMock(),
+ )
@patch("breathecode.mentorship.signals.mentorship_session_status.send", MagicMock())
@patch("django.utils.timezone.now", MagicMock(return_value=ENDS_AT))
@patch("breathecode.mentorship.actions.close_older_sessions", MagicMock())
@@ -444,13 +484,28 @@ def test_create_session_mentee_first_no_previous_nothing__google_meet(self):
"name": "",
# "name": get_title(1, models.mentorship_service, models.mentor_profile),
"online_meeting_url": "https://meet.google.com/fake",
- "meta": {},
}
),
],
)
self.assertEqual(actions.close_older_sessions.call_args_list, [call()])
+ assert GoogleApps.__init__.call_args_list == [
+ call(id_token=models.credentials_google.id_token, refresh_token=models.credentials_google.refresh_token)
+ ]
+ assert GoogleApps.subscribe_meet_webhook.call_args_list == [
+ call(
+ name="asdasd",
+ event_types=[
+ "google.workspace.meet.conference.v2.started",
+ "google.workspace.meet.conference.v2.ended",
+ "google.workspace.meet.participant.v2.joined",
+ "google.workspace.meet.participant.v2.left",
+ "google.workspace.meet.recording.v2.fileGenerated",
+ "google.workspace.meet.transcript.v2.fileGenerated",
+ ],
+ )
+ ]
@patch(REQUESTS_PATH["request"], apply_requests_request_mock([(200, daily_url, daily_payload)]))
@patch("breathecode.mentorship.signals.mentorship_session_status.send_robust", MagicMock())
@@ -577,6 +632,11 @@ def test_create_session_mentee_first_with_another_mentee__daily(self):
__init__=MagicMock(return_value=None),
create_space=MagicMock(return_value=GoogleMeetMock(meeting_uri="https://meet.google.com/fake")),
)
+ @patch.multiple(
+ "breathecode.services.google_apps.google_apps.GoogleApps",
+ __init__=MagicMock(return_value=None),
+ subscribe_meet_webhook=MagicMock(),
+ )
@patch("breathecode.mentorship.signals.mentorship_session_status.send", MagicMock())
@patch("django.utils.timezone.now", MagicMock(return_value=ENDS_AT))
@patch("breathecode.mentorship.actions.close_older_sessions", MagicMock())
@@ -648,13 +708,28 @@ def test_create_session_mentee_first_with_another_mentee__google_meet(self):
# "name": get_title(3, models.mentorship_service, models.mentor_profile),
"online_meeting_url": "https://meet.google.com/fake",
"service_id": 2,
- "meta": {},
}
),
],
)
self.assertEqual(actions.close_older_sessions.call_args_list, [call()])
+ assert GoogleApps.__init__.call_args_list == [
+ call(id_token=models.credentials_google.id_token, refresh_token=models.credentials_google.refresh_token)
+ ]
+ assert GoogleApps.subscribe_meet_webhook.call_args_list == [
+ call(
+ name="asdasd",
+ event_types=[
+ "google.workspace.meet.conference.v2.started",
+ "google.workspace.meet.conference.v2.ended",
+ "google.workspace.meet.participant.v2.joined",
+ "google.workspace.meet.participant.v2.left",
+ "google.workspace.meet.recording.v2.fileGenerated",
+ "google.workspace.meet.transcript.v2.fileGenerated",
+ ],
+ )
+ ]
@patch(REQUESTS_PATH["request"], apply_requests_request_mock([(200, daily_url, daily_payload)]))
@patch("breathecode.mentorship.signals.mentorship_session_status.send_robust", MagicMock())
diff --git a/breathecode/mentorship/tests/urls/tests_academy_session.py b/breathecode/mentorship/tests/urls/tests_academy_session.py
index a8329ea6a..d1a2027d4 100644
--- a/breathecode/mentorship/tests/urls/tests_academy_session.py
+++ b/breathecode/mentorship/tests/urls/tests_academy_session.py
@@ -152,7 +152,6 @@ def put_serializer(data={}):
"status": "PENDING",
"summary": None,
"questions_and_answers": None,
- "meta": None,
**data,
}
@@ -186,7 +185,6 @@ def mentorship_session_columns(data={}):
"suggested_accounted_duration": None,
"summary": None,
"questions_and_answers": None,
- "meta": None,
**data,
}
diff --git a/breathecode/mentorship/tests/urls/tests_academy_session_id.py b/breathecode/mentorship/tests/urls/tests_academy_session_id.py
index 36d0fcfb0..c264ee741 100644
--- a/breathecode/mentorship/tests/urls/tests_academy_session_id.py
+++ b/breathecode/mentorship/tests/urls/tests_academy_session_id.py
@@ -99,7 +99,6 @@ def put_serializer(data={}):
"status": "PENDING",
"summary": None,
"questions_and_answers": None,
- "meta": None,
**data,
}
diff --git a/breathecode/mentorship/views.py b/breathecode/mentorship/views.py
index 56672bf49..5f6ea96df 100644
--- a/breathecode/mentorship/views.py
+++ b/breathecode/mentorship/views.py
@@ -439,15 +439,7 @@ def render_start_session(self, session: MentorshipSession):
if "heading" not in obj:
obj["heading"] = session.mentor.academy.name
- if session.online_meeting_url and "meet.google.com" in session.online_meeting_url:
- if self.is_mentee and session.started_at is None:
- session.started_at = self.now
- session.save()
-
- elif session.mentor_joined_at is None:
- session.mentor_joined_at = self.now
- session.save()
-
+ if session.service.video_provider == "GOOGLE_MEET" and session.online_meeting_url:
return HttpResponseRedirect(session.online_meeting_url)
return render(
@@ -656,10 +648,13 @@ def __call__(self):
# save progress so far, we are about to render the session below
session.save()
- if session.mentee is None:
+ is_google_meet = session.service.video_provider == "GOOGLE_MEET"
+ if is_google_meet is False and session.mentee is None:
return render_session(self.request, session, token=self.token)
- if self.query_params["redirect"] is not None or self.token.user.id == session.mentor.user.id:
+ if is_google_meet is False and (
+ self.query_params["redirect"] is not None or self.token.user.id == session.mentor.user.id
+ ):
return render_session(self.request, session, token=self.token)
return self.render_start_session(session)
diff --git a/breathecode/notify/models.py b/breathecode/notify/models.py
index 00fab79f9..5ca19946e 100644
--- a/breathecode/notify/models.py
+++ b/breathecode/notify/models.py
@@ -1,3 +1,4 @@
+import traceback
from collections import OrderedDict
from typing import Literal, Optional
@@ -265,7 +266,7 @@ def clean(self):
raise forms.ValidationError("Either user or academy must be provided")
if self.status == self.Status.DONE:
- self.sent_at = timezone.now()
+ self.done_at = timezone.now()
if self.status == self.Status.PENDING:
self.sent_at = None
@@ -293,7 +294,10 @@ def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.status != self._status and self.status == self.Status.DONE:
- self._send_notification()
+ try:
+ self._send_notification()
+ except Exception:
+ traceback.print_exc()
self._status = self.status
diff --git a/breathecode/notify/serializers.py b/breathecode/notify/serializers.py
index 675c5fa10..ebb7f814c 100644
--- a/breathecode/notify/serializers.py
+++ b/breathecode/notify/serializers.py
@@ -1,10 +1,10 @@
+from capyc.rest_framework.exceptions import ValidationException
from django.conf import settings
from rest_framework import serializers
from breathecode.admissions.models import Academy
-from breathecode.utils import serpy
-from capyc.rest_framework.exceptions import ValidationException
from breathecode.authenticate.serializers import GetSmallAcademySerializer
+from breathecode.utils import serpy
from .models import Hook
@@ -53,3 +53,15 @@ class SlackTeamSerializer(serpy.Serializer):
created_at = serpy.Field()
sync_status = serpy.Field()
sync_message = serpy.Field()
+
+
+class NotificationSerializer(serpy.Serializer):
+ id = serpy.Field()
+ message = serpy.Field()
+ status = serpy.Field()
+ type = serpy.Field()
+ academy = GetSmallAcademySerializer(required=False)
+ meta = serpy.Field()
+ sent_at = serpy.Field()
+ done_at = serpy.Field()
+ seen_at = serpy.Field()
diff --git a/breathecode/notify/tests/urls/tests_me_notification.py b/breathecode/notify/tests/urls/tests_me_notification.py
new file mode 100644
index 000000000..3aa5dc54e
--- /dev/null
+++ b/breathecode/notify/tests/urls/tests_me_notification.py
@@ -0,0 +1,328 @@
+from datetime import datetime, timedelta
+
+import capyc.pytest as capy
+import pytest
+from django.urls.base import reverse_lazy
+from linked_services.django.actions import reset_app_cache
+from rest_framework import status
+from rest_framework.test import APIClient
+
+
+@pytest.fixture(autouse=True)
+def setup(db):
+ reset_app_cache()
+ yield
+
+
+def academy_serializer(academy):
+ return {
+ "id": academy.id,
+ "name": academy.name,
+ "slug": academy.slug,
+ }
+
+
+def get_serializer(notification, academy=None, data={}):
+ academy_data = None
+ if academy:
+ academy_data = academy_serializer(academy)
+
+ return {
+ "academy": academy_data,
+ "done_at": notification.done_at,
+ "id": notification.id,
+ "message": notification.message,
+ "meta": notification.meta,
+ "seen_at": notification.seen_at,
+ "sent_at": notification.sent_at,
+ "status": notification.status,
+ "type": notification.type,
+ **data,
+ }
+
+
+def test_no_auth(database: capy.Database, client: APIClient):
+ url = reverse_lazy("notify:me_notification")
+ response = client.get(url)
+
+ json = response.json()
+ expected = {"detail": "Authentication credentials were not provided.", "status_code": 401}
+
+ assert json == expected
+ assert response.status_code == status.HTTP_401_UNAUTHORIZED
+ assert database.list_of("notify.Notification") == []
+
+
+def test_no_notifications(database: capy.Database, client: APIClient, format: capy.Format, utc_now: datetime):
+ model = database.create(user=1)
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("notify:me_notification")
+ response = client.get(url)
+
+ json = response.json()
+ expected = []
+
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
+ assert database.list_of("notify.Notification") == []
+
+
+def test_two_notifications(database: capy.Database, client: APIClient, format: capy.Format, utc_now: datetime):
+ model = database.create(user=1, notification=2)
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("notify:me_notification")
+ response = client.get(url)
+
+ json = response.json()
+ expected = [
+ get_serializer(model.notification[1], data={"seen_at": utc_now.isoformat().replace("+00:00", "Z")}),
+ get_serializer(model.notification[0], data={"seen_at": utc_now.isoformat().replace("+00:00", "Z")}),
+ ]
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
+ assert database.list_of("notify.Notification") == [
+ {
+ **format.to_obj_repr(model.notification[0]),
+ "seen_at": utc_now,
+ },
+ {
+ **format.to_obj_repr(model.notification[1]),
+ "seen_at": utc_now,
+ },
+ ]
+
+
+class TestDoneAt:
+
+ def test_pending_next_5_minutes(
+ self,
+ database: capy.Database,
+ client: APIClient,
+ format: capy.Format,
+ utc_now: datetime,
+ ):
+ model = database.create(user=1, notification=(2, {"done_at": utc_now + timedelta(minutes=5)}))
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("notify:me_notification") + "?done_at=" + utc_now.isoformat().replace("+00:00", "Z")
+ response = client.get(url)
+
+ json = response.json()
+ expected = [
+ get_serializer(
+ model.notification[1],
+ data={
+ "done_at": (utc_now + timedelta(minutes=5)).isoformat().replace("+00:00", "Z"),
+ "seen_at": utc_now.isoformat().replace("+00:00", "Z"),
+ },
+ ),
+ get_serializer(
+ model.notification[0],
+ data={
+ "done_at": (utc_now + timedelta(minutes=5)).isoformat().replace("+00:00", "Z"),
+ "seen_at": utc_now.isoformat().replace("+00:00", "Z"),
+ },
+ ),
+ ]
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
+ assert database.list_of("notify.Notification") == [
+ {
+ **format.to_obj_repr(model.notification[0]),
+ "seen_at": utc_now,
+ },
+ {
+ **format.to_obj_repr(model.notification[1]),
+ "seen_at": utc_now,
+ },
+ ]
+
+ def test_pending_next_5_minutes(
+ self,
+ database: capy.Database,
+ client: APIClient,
+ format: capy.Format,
+ utc_now: datetime,
+ ):
+ model = database.create(user=1, notification=(2, {"done_at": utc_now + timedelta(minutes=5)}))
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("notify:me_notification") + "?done_at=" + utc_now.isoformat().replace("+00:00", "Z")
+ response = client.get(url)
+
+ json = response.json()
+ expected = [
+ get_serializer(
+ model.notification[1],
+ data={
+ "done_at": (utc_now + timedelta(minutes=5)).isoformat().replace("+00:00", "Z"),
+ "seen_at": utc_now.isoformat().replace("+00:00", "Z"),
+ },
+ ),
+ get_serializer(
+ model.notification[0],
+ data={
+ "done_at": (utc_now + timedelta(minutes=5)).isoformat().replace("+00:00", "Z"),
+ "seen_at": utc_now.isoformat().replace("+00:00", "Z"),
+ },
+ ),
+ ]
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
+ assert database.list_of("notify.Notification") == [
+ {
+ **format.to_obj_repr(model.notification[0]),
+ "seen_at": utc_now,
+ },
+ {
+ **format.to_obj_repr(model.notification[1]),
+ "seen_at": utc_now,
+ },
+ ]
+
+
+class TestSeen:
+
+ def test_db_seen_at_eq_none__qs_seen_eq_true(
+ self,
+ database: capy.Database,
+ client: APIClient,
+ format: capy.Format,
+ ):
+ model = database.create(user=1, notification=(2, {"seen_at": None}))
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("notify:me_notification") + "?seen=true"
+ response = client.get(url)
+
+ json = response.json()
+ expected = []
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
+ assert database.list_of("notify.Notification") == [
+ {
+ **format.to_obj_repr(model.notification[0]),
+ "seen_at": None,
+ },
+ {
+ **format.to_obj_repr(model.notification[1]),
+ "seen_at": None,
+ },
+ ]
+
+ def test_db_seen_at_not_none__qs_seen_eq_true(
+ self,
+ database: capy.Database,
+ client: APIClient,
+ format: capy.Format,
+ utc_now: datetime,
+ ):
+ model = database.create(user=1, notification=(2, {"seen_at": utc_now}))
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("notify:me_notification") + "?seen=true"
+ response = client.get(url)
+
+ json = response.json()
+ expected = [
+ get_serializer(
+ model.notification[1],
+ data={
+ "seen_at": utc_now.isoformat().replace("+00:00", "Z"),
+ },
+ ),
+ get_serializer(
+ model.notification[0],
+ data={
+ "seen_at": utc_now.isoformat().replace("+00:00", "Z"),
+ },
+ ),
+ ]
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
+ assert database.list_of("notify.Notification") == [
+ format.to_obj_repr(model.notification[0]),
+ format.to_obj_repr(model.notification[1]),
+ ]
+
+
+class TestAcademy:
+
+ def test_bad_academies(
+ self,
+ database: capy.Database,
+ client: APIClient,
+ format: capy.Format,
+ ):
+ model = database.create(
+ user=1,
+ notification=[{"academy_id": n + 1} for n in range(2)],
+ academy=2,
+ city=1,
+ country=1,
+ )
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("notify:me_notification") + "?academy=fake1,fake2"
+ response = client.get(url)
+
+ json = response.json()
+ expected = []
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
+ assert database.list_of("notify.Notification") == [
+ format.to_obj_repr(model.notification[0]),
+ format.to_obj_repr(model.notification[1]),
+ ]
+
+ def test_with_academies(
+ self,
+ database: capy.Database,
+ client: APIClient,
+ format: capy.Format,
+ utc_now: datetime,
+ ):
+ model = database.create(
+ user=1,
+ notification=[{"academy_id": n + 1} for n in range(2)],
+ academy=2,
+ city=1,
+ country=1,
+ )
+ client.force_authenticate(model.user)
+
+ url = reverse_lazy("notify:me_notification") + f"?academy={model.academy[0].slug},{model.academy[1].slug}"
+ response = client.get(url)
+
+ json = response.json()
+ expected = [
+ get_serializer(
+ model.notification[1],
+ academy=model.academy[1],
+ data={
+ "seen_at": utc_now.isoformat().replace("+00:00", "Z"),
+ },
+ ),
+ get_serializer(
+ model.notification[0],
+ academy=model.academy[0],
+ data={
+ "seen_at": utc_now.isoformat().replace("+00:00", "Z"),
+ },
+ ),
+ ]
+
+ assert json == expected
+ assert response.status_code == status.HTTP_200_OK
+ assert database.list_of("notify.Notification") == [
+ {
+ **format.to_obj_repr(model.notification[0]),
+ "seen_at": utc_now,
+ },
+ {
+ **format.to_obj_repr(model.notification[1]),
+ "seen_at": utc_now,
+ },
+ ]
diff --git a/breathecode/notify/urls.py b/breathecode/notify/urls.py
index 66da87b06..203034c81 100644
--- a/breathecode/notify/urls.py
+++ b/breathecode/notify/urls.py
@@ -1,13 +1,15 @@
from django.urls import path
+
from .views import (
- test_email,
+ HooksView,
+ NotificationsView,
+ SlackTeamsView,
+ get_sample_data,
+ preview_slack_template,
preview_template,
process_interaction,
slack_command,
- preview_slack_template,
- HooksView,
- get_sample_data,
- SlackTeamsView,
+ test_email,
)
app_name = "notify"
@@ -22,4 +24,5 @@
path("hook//sample", get_sample_data),
path("slack/command", slack_command, name="slack_command"),
path("slack/team", SlackTeamsView.as_view(), name="slack_team"),
+ path("me/notification", NotificationsView.as_view(), name="me_notification"),
]
diff --git a/breathecode/notify/views.py b/breathecode/notify/views.py
index 4d709be68..ed586c126 100644
--- a/breathecode/notify/views.py
+++ b/breathecode/notify/views.py
@@ -1,7 +1,9 @@
import logging
+from capyc.rest_framework.exceptions import ValidationException
from django.db.models import Q
from django.http import HttpResponse
+from django.utils import timezone
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
@@ -9,11 +11,10 @@
from rest_framework.views import APIView
from breathecode.utils import APIViewExtensions, GenerateLookupsMixin
-from capyc.rest_framework.exceptions import ValidationException
from .actions import get_template_content
-from .models import Hook, SlackTeam
-from .serializers import HookSerializer, SlackTeamSerializer
+from .models import Hook, Notification, SlackTeam
+from .serializers import HookSerializer, NotificationSerializer, SlackTeamSerializer
from .tasks import async_slack_action, async_slack_command
logger = logging.getLogger(__name__)
@@ -216,3 +217,30 @@ def get(self, request):
serializer = SlackTeamSerializer(items, many=True)
return handler.response(serializer.data)
+
+
+class NotificationsView(APIView, GenerateLookupsMixin):
+ extensions = APIViewExtensions(sort="-id", paginate=True)
+
+ def get(self, request):
+ handler = self.extensions(request)
+ items = Notification.objects.filter(user__id=request.user.id)
+
+ if (academies := request.GET.get("academy")) is not None:
+ academies = academies.split(",")
+ items = items.filter(academy__slug__in=academies)
+
+ if (done_at := request.GET.get("done_at")) is not None:
+ items = items.filter(done_at__gte=done_at)
+
+ if request.GET.get("seen") == "true":
+ items = items.filter(seen_at__isnull=False)
+
+ items = handler.queryset(items)
+
+ ids = [x.id for x in items if x.seen_at is None]
+ if ids:
+ Notification.objects.filter(id__in=ids).update(seen_at=timezone.now())
+
+ serializer = NotificationSerializer(items, many=True)
+ return handler.response(serializer.data)
diff --git a/breathecode/payments/receivers.py b/breathecode/payments/receivers.py
index ac0cbda37..4ebfa89a0 100644
--- a/breathecode/payments/receivers.py
+++ b/breathecode/payments/receivers.py
@@ -6,6 +6,8 @@
from django.dispatch import receiver
from django.utils import timezone
+from breathecode.authenticate.models import GoogleWebhook
+from breathecode.authenticate.signals import google_webhook_saved
from breathecode.mentorship.models import MentorshipSession
from breathecode.mentorship.signals import mentorship_session_status
from breathecode.payments import tasks
@@ -97,3 +99,9 @@ def plan_m2m_wrapper(sender: Type[Plan.service_items.through], instance: Plan, *
@receiver(update_plan_m2m_service_items, sender=Plan.service_items.through)
def plan_m2m_changed(sender: Type[Plan.service_items.through], instance: Plan, **kwargs):
tasks.update_service_stock_schedulers.delay(instance.id)
+
+
+@receiver(google_webhook_saved, sender=GoogleWebhook)
+def process_google_webhook_on_created(sender: Type[GoogleWebhook], instance: GoogleWebhook, created: bool, **kwargs):
+ if created:
+ tasks.process_google_webhook.delay(instance.id)
diff --git a/breathecode/payments/tasks.py b/breathecode/payments/tasks.py
index 6ed8db21e..e8ae52645 100644
--- a/breathecode/payments/tasks.py
+++ b/breathecode/payments/tasks.py
@@ -13,11 +13,13 @@
from task_manager.django.decorators import task
from breathecode.authenticate.actions import get_app_url, get_user_settings
+from breathecode.authenticate.models import AcademyAuthSettings
from breathecode.media.models import File
from breathecode.notify import actions as notify_actions
from breathecode.payments import actions
from breathecode.payments.services.stripe import Stripe
from breathecode.payments.signals import consume_service, reimburse_service_units
+from breathecode.services.google.google import Google
from breathecode.utils.decorators import TaskPriority
from breathecode.utils.i18n import translation
from breathecode.utils.redis import Lock
@@ -1199,3 +1201,28 @@ def set_proof_of_payment_confirmation_url(file_id: int, proof_of_payment_id: int
proof.confirmation_image_url = url
proof.status = ProofOfPayment.Status.DONE
proof.save()
+
+
+@task(bind=False, priority=TaskPriority.WEB_SERVICE_PAYMENT.value)
+def process_google_webhook(hook_id: int, **_: Any):
+ from breathecode.authenticate.models import CredentialsGoogle, GoogleWebhook
+
+ logger.info(f"Starting process_google_webhook for id {hook_id}")
+
+ hook = GoogleWebhook.objects.filter(id=hook_id).first()
+ if not hook:
+ raise RetryTask(f"GoogleWebhook with id {hook_id} not found")
+
+ if hook.status == GoogleWebhook.Status.DONE:
+ raise AbortTask(f"GoogleWebhook with id {hook_id} was processed")
+
+ users_ids = AcademyAuthSettings.objects.filter(google_cloud_owner__isnull=False).values_list(
+ "google_cloud_owner_id", flat=True
+ )
+
+ credentials = CredentialsGoogle.objects.filter(user__id__in=users_ids).only("token", "refresh_token")
+ if credentials.exists() is False:
+ raise AbortTask("CredentialsGoogle not found")
+
+ google = Google()
+ google.run_webhook(hook, credentials)
diff --git a/breathecode/payments/tests/tasks/tests_process_google_webhook.py b/breathecode/payments/tests/tasks/tests_process_google_webhook.py
new file mode 100644
index 000000000..f76dbbfe9
--- /dev/null
+++ b/breathecode/payments/tests/tasks/tests_process_google_webhook.py
@@ -0,0 +1,621 @@
+"""
+Test /answer
+"""
+
+import base64
+import hashlib
+import hmac
+import json
+import os
+import random
+from datetime import timedelta
+from logging import Logger
+from typing import Callable
+from unittest.mock import AsyncMock, MagicMock, call
+
+import capyc.pytest as capy
+import pytest
+from capyc.core.object import Object
+from django.utils import timezone
+from task_manager.core.exceptions import AbortTask
+
+from breathecode.payments import tasks
+from breathecode.tests.mixins.breathecode_mixin import Breathecode
+
+UTC_NOW = timezone.now()
+
+# enable this file to use the database
+pytestmark = pytest.mark.usefixtures("db")
+
+
+@pytest.fixture(autouse=True)
+def setup(monkeypatch: pytest.MonkeyPatch, conference_record_patcher):
+ # mock logger with monkeypatch
+
+ monkeypatch.setenv("GOOGLE_WEBHOOK_SECRET", "secret")
+ monkeypatch.setattr("logging.Logger.info", MagicMock())
+ monkeypatch.setattr("logging.Logger.error", MagicMock())
+ monkeypatch.setattr("task_manager.django.tasks.execute_signal.delay", MagicMock())
+
+ monkeypatch.setattr("breathecode.services.google_meet.GoogleMeet.__init__", MagicMock(return_value=None))
+ monkeypatch.setattr(
+ "breathecode.services.google_meet.GoogleMeet.aget_space",
+ AsyncMock(return_value=Object(meeting_uri="https://meet.google.com/fake")),
+ )
+ monkeypatch.setattr(
+ "breathecode.services.google_meet.GoogleMeet.aget_participant_session",
+ AsyncMock(return_value=Object(start_time=UTC_NOW, end_time=UTC_NOW + timedelta(hours=1))),
+ )
+
+ conference_record_patcher(
+ {
+ "start_time": UTC_NOW,
+ "end_time": None,
+ }
+ )
+
+ yield
+
+
+def serialize_participant_object(data: dict):
+ for key in data:
+ if isinstance(data[key], dict):
+ data[key] = serialize_participant_object(data[key])
+
+ return Object(**data)
+
+
+@pytest.fixture
+def participant_patcher(monkeypatch: pytest.MonkeyPatch):
+ def patcher(data: dict):
+ monkeypatch.setattr(
+ "breathecode.services.google_meet.GoogleMeet.aget_participant",
+ AsyncMock(return_value=serialize_participant_object(data)),
+ )
+
+ yield patcher
+
+
+@pytest.fixture
+def conference_record_patcher(monkeypatch: pytest.MonkeyPatch):
+ def patcher(data: dict):
+ monkeypatch.setattr(
+ "breathecode.services.google_meet.GoogleMeet.aget_conference_record",
+ AsyncMock(
+ return_value=serialize_participant_object(
+ {
+ "space": "https://meet.google.com/fake",
+ "meeting_uri": "https://meet.google.com/fake",
+ **data,
+ }
+ )
+ ),
+ )
+
+ yield patcher
+
+
+def serialize(data: dict):
+ x = json.dumps(data)
+ message = base64.b64encode(x.encode("utf-8")).decode("utf-8")
+ signature = hmac.new(
+ key=os.getenv("GOOGLE_WEBHOOK_SECRET").encode("utf-8"), msg=message.encode("utf-8"), digestmod=hashlib.sha256
+ ).hexdigest()
+
+ return {
+ "data": message,
+ "signature": signature,
+ }
+
+
+# @pytest.mark.django_db(reset_sequences=True)
+def test_not_found(bc: Breathecode):
+
+ tasks.process_google_webhook(1)
+
+ assert bc.database.list_of("authenticate.GoogleWebhook") == []
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == [
+ call("GoogleWebhook with id 1 not found", exc_info=True),
+ ]
+
+
+# @pytest.mark.django_db(reset_sequences=True)
+def test_no_credentials(database: capy.Database, format: capy.Format):
+ data = serialize({"credential_id": "123456"})
+
+ model = database.create(google_webhook={"message": data["data"]})
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ format.to_obj_repr(model.google_webhook),
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == [
+ call("CredentialsGoogle not found", exc_info=True),
+ ]
+
+
+# @pytest.mark.django_db(reset_sequences=True)
+def test_action_not_found(database: capy.Database, format: capy.Format):
+ data = serialize({"credential_id": "123456"})
+
+ model = database.create(
+ google_webhook={"message": data["data"]},
+ credentials_google=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ format.to_obj_repr(model.google_webhook),
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == [
+ call("Action credential_id not found", exc_info=True),
+ ]
+
+
+class TestConferenceRecord:
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_no_session(self, database: capy.Database, format: capy.Format):
+ data = serialize({"conferenceRecord": {"name": "123456"}})
+
+ model = database.create(
+ google_webhook={"message": data["data"]},
+ credentials_google=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "ERROR",
+ "status_text": "MentorshipSession with meeting url https://meet.google.com/fake not found",
+ "type": "conferenceRecord",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == []
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == [
+ call("MentorshipSession with meeting url https://meet.google.com/fake not found", exc_info=True),
+ ]
+
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_starting_session(
+ self,
+ database: capy.Database,
+ format: capy.Format,
+ conference_record_patcher: Callable,
+ ):
+ data = serialize({"conferenceRecord": {"name": "123456"}})
+
+ conference_record_patcher(
+ {
+ "start_time": UTC_NOW,
+ "end_time": None,
+ }
+ )
+
+ model = database.create(
+ mentorship_session={
+ "online_meeting_url": "https://meet.google.com/fake",
+ },
+ google_webhook={"message": data["data"]},
+ credentials_google=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "DONE",
+ "type": "conferenceRecord",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == [
+ {
+ **format.to_obj_repr(model.mentorship_session),
+ "status": "STARTED",
+ },
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == []
+
+ @pytest.mark.parametrize(
+ "started_at,mentor_joined_at",
+ [
+ (None, UTC_NOW),
+ (UTC_NOW, None),
+ ],
+ )
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_someone_dont_show_up(
+ self,
+ database: capy.Database,
+ format: capy.Format,
+ conference_record_patcher: Callable,
+ started_at,
+ mentor_joined_at,
+ ):
+ data = serialize({"conferenceRecord": {"name": "123456"}})
+
+ conference_record_patcher(
+ {
+ "start_time": UTC_NOW,
+ "end_time": UTC_NOW + timedelta(hours=1),
+ }
+ )
+
+ model = database.create(
+ mentorship_session={
+ "online_meeting_url": "https://meet.google.com/fake",
+ "started_at": started_at,
+ "mentor_joined_at": mentor_joined_at,
+ },
+ google_webhook={"message": data["data"]},
+ credentials_google=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "DONE",
+ "type": "conferenceRecord",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == [
+ {
+ **format.to_obj_repr(model.mentorship_session),
+ "status": "FAILED",
+ "ended_at": UTC_NOW + timedelta(hours=1),
+ },
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == []
+
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_everyone_show_up(
+ self,
+ database: capy.Database,
+ format: capy.Format,
+ conference_record_patcher: Callable,
+ ):
+ data = serialize({"conferenceRecord": {"name": "123456"}})
+
+ conference_record_patcher(
+ {
+ "start_time": UTC_NOW,
+ "end_time": UTC_NOW + timedelta(hours=1),
+ }
+ )
+
+ model = database.create(
+ mentorship_session={
+ "online_meeting_url": "https://meet.google.com/fake",
+ "started_at": UTC_NOW,
+ "mentor_joined_at": UTC_NOW,
+ },
+ google_webhook={"message": data["data"]},
+ credentials_google=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "DONE",
+ "type": "conferenceRecord",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == [
+ {
+ **format.to_obj_repr(model.mentorship_session),
+ "status": "COMPLETED",
+ "ended_at": UTC_NOW + timedelta(hours=1),
+ },
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == []
+
+
+class TestParticipantSession:
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_no_session(self, database: capy.Database, format: capy.Format, participant_patcher: Callable):
+ data = serialize({"participantSession": {"name": "asd/123456/asd/123456"}})
+
+ participant_patcher(
+ {
+ "signedin_user": None,
+ }
+ )
+
+ model = database.create(
+ google_webhook={"message": data["data"]},
+ credentials_google=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "ERROR",
+ "status_text": "MentorshipSession with meeting url https://meet.google.com/fake not found",
+ "type": "participantSession",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == []
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == [
+ call("MentorshipSession with meeting url https://meet.google.com/fake not found", exc_info=True),
+ ]
+
+ @pytest.mark.parametrize("signedin_user", [None, {"user": 123123}])
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_mentee(
+ self,
+ database: capy.Database,
+ format: capy.Format,
+ participant_patcher: Callable,
+ signedin_user: dict | None,
+ ):
+ data = serialize({"participantSession": {"name": "asd/123456/asd/123456"}})
+
+ participant_patcher(
+ {
+ "signedin_user": signedin_user,
+ "start_time": UTC_NOW,
+ "end_time": UTC_NOW + timedelta(hours=1),
+ }
+ )
+
+ model = database.create(
+ mentorship_session={"online_meeting_url": "https://meet.google.com/fake"},
+ google_webhook={"message": data["data"]},
+ credentials_google=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "DONE",
+ "type": "participantSession",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == [
+ {
+ **format.to_obj_repr(model.mentorship_session),
+ "status": "PENDING",
+ "started_at": UTC_NOW,
+ "mentee_left_at": UTC_NOW + timedelta(hours=1),
+ },
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == []
+
+ @pytest.mark.parametrize("signedin_user", [None, {"user": 123123}])
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_mentee__dont_override_started_at__override_mentee_left_at(
+ self,
+ database: capy.Database,
+ format: capy.Format,
+ participant_patcher: Callable,
+ signedin_user: dict | None,
+ ):
+ data = serialize({"participantSession": {"name": "asd/123456/asd/123456"}})
+
+ participant_patcher(
+ {
+ "signedin_user": signedin_user,
+ "start_time": UTC_NOW,
+ "end_time": UTC_NOW + timedelta(hours=1),
+ }
+ )
+
+ model = database.create(
+ mentorship_session={
+ "online_meeting_url": "https://meet.google.com/fake",
+ "started_at": UTC_NOW - timedelta(minutes=30),
+ "mentee_left_at": UTC_NOW + timedelta(minutes=30),
+ },
+ google_webhook={"message": data["data"]},
+ credentials_google=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "DONE",
+ "type": "participantSession",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == [
+ {
+ **format.to_obj_repr(model.mentorship_session),
+ "status": "PENDING",
+ "started_at": UTC_NOW - timedelta(minutes=30),
+ "mentee_left_at": UTC_NOW + timedelta(hours=1),
+ },
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == []
+
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_mentor(
+ self,
+ database: capy.Database,
+ format: capy.Format,
+ participant_patcher: Callable,
+ ):
+ data = serialize({"participantSession": {"name": "asd/123456/asd/123456"}})
+
+ participant_patcher(
+ {
+ "signedin_user": {"user": 123123},
+ "start_time": UTC_NOW,
+ "end_time": UTC_NOW + timedelta(hours=1),
+ }
+ )
+
+ model = database.create(
+ mentorship_session={"online_meeting_url": "https://meet.google.com/fake"},
+ google_webhook={"message": data["data"]},
+ credentials_google={"google_id": 123123},
+ mentor_profile=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "DONE",
+ "type": "participantSession",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == [
+ {
+ **format.to_obj_repr(model.mentorship_session),
+ "status": "PENDING",
+ "mentor_joined_at": UTC_NOW,
+ "mentor_left_at": UTC_NOW + timedelta(hours=1),
+ },
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == []
+
+ # @pytest.mark.django_db(reset_sequences=True)
+ def test_mentor__dont_override_joined_at__override_left_at(
+ self,
+ database: capy.Database,
+ format: capy.Format,
+ participant_patcher: Callable,
+ ):
+ data = serialize({"participantSession": {"name": "asd/123456/asd/123456"}})
+
+ participant_patcher(
+ {
+ "signedin_user": {"user": 123123},
+ "start_time": UTC_NOW,
+ "end_time": UTC_NOW + timedelta(hours=1),
+ }
+ )
+
+ model = database.create(
+ mentorship_session={
+ "online_meeting_url": "https://meet.google.com/fake",
+ "mentor_joined_at": UTC_NOW - timedelta(minutes=30),
+ "mentor_left_at": UTC_NOW + timedelta(minutes=30),
+ },
+ google_webhook={"message": data["data"]},
+ credentials_google={"google_id": 123123},
+ mentor_profile=1,
+ user=1,
+ academy_auth_settings=1,
+ city=1,
+ country=1,
+ )
+
+ tasks.process_google_webhook(1)
+
+ assert database.list_of("authenticate.GoogleWebhook") == [
+ {
+ **format.to_obj_repr(model.google_webhook),
+ "status": "DONE",
+ "type": "participantSession",
+ },
+ ]
+ assert database.list_of("mentorship.MentorshipSession") == [
+ {
+ **format.to_obj_repr(model.mentorship_session),
+ "status": "PENDING",
+ "mentor_joined_at": UTC_NOW - timedelta(minutes=30),
+ "mentor_left_at": UTC_NOW + timedelta(hours=1),
+ },
+ ]
+
+ assert Logger.info.call_args_list == [
+ call("Starting process_google_webhook for id 1"),
+ ]
+ assert Logger.error.call_args_list == []
diff --git a/breathecode/registry/serializers.py b/breathecode/registry/serializers.py
index e3f9429f2..8a8c75cfa 100644
--- a/breathecode/registry/serializers.py
+++ b/breathecode/registry/serializers.py
@@ -220,6 +220,7 @@ class AssetHookSerializer(serpy.Serializer):
solution_video_url = serpy.Field()
intro_video_url = serpy.Field()
published_at = serpy.Field()
+ learnpack_deploy_url = serpy.Field()
technologies = serpy.MethodField()
seo_keywords = serpy.MethodField()
@@ -257,6 +258,7 @@ class AssetSerializer(serpy.Serializer):
solution_url = serpy.Field()
intro_video_url = serpy.Field()
published_at = serpy.Field()
+ learnpack_deploy_url = serpy.Field()
translations = serpy.MethodField()
technologies = serpy.MethodField()
diff --git a/breathecode/registry/tests/urls/v1/tests_academy_asset.py b/breathecode/registry/tests/urls/v1/tests_academy_asset.py
index 66e2c2498..3a27fa5ea 100644
--- a/breathecode/registry/tests/urls/v1/tests_academy_asset.py
+++ b/breathecode/registry/tests/urls/v1/tests_academy_asset.py
@@ -128,6 +128,7 @@ def post_serializer(academy, category, data={}):
"superseded_by": None,
"enable_table_of_content": True,
"agent": None,
+ "learnpack_deploy_url": None,
"updated_at": UTC_NOW.isoformat().replace("+00:00", "Z"),
**data,
}
@@ -170,6 +171,7 @@ def put_serializer(academy, category, asset, data={}):
"readme_url": None,
"requirements": None,
"seo_json_status": None,
+ "learnpack_deploy_url": None,
"seo_keywords": [],
"slug": asset.slug,
"solution_video_url": None,
diff --git a/breathecode/registry/tests/urls/v1/tests_asset.py b/breathecode/registry/tests/urls/v1/tests_asset.py
index 93cb9797b..77c14e8dc 100644
--- a/breathecode/registry/tests/urls/v1/tests_asset.py
+++ b/breathecode/registry/tests/urls/v1/tests_asset.py
@@ -76,6 +76,7 @@ def get_serializer(asset, data={}):
"visibility": asset.visibility,
"enable_table_of_content": asset.enable_table_of_content,
"interactive": asset.interactive,
+ "learnpack_deploy_url": asset.learnpack_deploy_url,
**data,
}
@@ -261,7 +262,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/registry/tests/urls/v2/tests_academy_asset_slug.py b/breathecode/registry/tests/urls/v2/tests_academy_asset_slug.py
index bbf0df086..9c7c34b13 100644
--- a/breathecode/registry/tests/urls/v2/tests_academy_asset_slug.py
+++ b/breathecode/registry/tests/urls/v2/tests_academy_asset_slug.py
@@ -48,6 +48,7 @@ def get_serializer(bc: Breathecode, asset, asset_category=None, data={}):
"last_test_at": None,
"last_cleaning_at": None,
"last_seo_scan_at": None,
+ "learnpack_deploy_url": None,
"optimization_rating": None,
"owner": None,
"preview": None,
diff --git a/breathecode/services/google/__init__.py b/breathecode/services/google/__init__.py
new file mode 100644
index 000000000..79b2f4e75
--- /dev/null
+++ b/breathecode/services/google/__init__.py
@@ -0,0 +1 @@
+from .google import * # noqa: F401
diff --git a/breathecode/services/google/actions/__init__.py b/breathecode/services/google/actions/__init__.py
new file mode 100644
index 000000000..f206cd5e1
--- /dev/null
+++ b/breathecode/services/google/actions/__init__.py
@@ -0,0 +1,2 @@
+from .conference_record import * # noqa: F401
+from .participant_session import * # noqa: F401
diff --git a/breathecode/services/google/actions/conference_record.py b/breathecode/services/google/actions/conference_record.py
new file mode 100644
index 000000000..81525057a
--- /dev/null
+++ b/breathecode/services/google/actions/conference_record.py
@@ -0,0 +1,44 @@
+from django.db.models import QuerySet
+from task_manager.core.exceptions import AbortTask
+
+from breathecode.authenticate.models import CredentialsGoogle
+from breathecode.services.google.utils import get_client
+
+
+async def conference_record(name: str, credentials: QuerySet[CredentialsGoogle]):
+ from breathecode.mentorship.models import MentorshipSession
+
+ errors = ""
+
+ async for credential in credentials:
+ try:
+ client = get_client(credential)
+ conference_record = await client.aget_conference_record(name=name)
+
+ space = await client.aget_space(name=conference_record.space)
+ session = await MentorshipSession.objects.filter(online_meeting_url=space.meeting_uri).afirst()
+ if session is None:
+ raise AbortTask(f"MentorshipSession with meeting url {space.meeting_uri} not found")
+
+ if conference_record.end_time is None:
+ session.status = "STARTED"
+
+ elif session.mentor_joined_at is None or session.started_at is None:
+ session.status = "FAILED"
+ session.ended_at = conference_record.end_time
+
+ else:
+ session.status = "COMPLETED"
+ session.ended_at = conference_record.end_time
+
+ await session.asave()
+
+ return
+
+ except AbortTask as e:
+ raise e
+
+ except Exception as e:
+ errors += f"Error with credentials {credential.id}: {e}\n"
+
+ raise AbortTask(errors)
diff --git a/breathecode/services/google/actions/participant_session.py b/breathecode/services/google/actions/participant_session.py
new file mode 100644
index 000000000..fc020cfa9
--- /dev/null
+++ b/breathecode/services/google/actions/participant_session.py
@@ -0,0 +1,68 @@
+import traceback
+
+from django.db.models import QuerySet
+from task_manager.core.exceptions import AbortTask
+
+from breathecode.authenticate.models import CredentialsGoogle, User
+from breathecode.services.google.utils import get_client
+
+
+async def participant_session(name: str, credentials: QuerySet[CredentialsGoogle]):
+ from breathecode.mentorship.models import MentorshipSession
+
+ errors = ""
+
+ async for credential in credentials:
+ try:
+ client = get_client(credential)
+ participant_session = await client.aget_participant_session(name=name)
+ names = name.split("/")
+ conference_record_name = "/".join(names[0:2])
+ participant_name = "/".join(names[0:4])
+
+ conference_record = await client.aget_conference_record(name=conference_record_name)
+ space = await client.aget_space(name=conference_record.space)
+
+ session = (
+ await MentorshipSession.objects.filter(online_meeting_url=space.meeting_uri)
+ .prefetch_related(
+ "mentor",
+ "mentor__user",
+ )
+ .afirst()
+ )
+ if session is None:
+ raise AbortTask(f"MentorshipSession with meeting url {space.meeting_uri} not found")
+
+ try:
+ participant = await client.aget_participant(name=participant_name)
+ if participant.signedin_user:
+ user = await User.objects.filter(
+ credentialsgoogle__google_id=participant.signedin_user.user
+ ).afirst()
+ if session.mentor.user == user:
+ session.mentor_joined_at = session.mentor_joined_at or participant_session.start_time
+ session.mentor_left_at = participant_session.end_time
+
+ else:
+ raise Exception()
+
+ else:
+ raise Exception()
+
+ except Exception:
+ session.started_at = session.started_at or participant_session.start_time
+ session.mentee_left_at = participant_session.end_time
+
+ await session.asave()
+
+ return
+
+ except AbortTask as e:
+ raise e
+
+ except Exception as e:
+ traceback.print_exc()
+ errors += f"Error with credentials {credential.id}: {e}\n"
+
+ raise AbortTask(errors)
diff --git a/breathecode/services/google/google.py b/breathecode/services/google/google.py
new file mode 100644
index 000000000..14bd4a137
--- /dev/null
+++ b/breathecode/services/google/google.py
@@ -0,0 +1,76 @@
+import base64
+import json
+import re
+from typing import Callable, Literal, TypedDict
+
+from asgiref.sync import async_to_sync
+from django.db.models import QuerySet
+from task_manager.core.exceptions import AbortTask
+
+from breathecode.authenticate.models import CredentialsGoogle, GoogleWebhook
+
+from . import actions
+
+__all__ = ["Google"]
+
+
+def camel_to_snake(camel: str):
+ return re.sub(r"(? GoogleMeet:
+ return GoogleMeet(credentials.token, credentials.refresh_token)
diff --git a/breathecode/settings.py b/breathecode/settings.py
index b9d017b35..f4eacfcc0 100644
--- a/breathecode/settings.py
+++ b/breathecode/settings.py
@@ -352,6 +352,10 @@
"https://breathecode-test.herokuapp.com",
]
+# CSP_DEFAULT_SRC = ("'self'", "https://*.4geeks.com", "https://*.4geeksacademy.co")
+# CSP_FRAME_SRC = ("'self'", "https://*.4geeks.com", "https://*.4geeksacademy.co")
+# SECURE_REFERRER_POLICY = "no-referrer"
+
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = [
"accept",
@@ -538,11 +542,12 @@ def get(self, key, *args, **kwargs):
# Websocket
ASGI_APPLICATION = "breathecode.asgi.application"
REDIS_URL_PATTERN = r"^redis://(.+):(\d+)$"
+REDIS_PARTS = REDIS_URL.split(":")
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.pubsub.RedisPubSubChannelLayer",
"CONFIG": {
- "hosts": [("127.0.0.1", 6379)],
+ "hosts": [(":".join(REDIS_PARTS[:-1]), int(REDIS_PARTS[-1]))],
},
},
}
diff --git a/breathecode/tests/mixins/generate_models_mixin/authenticate_models_mixin.py b/breathecode/tests/mixins/generate_models_mixin/authenticate_models_mixin.py
index 98715e3cc..e0450b875 100644
--- a/breathecode/tests/mixins/generate_models_mixin/authenticate_models_mixin.py
+++ b/breathecode/tests/mixins/generate_models_mixin/authenticate_models_mixin.py
@@ -194,9 +194,7 @@ def generate_authenticate_models(
if "user" in models:
kargs["user"] = just_one(models["user"])
- models["credentials_facebook"] = create_models(
- credentials_google, "authenticate.CredentialsGoogle", **kargs
- )
+ models["credentials_google"] = create_models(credentials_google, "authenticate.CredentialsGoogle", **kargs)
if not "cohort_user" in models and is_valid(cohort_user):
kargs = {}