From f87a23f5b243c5362bcb37cbeaf2ddf6eba6ca05 Mon Sep 17 00:00:00 2001 From: jefer94 Date: Wed, 30 Oct 2024 20:53:45 -0500 Subject: [PATCH] migrate to capy core i18n --- Pipfile.lock | 787 ++++++++++-------- breathecode/activity/views.py | 4 +- breathecode/admissions/views.py | 6 +- breathecode/assessment/serializers.py | 4 +- breathecode/assessment/views.py | 5 +- .../assignments/permissions/consumers.py | 5 +- breathecode/assignments/receivers.py | 2 +- breathecode/assignments/views.py | 2 +- breathecode/authenticate/actions.py | 4 +- breathecode/authenticate/serializers.py | 4 +- breathecode/authenticate/tasks.py | 4 +- breathecode/authenticate/views.py | 2 +- breathecode/events/permissions/consumers.py | 4 +- breathecode/events/serializers.py | 4 +- breathecode/events/views.py | 4 +- breathecode/marketing/actions.py | 2 +- breathecode/marketing/views.py | 2 +- breathecode/media/settings.py | 2 +- breathecode/media/tasks.py | 2 +- breathecode/media/utils.py | 2 +- breathecode/media/views.py | 2 +- .../mentorship/permissions/consumers.py | 2 +- breathecode/mentorship/serializers.py | 4 +- breathecode/mentorship/views.py | 2 +- breathecode/monitoring/serializers.py | 4 +- breathecode/monitoring/views.py | 4 +- breathecode/payments/actions.py | 2 +- breathecode/payments/models.py | 2 +- breathecode/payments/services/stripe.py | 4 +- breathecode/payments/tasks.py | 2 +- breathecode/payments/views.py | 2 +- breathecode/provisioning/actions.py | 4 +- breathecode/provisioning/serializers.py | 4 +- breathecode/provisioning/views.py | 6 +- breathecode/registry/permissions/consumers.py | 4 +- .../tests/signals/tests_asset_saved.py | 2 +- breathecode/registry/views.py | 8 +- breathecode/utils/__init__.py | 1 - .../extensions/lookup_extension.py | 4 +- breathecode/utils/i18n.py | 167 ---- breathecode/utils/tests/i18n/__init__.py | 0 .../utils/tests/i18n/tests_translation.py | 113 --- breathecode/utils/validate_conversion_info.py | 2 +- staging/pytest/core/fixtures/http.py | 4 +- 44 files changed, 512 insertions(+), 688 deletions(-) delete mode 100644 breathecode/utils/i18n.py delete mode 100644 breathecode/utils/tests/i18n/__init__.py delete mode 100644 breathecode/utils/tests/i18n/tests_translation.py diff --git a/Pipfile.lock b/Pipfile.lock index 3c1e90fa1..ba3cf041e 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -150,11 +150,11 @@ }, "aiohttp-retry": { "hashes": [ - "sha256:3aeeead8f6afe48272db93ced9440cf4eda8b6fd7ee2abb25357b7eb28525b45", - "sha256:9a8e637e31682ad36e1ff9f8bcba912fcfc7d7041722bc901a4b948da4d71ea9" + "sha256:7661af92471e9a96c69d9b8f32021360272073397e6a15bc44c1726b12f46056", + "sha256:92c47f1580040208bac95d9a8389a87227ef22758530f2e3f4683395e42c41b5" ], "markers": "python_version >= '3.7'", - "version": "==2.8.3" + "version": "==2.9.0" }, "aiosignal": { "hashes": [ @@ -264,11 +264,11 @@ }, "bleach": { "hashes": [ - "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe", - "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6" + "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", + "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f" ], - "markers": "python_version >= '3.8'", - "version": "==6.1.0" + "markers": "python_version >= '3.9'", + "version": "==6.2.0" }, "brotli": { "hashes": [ @@ -414,11 +414,11 @@ "django" ], "hashes": [ - "sha256:702794d0db45746118ec63b02e81f8d8edd1b87b69337a9c3898eb6ea2830f0e", - "sha256:cefa43f74ba301d4f60d5ed6bfdc5b50152228922958415d2fd9a99b3eca103f" + "sha256:7cb8678ae393d78a299cf2f95cffb6118ae1f55bad9f691d3044b82c246fc694", + "sha256:9d7f86da5a36e2c19ba91bb126789608977b2e29ae5255622285a5c040e36244" ], "markers": "python_version >= '3.11'", - "version": "==1.0.3" + "version": "==1.1.0" }, "celery": { "hashes": [ @@ -835,12 +835,12 @@ }, "django-cors-headers": { "hashes": [ - "sha256:28c1ded847aa70208798de3e42422a782f427b8b720e8d7319d34b654b5978e6", - "sha256:6c01a85cf1ec779a7bde621db853aa3ce5c065a5ba8e27df7a9f9e8dac310f4f" + "sha256:14d76b4b4c8d39375baeddd89e4f08899051eeaf177cb02a29bd6eae8cf63aa8", + "sha256:8edbc0497e611c24d5150e0055d3b178c6534b8ed826fb6f53b21c63f5d48ba3" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==4.5.0" + "version": "==4.6.0" }, "django-cryptography-django5": { "hashes": [ @@ -860,12 +860,12 @@ }, "django-minify-html": { "hashes": [ - "sha256:1bae5742b54388b69346a6c29a7b193ab71f3cada038d633c36186c515fca228", - "sha256:ed6a2e06c290107bc0ff38f26f5faa703c952cca9c142c191088493087482b5a" + "sha256:50722ffa2c4cf83f7ac1848a00ecfa234b242bf76b4f33b5416cf37e244d6c5f", + "sha256:de04c86d062f0c4922314985480974d6ecfad5256c1480bb328aa0d3093f820f" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==1.10.0" + "version": "==1.11.0" }, "django-phonenumber-field": { "extras": [ @@ -1138,11 +1138,11 @@ "grpc" ], "hashes": [ - "sha256:4a152fd11a9f774ea606388d423b68aa7e6d6a0ffe4c8266f74979613ec09f81", - "sha256:6869eacb2a37720380ba5898312af79a4d30b8bca1548fb4093e0697dc4bdf5d" + "sha256:26f8d76b96477db42b55fd02a33aae4a42ec8b86b98b94969b7333a2c828bf35", + "sha256:a6652b6bd51303902494998626653671703c420f6f4c88cfd3f50ed723e9d021" ], "markers": "python_version >= '3.7'", - "version": "==2.21.0" + "version": "==2.22.0" }, "google-api-python-client": { "hashes": [ @@ -1155,12 +1155,12 @@ }, "google-apps-meet": { "hashes": [ - "sha256:36e600f61a8bf0cccee6a3c3c0e77736f46da39ccd7bcbf76162971961739d8d", - "sha256:64e0e4a2e5fa1ce00203997ca633c76e2d97809ddf6de42e8ce61bf58d8701e1" + "sha256:282e6c3c8aa49f4a34a6b2ee31c94720801adf200777c7a08f491736de45e4ba", + "sha256:3125f4f8dcdb78f4973a02653540ce6c8c19c4369e2cbed731b7a9f1cbe41d1d" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==0.1.8" + "version": "==0.1.9" }, "google-auth": { "hashes": [ @@ -1240,12 +1240,12 @@ }, "google-cloud-recaptcha-enterprise": { "hashes": [ - "sha256:69b0347b3f834812633e1902dddf62b10a3b3aca1e31b52a8861d3302304ace2", - "sha256:af9f7dbd56ee9d79e850307515118da42f465837a95b7af860ee315dab164042" + "sha256:169aeae9982d6c85b27caff228ae3ec66dd955ce2e80bb3d3fcf9f842a2b7696", + "sha256:651a1179f9ffa5ab6b519e693b1f808d5058681183273395b534a17575cb3592" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.22.1" + "version": "==1.23.0" }, "google-cloud-storage": { "hashes": [ @@ -1307,10 +1307,10 @@ }, "graphene": { "hashes": [ - "sha256:28bf359b802cdb808130a5521135d4c88a262564598cfdc91628d2c172b99dce", - "sha256:65e5ec84c5b7fb4fc41518acfbafb62ebb393d3982fbba00cd5393e431a80b97" + "sha256:828a8d7b1bce450566a72cc8733716c20f3acfc659960de73dd38f46dc302040", + "sha256:ca98f853201293871cdc7f55faf2523a9bc077181fe0f4947db5a243e5c67083" ], - "version": "==3.4" + "version": "==3.4.1" }, "graphene-django": { "hashes": [ @@ -1420,75 +1420,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.7'", "version": "==3.1.1" }, "grpcio": { "hashes": [ - "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" + "sha256:01f616a964e540638af5130469451cf580ba8c7329f45ca998ab66e0c7dcdb04", + "sha256:0489063974d1452436139501bf6b180f63d4977223ee87488fe36858c5725292", + "sha256:0e6f255980afef598a9e64a24efce87b625e3e3c80a45162d111a461a9f92955", + "sha256:0f3e49c738396e93b7ba9016e153eb09e0778e776df6090c1b8c91877cc1c426", + "sha256:178f5db771c4f9a9facb2ab37a434c46cb9be1a75e820f187ee3d1e7805c4f65", + "sha256:1a65b503d008f066e994f34f456e0647e5ceb34cfcec5ad180b1b44020ad4970", + "sha256:1d7616d2ded471231c701489190379e0c311ee0a6c756f3c03e6a62b95a7146e", + "sha256:24e8a26dbfc5274d7474c27759b54486b8de23c709d76695237515bc8b5baeab", + "sha256:267d1745894200e4c604958da5f856da6293f063327cb049a51fe67348e4f953", + "sha256:299b3d8c4f790c6bcca485f9963b4846dd92cf6f1b65d3697145d005c80f9fe8", + "sha256:3b6c16489326d79ead41689c4b84bc40d522c9a7617219f4ad94bc7f448c5085", + "sha256:3dc2ed4cabea4dc14d5e708c2b426205956077cc5de419b4d4079315017e9732", + "sha256:43112046864317498a33bdc4797ae6a268c36345a910de9b9c17159d8346602f", + "sha256:4422581cdc628f77302270ff839a44f4c24fdc57887dc2a45b7e53d8fc2376af", + "sha256:4e7b904484a634a0fff132958dabdb10d63e0927398273917da3ee103e8d1f78", + "sha256:5721e66a594a6c4204458004852719b38f3d5522082be9061d6510b455c90afc", + "sha256:5db70d32d6703b89912af16d6d45d78406374a8b8ef0d28140351dd0ec610e98", + "sha256:5ed601c4c6008429e3d247ddb367fe8c7259c355757448d7c1ef7bd4a6739e8e", + "sha256:60336bff760fbb47d7e86165408126f1dded184448e9a4c892189eb7c9d3f90f", + "sha256:608d87d1bdabf9e2868b12338cd38a79969eaf920c89d698ead08f48de9c0f9e", + "sha256:60e6a4dcf5af7bbc36fd9f81c9f372e8ae580870a9e4b6eafe948cd334b81cf3", + "sha256:638354e698fd0c6c76b04540a850bf1db27b4d2515a19fcd5cf645c48d3eb1ed", + "sha256:699e964923b70f3101393710793289e42845791ea07565654ada0969522d0a38", + "sha256:7818c0454027ae3384235a65210bbf5464bd715450e30a3d40385453a85a70cb", + "sha256:786a5b18544622bfb1e25cc08402bd44ea83edfb04b93798d85dca4d1a0b5be5", + "sha256:804c6457c3cd3ec04fe6006c739579b8d35c86ae3298ffca8de57b493524b771", + "sha256:80b866f73224b0634f4312a4674c1be21b2b4afa73cb20953cbbb73a6b36c3cc", + "sha256:85f69fdc1d28ce7cff8de3f9c67db2b0ca9ba4449644488c1e0303c146135ddb", + "sha256:85f862069b86a305497e74d0dc43c02de3d1d184fc2c180993aa8aa86fbd19b8", + "sha256:8a00efecde9d6fcc3ab00c13f816313c040a28450e5e25739c24f432fc6d3c75", + "sha256:8a23cbcc5bb11ea7dc6163078be36c065db68d915c24f5faa4f872c573bb400f", + "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f", + "sha256:917e8d8994eed1d86b907ba2a61b9f0aef27a2155bca6cbb322430fc7135b7bb", + "sha256:95b5f2b857856ed78d72da93cd7d09b6db8ef30102e5e7fe0961fe4d9f7d48e8", + "sha256:9e838cad2176ebd5d4a8bb03955138d6589ce9e2ce5d51c3ada34396dbd2dba8", + "sha256:9fd042de4a82e3e7aca44008ee2fb5da01b3e5adb316348c21980f7f58adc311", + "sha256:a25bdea92b13ff4d7790962190bf6bf5c4639876e01c0f3dda70fc2769616335", + "sha256:a6703916c43b1d468d0756c8077b12017a9fcb6a1ef13faf49e67d20d7ebda62", + "sha256:a93deda571a1bf94ec1f6fcda2872dad3ae538700d94dc283c672a3b508ba3af", + "sha256:aa0162e56fd10a5547fac8774c4899fc3e18c1aa4a4759d0ce2cd00d3696ea6b", + "sha256:b49359977c6ec9f5d0573ea4e0071ad278ef905aa74e420acc73fd28ce39e9ce", + "sha256:beee96c8c0b1a75d556fe57b92b58b4347c77a65781ee2ac749d550f2a365dc1", + "sha256:c7a01337407dd89005527623a4a72c5c8e2894d22bead0895306b23c6695698f", + "sha256:c9b929f13677b10f63124c1a410994a401cdd85214ad83ab67cc077fc7e480f0", + "sha256:cdc491ae35a13535fd9196acb5afe1af37c8237df2e54427be3eecda3653127e", + "sha256:e279330bef1744040db8fc432becc8a727b84f456ab62b744d3fdb83f327e121", + "sha256:e29ca27bec8e163dca0c98084040edec3bc49afd10f18b412f483cc68c712744", + "sha256:e7d1797a8a3845437d327145959a2c0c47c05947c9eef5ff1a4c80e499dcc6fa", + "sha256:ea33986b70f83844cd00814cee4451055cd8cab36f00ac64a31f5bb09b31919e", + "sha256:ec74ef02010186185de82cc594058a3ccd8d86821842bbac9873fd4a2cf8be8d", + "sha256:f26b0b547eb8d00e195274cdfc63ce64c8fc2d3e2d00b12bf468ece41a0423a0", + "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d", + "sha256:f5b76ff64aaac53fede0cc93abf57894ab2a7362986ba22243d06218b93efe46", + "sha256:f9fff78ba10d4250bfc07a01bd6254a6d87dc67f9627adece85c0b2ed754fa96", + "sha256:fa0c739ad8b1996bd24823950e3cb5152ae91fca1c09cc791190bf1627ffefba" + ], + "version": "==1.67.1" }, "grpcio-status": { "hashes": [ - "sha256:0e79e2e01ba41a6ca6ed9d7a825323c511fe1653a646f8014c7e3c8132527acc", - "sha256:c3e5a86fa007e9e263cd5f988a8a907484da4caab582874ea2a4a6092734046b" + "sha256:16e6c085950bdacac97c779e6a502ea671232385e6e37f258884d6883392c2bd", + "sha256:2bf38395e028ceeecfd8866b081f61628114b384da7d51ae064ddc8d766a5d11" ], - "version": "==1.67.0" + "version": "==1.67.1" }, "gunicorn": { "hashes": [ @@ -2547,12 +2547,12 @@ }, "openai": { "hashes": [ - "sha256:57e9e37bc407f39bb6ec3a27d7e8fb9728b2779936daa1fcf95df17d3edfaccc", - "sha256:87b7d0f69d85f5641678d414b7ee3082363647a5c66a462ed7f3ccb59582da0d" + "sha256:20f408c32fc5cb66e60c6882c994cdca580a5648e10045cd840734194f033418", + "sha256:be2c4e77721b166cce8130e544178b7d579f751b4b074ffbaade3854b6f85ec5" ], "index": "pypi", "markers": "python_full_version >= '3.7.1'", - "version": "==1.52.2" + "version": "==1.53.0" }, "packaging": { "hashes": [ @@ -2710,12 +2710,12 @@ }, "pip": { "hashes": [ - "sha256:2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2", - "sha256:5b5e490b5e9cb275c879595064adce9ebd31b854e3e803740b72f9ccf34a45b8" + "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", + "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==24.2" + "version": "==24.3.1" }, "platformdirs": { "hashes": [ @@ -2996,44 +2996,50 @@ }, "pyarrow": { "hashes": [ - "sha256:0071ce35788c6f9077ff9ecba4858108eebe2ea5a3f7cf2cf55ebc1dbc6ee24a", - "sha256:02dae06ce212d8b3244dd3e7d12d9c4d3046945a5933d28026598e9dbbda1fca", - "sha256:0b72e87fe3e1db343995562f7fff8aee354b55ee83d13afba65400c178ab2597", - "sha256:0cdb0e627c86c373205a2f94a510ac4376fdc523f8bb36beab2e7f204416163c", - "sha256:13d7a460b412f31e4c0efa1148e1d29bdf18ad1411eb6757d38f8fbdcc8645fb", - "sha256:1c8856e2ef09eb87ecf937104aacfa0708f22dfeb039c363ec99735190ffb977", - "sha256:2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3", - "sha256:32503827abbc5aadedfa235f5ece8c4f8f8b0a3cf01066bc8d29de7539532687", - "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7", - "sha256:42bf93249a083aca230ba7e2786c5f673507fa97bbd9725a1e2754715151a204", - "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28", - "sha256:5984f416552eea15fd9cee03da53542bf4cddaef5afecefb9aa8d1010c335087", - "sha256:6b244dc8e08a23b3e352899a006a26ae7b4d0da7bb636872fa8f5884e70acf15", - "sha256:757074882f844411fcca735e39aae74248a1531367a7c80799b4266390ae51cc", - "sha256:75c06d4624c0ad6674364bb46ef38c3132768139ddec1c56582dbac54f2663e2", - "sha256:7c7916bff914ac5d4a8fe25b7a25e432ff921e72f6f2b7547d1e325c1ad9d155", - "sha256:9b564a51fbccfab5a04a80453e5ac6c9954a9c5ef2890d1bcf63741909c3f8df", - "sha256:9b8a823cea605221e61f34859dcc03207e52e409ccf6354634143e23af7c8d22", - "sha256:9ba11c4f16976e89146781a83833df7f82077cdab7dc6232c897789343f7891a", - "sha256:a155acc7f154b9ffcc85497509bcd0d43efb80d6f733b0dc3bb14e281f131c8b", - "sha256:a27532c38f3de9eb3e90ecab63dfda948a8ca859a66e3a47f5f42d1e403c4d03", - "sha256:a48ddf5c3c6a6c505904545c25a4ae13646ae1f8ba703c4df4a1bfe4f4006bda", - "sha256:a5c8b238d47e48812ee577ee20c9a2779e6a5904f1708ae240f53ecbee7c9f07", - "sha256:af5ff82a04b2171415f1410cff7ebb79861afc5dae50be73ce06d6e870615204", - "sha256:b0c6ac301093b42d34410b187bba560b17c0330f64907bfa4f7f7f2444b0cf9b", - "sha256:d7d192305d9d8bc9082d10f361fc70a73590a4c65cf31c3e6926cd72b76bc35c", - "sha256:da1e060b3876faa11cee287839f9cc7cdc00649f475714b8680a05fd9071d545", - "sha256:db023dc4c6cae1015de9e198d41250688383c3f9af8f565370ab2b4cb5f62655", - "sha256:dc5c31c37409dfbc5d014047817cb4ccd8c1ea25d19576acf1a001fe07f5b420", - "sha256:dec8d129254d0188a49f8a1fc99e0560dc1b85f60af729f47de4046015f9b0a5", - "sha256:e3343cb1e88bc2ea605986d4b94948716edc7a8d14afd4e2c097232f729758b4", - "sha256:edca18eaca89cd6382dfbcff3dd2d87633433043650c07375d095cd3517561d8", - "sha256:f1e70de6cb5790a50b01d2b686d54aaf73da01266850b05e3af2a1bc89e16053", - "sha256:f553ca691b9e94b202ff741bdd40f6ccb70cdd5fbf65c187af132f1317de6145", - "sha256:f7ae2de664e0b158d1607699a16a488de3d008ba99b3a7aa5de1cbc13574d047", - "sha256:fa3c246cc58cb5a4a5cb407a18f193354ea47dd0648194e6265bd24177982fe8" - ], - "version": "==17.0.0" + "sha256:00178509f379415a3fcf855af020e3340254f990a8534294ec3cf674d6e255fd", + "sha256:03f40b65a43be159d2f97fd64dc998f769d0995a50c00f07aab58b0b3da87e1f", + "sha256:082ba62bdcb939824ba1ce10b8acef5ab621da1f4c4805e07bfd153617ac19d4", + "sha256:09f30690b99ce34e0da64d20dab372ee54431745e4efb78ac938234a282d15f9", + "sha256:2333f93260674e185cfbf208d2da3007132572e56871f451ba1a556b45dae6e2", + "sha256:28f9c39a56d2c78bf6b87dcc699d520ab850919d4a8c7418cd20eda49874a2ea", + "sha256:2c664ab88b9766413197733c1720d3dcd4190e8fa3bbdc3710384630a0a7207b", + "sha256:2c992716cffb1088414f2b478f7af0175fd0a76fea80841b1706baa8fb0ebaad", + "sha256:2e549a748fa8b8715e734919923f69318c953e077e9c02140ada13e59d043310", + "sha256:320ae9bd45ad7ecc12ec858b3e8e462578de060832b98fc4d671dee9f10d9954", + "sha256:336addb8b6f5208be1b2398442c703a710b6b937b1a046065ee4db65e782ff5a", + "sha256:3ac24b2be732e78a5a3ac0b3aa870d73766dd00beba6e015ea2ea7394f8b4e55", + "sha256:45476490dd4adec5472c92b4d253e245258745d0ccaabe706f8d03288ed60a79", + "sha256:4c381857754da44326f3a49b8b199f7f87a51c2faacd5114352fc78de30d3aba", + "sha256:4d5ca5d707e158540312e09fd907f9f49bacbe779ab5236d9699ced14d2293b8", + "sha256:58a62549a3e0bc9e03df32f350e10e1efb94ec6cf63e3920c3385b26663948ce", + "sha256:5f0510608ccd6e7f02ca8596962afb8c6cc84c453e7be0da4d85f5f4f7b0328a", + "sha256:603cd8ad4976568954598ef0a6d4ed3dfb78aff3d57fa8d6271f470f0ce7d34f", + "sha256:606e9a3dcb0f52307c5040698ea962685fb1c852d72379ee9412be7de9c5f9e2", + "sha256:616ea2826c03c16e87f517c46296621a7c51e30400f6d0a61be645f203aa2b93", + "sha256:66dcc216ebae2eb4c37b223feaf82f15b69d502821dde2da138ec5a3716e7463", + "sha256:6dd1b52d0d58dd8f685ced9971eb49f697d753aa7912f0a8f50833c7a7426319", + "sha256:871b292d4b696b09120ed5bde894f79ee2a5f109cb84470546471df264cae136", + "sha256:8c70c1965cde991b711a98448ccda3486f2a336457cf4ec4dca257a926e149c9", + "sha256:8f40ec677e942374e3d7f2fad6a67a4c2811a8b975e8703c6fd26d3b168a90e2", + "sha256:907ee0aa8ca576f5e0cdc20b5aeb2ad4d3953a3b4769fc4b499e00ef0266f02f", + "sha256:a1824f5b029ddd289919f354bc285992cb4e32da518758c136271cf66046ef22", + "sha256:a6aa027b1a9d2970cf328ccd6dbe4a996bc13c39fd427f502782f5bdb9ca20f5", + "sha256:a71ab0589a63a3e987beb2bc172e05f000a5c5be2636b4b263c44034e215b5d7", + "sha256:b30a927c6dff89ee702686596f27c25160dd6c99be5bcc1513a763ae5b1bfc03", + "sha256:b46591222c864e7da7faa3b19455196416cd8355ff6c2cc2e65726a760a3c420", + "sha256:b5bd7fd32e3ace012d43925ea4fc8bd1b02cc6cc1e9813b518302950e89b5a22", + "sha256:bc1daf7c425f58527900876354390ee41b0ae962a73ad0959b9d829def583bb1", + "sha256:bc97316840a349485fbb137eb8d0f4d7057e1b2c1272b1a20eebbbe1848f5122", + "sha256:be08af84808dff63a76860847c48ec0416928a7b3a17c2f49a072cac7c45efbd", + "sha256:d5795e37c0a33baa618c5e054cd61f586cf76850a251e2b21355e4085def6280", + "sha256:d6331f280c6e4521c69b201a42dd978f60f7e129511a55da9e0bfe426b4ebb8d", + "sha256:dc892be34dbd058e8d189b47db1e33a227d965ea8805a235c8a7286f7fd17d3a", + "sha256:e7ab04f272f98ebffd2a0661e4e126036f6936391ba2889ed2d44c5006237802", + "sha256:eb7e3abcda7e1e6b83c2dc2909c8d045881017270a119cc6ee7fdcfe71d02df8", + "sha256:f1a198a50c409ab2d009fbf20956ace84567d67f2c5701511d4dd561fae6f32e", + "sha256:fe92efcdbfa0bcf2fa602e466d7f2905500f33f09eb90bf0bcf2e6ca41b574c8" + ], + "version": "==18.0.0" }, "pyasn1": { "hashes": [ @@ -3303,12 +3309,12 @@ }, "pyright": { "hashes": [ - "sha256:7071ac495593b2258ccdbbf495f1a5c0e5f27951f6b429bed4e8b296eb5cd21d", - "sha256:8e9975e34948ba5f8e07792a9c9d2bdceb2c6c0b61742b068d2229ca2bc4a9d9" + "sha256:577de60224f7fe36505d5b181231e3a395d427b7873be0bbcaa962a29ea93a60", + "sha256:6a1f495a261a72e12ad17e20d1ae3df4511223c773b19407cfa006229b1b08a5" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.1.386" + "version": "==1.1.387" }, "pytest": { "hashes": [ @@ -3741,18 +3747,18 @@ }, "service-identity": { "hashes": [ - "sha256:6829c9d62fb832c2e1c435629b0a8c476e1929881f28bee4d20bc24161009221", - "sha256:a28caf8130c8a5c1c7a6f5293faaf239bbfb7751e4862436920ee6f2616f568a" + "sha256:6b047fbd8a84fd0bb0d55ebce4031e400562b9196e1e0d3e0fe2b8a59f6d4a85", + "sha256:b8683ba13f0d39c6cd5d625d2c5f65421d6d707b013b375c355751557cbe8e09" ], - "version": "==24.1.0" + "version": "==24.2.0" }, "setuptools": { "hashes": [ - "sha256:753bb6ebf1f465a1912e19ed1d41f403a79173a9acf66a42e7e6aec45c3c16ec", - "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8" + "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", + "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686" ], "markers": "python_version >= '3.8'", - "version": "==75.2.0" + "version": "==75.3.0" }, "six": { "hashes": [ @@ -3850,12 +3856,12 @@ }, "stripe": { "hashes": [ - "sha256:0bbdfe54a09728fc54db6bb099b2f440ffc111d07d9674b0f04bfd0d3c1cbdcf", - "sha256:e79e02238d0ec7c89a64986af941dcae41e4857489b7cc83497acce9def356e5" + "sha256:4c53d61d7b596070324bfa5d7215843145fe5466e48973d828aab41ad209b5ce", + "sha256:dec812eabc95488862be40e6c799acdaf2e1225d686490a793f949fab745fdd0" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==11.1.1" + "version": "==11.2.0" }, "text-unidecode": { "hashes": [ @@ -3898,11 +3904,11 @@ }, "tqdm": { "hashes": [ - "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd", - "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad" + "sha256:223e8b5359c2efc4b30555531f09e9f2f3589bcd7fdd389271191031b49b7a63", + "sha256:4bdd694238bef1485ce839d67967ab50af8f9272aab687c0d7702a01da0be090" ], "markers": "python_version >= '3.7'", - "version": "==4.66.5" + "version": "==4.66.6" }, "traitlets": { "hashes": [ @@ -3914,12 +3920,12 @@ }, "twilio": { "hashes": [ - "sha256:608d78a903d403465aac1840c58a6546a090b7e222d2bf539a93c3831072880c", - "sha256:d6a97a77b98cc176a61c960f11894af385bc1c11b93e2e8b79fdfb9601788fb0" + "sha256:c5d7f4cfeb50a7928397b8f819c8f7fb2bb956a1a2cabbda1df1d7a40f9ce1d7", + "sha256:d42691f7fe1faaa5ba82942f169bfea4d7f01a0a542a456d82018fb49bd1f5b2" ], "index": "pypi", "markers": "python_full_version >= '3.7.0'", - "version": "==9.3.5" + "version": "==9.3.6" }, "twisted": { "extras": [ @@ -3927,11 +3933,11 @@ "tls" ], "hashes": [ - "sha256:5a60147f044187a127ec7da96d170d49bcce50c6fd36f594e60f4587eff4d394", - "sha256:734832ef98108136e222b5230075b1079dad8a3fc5637319615619a7725b0c81" + "sha256:02951299672595fea0f70fa2d5f7b5e3d56836157eda68859a6ad6492d36756e", + "sha256:67aa7c8aa94387385302acf44ade12967c747858c8bcce0f11d38077a11c5326" ], "markers": "python_full_version >= '3.8.0'", - "version": "==24.7.0" + "version": "==24.10.0" }, "txaio": { "hashes": [ @@ -4242,11 +4248,11 @@ "brotli" ], "hashes": [ - "sha256:58c7a6cd811e275a6c91af22e96e87da0b1109e9a53bb7464116ef4c963bf636", - "sha256:a1ae85e01fdc9815d12fa33f17765bc132ed2c54fa76daf9e39e879dd93566f6" + "sha256:486bd7267a375fa9650b136daaec156ac572971acc8bf99add90817a530dd1d4", + "sha256:df12dce147a043d1956d81d288c6f0044147c6d2ab9726e5772ac50fb45d2280" ], - "markers": "python_version >= '3.8'", - "version": "==6.7.0" + "markers": "python_version >= '3.9'", + "version": "==6.8.2" }, "wrapt": { "hashes": [ @@ -4333,93 +4339,101 @@ }, "yarl": { "hashes": [ - "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" + "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac", + "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47", + "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91", + "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5", + "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df", + "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3", + "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463", + "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b", + "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5", + "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74", + "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3", + "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3", + "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4", + "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0", + "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299", + "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2", + "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac", + "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61", + "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931", + "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21", + "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3", + "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7", + "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96", + "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f", + "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243", + "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857", + "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f", + "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca", + "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488", + "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da", + "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948", + "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5", + "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934", + "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473", + "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7", + "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685", + "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e", + "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147", + "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71", + "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67", + "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04", + "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822", + "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11", + "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6", + "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0", + "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec", + "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda", + "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556", + "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4", + "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c", + "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f", + "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8", + "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba", + "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258", + "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95", + "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383", + "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e", + "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938", + "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374", + "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55", + "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139", + "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17", + "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217", + "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d", + "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d", + "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe", + "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199", + "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d", + "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8", + "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c", + "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29", + "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172", + "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860", + "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7", + "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170", + "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138", + "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06", + "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004", + "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159", + "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da", + "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988", + "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75" ], "markers": "python_version >= '3.9'", - "version": "==1.16.0" + "version": "==1.17.1" }, - "zope-interface": { + "zope.event": { + "hashes": [ + "sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26", + "sha256:bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd" + ], + "markers": "python_version >= '3.7'", + "version": "==5.0" + }, + "zope.interface": { "hashes": [ "sha256:0de23bcb93401994ea00bc5c677ef06d420340ac0a4e9c10d80e047b9ce5af3f", "sha256:179ad46ece518c9084cb272e4a69d266b659f7f8f48e51706746c2d8a426433e", @@ -4462,14 +4476,6 @@ "markers": "python_version >= '3.8'", "version": "==7.1.1" }, - "zope.event": { - "hashes": [ - "sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26", - "sha256:bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd" - ], - "markers": "python_version >= '3.7'", - "version": "==5.0" - }, "zstandard": { "hashes": [ "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473", @@ -4643,11 +4649,11 @@ "django" ], "hashes": [ - "sha256:702794d0db45746118ec63b02e81f8d8edd1b87b69337a9c3898eb6ea2830f0e", - "sha256:cefa43f74ba301d4f60d5ed6bfdc5b50152228922958415d2fd9a99b3eca103f" + "sha256:7cb8678ae393d78a299cf2f95cffb6118ae1f55bad9f691d3044b82c246fc694", + "sha256:9d7f86da5a36e2c19ba91bb126789608977b2e29ae5255622285a5c040e36244" ], "markers": "python_version >= '3.11'", - "version": "==1.0.3" + "version": "==1.1.0" }, "certifi": { "hashes": [ @@ -4892,20 +4898,20 @@ }, "django-stubs": { "hashes": [ - "sha256:86128c228b65e6c9a85e5dc56eb1c6f41125917dae0e21e6cfecdf1b27e630c5", - "sha256:b98d49a80aa4adf1433a97407102d068de26c739c405431d93faad96dd282c40" + "sha256:126d354bbdff4906c4e93e6361197f6fbfb6231c3df6def85a291dae6f9f577b", + "sha256:c4dc64260bd72e6d32b9e536e8dd0d9247922f0271f82d1d5132a18f24b388ac" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==5.1.0" + "version": "==5.1.1" }, "django-stubs-ext": { "hashes": [ - "sha256:a455fc222c90b30b29ad8c53319559f5b54a99b4197205ddbb385aede03b395d", - "sha256:ed7d51c0b731651879fc75f331fb0806d98b67bfab464e96e2724db6b46ef926" + "sha256:3907f99e178c93323e2ce908aef8352adb8c047605161f8d9e5e7b4efb5a6a9c", + "sha256:db7364e4f50ae7e5360993dbd58a3a57ea4b2e7e5bab0fbd525ccdb3e7975d1c" ], "markers": "python_version >= '3.8'", - "version": "==5.1.0" + "version": "==5.1.1" }, "djangorestframework-stubs": { "hashes": [ @@ -5022,11 +5028,11 @@ "grpc" ], "hashes": [ - "sha256:4a152fd11a9f774ea606388d423b68aa7e6d6a0ffe4c8266f74979613ec09f81", - "sha256:6869eacb2a37720380ba5898312af79a4d30b8bca1548fb4093e0697dc4bdf5d" + "sha256:26f8d76b96477db42b55fd02a33aae4a42ec8b86b98b94969b7333a2c828bf35", + "sha256:a6652b6bd51303902494998626653671703c420f6f4c88cfd3f50ed723e9d021" ], "markers": "python_version >= '3.7'", - "version": "==2.21.0" + "version": "==2.22.0" }, "google-api-python-client": { "hashes": [ @@ -5048,12 +5054,12 @@ }, "google-apps-meet": { "hashes": [ - "sha256:36e600f61a8bf0cccee6a3c3c0e77736f46da39ccd7bcbf76162971961739d8d", - "sha256:64e0e4a2e5fa1ce00203997ca633c76e2d97809ddf6de42e8ce61bf58d8701e1" + "sha256:282e6c3c8aa49f4a34a6b2ee31c94720801adf200777c7a08f491736de45e4ba", + "sha256:3125f4f8dcdb78f4973a02653540ce6c8c19c4369e2cbed731b7a9f1cbe41d1d" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==0.1.8" + "version": "==0.1.9" }, "google-auth": { "hashes": [ @@ -5164,7 +5170,7 @@ "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79", "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f" ], - "markers": "python_version >= '3' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))", + "markers": "python_version >= '3.7'", "version": "==3.1.1" }, "griffe": { @@ -5177,70 +5183,70 @@ }, "grpcio": { "hashes": [ - "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" + "sha256:01f616a964e540638af5130469451cf580ba8c7329f45ca998ab66e0c7dcdb04", + "sha256:0489063974d1452436139501bf6b180f63d4977223ee87488fe36858c5725292", + "sha256:0e6f255980afef598a9e64a24efce87b625e3e3c80a45162d111a461a9f92955", + "sha256:0f3e49c738396e93b7ba9016e153eb09e0778e776df6090c1b8c91877cc1c426", + "sha256:178f5db771c4f9a9facb2ab37a434c46cb9be1a75e820f187ee3d1e7805c4f65", + "sha256:1a65b503d008f066e994f34f456e0647e5ceb34cfcec5ad180b1b44020ad4970", + "sha256:1d7616d2ded471231c701489190379e0c311ee0a6c756f3c03e6a62b95a7146e", + "sha256:24e8a26dbfc5274d7474c27759b54486b8de23c709d76695237515bc8b5baeab", + "sha256:267d1745894200e4c604958da5f856da6293f063327cb049a51fe67348e4f953", + "sha256:299b3d8c4f790c6bcca485f9963b4846dd92cf6f1b65d3697145d005c80f9fe8", + "sha256:3b6c16489326d79ead41689c4b84bc40d522c9a7617219f4ad94bc7f448c5085", + "sha256:3dc2ed4cabea4dc14d5e708c2b426205956077cc5de419b4d4079315017e9732", + "sha256:43112046864317498a33bdc4797ae6a268c36345a910de9b9c17159d8346602f", + "sha256:4422581cdc628f77302270ff839a44f4c24fdc57887dc2a45b7e53d8fc2376af", + "sha256:4e7b904484a634a0fff132958dabdb10d63e0927398273917da3ee103e8d1f78", + "sha256:5721e66a594a6c4204458004852719b38f3d5522082be9061d6510b455c90afc", + "sha256:5db70d32d6703b89912af16d6d45d78406374a8b8ef0d28140351dd0ec610e98", + "sha256:5ed601c4c6008429e3d247ddb367fe8c7259c355757448d7c1ef7bd4a6739e8e", + "sha256:60336bff760fbb47d7e86165408126f1dded184448e9a4c892189eb7c9d3f90f", + "sha256:608d87d1bdabf9e2868b12338cd38a79969eaf920c89d698ead08f48de9c0f9e", + "sha256:60e6a4dcf5af7bbc36fd9f81c9f372e8ae580870a9e4b6eafe948cd334b81cf3", + "sha256:638354e698fd0c6c76b04540a850bf1db27b4d2515a19fcd5cf645c48d3eb1ed", + "sha256:699e964923b70f3101393710793289e42845791ea07565654ada0969522d0a38", + "sha256:7818c0454027ae3384235a65210bbf5464bd715450e30a3d40385453a85a70cb", + "sha256:786a5b18544622bfb1e25cc08402bd44ea83edfb04b93798d85dca4d1a0b5be5", + "sha256:804c6457c3cd3ec04fe6006c739579b8d35c86ae3298ffca8de57b493524b771", + "sha256:80b866f73224b0634f4312a4674c1be21b2b4afa73cb20953cbbb73a6b36c3cc", + "sha256:85f69fdc1d28ce7cff8de3f9c67db2b0ca9ba4449644488c1e0303c146135ddb", + "sha256:85f862069b86a305497e74d0dc43c02de3d1d184fc2c180993aa8aa86fbd19b8", + "sha256:8a00efecde9d6fcc3ab00c13f816313c040a28450e5e25739c24f432fc6d3c75", + "sha256:8a23cbcc5bb11ea7dc6163078be36c065db68d915c24f5faa4f872c573bb400f", + "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f", + "sha256:917e8d8994eed1d86b907ba2a61b9f0aef27a2155bca6cbb322430fc7135b7bb", + "sha256:95b5f2b857856ed78d72da93cd7d09b6db8ef30102e5e7fe0961fe4d9f7d48e8", + "sha256:9e838cad2176ebd5d4a8bb03955138d6589ce9e2ce5d51c3ada34396dbd2dba8", + "sha256:9fd042de4a82e3e7aca44008ee2fb5da01b3e5adb316348c21980f7f58adc311", + "sha256:a25bdea92b13ff4d7790962190bf6bf5c4639876e01c0f3dda70fc2769616335", + "sha256:a6703916c43b1d468d0756c8077b12017a9fcb6a1ef13faf49e67d20d7ebda62", + "sha256:a93deda571a1bf94ec1f6fcda2872dad3ae538700d94dc283c672a3b508ba3af", + "sha256:aa0162e56fd10a5547fac8774c4899fc3e18c1aa4a4759d0ce2cd00d3696ea6b", + "sha256:b49359977c6ec9f5d0573ea4e0071ad278ef905aa74e420acc73fd28ce39e9ce", + "sha256:beee96c8c0b1a75d556fe57b92b58b4347c77a65781ee2ac749d550f2a365dc1", + "sha256:c7a01337407dd89005527623a4a72c5c8e2894d22bead0895306b23c6695698f", + "sha256:c9b929f13677b10f63124c1a410994a401cdd85214ad83ab67cc077fc7e480f0", + "sha256:cdc491ae35a13535fd9196acb5afe1af37c8237df2e54427be3eecda3653127e", + "sha256:e279330bef1744040db8fc432becc8a727b84f456ab62b744d3fdb83f327e121", + "sha256:e29ca27bec8e163dca0c98084040edec3bc49afd10f18b412f483cc68c712744", + "sha256:e7d1797a8a3845437d327145959a2c0c47c05947c9eef5ff1a4c80e499dcc6fa", + "sha256:ea33986b70f83844cd00814cee4451055cd8cab36f00ac64a31f5bb09b31919e", + "sha256:ec74ef02010186185de82cc594058a3ccd8d86821842bbac9873fd4a2cf8be8d", + "sha256:f26b0b547eb8d00e195274cdfc63ce64c8fc2d3e2d00b12bf468ece41a0423a0", + "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d", + "sha256:f5b76ff64aaac53fede0cc93abf57894ab2a7362986ba22243d06218b93efe46", + "sha256:f9fff78ba10d4250bfc07a01bd6254a6d87dc67f9627adece85c0b2ed754fa96", + "sha256:fa0c739ad8b1996bd24823950e3cb5152ae91fca1c09cc791190bf1627ffefba" + ], + "version": "==1.67.1" }, "grpcio-status": { "hashes": [ - "sha256:0e79e2e01ba41a6ca6ed9d7a825323c511fe1653a646f8014c7e3c8132527acc", - "sha256:c3e5a86fa007e9e263cd5f988a8a907484da4caab582874ea2a4a6092734046b" + "sha256:16e6c085950bdacac97c779e6a502ea671232385e6e37f258884d6883392c2bd", + "sha256:2bf38395e028ceeecfd8866b081f61628114b384da7d51ae064ddc8d766a5d11" ], - "version": "==1.67.0" + "version": "==1.67.1" }, "httplib2": { "hashes": [ @@ -5281,6 +5287,103 @@ "markers": "python_version >= '3.7'", "version": "==3.1.4" }, + "langcodes": { + "hashes": [ + "sha256:68f686fc3d358f222674ecf697ddcee3ace3c2fe325083ecad2543fd28a20e77", + "sha256:a24879fed238013ac3af2424b9d1124e38b4a38b2044fd297c8ff38e5912e718" + ], + "markers": "python_version >= '3.8'", + "version": "==3.4.1" + }, + "language-data": { + "hashes": [ + "sha256:77d5cab917f91ee0b2f1aa7018443e911cf8985ef734ca2ba3940770f6a3816b", + "sha256:82a86050bbd677bfde87d97885b17566cfe75dad3ac4f5ce44b52c28f752e773" + ], + "version": "==1.2.0" + }, + "marisa-trie": { + "hashes": [ + "sha256:06b099dd743676dbcd8abd8465ceac8f6d97d8bfaabe2c83b965495523b4cef2", + "sha256:0ee6cf6a16d9c3d1c94e21c8e63c93d8b34bede170ca4e937e16e1c0700d399f", + "sha256:0fe69fb9ffb2767746181f7b3b29bbd3454d1d24717b5958e030494f3d3cddf3", + "sha256:1db3213b451bf058d558f6e619bceff09d1d130214448a207c55e1526e2773a1", + "sha256:20948e40ab2038e62b7000ca6b4a913bc16c91a2c2e6da501bd1f917eeb28d51", + "sha256:2428b495003c189695fb91ceeb499f9fcced3a2dce853e17fa475519433c67ff", + "sha256:24a81aa7566e4ec96fc4d934581fe26d62eac47fc02b35fa443a0bb718b471e8", + "sha256:25688f34cac3bec01b4f655ffdd6c599a01f0bd596b4a79cf56c6f01a7df3560", + "sha256:36aa4401a1180615f74d575571a6550081d84fc6461e9aefc0bb7b2427af098e", + "sha256:3a27c408e2aefc03e0f1d25b2ff2afb85aac3568f6fa2ae2a53b57a2e87ce29d", + "sha256:3ad356442c2fea4c2a6f514738ddf213d23930f942299a2b2c05df464a00848a", + "sha256:429858a0452a7bedcf67bc7bb34383d00f666c980cb75a31bcd31285fbdd4403", + "sha256:436f62d27714970b9cdd3b3c41bdad046f260e62ebb0daa38125ef70536fc73b", + "sha256:46e528ee71808c961baf8c3ce1c46a8337ec7a96cc55389d11baafe5b632f8e9", + "sha256:4728ed3ae372d1ea2cdbd5eaa27b8f20a10e415d1f9d153314831e67d963f281", + "sha256:536ea19ce6a2ce61c57fed4123ecd10d18d77a0db45cd2741afff2b8b68f15b3", + "sha256:5685a14b3099b1422c4f59fa38b0bf4b5342ee6cc38ae57df9666a0b28eeaad3", + "sha256:594f98491a96c7f1ffe13ce292cef1b4e63c028f0707effdea0f113364c1ae6c", + "sha256:5bd39a4e1cc839a88acca2889d17ebc3f202a5039cd6059a13148ce75c8a6244", + "sha256:5e43891a37b0d7f618819fea14bd951289a0a8e3dd0da50c596139ca83ebb9b1", + "sha256:5e649f3dc8ab5476732094f2828cc90cac3be7c79bc0c8318b6fda0c1d248db4", + "sha256:5fe5a286f997848a410eebe1c28657506adaeb405220ee1e16cfcfd10deb37f2", + "sha256:638506eacf20ca503fff72221a7e66a6eadbf28d6a4a6f949fcf5b1701bb05ec", + "sha256:6532615111eec2c79e711965ece0bc95adac1ff547a7fff5ffca525463116deb", + "sha256:66b23e5b35dd547f85bf98db7c749bc0ffc57916ade2534a6bbc32db9a4abc44", + "sha256:6704adf0247d2dda42e876b793be40775dff46624309ad99bc7537098bee106d", + "sha256:67f0c2ec82c20a02c16fc9ba81dee2586ef20270127c470cb1054767aa8ba310", + "sha256:6946100a43f933fad6bc458c502a59926d80b321d5ac1ed2ff9c56605360496f", + "sha256:6c50c861faad0a5c091bd763e0729f958c316e678dfa065d3984fbb9e4eacbcd", + "sha256:735c363d9aaac82eaf516a28f7c6b95084c2e176d8231c87328dc80e112a9afa", + "sha256:746a7c60a17fccd3cfcfd4326926f02ea4fcdfc25d513411a0c4fc8e4a1ca51f", + "sha256:7ac170d20b97beb75059ba65d1ccad6b434d777c8992ab41ffabdade3b06dd74", + "sha256:7cca7f96236ffdbf49be4b2e42c132e3df05968ac424544034767650913524de", + "sha256:7e7b1786e852e014d03e5f32dbd991f9a9eb223dd3fa9a2564108b807e4b7e1c", + "sha256:852d7bcf14b0c63404de26e7c4c8d5d65ecaeca935e93794331bc4e2f213660b", + "sha256:875a6248e60fbb48d947b574ffa4170f34981f9e579bde960d0f9a49ea393ecc", + "sha256:8951e7ce5d3167fbd085703b4cbb3f47948ed66826bef9a2173c379508776cf5", + "sha256:8cf4f25cf895692b232f49aa5397af6aba78bb679fb917a05fce8d3cb1ee446d", + "sha256:952af3a5859c3b20b15a00748c36e9eb8316eb2c70bd353ae1646da216322908", + "sha256:98042040d1d6085792e8d0f74004fc0f5f9ca6091c298f593dd81a22a4643854", + "sha256:9c9b32b14651a6dcf9e8857d2df5d29d322a1ea8c0be5c8ffb88f9841c4ec62b", + "sha256:9e956e6a46f604b17d570901e66f5214fb6f658c21e5e7665deace236793cef6", + "sha256:9f627f4e41be710b6cb6ed54b0128b229ac9d50e2054d9cde3af0fef277c23cf", + "sha256:a2eb41d2f9114d8b7bd66772c237111e00d2bae2260824560eaa0a1e291ce9e8", + "sha256:a3c98613180cf1730e221933ff74b454008161b1a82597e41054127719964188", + "sha256:a4177dc0bd1374e82be9b2ba4d0c2733b0a85b9d154ceeea83a5bee8c1e62fbf", + "sha256:a8443d116c612cfd1961fbf76769faf0561a46d8e317315dd13f9d9639ad500c", + "sha256:aa7cd17e1c690ce96c538b2f4aae003d9a498e65067dd433c52dd069009951d4", + "sha256:ad548117744b2bcf0e3d97374608be0a92d18c2af13d98b728d37cd06248e571", + "sha256:aefe0973cc4698e0907289dc0517ab0c7cdb13d588201932ff567d08a50b0e2e", + "sha256:b0ef26733d3c836be79e812071e1a431ce1f807955a27a981ebb7993d95f842b", + "sha256:b1ce340da608530500ab4f963f12d6bfc8d8680900919a60dbdc9b78c02060a4", + "sha256:b1ec93f0d1ee6d7ab680a6d8ea1a08bf264636358e92692072170032dda652ba", + "sha256:b2a7d00f53f4945320b551bccb826b3fb26948bde1a10d50bb9802fabb611b10", + "sha256:b2eacb84446543082ec50f2fb563f1a94c96804d4057b7da8ed815958d0cdfbe", + "sha256:b5ea16e69bfda0ac028c921b58de1a4aaf83d43934892977368579cd3c0a2554", + "sha256:bd45142501300e7538b2e544905580918b67b1c82abed1275fe4c682c95635fa", + "sha256:c0fe2ace0cb1806badbd1c551a8ec2f8d4cf97bf044313c082ef1acfe631ddca", + "sha256:c484410911182457a8a1a0249d0c09c01e2071b78a0a8538cd5f7fa45589b13a", + "sha256:ce37d8ca462bb64cc13f529b9ed92f7b21fe8d1f1679b62e29f9cb7d0e888b49", + "sha256:ce59bcd2cda9bb52b0e90cc7f36413cd86c3d0ce7224143447424aafb9f4aa48", + "sha256:d2a82eb21afdaf22b50d9b996472305c05ca67fc4ff5a026a220320c9c961db6", + "sha256:d5648c6dcc5dc9200297fb779b1663b8a4467bda034a3c69bd9c32d8afb33b1d", + "sha256:d659fda873d8dcb2c14c2c331de1dee21f5a902d7f2de7978b62c6431a8850ef", + "sha256:d7eb20bf0e8b55a58d2a9b518aabc4c18278787bdba476c551dd1c1ed109e509", + "sha256:da4e4facb79614cc4653cfd859f398e4db4ca9ab26270ff12610e50ed7f1f6c6", + "sha256:de1665eaafefa48a308e4753786519888021740501a15461c77bdfd57638e6b4", + "sha256:e2699255d7ac610dee26d4ae7bda5951d05c7d9123a22e1f7c6a6f1964e0a4e4", + "sha256:e58788004adda24c401d1751331618ed20c507ffc23bfd28d7c0661a1cf0ad16", + "sha256:e70869737cc0e5bd903f620667da6c330d6737048d1f44db792a6af68a1d35be", + "sha256:eba6ca45500ca1a042466a0684aacc9838e7f20fe2605521ee19f2853062798f", + "sha256:ed3fb4ed7f2084597e862bcd56c56c5529e773729a426c083238682dba540e98", + "sha256:f2806f75817392cedcacb24ac5d80b0350dde8d3861d67d045c1d9b109764114", + "sha256:f35c2603a6be168088ed1db6ad1704b078aa8f39974c60888fbbced95dcadad4", + "sha256:f4cd800704a5fc57e53c39c3a6b0c9b1519ebdbcb644ede3ee67a06eb542697d", + "sha256:f713af9b8aa66a34cd3a78c7d150a560a75734713abe818a69021fd269e927fa" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.1" + }, "markdown": { "hashes": [ "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", @@ -5771,11 +5874,11 @@ }, "pymdown-extensions": { "hashes": [ - "sha256:41cdde0a77290e480cf53892f5c5e50921a7ee3e5cd60ba91bf19837b33badcf", - "sha256:bc8847ecc9e784a098efd35e20cba772bc5a1b529dfcef9dc1972db9021a1049" + "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77", + "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7" ], "markers": "python_version >= '3.8'", - "version": "==10.11.2" + "version": "==10.12" }, "pyparsing": { "hashes": [ @@ -5787,12 +5890,12 @@ }, "pyright": { "hashes": [ - "sha256:7071ac495593b2258ccdbbf495f1a5c0e5f27951f6b429bed4e8b296eb5cd21d", - "sha256:8e9975e34948ba5f8e07792a9c9d2bdceb2c6c0b61742b068d2229ca2bc4a9d9" + "sha256:577de60224f7fe36505d5b181231e3a395d427b7873be0bbcaa962a29ea93a60", + "sha256:6a1f495a261a72e12ad17e20d1ae3df4511223c773b19407cfa006229b1b08a5" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==1.1.386" + "version": "==1.1.387" }, "pytest": { "hashes": [ @@ -5813,12 +5916,12 @@ }, "pytest-cov": { "hashes": [ - "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652", - "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857" + "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35", + "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==5.0.0" + "markers": "python_version >= '3.9'", + "version": "==6.0.0" }, "pytest-gevent": { "hashes": [ @@ -5957,11 +6060,11 @@ }, "setuptools": { "hashes": [ - "sha256:753bb6ebf1f465a1912e19ed1d41f403a79173a9acf66a42e7e6aec45c3c16ec", - "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8" + "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", + "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686" ], "markers": "python_version >= '3.8'", - "version": "==75.2.0" + "version": "==75.3.0" }, "six": { "hashes": [ @@ -6037,11 +6140,11 @@ }, "virtualenv": { "hashes": [ - "sha256:2ca56a68ed615b8fe4326d11a0dca5dfbe8fd68510fb6c6349163bed3c15f2b2", - "sha256:44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655" + "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba", + "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4" ], "markers": "python_version >= '3.8'", - "version": "==20.27.0" + "version": "==20.27.1" }, "watchdog": { "hashes": [ diff --git a/breathecode/activity/views.py b/breathecode/activity/views.py index d5928d2cd..b887ce3cd 100644 --- a/breathecode/activity/views.py +++ b/breathecode/activity/views.py @@ -1,5 +1,7 @@ import json +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.contrib.auth.models import User from django.db.models import Avg, Count, Q, Sum from google.cloud import bigquery @@ -14,8 +16,6 @@ from breathecode.authenticate.actions import get_user_language from breathecode.services.google_cloud.big_query import BigQuery from breathecode.utils import HeaderLimitOffsetPagination, capable_of, getLogger -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .utils import ( generate_created_at, diff --git a/breathecode/admissions/views.py b/breathecode/admissions/views.py index e382ed02c..eeaa8fea8 100644 --- a/breathecode/admissions/views.py +++ b/breathecode/admissions/views.py @@ -2,16 +2,18 @@ import pytz from adrf.decorators import api_view +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.contrib.auth.models import AnonymousUser, User from django.db.models import FloatField, Max, Q, Value from django.utils import timezone -from slugify import slugify from rest_framework import status from rest_framework.decorators import permission_classes from rest_framework.exceptions import ParseError, PermissionDenied, ValidationError from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView +from slugify import slugify from breathecode.admissions import tasks from breathecode.admissions.caches import CohortCache, CohortUserCache, SyllabusVersionCache, TeacherCache, UserCache @@ -26,8 +28,6 @@ localize_query, ) from breathecode.utils.find_by_full_name import query_like_by_full_name -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .actions import find_asset_on_json, test_syllabus, update_asset_on_json from .models import ( diff --git a/breathecode/assessment/serializers.py b/breathecode/assessment/serializers.py index c8f3f5a93..e3edfd3c7 100644 --- a/breathecode/assessment/serializers.py +++ b/breathecode/assessment/serializers.py @@ -1,3 +1,5 @@ +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.contrib.auth.models import AnonymousUser from django.utils import timezone from rest_framework import serializers @@ -5,8 +7,6 @@ from breathecode.admissions.models import Academy from breathecode.utils import serpy from breathecode.utils.datetime_integer import duration_to_str, from_now -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .models import Answer, Assessment, Option, Question, UserAssessment diff --git a/breathecode/assessment/views.py b/breathecode/assessment/views.py index d498fce5b..87491598e 100644 --- a/breathecode/assessment/views.py +++ b/breathecode/assessment/views.py @@ -1,4 +1,7 @@ from datetime import datetime + +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.db.models import Q from django.utils import timezone from rest_framework import status @@ -12,8 +15,6 @@ from breathecode.marketing.serializers import FormEntryBigSerializer, PostFormEntrySerializer from breathecode.marketing.tasks import persist_single_lead from breathecode.utils import APIViewExtensions, GenerateLookupsMixin, capable_of -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .models import Answer, Assessment, AssessmentLayout, AssessmentThreshold, Option, Question, UserAssessment from .serializers import ( diff --git a/breathecode/assignments/permissions/consumers.py b/breathecode/assignments/permissions/consumers.py index 685ff2cd8..b0208c2dc 100644 --- a/breathecode/assignments/permissions/consumers.py +++ b/breathecode/assignments/permissions/consumers.py @@ -1,11 +1,12 @@ import logging +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import PaymentException + from breathecode.admissions.actions import is_no_saas_student_up_to_date_in_any_cohort from breathecode.authenticate.actions import get_user_language from breathecode.payments.models import Service from breathecode.utils.decorators import ServiceContext -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import PaymentException logger = logging.getLogger(__name__) diff --git a/breathecode/assignments/receivers.py b/breathecode/assignments/receivers.py index d692b22ac..0370ad3d0 100644 --- a/breathecode/assignments/receivers.py +++ b/breathecode/assignments/receivers.py @@ -1,6 +1,7 @@ import logging from typing import Any, Type +from capyc.core.i18n import translation from django.dispatch import receiver from breathecode.admissions.signals import syllabus_asset_slug_updated @@ -8,7 +9,6 @@ from breathecode.authenticate.actions import get_user_settings from breathecode.authenticate.models import CredentialsGithub from breathecode.notify.actions import send_email_message -from breathecode.utils.i18n import translation from .models import RepositoryDeletionOrder, Task from .signals import assignment_status_updated, status_updated diff --git a/breathecode/assignments/views.py b/breathecode/assignments/views.py index a04e4a210..408a50662 100644 --- a/breathecode/assignments/views.py +++ b/breathecode/assignments/views.py @@ -4,6 +4,7 @@ from adrf.views import APIView from asgiref.sync import sync_to_async +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from circuitbreaker import CircuitBreakerError from django.contrib import messages @@ -30,7 +31,6 @@ from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions from breathecode.utils.decorators import consume, has_permission from breathecode.utils.decorators.capable_of import acapable_of -from breathecode.utils.i18n import translation from breathecode.utils.multi_status_response import MultiStatusResponse from .actions import deliver_task, sync_cohort_tasks diff --git a/breathecode/authenticate/actions.py b/breathecode/authenticate/actions.py index 77bcbbf54..f1dbc261e 100644 --- a/breathecode/authenticate/actions.py +++ b/breathecode/authenticate/actions.py @@ -9,6 +9,8 @@ from adrf.requests import AsyncRequest from asgiref.sync import sync_to_async +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.contrib.auth.models import User from django.core.handlers.wsgi import WSGIRequest from django.db.models import Q @@ -17,8 +19,6 @@ import breathecode.notify.actions as notify_actions from breathecode.admissions.models import Academy, CohortUser from breathecode.services.github import Github -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .models import ( AcademyAuthSettings, diff --git a/breathecode/authenticate/serializers.py b/breathecode/authenticate/serializers.py index 123f47966..62c93aafc 100644 --- a/breathecode/authenticate/serializers.py +++ b/breathecode/authenticate/serializers.py @@ -4,6 +4,8 @@ import random import urllib.parse +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.contrib.auth.models import Permission, User from django.db import IntegrityError from django.db.models import Q @@ -18,8 +20,6 @@ from breathecode.events.models import Event from breathecode.registry.models import Asset from breathecode.utils import serpy, validate_conversion_info -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .models import ( AcademyAuthSettings, diff --git a/breathecode/authenticate/tasks.py b/breathecode/authenticate/tasks.py index 299968011..e7dbcbad6 100644 --- a/breathecode/authenticate/tasks.py +++ b/breathecode/authenticate/tasks.py @@ -1,6 +1,8 @@ import logging import os +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from celery import shared_task from django.contrib.auth.models import User from task_manager.core.exceptions import AbortTask, RetryTask @@ -10,8 +12,6 @@ from breathecode.marketing.actions import validate_email from breathecode.notify import actions as notify_actions from breathecode.utils.decorators import TaskPriority -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .actions import add_to_organization, get_user_settings, remove_from_organization, set_gitpod_user_expiration diff --git a/breathecode/authenticate/views.py b/breathecode/authenticate/views.py index 5af384284..0ab6bf13a 100644 --- a/breathecode/authenticate/views.py +++ b/breathecode/authenticate/views.py @@ -13,6 +13,7 @@ from adrf.decorators import api_view from adrf.views import APIView from asgiref.sync import sync_to_async +from capyc.core.i18n import translation from capyc.core.managers import feature from capyc.rest_framework.exceptions import ValidationException from circuitbreaker import CircuitBreakerError @@ -50,7 +51,6 @@ from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions from breathecode.utils.decorators import has_permission from breathecode.utils.find_by_full_name import query_like_by_full_name -from breathecode.utils.i18n import translation from breathecode.utils.shorteners import C from breathecode.utils.views import private_view, render_message, set_query_parameter diff --git a/breathecode/events/permissions/consumers.py b/breathecode/events/permissions/consumers.py index 00eca1d45..fbf9cf682 100644 --- a/breathecode/events/permissions/consumers.py +++ b/breathecode/events/permissions/consumers.py @@ -1,5 +1,7 @@ import logging +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import PaymentException, ValidationException from django.db.models import Q from django.utils import timezone @@ -9,8 +11,6 @@ from breathecode.events.actions import get_my_event_types from breathecode.events.models import Event, LiveClass from breathecode.utils.decorators import ServiceContext -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import PaymentException, ValidationException logger = logging.getLogger(__name__) diff --git a/breathecode/events/serializers.py b/breathecode/events/serializers.py index 23e10e2da..d3d86812e 100644 --- a/breathecode/events/serializers.py +++ b/breathecode/events/serializers.py @@ -2,6 +2,8 @@ from datetime import timedelta from typing import Any +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.db.models.query_utils import Q from django.utils import timezone from rest_framework import serializers @@ -15,8 +17,6 @@ from breathecode.registry.models import Asset from breathecode.registry.serializers import AssetSmallSerializer from breathecode.utils import serpy -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .models import Event, EventbriteWebhook, EventCheckin, EventType, LiveClass, Organization diff --git a/breathecode/events/views.py b/breathecode/events/views.py index 8734e28e7..bf7625fcf 100644 --- a/breathecode/events/views.py +++ b/breathecode/events/views.py @@ -4,6 +4,8 @@ from datetime import datetime, timedelta import pytz +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.contrib.auth.models import User from django.db.models.query_utils import Q from django.http.response import HttpResponse @@ -36,10 +38,8 @@ ) from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions from breathecode.utils.decorators import consume -from breathecode.utils.i18n import translation from breathecode.utils.multi_status_response import MultiStatusResponse from breathecode.utils.views import private_view, render_message -from capyc.rest_framework.exceptions import ValidationException from .actions import fix_datetime_weekday, get_my_event_types, update_timeslots_out_of_range from .models import ( diff --git a/breathecode/marketing/actions.py b/breathecode/marketing/actions.py index 87cd8e78f..e3fa8fdcb 100644 --- a/breathecode/marketing/actions.py +++ b/breathecode/marketing/actions.py @@ -6,6 +6,7 @@ import numpy as np import requests +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from django.db.models import Q from django.utils import timezone @@ -17,7 +18,6 @@ from breathecode.services.activecampaign import ACOldClient, ActiveCampaign, ActiveCampaignClient, acp_ids, map_ids from breathecode.services.brevo import Brevo from breathecode.utils import getLogger -from breathecode.utils.i18n import translation from .models import AcademyAlias, ActiveCampaignAcademy, Automation, FormEntry, Tag diff --git a/breathecode/marketing/views.py b/breathecode/marketing/views.py index 4f153596f..310f980a6 100644 --- a/breathecode/marketing/views.py +++ b/breathecode/marketing/views.py @@ -10,6 +10,7 @@ import pandas as pd import pytz +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from circuitbreaker import CircuitBreakerError from django.contrib.auth.models import AnonymousUser @@ -37,7 +38,6 @@ from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions from breathecode.utils.decorators import validate_captcha, validate_captcha_challenge from breathecode.utils.find_by_full_name import query_like_by_full_name -from breathecode.utils.i18n import translation from .actions import convert_data_frame, sync_automations, sync_tags, validate_email from .models import ( diff --git a/breathecode/media/settings.py b/breathecode/media/settings.py index fb1d946d0..4dc6650b8 100644 --- a/breathecode/media/settings.py +++ b/breathecode/media/settings.py @@ -3,6 +3,7 @@ from typing import Any, Awaitable, Callable, Literal, Optional, Type, TypedDict from adrf.requests import AsyncRequest +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from django.core.files.uploadedfile import InMemoryUploadedFile, TemporaryUploadedFile from PIL import Image @@ -11,7 +12,6 @@ from breathecode.media.models import Chunk, File from breathecode.notify.models import Notification from breathecode.services.google_cloud.storage import Storage -from breathecode.utils.i18n import translation type TypeValidator = Callable[[str, Any], None] type TypeValidatorWrapper = Callable[[Type[Any]], TypeValidator] diff --git a/breathecode/media/tasks.py b/breathecode/media/tasks.py index 4b7c30400..c7dc29bee 100644 --- a/breathecode/media/tasks.py +++ b/breathecode/media/tasks.py @@ -1,6 +1,7 @@ import logging from typing import Any, Optional +from capyc.core.i18n import translation from django.core.cache import cache from task_manager.core.exceptions import AbortTask, RetryTask from task_manager.django.decorators import task @@ -8,7 +9,6 @@ from breathecode.authenticate.actions import get_user_settings from breathecode.notify.models import Notification from breathecode.utils.decorators import TaskPriority -from breathecode.utils.i18n import translation from .models import File from .utils import media_settings diff --git a/breathecode/media/utils.py b/breathecode/media/utils.py index fad5387c1..e06e8335d 100644 --- a/breathecode/media/utils.py +++ b/breathecode/media/utils.py @@ -6,6 +6,7 @@ from typing import Any, Optional, Tuple, overload from adrf.views import APIView +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from rest_framework import status from rest_framework.response import Response @@ -15,7 +16,6 @@ from breathecode.media.models import Chunk, File from breathecode.media.signals import schedule_deletion from breathecode.services.google_cloud.storage import Storage -from breathecode.utils.i18n import translation from .settings import MEDIA_MIME_ALLOWED, MEDIA_SETTINGS, MediaSettings, Schema diff --git a/breathecode/media/views.py b/breathecode/media/views.py index d237d2ff7..ecfa64df0 100644 --- a/breathecode/media/views.py +++ b/breathecode/media/views.py @@ -7,6 +7,7 @@ import requests from adrf.views import APIView from adrf.viewsets import ViewSet +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from circuitbreaker import CircuitBreakerError from django.db.models import Q @@ -35,7 +36,6 @@ from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions from breathecode.utils.decorators import has_permission from breathecode.utils.decorators.capable_of import acapable_of -from breathecode.utils.i18n import translation logger = logging.getLogger(__name__) MIME_ALLOWED = [ diff --git a/breathecode/mentorship/permissions/consumers.py b/breathecode/mentorship/permissions/consumers.py index 24ee0abeb..d0d67532c 100644 --- a/breathecode/mentorship/permissions/consumers.py +++ b/breathecode/mentorship/permissions/consumers.py @@ -1,5 +1,6 @@ import logging +from capyc.core.i18n import translation from capyc.core.managers import feature from capyc.rest_framework.exceptions import PaymentException, ValidationException @@ -9,7 +10,6 @@ from breathecode.mentorship.models import MentorProfile, MentorshipService from breathecode.payments.models import Consumable, ConsumptionSession from breathecode.utils.decorators import ServiceContext -from breathecode.utils.i18n import translation logger = logging.getLogger(__name__) diff --git a/breathecode/mentorship/serializers.py b/breathecode/mentorship/serializers.py index 98468c6c9..957e6a710 100644 --- a/breathecode/mentorship/serializers.py +++ b/breathecode/mentorship/serializers.py @@ -1,3 +1,5 @@ +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from rest_framework import serializers import breathecode.activity.tasks as tasks_activity @@ -8,8 +10,6 @@ from breathecode.services.calendly import Calendly from breathecode.utils import serpy from breathecode.utils.datetime_integer import duration_to_str -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .actions import generate_mentor_bill from .models import CalendlyOrganization, MentorProfile, MentorshipBill, MentorshipService, MentorshipSession diff --git a/breathecode/mentorship/views.py b/breathecode/mentorship/views.py index cbdd28909..92f3c42cc 100644 --- a/breathecode/mentorship/views.py +++ b/breathecode/mentorship/views.py @@ -8,6 +8,7 @@ import urllib.parse import timeago +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from django.contrib import messages from django.contrib.auth.models import User @@ -36,7 +37,6 @@ from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions from breathecode.utils.decorators import consume, has_permission from breathecode.utils.find_by_full_name import query_like_by_full_name -from breathecode.utils.i18n import translation from breathecode.utils.multi_status_response import MultiStatusResponse from breathecode.utils.views import private_view, render_message, set_query_parameter diff --git a/breathecode/monitoring/serializers.py b/breathecode/monitoring/serializers.py index 51594aee2..c3807bd58 100644 --- a/breathecode/monitoring/serializers.py +++ b/breathecode/monitoring/serializers.py @@ -1,5 +1,7 @@ import logging +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.core.validators import URLValidator from rest_framework import serializers @@ -8,8 +10,6 @@ from breathecode.monitoring.models import RepositorySubscription from breathecode.monitoring.tasks import async_subscribe_repo, async_unsubscribe_repo from breathecode.utils import serpy -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException logger = logging.getLogger(__name__) diff --git a/breathecode/monitoring/views.py b/breathecode/monitoring/views.py index eab4ab1bf..8308de41d 100644 --- a/breathecode/monitoring/views.py +++ b/breathecode/monitoring/views.py @@ -2,6 +2,8 @@ import os import stripe +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from circuitbreaker import CircuitBreakerError from django.db.models import Q from django.http import StreamingHttpResponse @@ -17,8 +19,6 @@ from breathecode.monitoring import signals from breathecode.utils import GenerateLookupsMixin, capable_of from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .actions import add_github_webhook, add_stripe_webhook from .models import CSVDownload, CSVUpload, RepositorySubscription, RepositoryWebhook diff --git a/breathecode/payments/actions.py b/breathecode/payments/actions.py index d4d27bee6..2a212bbdd 100644 --- a/breathecode/payments/actions.py +++ b/breathecode/payments/actions.py @@ -5,6 +5,7 @@ from typing import Literal, Optional, Type, TypedDict from adrf.requests import AsyncRequest +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from dateutil.relativedelta import relativedelta from django.contrib.auth.models import User @@ -22,7 +23,6 @@ from breathecode.media.models import File from breathecode.payments import tasks from breathecode.utils import getLogger -from breathecode.utils.i18n import translation from breathecode.utils.validate_conversion_info import validate_conversion_info from .models import ( diff --git a/breathecode/payments/models.py b/breathecode/payments/models.py index 67bd33422..d3a659bb7 100644 --- a/breathecode/payments/models.py +++ b/breathecode/payments/models.py @@ -7,6 +7,7 @@ from typing import Any, Optional from asgiref.sync import sync_to_async +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from currencies import Currency as CurrencyFormatter from django import forms @@ -23,7 +24,6 @@ from breathecode.events.models import EventType from breathecode.mentorship.models import MentorshipService from breathecode.payments import signals -from breathecode.utils.i18n import translation from breathecode.utils.validators.language import validate_language_code # https://devdocs.prestashop-project.org/1.7/webservice/resources/warehouses/ diff --git a/breathecode/payments/services/stripe.py b/breathecode/payments/services/stripe.py index de05eff02..56142e6dc 100644 --- a/breathecode/payments/services/stripe.py +++ b/breathecode/payments/services/stripe.py @@ -2,14 +2,14 @@ import os import stripe +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import PaymentException, ValidationException from django.contrib.auth.models import User from django.utils import timezone from breathecode.authenticate.models import UserSetting from breathecode.payments.models import Bag, Currency, FinancialReputation, Invoice, PaymentContact from breathecode.utils import getLogger -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import PaymentException, ValidationException logger = getLogger(__name__) diff --git a/breathecode/payments/tasks.py b/breathecode/payments/tasks.py index e8ae52645..08129c4b2 100644 --- a/breathecode/payments/tasks.py +++ b/breathecode/payments/tasks.py @@ -4,6 +4,7 @@ from datetime import datetime, timedelta from typing import Any, Optional +from capyc.core.i18n import translation from dateutil.relativedelta import relativedelta from django.core.cache import cache from django.utils import timezone @@ -21,7 +22,6 @@ 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 from .models import ( diff --git a/breathecode/payments/views.py b/breathecode/payments/views.py index 0b1ef1e35..e7711db0e 100644 --- a/breathecode/payments/views.py +++ b/breathecode/payments/views.py @@ -1,5 +1,6 @@ from datetime import timedelta +from capyc.core.i18n import translation from capyc.core.shorteners import C from capyc.rest_framework.exceptions import PaymentException, ValidationException from django.core.cache import cache @@ -78,7 +79,6 @@ from breathecode.payments.signals import reimburse_service_units from breathecode.utils import APIViewExtensions, getLogger, validate_conversion_info from breathecode.utils.decorators.capable_of import capable_of -from breathecode.utils.i18n import translation from breathecode.utils.redis import Lock logger = getLogger(__name__) diff --git a/breathecode/provisioning/actions.py b/breathecode/provisioning/actions.py index aa06d12aa..278a49557 100644 --- a/breathecode/provisioning/actions.py +++ b/breathecode/provisioning/actions.py @@ -5,6 +5,8 @@ from decimal import Decimal, localcontext from typing import Optional, TypedDict +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from dateutil.relativedelta import relativedelta from django.db.models import Q, QuerySet from django.utils import timezone @@ -22,8 +24,6 @@ from breathecode.registry.models import Asset from breathecode.services.github import Github from breathecode.utils import getLogger -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .models import ( ProvisioningBill, diff --git a/breathecode/provisioning/serializers.py b/breathecode/provisioning/serializers.py index 7acb79afc..e4bea99b6 100644 --- a/breathecode/provisioning/serializers.py +++ b/breathecode/provisioning/serializers.py @@ -1,10 +1,10 @@ import re +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from rest_framework import serializers from breathecode.utils import serpy -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException from .models import ProvisioningBill, ProvisioningContainer diff --git a/breathecode/provisioning/views.py b/breathecode/provisioning/views.py index 6a4f32649..a981b058e 100644 --- a/breathecode/provisioning/views.py +++ b/breathecode/provisioning/views.py @@ -5,6 +5,7 @@ from urllib.parse import parse_qs, urlencode, urlparse, urlunparse import pandas as pd +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException from circuitbreaker import CircuitBreakerError from dateutil.relativedelta import relativedelta @@ -25,21 +26,20 @@ from breathecode.provisioning.serializers import ( GetProvisioningBillSerializer, GetProvisioningBillSmallSerializer, + GetProvisioningProfile, GetProvisioningUserConsumptionSerializer, ProvisioningBillHTMLSerializer, ProvisioningBillSerializer, ProvisioningUserConsumptionHTMLResumeSerializer, - GetProvisioningProfile, ) from breathecode.utils import capable_of, cut_csv from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions from breathecode.utils.decorators import has_permission -from breathecode.utils.i18n import translation from breathecode.utils.io.file import count_csv_rows from breathecode.utils.views import private_view, render_message from .actions import get_provisioning_vendor -from .models import BILL_STATUS, ProvisioningBill, ProvisioningUserConsumption, ProvisioningProfile +from .models import BILL_STATUS, ProvisioningBill, ProvisioningProfile, ProvisioningUserConsumption @private_view() diff --git a/breathecode/registry/permissions/consumers.py b/breathecode/registry/permissions/consumers.py index af3b73964..349b2e14b 100644 --- a/breathecode/registry/permissions/consumers.py +++ b/breathecode/registry/permissions/consumers.py @@ -1,5 +1,7 @@ import logging +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import PaymentException, ValidationException from django.db.models import Q from breathecode.admissions.actions import is_no_saas_student_up_to_date_in_any_cohort @@ -7,8 +9,6 @@ from breathecode.authenticate.actions import get_user_language from breathecode.registry.models import Asset from breathecode.utils.decorators import ServiceContext -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import PaymentException, ValidationException logger = logging.getLogger(__name__) diff --git a/breathecode/registry/tests/signals/tests_asset_saved.py b/breathecode/registry/tests/signals/tests_asset_saved.py index 6219a5f2f..9469aeeb0 100644 --- a/breathecode/registry/tests/signals/tests_asset_saved.py +++ b/breathecode/registry/tests/signals/tests_asset_saved.py @@ -3,10 +3,10 @@ """ import random +from typing import Optional import capyc.pytest as capy import pytest -from aiohttp_retry import Optional from breathecode.registry.models import Asset diff --git a/breathecode/registry/views.py b/breathecode/registry/views.py index 5a6cd5d34..dfb43058f 100644 --- a/breathecode/registry/views.py +++ b/breathecode/registry/views.py @@ -4,6 +4,8 @@ from pathlib import Path import requests +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from circuitbreaker import CircuitBreakerError from django.core.validators import URLValidator from django.db.models import Count, Q @@ -25,9 +27,7 @@ from breathecode.services.seo import SEOAnalyzer from breathecode.utils import GenerateLookupsMixin, capable_of, consume from breathecode.utils.api_view_extensions.api_view_extensions import APIViewExtensions -from breathecode.utils.i18n import translation from breathecode.utils.views import render_message -from capyc.rest_framework.exceptions import ValidationException from .actions import ( AssetThumbnailGenerator, @@ -43,11 +43,11 @@ AssetAlias, AssetCategory, AssetComment, + AssetContext, AssetErrorLog, AssetImage, AssetKeyword, AssetTechnology, - AssetContext, ContentVariable, KeywordCluster, OriginalityScan, @@ -61,6 +61,7 @@ AssetBigSerializer, AssetBigTechnologySerializer, AssetCategorySerializer, + AssetContextSerializer, AssetExpandableSerializer, AssetImageSmallSerializer, AssetKeywordBigSerializer, @@ -85,7 +86,6 @@ SEOReportSerializer, TechnologyPUTSerializer, VariableSmallSerializer, - AssetContextSerializer, ) from .tasks import async_pull_from_github from .utils import is_url diff --git a/breathecode/utils/__init__.py b/breathecode/utils/__init__.py index c3021d78a..08162392e 100644 --- a/breathecode/utils/__init__.py +++ b/breathecode/utils/__init__.py @@ -11,7 +11,6 @@ from .header_limit_offset_pagination import * # noqa: F401 # from .validators import * -from .i18n import * # noqa: F401 from .io import * # noqa: F401 from .localize_query import * # noqa: F401 from .multi_status_response import * # noqa: F401 diff --git a/breathecode/utils/api_view_extensions/extensions/lookup_extension.py b/breathecode/utils/api_view_extensions/extensions/lookup_extension.py index c76f1456d..192571d04 100644 --- a/breathecode/utils/api_view_extensions/extensions/lookup_extension.py +++ b/breathecode/utils/api_view_extensions/extensions/lookup_extension.py @@ -1,12 +1,12 @@ from functools import cache from typing import Any, Callable, Optional +from capyc.core.i18n import translation +from capyc.rest_framework.exceptions import ValidationException from django.db.models import Q from django.utils import dateparse from breathecode.utils.api_view_extensions.extension_base import ExtensionBase -from breathecode.utils.i18n import translation -from capyc.rest_framework.exceptions import ValidationException __all__ = ["LookupExtension"] diff --git a/breathecode/utils/i18n.py b/breathecode/utils/i18n.py deleted file mode 100644 index 166106b8e..000000000 --- a/breathecode/utils/i18n.py +++ /dev/null @@ -1,167 +0,0 @@ -import logging -import os -from datetime import date, datetime, time -from functools import cache -from typing import Optional - -import pytz -from babel.dates import format_date as babel_format_date -from babel.dates import format_datetime as babel_format_datetime -from babel.dates import format_time as babel_format_time -from babel.dates import format_timedelta as babel_format_timedelta - -from breathecode.utils.exceptions import MalformedLanguageCode - -__all__ = ["translation", "format_date", "format_datetime", "format_time", "format_timedelta"] - -IS_TEST_ENV = os.getenv("ENV") == "test" -logger = logging.getLogger(__name__) - - -def get_short_code(code: str) -> str: - return code[:2] - - -def format_and_assert_code(code: str, from_kwargs: bool = False) -> None: - # do not remove the assertions - - is_short = len(code) == 2 - - # first two character only with lowercase - if not code[:2].islower(): - raise MalformedLanguageCode("Lang code is not lowercase") - - # last two character only with lowercase - if not is_short and from_kwargs and not code[3:].islower(): - raise MalformedLanguageCode("Country code is not lowercase") - - # last two character only with uppercase - elif not is_short and not from_kwargs and not code[2:].isupper(): - raise MalformedLanguageCode("Country code is not uppercase") - - separator = "_" if from_kwargs else "-" - - # the format is en or en-US - if not (len(code) == 2 or (len(code) == 5 and code[2] == separator)): - raise MalformedLanguageCode("Code malformed") - - if not from_kwargs: - return code.replace(separator, "_") - - return code - - -# parse a date to a str with the local format -def format_date(code: Optional[str], date: date, format="medium"): - """Translate the date to the local language.""" - - if not code: - code = "en" - - code = format_and_assert_code(code) - return babel_format_date(date, locale=code, format=format) - - -# parse a date to a str with the local format -def format_datetime(code: Optional[str], date: datetime, tz: pytz.BaseTzInfo | str = pytz.UTC, format="medium"): - """Translate the datetime to the local language.""" - - if not code: - code = "en" - - code = format_and_assert_code(code) - - if isinstance(tz, str): - tz = pytz.timezone(tz) - - return babel_format_datetime(date, locale=code, tzinfo=tz, format=format) - - -def format_time(code: Optional[str], date: time, format="full", **kwargs: str): - """Translate the time to the local language.""" - - if not code: - code = "en" - - code = format_and_assert_code(code) - return babel_format_time(date, locale=code, format=format) - - -def format_timedelta(code: Optional[str], date: time): - """Translate the timedelta to the local language.""" - - if not code: - code = "en" - - code = format_and_assert_code(code) - return babel_format_timedelta(date, locale=code) - - -def format_languages(code: str) -> list: - """Translate the language to the local language.""" - - languages = set() - - code.replace(" ", "") - - codes = [x for x in code.split(",") if x] - - for code in codes: - priority = 1 - if ";q=" in code: - s = code.split(";q=") - code = s[0] - try: - priority = float(s[1]) - except Exception: - raise MalformedLanguageCode( - 'The priority is not a float, example: "en;q=0.5"', slug="malformed-quantity-language-code" - ) - - languages.add((priority, code)) - - return [x[1] for x in sorted(languages, key=lambda x: (x[0], "-" in x[1], x[1]), reverse=True)] - - -def try_to_translate(code, **kwargs: str) -> str | None: - is_short = len(code) == 2 - - if code.lower() in kwargs: - return kwargs[code.lower()] - - elif not is_short and (short_code := get_short_code(code)) in kwargs: - return kwargs[short_code] - - return None - - -@cache -def translation(code: Optional[str] = "en", slug: Optional[str] = None, **kwargs: str) -> str: - """Get the translation.""" - - if not code: - code = "en" - - languages = [format_and_assert_code(language) for language in format_languages(code)] - - # do the assertions - for key in kwargs: - format_and_assert_code(key, from_kwargs=True) - - # the english if mandatory - if not ("en" in kwargs or "en_us" in kwargs): - raise MalformedLanguageCode("The english translation is mandatory") - - if slug and IS_TEST_ENV: - return slug - - for language in languages: - v = try_to_translate(language, **kwargs) - - if v: - return v - - if "en_us" in kwargs: - return kwargs["en_us"] - - return kwargs["en"] diff --git a/breathecode/utils/tests/i18n/__init__.py b/breathecode/utils/tests/i18n/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/breathecode/utils/tests/i18n/tests_translation.py b/breathecode/utils/tests/i18n/tests_translation.py deleted file mode 100644 index 8a8a388dd..000000000 --- a/breathecode/utils/tests/i18n/tests_translation.py +++ /dev/null @@ -1,113 +0,0 @@ -from email import header -import json -import random -from wsgiref import headers -from rest_framework.views import APIView -from rest_framework.decorators import api_view, permission_classes -from rest_framework.response import Response -from rest_framework.test import APIRequestFactory, force_authenticate -from breathecode.authenticate.models import ProfileAcademy -import breathecode.utils.decorators as decorators -from rest_framework.permissions import AllowAny -from rest_framework import status - -from breathecode.utils.exceptions import MalformedLanguageCode -from ..mixins import UtilsTestCase -from ...i18n import translation - - -def randomLang(self, force_complete=True): - code = "en" - - # avoid choices english - while code == "en": - code = self.bc.random.string(lower=True, size=2) - - if force_complete or random.randint(0, 1): - code += f"-{self.bc.random.string(upper=True, size=2)}" - - return code - - -def langWithRandomCountry(self, code): - return f"{code}-{self.bc.random.string(upper=True, size=2)}" - - -def getLangParam(code: str): - return code.lower().replace("-", "_") - - -def randomBool(): - return bool(random.randint(0, 1)) - - -class TranslationTestSuite(UtilsTestCase): - """ - 🔽🔽🔽 Function get id - """ - - def test_Given_RandomLang_When_EnglishTranstalionIsNotGiven_Expect_Exception(self): - code = randomLang(self, randomBool()) - with self.assertRaisesMessage(MalformedLanguageCode, "The english translation is mandatory"): - translation(code) - - def test_Given_RandomLang_When_GeneralEnglishTranstalionAndUsaEnglishIsNotGiven_Expect_Exception(self): - code = randomLang(self, randomBool()) - with self.assertRaisesMessage(MalformedLanguageCode, "The english translation is mandatory"): - translation(code, en_au="Hello") - - def test_Given_RandomLang_When_LangCodeUppercase_Expect_Exception(self): - code = randomLang(self, randomBool()) - with self.assertRaisesMessage(MalformedLanguageCode, "Lang code is not lowercase"): - translation(code, EN_au="Hello") - - def test_Given_RandomLang_When_CountryCodeUppercase_Expect_Exception(self): - code = randomLang(self, randomBool()) - with self.assertRaisesMessage(MalformedLanguageCode, "Country code is not lowercase"): - translation(code, en_AU="Hello") - - def test_Given_RandomLang_When_SpanishTranslationIsNotGiven_Expect_GetEnglishTranslation(self): - code = randomLang(self, randomBool()) - - cases = ["en", "en_us"] - for case in cases: - kwargs = {case: "Hello"} - string = translation(code, **kwargs) - self.assertEqual(string, "Hello") - - def test_Given_None_When_EnglishTranslationIsGiven_Expect_GetEnglishTranslation(self): - string = translation(None, en="Hello") - self.assertEqual(string, "Hello") - - def test_Given_LangEs_When_SpanishTranslationIsGiven_Expect_GetGenericSpanishTranslation(self): - code = langWithRandomCountry(self, "es") - param = getLangParam(code) - kwargs = { - "en": "Hello", - "es": "Hola", - param: "Qué onda tío", - } - string = translation("es", **kwargs) - self.assertEqual(string, "Hola") - - def test_Given_LangEsWithCountry_When_SpanishTranslationIsGiven_Expect_GetGenericSpanishTranslation(self): - code = langWithRandomCountry(self, "es") - kwargs = { - "en": "Hello", - "es": "Hola", - } - string = translation(code, **kwargs) - self.assertEqual(string, "Hola") - - def test_Given_LangEsWithCountry_When_SpanishWithCountryTranslationIsGiven_Expect_GetSpanishTranslationOfThatCountry( - self, - ): - code = langWithRandomCountry(self, "es") - param = getLangParam(code) - kwargs = { - "en": "Hello", - "es": "Hola", - param: "Qué onda tío", - } - string = translation(code, **kwargs) - self.assertEqual(string, "Qué onda tío") diff --git a/breathecode/utils/validate_conversion_info.py b/breathecode/utils/validate_conversion_info.py index aeadce734..139138d10 100644 --- a/breathecode/utils/validate_conversion_info.py +++ b/breathecode/utils/validate_conversion_info.py @@ -1,4 +1,4 @@ -from breathecode.utils.i18n import translation +from capyc.core.i18n import translation from capyc.rest_framework.exceptions import ValidationException __all__ = ["validate_conversion_info"] diff --git a/staging/pytest/core/fixtures/http.py b/staging/pytest/core/fixtures/http.py index dd6957e66..40b67bfd2 100644 --- a/staging/pytest/core/fixtures/http.py +++ b/staging/pytest/core/fixtures/http.py @@ -1,6 +1,6 @@ -from aiohttp_retry import Optional +from typing import Generator, Optional, Self + import pytest -from typing import Generator, Self # not implemented yet supported_http_clients = []