From ce7bd7784e7678840618fcc177e713976e4401a1 Mon Sep 17 00:00:00 2001 From: 5hojib Date: Tue, 10 Feb 2026 18:40:32 +0000 Subject: [PATCH 01/22] InkyPinkyPonky [no ci] Signed-off-by: 5hojib --- uv.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/uv.lock b/uv.lock index c14cda6f..67a22f8b 100644 --- a/uv.lock +++ b/uv.lock @@ -1861,27 +1861,27 @@ wheels = [ [[package]] name = "uv" -version = "0.10.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/36/f7fe4de0ad81234ac43938fe39c6ba84595c6b3a1868d786a4d7ad19e670/uv-0.10.0.tar.gz", hash = "sha256:ad01dd614a4bb8eb732da31ade41447026427397c5ad171cc98bd59579ef57ea", size = 3854103, upload-time = "2026-02-05T20:57:55.248Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/69/33fb64aee6ba138b1aaf957e20778e94a8c23732e41cdf68e6176aa2cf4e/uv-0.10.0-py3-none-linux_armv6l.whl", hash = "sha256:38dc0ccbda6377eb94095688c38e5001b8b40dfce14b9654949c1f0b6aa889df", size = 21984662, upload-time = "2026-02-05T20:57:19.076Z" }, - { url = "https://files.pythonhosted.org/packages/1a/5a/e3ff8a98cfbabc5c2d09bf304d2d9d2d7b2e7d60744241ac5ed762015e5c/uv-0.10.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a165582c1447691109d49d09dccb065d2a23852ff42bf77824ff169909aa85da", size = 21057249, upload-time = "2026-02-05T20:56:48.921Z" }, - { url = "https://files.pythonhosted.org/packages/ee/77/ec8f24f8d0f19c4fda0718d917bb78b9e6f02a4e1963b401f1c4f4614a54/uv-0.10.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:aefea608971f4f23ac3dac2006afb8eb2b2c1a2514f5fee1fac18e6c45fd70c4", size = 19827174, upload-time = "2026-02-05T20:57:10.581Z" }, - { url = "https://files.pythonhosted.org/packages/c6/7e/09b38b93208906728f591f66185a425be3acdb97c448460137d0e6ecb30a/uv-0.10.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:d4b621bcc5d0139502789dc299bae8bf55356d07b95cb4e57e50e2afcc5f43e1", size = 21629522, upload-time = "2026-02-05T20:57:29.959Z" }, - { url = "https://files.pythonhosted.org/packages/89/f3/48d92c90e869331306979efaa29a44c3e7e8376ae343edc729df0d534dfb/uv-0.10.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:b4bea728a6b64826d0091f95f28de06dd2dc786384b3d336a90297f123b4da0e", size = 21614812, upload-time = "2026-02-05T20:56:58.103Z" }, - { url = "https://files.pythonhosted.org/packages/ff/43/d0dedfcd4fe6e36cabdbeeb43425cd788604db9d48425e7b659d0f7ba112/uv-0.10.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc0cc2a4bcf9efbff9a57e2aed21c2d4b5a7ec2cc0096e0c33d7b53da17f6a3b", size = 21577072, upload-time = "2026-02-05T20:57:45.455Z" }, - { url = "https://files.pythonhosted.org/packages/c5/90/b8c9320fd8d86f356e37505a02aa2978ed28f9c63b59f15933e98bce97e5/uv-0.10.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:070ca2f0e8c67ca9a8f70ce403c956b7ed9d51e0c2e9dbbcc4efa5e0a2483f79", size = 22829664, upload-time = "2026-02-05T20:57:22.689Z" }, - { url = "https://files.pythonhosted.org/packages/56/9c/2c36b30b05c74b2af0e663e0e68f1d10b91a02a145e19b6774c121120c0b/uv-0.10.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8070c66149c06f9b39092a06f593a2241345ea2b1d42badc6f884c2cc089a1b1", size = 23705815, upload-time = "2026-02-05T20:57:37.604Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a1/8c7fdb14ab72e26ca872e07306e496a6b8cf42353f9bf6251b015be7f535/uv-0.10.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3db1d5390b3a624de672d7b0f9c9d8197693f3b2d3d9c4d9e34686dcbc34197a", size = 22890313, upload-time = "2026-02-05T20:57:26.35Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f8/5c152350b1a6d0af019801f91a1bdeac854c33deb36275f6c934f0113cb5/uv-0.10.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b46db718763bf742e986ebbc7a30ca33648957a0dcad34382970b992f5e900", size = 22769440, upload-time = "2026-02-05T20:56:53.859Z" }, - { url = "https://files.pythonhosted.org/packages/87/44/980e5399c6f4943b81754be9b7deb87bd56430e035c507984e17267d6a97/uv-0.10.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:eb95d28590edd73b8fdd80c27d699c45c52f8305170c6a90b830caf7f36670a4", size = 21695296, upload-time = "2026-02-05T20:57:06.732Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e7/f44ad40275be2087b3910df4678ed62cf0c82eeb3375c4a35037a79747db/uv-0.10.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:5871eef5046a81df3f1636a3d2b4ccac749c23c7f4d3a4bae5496cb2876a1814", size = 22424291, upload-time = "2026-02-05T20:57:49.067Z" }, - { url = "https://files.pythonhosted.org/packages/c2/81/31c0c0a8673140756e71a1112bf8f0fcbb48a4cf4587a7937f5bd55256b6/uv-0.10.0-py3-none-musllinux_1_1_i686.whl", hash = "sha256:1af0ec125a07edb434dfaa98969f6184c1313dbec2860c3c5ce2d533b257132a", size = 22109479, upload-time = "2026-02-05T20:57:02.258Z" }, - { url = "https://files.pythonhosted.org/packages/d7/d1/2eb51bc233bad3d13ad64a0c280fd4d1ebebf5c2939b3900a46670fa2b91/uv-0.10.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:45909b9a734250da05b10101e0a067e01ffa2d94bbb07de4b501e3cee4ae0ff3", size = 22972087, upload-time = "2026-02-05T20:57:52.847Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f7/49987207b87b5c21e1f0e81c52892813e8cdf7e318b6373d6585773ebcdd/uv-0.10.0-py3-none-win32.whl", hash = "sha256:d5498851b1f07aa9c9af75578b2029a11743cb933d741f84dcbb43109a968c29", size = 20896746, upload-time = "2026-02-05T20:57:33.426Z" }, - { url = "https://files.pythonhosted.org/packages/80/b2/1370049596c6ff7fa1fe22fccf86a093982eac81017b8c8aff541d7263b2/uv-0.10.0-py3-none-win_amd64.whl", hash = "sha256:edd469425cd62bcd8c8cc0226c5f9043a94e37ed869da8268c80fdbfd3e5015e", size = 23433041, upload-time = "2026-02-05T20:57:41.41Z" }, - { url = "https://files.pythonhosted.org/packages/e3/76/1034c46244feafec2c274ac52b094f35d47c94cdb11461c24cf4be8a0c0c/uv-0.10.0-py3-none-win_arm64.whl", hash = "sha256:e90c509749b3422eebb54057434b7119892330d133b9690a88f8a6b0f3116be3", size = 21880261, upload-time = "2026-02-05T20:57:14.724Z" }, +version = "0.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/29/cc8dbb71a4bc7c99772e9c3c6207740b383cc6be068718aa44ff729a5498/uv-0.10.1.tar.gz", hash = "sha256:c89e7fd708fb3474332d6fc54beb2ea48313ebdc82c6931df92a884fcb636d9d", size = 3857494, upload-time = "2026-02-10T11:45:58.063Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/38/9ea106251bee373a6ea63a62cdd2eb3a568635aeb61ec028576116c14c4c/uv-0.10.1-py3-none-linux_armv6l.whl", hash = "sha256:f7773ef123e070408f899d5e17134a14d61bf2fd27452140b5c26e818421b6d4", size = 21972622, upload-time = "2026-02-10T11:46:20.639Z" }, + { url = "https://files.pythonhosted.org/packages/fd/1e/2b14ab61336425db16e2984bbee3897d3ef7f3c2044f22923e4266b58a99/uv-0.10.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:25c71dd125f1ab8b58a6bd576bd429966b5505f1011359cea84d30cb8aca5ea5", size = 21137491, upload-time = "2026-02-10T11:45:55.68Z" }, + { url = "https://files.pythonhosted.org/packages/18/ba/059cd75b87cdc43c7340d9fe86c07b38c4cd697aae2bd9e5f6ae5b02df4a/uv-0.10.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f402bc18c28098aaab0ae8803d44cafe791b73a0e71f6011ea8e985785399f1f", size = 19870037, upload-time = "2026-02-10T11:46:01.178Z" }, + { url = "https://files.pythonhosted.org/packages/c7/a0/09e6d983a43cf25a5680135e0af390c232e145d367786d5c5db87edc16d3/uv-0.10.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:0afe5dc5074df0352f42afa37bfebee8e1d62c0ed59dbfecc5f4c69e7ee3d5bb", size = 21670257, upload-time = "2026-02-10T11:46:24.141Z" }, + { url = "https://files.pythonhosted.org/packages/4a/df/165ffe3fd8f6dd01c1fb42a96fee127a9224ce7a11d29cfb1c0ff3d4047a/uv-0.10.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:da843a22dfc7220112c47e450a41b5522bf9ab0f57579f4834cc40fb9cef20c7", size = 21609835, upload-time = "2026-02-10T11:45:40.884Z" }, + { url = "https://files.pythonhosted.org/packages/12/40/0a8a0e6fedb0622427270bf4c44667b84306b064ad3c82355d12927ecf08/uv-0.10.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:103c086010c9b887a21647885b700bd789591ac8a7291aa12dcdba98da814ccd", size = 21586040, upload-time = "2026-02-10T11:45:44.546Z" }, + { url = "https://files.pythonhosted.org/packages/8f/1a/0bad908d115c30b46f87244bbbce146ae4da74bb341f5a33621a89c32b7c/uv-0.10.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e90d2fcd75ca6d020ce56158db8c2dc14ce6adf5a812eead38d3f18633b17a88", size = 22837478, upload-time = "2026-02-10T11:46:05.93Z" }, + { url = "https://files.pythonhosted.org/packages/aa/3a/c0d945df78987bee27abfe820794b47f70a6374ebe10f198f17879093227/uv-0.10.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:099387413175bdee6c6b54205ad5d9cd2ee9176c04f6a35f90169dde58c419cd", size = 23761745, upload-time = "2026-02-10T11:46:12.872Z" }, + { url = "https://files.pythonhosted.org/packages/4f/f9/ecec3ef281fcc95a887edca294eba777966ca05e1f3bf00dcee761f2ad0c/uv-0.10.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8106e451891b40d8aca6cd238615d2a94eb77ffc45486e4874005909ba6f67f", size = 22919999, upload-time = "2026-02-10T11:46:42.807Z" }, + { url = "https://files.pythonhosted.org/packages/81/6a/307c0f659df0882458e919628387e6f8fdb422b31ffd4f1a8a33bf8818c0/uv-0.10.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56c12c14888b9ba51bb34297cfb5b767637455c2aaee3a4afd8d9ad65a2cf048", size = 22809446, upload-time = "2026-02-10T11:46:28.016Z" }, + { url = "https://files.pythonhosted.org/packages/c9/87/af41bc3e2c7122d8f233291197f7f2cdab27f39474fd93964c6dce0332b3/uv-0.10.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:1627388fec50bd1f56c2f9708f654c508dbb533104de8a276b80c6d023521d66", size = 21737489, upload-time = "2026-02-10T11:46:09.275Z" }, + { url = "https://files.pythonhosted.org/packages/5a/04/65d9dd3972a404bad0631cc06d278f9e1c644c5e087a645fac345114e09b/uv-0.10.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:1a04d5d36b0d996c442f9f1ed222a3a72693ec2d13d2f6027c3644891e8bc57d", size = 22451568, upload-time = "2026-02-10T11:46:38.999Z" }, + { url = "https://files.pythonhosted.org/packages/90/4e/fff7d673e4164cf5fcfff4cf2c1531b1d9bbdc8c0dd3b6357a6af16a81e6/uv-0.10.1-py3-none-musllinux_1_1_i686.whl", hash = "sha256:8734722834e50154aa221d1587939e5afae04d87a7ca83a2cff8e10127fc8e01", size = 22151742, upload-time = "2026-02-10T11:45:48.069Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ed/f981c453472d1eb648dd606262578eb2c63e4cc337549f8e26107a9aa747/uv-0.10.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:9ba3c40140cb4f71c09249f1d90fab2d764626170a16985299b5bd3285a69fb7", size = 23021227, upload-time = "2026-02-10T11:46:35.406Z" }, + { url = "https://files.pythonhosted.org/packages/66/56/fa93f15e4e05474d5ea8ff28544f96c670187b7411fbd50603ba0d3efe11/uv-0.10.1-py3-none-win32.whl", hash = "sha256:21085841f1a0b5317abdb4fe7148d7464a532067acae1867878c86e379eeb308", size = 20941424, upload-time = "2026-02-10T11:46:31.737Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5f/dda2d859e834d6ace18b351e2d7d6991018b51d33ffc4a900e2950119547/uv-0.10.1-py3-none-win_amd64.whl", hash = "sha256:92525305795d7dd134e66743d368d252ff94e3d84ae7525ec284116a231a6d4b", size = 23447854, upload-time = "2026-02-10T11:45:52.015Z" }, + { url = "https://files.pythonhosted.org/packages/6c/49/5dd22a0ee0dc52eb23683b34cbe165c1e8dc78440122bb7ecb1cd74fe331/uv-0.10.1-py3-none-win_arm64.whl", hash = "sha256:7ef720d1755809a1a19e31c0925317925cb2b11f5ad8e9f918794f2288b188a6", size = 21886632, upload-time = "2026-02-10T11:46:17.088Z" }, ] [[package]] From c09106e2801617ae91393d81ac6995b3753a3643 Mon Sep 17 00:00:00 2001 From: 5hojib Date: Wed, 11 Feb 2026 19:02:42 +0600 Subject: [PATCH 02/22] update main_api.tl --- compiler/api/source/main_api.tl | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler/api/source/main_api.tl b/compiler/api/source/main_api.tl index efc01b80..90c5f54a 100644 --- a/compiler/api/source/main_api.tl +++ b/compiler/api/source/main_api.tl @@ -15,6 +15,7 @@ double ? = Double; string ? = String; bytes = Bytes; +int256 = Int256; // boolFalse#bc799737 = Bool; // Parsed manually // boolTrue#997275b5 = Bool; // Parsed manually From bd124f7a8cb294d64c726379c061f668d13eface Mon Sep 17 00:00:00 2001 From: 5hojib Date: Wed, 11 Feb 2026 13:03:14 +0000 Subject: [PATCH 03/22] InkyPinkyPonky [no ci] Signed-off-by: 5hojib --- uv.lock | 122 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/uv.lock b/uv.lock index 67a22f8b..8486f5bb 100644 --- a/uv.lock +++ b/uv.lock @@ -480,51 +480,51 @@ toml = [ [[package]] name = "cryptography" -version = "46.0.4" +version = "46.0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/19/f748958276519adf6a0c1e79e7b8860b4830dda55ccdf29f2719b5fc499c/cryptography-46.0.4.tar.gz", hash = "sha256:bfd019f60f8abc2ed1b9be4ddc21cfef059c841d86d710bb69909a688cbb8f59", size = 749301, upload-time = "2026-01-28T00:24:37.379Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/91/874b8910903159043b5c6a123b7e79c4559ddd1896e38967567942635778/cryptography-46.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5f14fba5bf6f4390d7ff8f086c566454bff0411f6d8aa7af79c88b6f9267aecc", size = 4275871, upload-time = "2026-01-28T00:23:09.439Z" }, - { url = "https://files.pythonhosted.org/packages/c0/35/690e809be77896111f5b195ede56e4b4ed0435b428c2f2b6d35046fbb5e8/cryptography-46.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47bcd19517e6389132f76e2d5303ded6cf3f78903da2158a671be8de024f4cd0", size = 4423124, upload-time = "2026-01-28T00:23:11.529Z" }, - { url = "https://files.pythonhosted.org/packages/1a/5b/a26407d4f79d61ca4bebaa9213feafdd8806dc69d3d290ce24996d3cfe43/cryptography-46.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:01df4f50f314fbe7009f54046e908d1754f19d0c6d3070df1e6268c5a4af09fa", size = 4277090, upload-time = "2026-01-28T00:23:13.123Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d8/4bb7aec442a9049827aa34cee1aa83803e528fa55da9a9d45d01d1bb933e/cryptography-46.0.4-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5aa3e463596b0087b3da0dbe2b2487e9fc261d25da85754e30e3b40637d61f81", size = 4947652, upload-time = "2026-01-28T00:23:14.554Z" }, - { url = "https://files.pythonhosted.org/packages/2b/08/f83e2e0814248b844265802d081f2fac2f1cbe6cd258e72ba14ff006823a/cryptography-46.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0a9ad24359fee86f131836a9ac3bffc9329e956624a2d379b613f8f8abaf5255", size = 4455157, upload-time = "2026-01-28T00:23:16.443Z" }, - { url = "https://files.pythonhosted.org/packages/0a/05/19d849cf4096448779d2dcc9bb27d097457dac36f7273ffa875a93b5884c/cryptography-46.0.4-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:dc1272e25ef673efe72f2096e92ae39dea1a1a450dd44918b15351f72c5a168e", size = 3981078, upload-time = "2026-01-28T00:23:17.838Z" }, - { url = "https://files.pythonhosted.org/packages/e6/89/f7bac81d66ba7cde867a743ea5b37537b32b5c633c473002b26a226f703f/cryptography-46.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:de0f5f4ec8711ebc555f54735d4c673fc34b65c44283895f1a08c2b49d2fd99c", size = 4276213, upload-time = "2026-01-28T00:23:19.257Z" }, - { url = "https://files.pythonhosted.org/packages/da/9f/7133e41f24edd827020ad21b068736e792bc68eecf66d93c924ad4719fb3/cryptography-46.0.4-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:eeeb2e33d8dbcccc34d64651f00a98cb41b2dc69cef866771a5717e6734dfa32", size = 4912190, upload-time = "2026-01-28T00:23:21.244Z" }, - { url = "https://files.pythonhosted.org/packages/a6/f7/6d43cbaddf6f65b24816e4af187d211f0bc536a29961f69faedc48501d8e/cryptography-46.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3d425eacbc9aceafd2cb429e42f4e5d5633c6f873f5e567077043ef1b9bbf616", size = 4454641, upload-time = "2026-01-28T00:23:22.866Z" }, - { url = "https://files.pythonhosted.org/packages/9e/4f/ebd0473ad656a0ac912a16bd07db0f5d85184924e14fc88feecae2492834/cryptography-46.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91627ebf691d1ea3976a031b61fb7bac1ccd745afa03602275dda443e11c8de0", size = 4405159, upload-time = "2026-01-28T00:23:25.278Z" }, - { url = "https://files.pythonhosted.org/packages/d1/f7/7923886f32dc47e27adeff8246e976d77258fd2aa3efdd1754e4e323bf49/cryptography-46.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2d08bc22efd73e8854b0b7caff402d735b354862f1145d7be3b9c0f740fef6a0", size = 4666059, upload-time = "2026-01-28T00:23:26.766Z" }, - { url = "https://files.pythonhosted.org/packages/f8/f5/559c25b77f40b6bf828eabaf988efb8b0e17b573545edb503368ca0a2a03/cryptography-46.0.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:078e5f06bd2fa5aea5a324f2a09f914b1484f1d0c2a4d6a8a28c74e72f65f2da", size = 4264508, upload-time = "2026-01-28T00:23:34.264Z" }, - { url = "https://files.pythonhosted.org/packages/49/a1/551fa162d33074b660dc35c9bc3616fefa21a0e8c1edd27b92559902e408/cryptography-46.0.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dce1e4f068f03008da7fa51cc7abc6ddc5e5de3e3d1550334eaf8393982a5829", size = 4409080, upload-time = "2026-01-28T00:23:35.793Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/4d8d129a755f5d6df1bbee69ea2f35ebfa954fa1847690d1db2e8bca46a5/cryptography-46.0.4-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:2067461c80271f422ee7bdbe79b9b4be54a5162e90345f86a23445a0cf3fd8a2", size = 4270039, upload-time = "2026-01-28T00:23:37.263Z" }, - { url = "https://files.pythonhosted.org/packages/4c/f5/ed3fcddd0a5e39321e595e144615399e47e7c153a1fb8c4862aec3151ff9/cryptography-46.0.4-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:c92010b58a51196a5f41c3795190203ac52edfd5dc3ff99149b4659eba9d2085", size = 4926748, upload-time = "2026-01-28T00:23:38.884Z" }, - { url = "https://files.pythonhosted.org/packages/43/ae/9f03d5f0c0c00e85ecb34f06d3b79599f20630e4db91b8a6e56e8f83d410/cryptography-46.0.4-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:829c2b12bbc5428ab02d6b7f7e9bbfd53e33efd6672d21341f2177470171ad8b", size = 4442307, upload-time = "2026-01-28T00:23:40.56Z" }, - { url = "https://files.pythonhosted.org/packages/8b/22/e0f9f2dae8040695103369cf2283ef9ac8abe4d51f68710bec2afd232609/cryptography-46.0.4-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:62217ba44bf81b30abaeda1488686a04a702a261e26f87db51ff61d9d3510abd", size = 3959253, upload-time = "2026-01-28T00:23:42.827Z" }, - { url = "https://files.pythonhosted.org/packages/01/5b/6a43fcccc51dae4d101ac7d378a8724d1ba3de628a24e11bf2f4f43cba4d/cryptography-46.0.4-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:9c2da296c8d3415b93e6053f5a728649a87a48ce084a9aaf51d6e46c87c7f2d2", size = 4269372, upload-time = "2026-01-28T00:23:44.655Z" }, - { url = "https://files.pythonhosted.org/packages/17/b7/0f6b8c1dd0779df2b526e78978ff00462355e31c0a6f6cff8a3e99889c90/cryptography-46.0.4-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:9b34d8ba84454641a6bf4d6762d15847ecbd85c1316c0a7984e6e4e9f748ec2e", size = 4891908, upload-time = "2026-01-28T00:23:46.48Z" }, - { url = "https://files.pythonhosted.org/packages/83/17/259409b8349aa10535358807a472c6a695cf84f106022268d31cea2b6c97/cryptography-46.0.4-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:df4a817fa7138dd0c96c8c8c20f04b8aaa1fac3bbf610913dcad8ea82e1bfd3f", size = 4441254, upload-time = "2026-01-28T00:23:48.403Z" }, - { url = "https://files.pythonhosted.org/packages/9c/fe/e4a1b0c989b00cee5ffa0764401767e2d1cf59f45530963b894129fd5dce/cryptography-46.0.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b1de0ebf7587f28f9190b9cb526e901bf448c9e6a99655d2b07fff60e8212a82", size = 4396520, upload-time = "2026-01-28T00:23:50.26Z" }, - { url = "https://files.pythonhosted.org/packages/b3/81/ba8fd9657d27076eb40d6a2f941b23429a3c3d2f56f5a921d6b936a27bc9/cryptography-46.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9b4d17bc7bd7cdd98e3af40b441feaea4c68225e2eb2341026c84511ad246c0c", size = 4651479, upload-time = "2026-01-28T00:23:51.674Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cc/8f3224cbb2a928de7298d6ed4790f5ebc48114e02bdc9559196bfb12435d/cryptography-46.0.4-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8bf75b0259e87fa70bddc0b8b4078b76e7fd512fd9afae6c1193bcf440a4dbef", size = 4275419, upload-time = "2026-01-28T00:23:58.364Z" }, - { url = "https://files.pythonhosted.org/packages/17/43/4a18faa7a872d00e4264855134ba82d23546c850a70ff209e04ee200e76f/cryptography-46.0.4-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c268a3490df22270955966ba236d6bc4a8f9b6e4ffddb78aac535f1a5ea471d", size = 4419058, upload-time = "2026-01-28T00:23:59.867Z" }, - { url = "https://files.pythonhosted.org/packages/ee/64/6651969409821d791ba12346a124f55e1b76f66a819254ae840a965d4b9c/cryptography-46.0.4-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:812815182f6a0c1d49a37893a303b44eaac827d7f0d582cecfc81b6427f22973", size = 4278151, upload-time = "2026-01-28T00:24:01.731Z" }, - { url = "https://files.pythonhosted.org/packages/20/0b/a7fce65ee08c3c02f7a8310cc090a732344066b990ac63a9dfd0a655d321/cryptography-46.0.4-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:a90e43e3ef65e6dcf969dfe3bb40cbf5aef0d523dff95bfa24256be172a845f4", size = 4939441, upload-time = "2026-01-28T00:24:03.175Z" }, - { url = "https://files.pythonhosted.org/packages/db/a7/20c5701e2cd3e1dfd7a19d2290c522a5f435dd30957d431dcb531d0f1413/cryptography-46.0.4-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a05177ff6296644ef2876fce50518dffb5bcdf903c85250974fc8bc85d54c0af", size = 4451617, upload-time = "2026-01-28T00:24:05.403Z" }, - { url = "https://files.pythonhosted.org/packages/00/dc/3e16030ea9aa47b63af6524c354933b4fb0e352257c792c4deeb0edae367/cryptography-46.0.4-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:daa392191f626d50f1b136c9b4cf08af69ca8279d110ea24f5c2700054d2e263", size = 3977774, upload-time = "2026-01-28T00:24:06.851Z" }, - { url = "https://files.pythonhosted.org/packages/42/c8/ad93f14118252717b465880368721c963975ac4b941b7ef88f3c56bf2897/cryptography-46.0.4-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e07ea39c5b048e085f15923511d8121e4a9dc45cee4e3b970ca4f0d338f23095", size = 4277008, upload-time = "2026-01-28T00:24:08.926Z" }, - { url = "https://files.pythonhosted.org/packages/00/cf/89c99698151c00a4631fbfcfcf459d308213ac29e321b0ff44ceeeac82f1/cryptography-46.0.4-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d5a45ddc256f492ce42a4e35879c5e5528c09cd9ad12420828c972951d8e016b", size = 4903339, upload-time = "2026-01-28T00:24:12.009Z" }, - { url = "https://files.pythonhosted.org/packages/03/c3/c90a2cb358de4ac9309b26acf49b2a100957e1ff5cc1e98e6c4996576710/cryptography-46.0.4-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:6bb5157bf6a350e5b28aee23beb2d84ae6f5be390b2f8ee7ea179cda077e1019", size = 4451216, upload-time = "2026-01-28T00:24:13.975Z" }, - { url = "https://files.pythonhosted.org/packages/96/2c/8d7f4171388a10208671e181ca43cdc0e596d8259ebacbbcfbd16de593da/cryptography-46.0.4-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dd5aba870a2c40f87a3af043e0dee7d9eb02d4aff88a797b48f2b43eff8c3ab4", size = 4404299, upload-time = "2026-01-28T00:24:16.169Z" }, - { url = "https://files.pythonhosted.org/packages/e9/23/cbb2036e450980f65c6e0a173b73a56ff3bccd8998965dea5cc9ddd424a5/cryptography-46.0.4-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:93d8291da8d71024379ab2cb0b5c57915300155ad42e07f76bea6ad838d7e59b", size = 4664837, upload-time = "2026-01-28T00:24:17.629Z" }, - { url = "https://files.pythonhosted.org/packages/27/7a/f8d2d13227a9a1a9fe9c7442b057efecffa41f1e3c51d8622f26b9edbe8f/cryptography-46.0.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c236a44acfb610e70f6b3e1c3ca20ff24459659231ef2f8c48e879e2d32b73da", size = 4216693, upload-time = "2026-01-28T00:24:25.758Z" }, - { url = "https://files.pythonhosted.org/packages/c5/de/3787054e8f7972658370198753835d9d680f6cd4a39df9f877b57f0dd69c/cryptography-46.0.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8a15fb869670efa8f83cbffbc8753c1abf236883225aed74cd179b720ac9ec80", size = 4382765, upload-time = "2026-01-28T00:24:27.577Z" }, - { url = "https://files.pythonhosted.org/packages/8a/5f/60e0afb019973ba6a0b322e86b3d61edf487a4f5597618a430a2a15f2d22/cryptography-46.0.4-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:fdc3daab53b212472f1524d070735b2f0c214239df131903bae1d598016fa822", size = 4216066, upload-time = "2026-01-28T00:24:29.056Z" }, - { url = "https://files.pythonhosted.org/packages/81/8e/bf4a0de294f147fee66f879d9bae6f8e8d61515558e3d12785dd90eca0be/cryptography-46.0.4-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:44cc0675b27cadb71bdbb96099cca1fa051cd11d2ade09e5cd3a2edb929ed947", size = 4382025, upload-time = "2026-01-28T00:24:30.681Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/60/04/ee2a9e8542e4fa2773b81771ff8349ff19cdd56b7258a0cc442639052edb/cryptography-46.0.5.tar.gz", hash = "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", size = 750064, upload-time = "2026-02-10T19:18:38.255Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/9e/6b4397a3e3d15123de3b1806ef342522393d50736c13b20ec4c9ea6693a6/cryptography-46.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b", size = 4275637, upload-time = "2026-02-10T19:17:10.53Z" }, + { url = "https://files.pythonhosted.org/packages/63/e7/471ab61099a3920b0c77852ea3f0ea611c9702f651600397ac567848b897/cryptography-46.0.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b", size = 4424742, upload-time = "2026-02-10T19:17:12.388Z" }, + { url = "https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263", size = 4277528, upload-time = "2026-02-10T19:17:13.853Z" }, + { url = "https://files.pythonhosted.org/packages/22/29/c2e812ebc38c57b40e7c583895e73c8c5adb4d1e4a0cc4c5a4fdab2b1acc/cryptography-46.0.5-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d", size = 4947993, upload-time = "2026-02-10T19:17:15.618Z" }, + { url = "https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed", size = 4456855, upload-time = "2026-02-10T19:17:17.221Z" }, + { url = "https://files.pythonhosted.org/packages/2d/87/fc628a7ad85b81206738abbd213b07702bcbdada1dd43f72236ef3cffbb5/cryptography-46.0.5-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2", size = 3984635, upload-time = "2026-02-10T19:17:18.792Z" }, + { url = "https://files.pythonhosted.org/packages/84/29/65b55622bde135aedf4565dc509d99b560ee4095e56989e815f8fd2aa910/cryptography-46.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2", size = 4277038, upload-time = "2026-02-10T19:17:20.256Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/45e76c68d7311432741faf1fbf7fac8a196a0a735ca21f504c75d37e2558/cryptography-46.0.5-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0", size = 4912181, upload-time = "2026-02-10T19:17:21.825Z" }, + { url = "https://files.pythonhosted.org/packages/6d/1a/c1ba8fead184d6e3d5afcf03d569acac5ad063f3ac9fb7258af158f7e378/cryptography-46.0.5-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731", size = 4456482, upload-time = "2026-02-10T19:17:25.133Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e5/3fb22e37f66827ced3b902cf895e6a6bc1d095b5b26be26bd13c441fdf19/cryptography-46.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82", size = 4405497, upload-time = "2026-02-10T19:17:26.66Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/9d58bb32b1121a8a2f27383fabae4d63080c7ca60b9b5c88be742be04ee7/cryptography-46.0.5-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1", size = 4667819, upload-time = "2026-02-10T19:17:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/67/c8/581a6702e14f0898a0848105cbefd20c058099e2c2d22ef4e476dfec75d7/cryptography-46.0.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678", size = 4265728, upload-time = "2026-02-10T19:17:35.569Z" }, + { url = "https://files.pythonhosted.org/packages/dd/4a/ba1a65ce8fc65435e5a849558379896c957870dd64fecea97b1ad5f46a37/cryptography-46.0.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87", size = 4408287, upload-time = "2026-02-10T19:17:36.938Z" }, + { url = "https://files.pythonhosted.org/packages/f8/67/8ffdbf7b65ed1ac224d1c2df3943553766914a8ca718747ee3871da6107e/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee", size = 4270291, upload-time = "2026-02-10T19:17:38.748Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/f52377ee93bc2f2bba55a41a886fd208c15276ffbd2569f2ddc89d50e2c5/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981", size = 4927539, upload-time = "2026-02-10T19:17:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/3b/02/cfe39181b02419bbbbcf3abdd16c1c5c8541f03ca8bda240debc467d5a12/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9", size = 4442199, upload-time = "2026-02-10T19:17:41.789Z" }, + { url = "https://files.pythonhosted.org/packages/c0/96/2fcaeb4873e536cf71421a388a6c11b5bc846e986b2b069c79363dc1648e/cryptography-46.0.5-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648", size = 3960131, upload-time = "2026-02-10T19:17:43.379Z" }, + { url = "https://files.pythonhosted.org/packages/d8/d2/b27631f401ddd644e94c5cf33c9a4069f72011821cf3dc7309546b0642a0/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4", size = 4270072, upload-time = "2026-02-10T19:17:45.481Z" }, + { url = "https://files.pythonhosted.org/packages/f4/a7/60d32b0370dae0b4ebe55ffa10e8599a2a59935b5ece1b9f06edb73abdeb/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0", size = 4892170, upload-time = "2026-02-10T19:17:46.997Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b9/cf73ddf8ef1164330eb0b199a589103c363afa0cf794218c24d524a58eab/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663", size = 4441741, upload-time = "2026-02-10T19:17:48.661Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/eee00b28c84c726fe8fa0158c65afe312d9c3b78d9d01daf700f1f6e37ff/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826", size = 4396728, upload-time = "2026-02-10T19:17:50.058Z" }, + { url = "https://files.pythonhosted.org/packages/65/f4/6bc1a9ed5aef7145045114b75b77c2a8261b4d38717bd8dea111a63c3442/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d", size = 4652001, upload-time = "2026-02-10T19:17:51.54Z" }, + { url = "https://files.pythonhosted.org/packages/0f/04/c85bdeab78c8bc77b701bf0d9bdcf514c044e18a46dcff330df5448631b0/cryptography-46.0.5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18", size = 4275349, upload-time = "2026-02-10T19:17:58.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/32/9b87132a2f91ee7f5223b091dc963055503e9b442c98fc0b8a5ca765fab0/cryptography-46.0.5-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235", size = 4420667, upload-time = "2026-02-10T19:18:00.619Z" }, + { url = "https://files.pythonhosted.org/packages/a1/a6/a7cb7010bec4b7c5692ca6f024150371b295ee1c108bdc1c400e4c44562b/cryptography-46.0.5-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a", size = 4276980, upload-time = "2026-02-10T19:18:02.379Z" }, + { url = "https://files.pythonhosted.org/packages/8e/7c/c4f45e0eeff9b91e3f12dbd0e165fcf2a38847288fcfd889deea99fb7b6d/cryptography-46.0.5-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76", size = 4939143, upload-time = "2026-02-10T19:18:03.964Z" }, + { url = "https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614", size = 4453674, upload-time = "2026-02-10T19:18:05.588Z" }, + { url = "https://files.pythonhosted.org/packages/db/ed/db15d3956f65264ca204625597c410d420e26530c4e2943e05a0d2f24d51/cryptography-46.0.5-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229", size = 3978801, upload-time = "2026-02-10T19:18:07.167Z" }, + { url = "https://files.pythonhosted.org/packages/41/e2/df40a31d82df0a70a0daf69791f91dbb70e47644c58581d654879b382d11/cryptography-46.0.5-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1", size = 4276755, upload-time = "2026-02-10T19:18:09.813Z" }, + { url = "https://files.pythonhosted.org/packages/33/45/726809d1176959f4a896b86907b98ff4391a8aa29c0aaaf9450a8a10630e/cryptography-46.0.5-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d", size = 4901539, upload-time = "2026-02-10T19:18:11.263Z" }, + { url = "https://files.pythonhosted.org/packages/99/0f/a3076874e9c88ecb2ecc31382f6e7c21b428ede6f55aafa1aa272613e3cd/cryptography-46.0.5-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c", size = 4452794, upload-time = "2026-02-10T19:18:12.914Z" }, + { url = "https://files.pythonhosted.org/packages/02/ef/ffeb542d3683d24194a38f66ca17c0a4b8bf10631feef44a7ef64e631b1a/cryptography-46.0.5-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4", size = 4404160, upload-time = "2026-02-10T19:18:14.375Z" }, + { url = "https://files.pythonhosted.org/packages/96/93/682d2b43c1d5f1406ed048f377c0fc9fc8f7b0447a478d5c65ab3d3a66eb/cryptography-46.0.5-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9", size = 4667123, upload-time = "2026-02-10T19:18:15.886Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6f/6cc6cc9955caa6eaf83660b0da2b077c7fe8ff9950a3c5e45d605038d439/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a", size = 4218321, upload-time = "2026-02-10T19:18:22.349Z" }, + { url = "https://files.pythonhosted.org/packages/3e/5d/c4da701939eeee699566a6c1367427ab91a8b7088cc2328c09dbee940415/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356", size = 4381786, upload-time = "2026-02-10T19:18:24.529Z" }, + { url = "https://files.pythonhosted.org/packages/ac/97/a538654732974a94ff96c1db621fa464f455c02d4bb7d2652f4edc21d600/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da", size = 4217990, upload-time = "2026-02-10T19:18:25.957Z" }, + { url = "https://files.pythonhosted.org/packages/ae/11/7e500d2dd3ba891197b9efd2da5454b74336d64a7cc419aa7327ab74e5f6/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257", size = 4381252, upload-time = "2026-02-10T19:18:27.496Z" }, ] [[package]] @@ -1861,27 +1861,27 @@ wheels = [ [[package]] name = "uv" -version = "0.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/29/cc8dbb71a4bc7c99772e9c3c6207740b383cc6be068718aa44ff729a5498/uv-0.10.1.tar.gz", hash = "sha256:c89e7fd708fb3474332d6fc54beb2ea48313ebdc82c6931df92a884fcb636d9d", size = 3857494, upload-time = "2026-02-10T11:45:58.063Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/af/38/9ea106251bee373a6ea63a62cdd2eb3a568635aeb61ec028576116c14c4c/uv-0.10.1-py3-none-linux_armv6l.whl", hash = "sha256:f7773ef123e070408f899d5e17134a14d61bf2fd27452140b5c26e818421b6d4", size = 21972622, upload-time = "2026-02-10T11:46:20.639Z" }, - { url = "https://files.pythonhosted.org/packages/fd/1e/2b14ab61336425db16e2984bbee3897d3ef7f3c2044f22923e4266b58a99/uv-0.10.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:25c71dd125f1ab8b58a6bd576bd429966b5505f1011359cea84d30cb8aca5ea5", size = 21137491, upload-time = "2026-02-10T11:45:55.68Z" }, - { url = "https://files.pythonhosted.org/packages/18/ba/059cd75b87cdc43c7340d9fe86c07b38c4cd697aae2bd9e5f6ae5b02df4a/uv-0.10.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f402bc18c28098aaab0ae8803d44cafe791b73a0e71f6011ea8e985785399f1f", size = 19870037, upload-time = "2026-02-10T11:46:01.178Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a0/09e6d983a43cf25a5680135e0af390c232e145d367786d5c5db87edc16d3/uv-0.10.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:0afe5dc5074df0352f42afa37bfebee8e1d62c0ed59dbfecc5f4c69e7ee3d5bb", size = 21670257, upload-time = "2026-02-10T11:46:24.141Z" }, - { url = "https://files.pythonhosted.org/packages/4a/df/165ffe3fd8f6dd01c1fb42a96fee127a9224ce7a11d29cfb1c0ff3d4047a/uv-0.10.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:da843a22dfc7220112c47e450a41b5522bf9ab0f57579f4834cc40fb9cef20c7", size = 21609835, upload-time = "2026-02-10T11:45:40.884Z" }, - { url = "https://files.pythonhosted.org/packages/12/40/0a8a0e6fedb0622427270bf4c44667b84306b064ad3c82355d12927ecf08/uv-0.10.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:103c086010c9b887a21647885b700bd789591ac8a7291aa12dcdba98da814ccd", size = 21586040, upload-time = "2026-02-10T11:45:44.546Z" }, - { url = "https://files.pythonhosted.org/packages/8f/1a/0bad908d115c30b46f87244bbbce146ae4da74bb341f5a33621a89c32b7c/uv-0.10.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e90d2fcd75ca6d020ce56158db8c2dc14ce6adf5a812eead38d3f18633b17a88", size = 22837478, upload-time = "2026-02-10T11:46:05.93Z" }, - { url = "https://files.pythonhosted.org/packages/aa/3a/c0d945df78987bee27abfe820794b47f70a6374ebe10f198f17879093227/uv-0.10.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:099387413175bdee6c6b54205ad5d9cd2ee9176c04f6a35f90169dde58c419cd", size = 23761745, upload-time = "2026-02-10T11:46:12.872Z" }, - { url = "https://files.pythonhosted.org/packages/4f/f9/ecec3ef281fcc95a887edca294eba777966ca05e1f3bf00dcee761f2ad0c/uv-0.10.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8106e451891b40d8aca6cd238615d2a94eb77ffc45486e4874005909ba6f67f", size = 22919999, upload-time = "2026-02-10T11:46:42.807Z" }, - { url = "https://files.pythonhosted.org/packages/81/6a/307c0f659df0882458e919628387e6f8fdb422b31ffd4f1a8a33bf8818c0/uv-0.10.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56c12c14888b9ba51bb34297cfb5b767637455c2aaee3a4afd8d9ad65a2cf048", size = 22809446, upload-time = "2026-02-10T11:46:28.016Z" }, - { url = "https://files.pythonhosted.org/packages/c9/87/af41bc3e2c7122d8f233291197f7f2cdab27f39474fd93964c6dce0332b3/uv-0.10.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:1627388fec50bd1f56c2f9708f654c508dbb533104de8a276b80c6d023521d66", size = 21737489, upload-time = "2026-02-10T11:46:09.275Z" }, - { url = "https://files.pythonhosted.org/packages/5a/04/65d9dd3972a404bad0631cc06d278f9e1c644c5e087a645fac345114e09b/uv-0.10.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:1a04d5d36b0d996c442f9f1ed222a3a72693ec2d13d2f6027c3644891e8bc57d", size = 22451568, upload-time = "2026-02-10T11:46:38.999Z" }, - { url = "https://files.pythonhosted.org/packages/90/4e/fff7d673e4164cf5fcfff4cf2c1531b1d9bbdc8c0dd3b6357a6af16a81e6/uv-0.10.1-py3-none-musllinux_1_1_i686.whl", hash = "sha256:8734722834e50154aa221d1587939e5afae04d87a7ca83a2cff8e10127fc8e01", size = 22151742, upload-time = "2026-02-10T11:45:48.069Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ed/f981c453472d1eb648dd606262578eb2c63e4cc337549f8e26107a9aa747/uv-0.10.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:9ba3c40140cb4f71c09249f1d90fab2d764626170a16985299b5bd3285a69fb7", size = 23021227, upload-time = "2026-02-10T11:46:35.406Z" }, - { url = "https://files.pythonhosted.org/packages/66/56/fa93f15e4e05474d5ea8ff28544f96c670187b7411fbd50603ba0d3efe11/uv-0.10.1-py3-none-win32.whl", hash = "sha256:21085841f1a0b5317abdb4fe7148d7464a532067acae1867878c86e379eeb308", size = 20941424, upload-time = "2026-02-10T11:46:31.737Z" }, - { url = "https://files.pythonhosted.org/packages/b1/5f/dda2d859e834d6ace18b351e2d7d6991018b51d33ffc4a900e2950119547/uv-0.10.1-py3-none-win_amd64.whl", hash = "sha256:92525305795d7dd134e66743d368d252ff94e3d84ae7525ec284116a231a6d4b", size = 23447854, upload-time = "2026-02-10T11:45:52.015Z" }, - { url = "https://files.pythonhosted.org/packages/6c/49/5dd22a0ee0dc52eb23683b34cbe165c1e8dc78440122bb7ecb1cd74fe331/uv-0.10.1-py3-none-win_arm64.whl", hash = "sha256:7ef720d1755809a1a19e31c0925317925cb2b11f5ad8e9f918794f2288b188a6", size = 21886632, upload-time = "2026-02-10T11:46:17.088Z" }, +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/9a/fe74aa0127cdc26141364e07abf25e5d69b4bf9788758fad9cfecca637aa/uv-0.10.2.tar.gz", hash = "sha256:b5016f038e191cc9ef00e17be802f44363d1b1cc3ef3454d1d76839a4246c10a", size = 3858864, upload-time = "2026-02-10T19:17:51.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/b5/aea88f66284d220be56ef748ed5e1bd11d819be14656a38631f4b55bfd48/uv-0.10.2-py3-none-linux_armv6l.whl", hash = "sha256:69e35aa3e91a245b015365e5e6ca383ecf72a07280c6d00c17c9173f2d3b68ab", size = 22215714, upload-time = "2026-02-10T19:17:34.281Z" }, + { url = "https://files.pythonhosted.org/packages/7f/72/947ba7737ae6cd50de61d268781b9e7717caa3b07e18238ffd547f9fc728/uv-0.10.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0b7eef95c36fe92e7aac399c0dce555474432cbfeaaa23975ed83a63923f78fd", size = 21276485, upload-time = "2026-02-10T19:18:15.415Z" }, + { url = "https://files.pythonhosted.org/packages/d3/38/5c3462b927a93be4ccaaa25138926a5fb6c9e1b72884efd7af77e451d82e/uv-0.10.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:acc08e420abab21de987151059991e3f04bc7f4044d94ca58b5dd547995b4843", size = 20048620, upload-time = "2026-02-10T19:17:26.481Z" }, + { url = "https://files.pythonhosted.org/packages/03/51/d4509b0f5b7740c1af82202e9c69b700d5848b8bd0faa25229e8edd2c19c/uv-0.10.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:aefbcd749ab2ad48bb533ec028607607f7b03be11c83ea152dbb847226cd6285", size = 21870454, upload-time = "2026-02-10T19:17:21.838Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7e/2bcbafcb424bb885817a7e58e6eec9314c190c55935daaafab1858bb82cd/uv-0.10.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:fad554c38d9988409ceddfac69a465e6e5f925a8b689e7606a395c20bb4d1d78", size = 21839508, upload-time = "2026-02-10T19:17:59.211Z" }, + { url = "https://files.pythonhosted.org/packages/60/08/16df2c1f8ad121a595316b82f6e381447e8974265b2239c9135eb874f33b/uv-0.10.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6dd2dc41043e92b3316d7124a7bf48c2affe7117c93079419146f083df71933c", size = 21841283, upload-time = "2026-02-10T19:17:41.419Z" }, + { url = "https://files.pythonhosted.org/packages/76/27/a869fec4c03af5e43db700fabe208d8ee8dbd56e0ff568ba792788d505cd/uv-0.10.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111c05182c5630ac523764e0ec2e58d7b54eb149dbe517b578993a13c2f71aff", size = 23111967, upload-time = "2026-02-10T19:18:11.764Z" }, + { url = "https://files.pythonhosted.org/packages/2a/4a/fb38515d966acfbd80179e626985aab627898ffd02c70205850d6eb44df1/uv-0.10.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45c3deaba0343fd27ab5385d6b7cde0765df1a15389ee7978b14a51c32895662", size = 23911019, upload-time = "2026-02-10T19:18:26.947Z" }, + { url = "https://files.pythonhosted.org/packages/dd/5f/51bcbb490ddb1dcb06d767f0bde649ad2826686b9e30efa57f8ab2750a1d/uv-0.10.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb2cac4f3be60b64a23d9f035019c30a004d378b563c94f60525c9591665a56b", size = 23030217, upload-time = "2026-02-10T19:17:37.789Z" }, + { url = "https://files.pythonhosted.org/packages/46/69/144f6db851d49aa6f25b040dc5c8c684b8f92df9e8d452c7abc619c6ec23/uv-0.10.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937687df0380d636ceafcb728cf6357f0432588e721892128985417b283c3b54", size = 23036452, upload-time = "2026-02-10T19:18:18.97Z" }, + { url = "https://files.pythonhosted.org/packages/66/29/3c7c4559c9310ed478e3d6c585ee0aad2852dc4d5fb14f4d92a2a12d1728/uv-0.10.2-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:f90bca8703ae66bccfcfb7313b4b697a496c4d3df662f4a1a2696a6320c47598", size = 21941903, upload-time = "2026-02-10T19:17:30.575Z" }, + { url = "https://files.pythonhosted.org/packages/9a/5a/42883b5ef2ef0b1bc5b70a1da12a6854a929ff824aa8eb1a5571fb27a39b/uv-0.10.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:cca026c2e584788e1264879a123bf499dd8f169b9cafac4a2065a416e09d3823", size = 22651571, upload-time = "2026-02-10T19:18:22.74Z" }, + { url = "https://files.pythonhosted.org/packages/e8/b8/e4f1dda1b3b0cc6c8ac06952bfe7bc28893ff016fb87651c8fafc6dfca96/uv-0.10.2-py3-none-musllinux_1_1_i686.whl", hash = "sha256:9f878837938103ee1307ed3ed5d9228118e3932816ab0deb451e7e16dc8ce82a", size = 22321279, upload-time = "2026-02-10T19:17:49.402Z" }, + { url = "https://files.pythonhosted.org/packages/2c/4b/baa16d46469e024846fc1a8aa0cfa63f1f89ad0fd3eaa985359a168c3fb0/uv-0.10.2-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:6ec75cfe638b316b329474aa798c3988e5946ead4d9e977fe4dc6fc2ea3e0b8b", size = 23252208, upload-time = "2026-02-10T19:17:54.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/84/6a74e5ec2ee90e4314905e6d1d1708d473e06405e492ec38868b42645388/uv-0.10.2-py3-none-win32.whl", hash = "sha256:f7f3c7e09bf53b81f55730a67dd86299158f470dffb2bd279b6432feb198d231", size = 21118543, upload-time = "2026-02-10T19:18:07.296Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f9/e5cc6cf3a578b87004e857274df97d3cdecd8e19e965869b9b67c094c20c/uv-0.10.2-py3-none-win_amd64.whl", hash = "sha256:7b3685aa1da15acbe080b4cba8684afbb6baf11c9b04d4d4b347cc18b7b9cfa0", size = 23620790, upload-time = "2026-02-10T19:17:45.204Z" }, + { url = "https://files.pythonhosted.org/packages/df/7a/99979dc08ae6a65f4f7a44c5066699016c6eecdc4e695b7512c2efb53378/uv-0.10.2-py3-none-win_arm64.whl", hash = "sha256:abdd5b3c6b871b17bf852a90346eb7af881345706554fd082346b000a9393afd", size = 22035199, upload-time = "2026-02-10T19:18:03.679Z" }, ] [[package]] From e54fb635a67d66ede6168aaf460a940bbd45252b Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Wed, 11 Feb 2026 19:55:27 +0600 Subject: [PATCH 04/22] Update main_api.tl --- compiler/api/source/main_api.tl | 72 +++++++++++---------------------- 1 file changed, 23 insertions(+), 49 deletions(-) diff --git a/compiler/api/source/main_api.tl b/compiler/api/source/main_api.tl index 90c5f54a..5f4b9052 100644 --- a/compiler/api/source/main_api.tl +++ b/compiler/api/source/main_api.tl @@ -117,10 +117,9 @@ userStatusOffline#8c703f was_online:int = UserStatus; userStatusRecently#7b197dc8 flags:# by_me:flags.0?true = UserStatus; userStatusLastWeek#541a1d1a flags:# by_me:flags.0?true = UserStatus; userStatusLastMonth#65899777 flags:# by_me:flags.0?true = UserStatus; -userStatusHidden#cf7d64b1 = UserStatus; chatEmpty#29562865 id:long = Chat; -chat#41cbf256 flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true deactivated:flags.5?true call_active:flags.23?true call_not_empty:flags.24?true noforwards:flags.25?true id:long title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; +chat#41cbf256 flags:# creator:flags.0?true left:flags.2?true deactivated:flags.5?true call_active:flags.23?true call_not_empty:flags.24?true noforwards:flags.25?true id:long title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; chatForbidden#6592a1a7 id:long title:string = Chat; channel#1c32b11c flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true has_geo:flags.21?true slowmode_enabled:flags.22?true call_active:flags.23?true call_not_empty:flags.24?true fake:flags.25?true gigagroup:flags.26?true noforwards:flags.27?true join_to_send:flags.28?true join_request:flags.29?true forum:flags.30?true flags2:# stories_hidden:flags2.1?true stories_hidden_min:flags2.2?true stories_unavailable:flags2.3?true signature_profiles:flags2.12?true autotranslation:flags2.15?true broadcast_messages_allowed:flags2.16?true monoforum:flags2.17?true forum_tabs:flags2.19?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int usernames:flags2.0?Vector stories_max_id:flags2.4?RecentStory color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int subscription_until_date:flags2.11?int bot_verification_icon:flags2.13?long send_paid_messages_stars:flags2.14?long linked_monoforum_id:flags2.18?long = Chat; channelForbidden#17d493d5 flags:# broadcast:flags.5?true megagroup:flags.8?true monoforum:flags.10?true id:long access_hash:long title:string until_date:flags.16?int = Chat; @@ -208,8 +207,8 @@ messageActionRequestedPeerSentMe#93b31848 button_id:int peers:Vector = MessageAction; @@ -220,14 +219,8 @@ messageActionSuggestedPostSuccess#95ddcf69 price:StarsAmount = MessageAction; messageActionSuggestedPostRefund#69f916f8 flags:# payer_initiated:flags.0?true = MessageAction; messageActionGiftTon#a8a3c699 flags:# currency:string amount:long crypto_currency:string crypto_amount:long transaction_id:flags.0?string = MessageAction; messageActionSuggestBirthday#2c8f2a25 birthday:Birthday = MessageAction; -messageActionStarGiftPurchaseOffer#774278d4 flags:# accepted:flags.0?int declined:flags.1?true gift:StarGift price:StarsAmount expires_at:int = MessageAction; +messageActionStarGiftPurchaseOffer#774278d4 flags:# accepted:flags.0?true declined:flags.1?true gift:StarGift price:StarsAmount expires_at:int = MessageAction; messageActionStarGiftPurchaseOfferDeclined#73ada76b flags:# expired:flags.0?true gift:StarGift price:StarsAmount = MessageAction; -messageActionPhoneNumberRequest#1baa035 = MessageAction; -messageActionUserJoined#55555550 = MessageAction; -messageActionUserUpdatedPhoto#55555551 new_user_photo:UserProfilePhoto = MessageAction; -messageActionTTLChange#55555552 ttl:int = MessageAction; -messageActionCreatedBroadcastList#55555557 = MessageAction; -messageActionLoginUnknownLocation#555555f5 title:string address:string = MessageAction; messageActionNewCreatorPending#b07ed085 new_creator_id:long = MessageAction; messageActionChangeCreator#e188503b new_creator_id:long = MessageAction; @@ -331,7 +324,6 @@ inputMessagesFilterMyMentions#c1f8e69a = MessagesFilter; inputMessagesFilterGeo#e7026d0d = MessagesFilter; inputMessagesFilterContacts#e062db83 = MessagesFilter; inputMessagesFilterPinned#1bb00451 = MessagesFilter; -inputMessagesFilterPhotoVideoDocuments#d95e73bb = MessagesFilter; updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update; updateMessageID#4e90bfd6 id:int random_id:long = Update; @@ -484,8 +476,6 @@ updateDeleteGroupCallMessages#3e85e92c call:InputGroupCall messages:Vector updateStarGiftAuctionState#48e246c2 gift_id:long state:StarGiftAuctionState = Update; updateStarGiftAuctionUserState#dc58f31e gift_id:long user_state:StarGiftAuctionUserState = Update; updateEmojiGameInfo#fb9c547a info:messages.EmojiGameInfo = Update; -updateTranscribeAudio#88617090 flags:# final:flags.0?true transcription_id:long text:string = Update; -updateBotSubscriptionExpire#a8ae3eb1 user_id:long payload:string until_date:int qts:int = Update; updateStarGiftCraftFail#ac072444 = Update; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; @@ -666,7 +656,6 @@ webPageEmpty#211a1788 flags:# id:long url:flags.0?string = WebPage; webPagePending#b0d13e47 flags:# id:long url:flags.0?string date:int = WebPage; webPage#e89c45b2 flags:# has_large_media:flags.13?true video_cover_photo:flags.14?true id:long url:string display_url:string hash:int type:flags.0?string site_name:flags.1?string title:flags.2?string description:flags.3?string photo:flags.4?Photo embed_url:flags.5?string embed_type:flags.5?string embed_width:flags.6?int embed_height:flags.6?int duration:flags.7?int author:flags.8?string document:flags.9?Document cached_page:flags.10?Page attributes:flags.12?Vector = WebPage; webPageNotModified#7311ca11 flags:# cached_page_views:flags.0?int = WebPage; -webPageUrlPending#d41a5167 url:string = WebPage; authorization#ad01d61d flags:# current:flags.0?true official_app:flags.1?true password_pending:flags.2?true encrypted_requests_disabled:flags.3?true call_requests_disabled:flags.4?true unconfirmed:flags.5?true hash:long device_model:string platform:string system_version:string api_id:int app_name:string app_version:string date_created:int date_active:int ip:string country:string region:string = Authorization; @@ -716,18 +705,18 @@ keyboardButtonUrl#d80c25ec flags:# style:flags.10?KeyboardButtonStyle text:strin keyboardButtonCallback#e62bc960 flags:# requires_password:flags.0?true style:flags.10?KeyboardButtonStyle text:string data:bytes = KeyboardButton; keyboardButtonRequestPhone#417efd8f flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; keyboardButtonRequestGeoLocation#aa40f94d flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonSwitchInline#991399fc flags:# style:flags.10?KeyboardButtonStyle same_peer:flags.0?true text:string query:string peer_types:flags.1?Vector = KeyboardButton; +keyboardButtonSwitchInline#991399fc flags:# same_peer:flags.0?true style:flags.10?KeyboardButtonStyle text:string query:string peer_types:flags.1?Vector = KeyboardButton; keyboardButtonGame#89c590f9 flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; keyboardButtonBuy#3fa53905 flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; keyboardButtonUrlAuth#f51006f9 flags:# style:flags.10?KeyboardButtonStyle text:string fwd_text:flags.0?string url:string button_id:int = KeyboardButton; -inputKeyboardButtonUrlAuth#68013e72 flags:# style:flags.10?KeyboardButtonStyle request_write_access:flags.0?true text:string fwd_text:flags.1?string url:string bot:InputUser = KeyboardButton; +inputKeyboardButtonUrlAuth#68013e72 flags:# request_write_access:flags.0?true style:flags.10?KeyboardButtonStyle text:string fwd_text:flags.1?string url:string bot:InputUser = KeyboardButton; keyboardButtonRequestPoll#7a11d782 flags:# style:flags.10?KeyboardButtonStyle quiz:flags.0?Bool text:string = KeyboardButton; -inputKeyboardButtonUserProfile#7d5e07c7 flags:# style:flags.10?KeyboardButtonStyle text:string input_user:InputUser = KeyboardButton; +inputKeyboardButtonUserProfile#7d5e07c7 flags:# style:flags.10?KeyboardButtonStyle text:string user_id:InputUser = KeyboardButton; keyboardButtonUserProfile#c0fd5d09 flags:# style:flags.10?KeyboardButtonStyle text:string user_id:long = KeyboardButton; keyboardButtonWebView#e846b1a0 flags:# style:flags.10?KeyboardButtonStyle text:string url:string = KeyboardButton; keyboardButtonSimpleWebView#e15c4370 flags:# style:flags.10?KeyboardButtonStyle text:string url:string = KeyboardButton; keyboardButtonRequestPeer#5b0f15f5 flags:# style:flags.10?KeyboardButtonStyle text:string button_id:int peer_type:RequestPeerType max_quantity:int = KeyboardButton; -inputKeyboardButtonRequestPeer#c9662d05 flags:# name_requested:flags.0?true username_requested:flags.1?true photo_requested:flags.2?true text:string button_id:int peer_type:RequestPeerType max_quantity:int = KeyboardButton; +inputKeyboardButtonRequestPeer#2b78156 flags:# name_requested:flags.0?true username_requested:flags.1?true photo_requested:flags.2?true style:flags.10?KeyboardButtonStyle text:string button_id:int peer_type:RequestPeerType max_quantity:int = KeyboardButton; keyboardButtonCopy#bcc4af10 flags:# style:flags.10?KeyboardButtonStyle text:string copy_text:string = KeyboardButton; keyboardButtonRow#77608b83 buttons:Vector = KeyboardButtonRow; @@ -990,7 +979,7 @@ inputWebFileAudioAlbumThumbLocation#f46fe924 flags:# small:flags.2?true document upload.webFile#21e753bc size:int mime_type:string file_type:storage.FileType mtime:int bytes:bytes = upload.WebFile; payments.paymentForm#a0058751 flags:# can_save_credentials:flags.2?true password_missing:flags.3?true form_id:long bot_id:long title:string description:string photo:flags.5?WebDocument invoice:Invoice provider_id:long url:string native_provider:flags.4?string native_params:flags.4?DataJSON additional_methods:flags.6?Vector saved_info:flags.0?PaymentRequestedInfo saved_credentials:flags.1?Vector users:Vector = payments.PaymentForm; -payments.paymentFormStars#7bf6b15c flags:# can_save_credentials:flags.2?true password_missing:flags.3?true form_id:long bot_id:long title:string description:string photo:flags.5?WebDocument invoice:Invoice users:Vector = payments.PaymentForm; +payments.paymentFormStars#7bf6b15c flags:# form_id:long bot_id:long title:string description:string photo:flags.5?WebDocument invoice:Invoice users:Vector = payments.PaymentForm; payments.paymentFormStarGift#b425cfe1 form_id:long invoice:Invoice = payments.PaymentForm; payments.validatedRequestedInfo#d1451883 flags:# id:flags.0?string shipping_options:flags.1?Vector = payments.ValidatedRequestedInfo; @@ -1096,7 +1085,6 @@ channelAdminLogEventActionChangeEmojiStickerSet#46d840ab prev_stickerset:InputSt channelAdminLogEventActionToggleSignatureProfiles#60a79c79 new_value:Bool = ChannelAdminLogEventAction; channelAdminLogEventActionParticipantSubExtend#64642db3 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction; channelAdminLogEventActionToggleAutotranslation#c517f77e new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeTheme#fe69018d prev_value:string new_value:string = ChannelAdminLogEventAction; channelAdminLogEvent#1fad68cd id:long date:int user_id:long action:ChannelAdminLogEventAction = ChannelAdminLogEvent; @@ -1625,7 +1613,7 @@ stickerKeyword#fcfeb29c document_id:long keyword:Vector = StickerKeyword username#b4073647 flags:# editable:flags.0?true active:flags.1?true username:string = Username; forumTopicDeleted#23f109b id:int = ForumTopic; -forumTopic#cdff0eca flags:# my:flags.1?true closed:flags.2?true pinned:flags.3?true short:flags.5?true hidden:flags.6?true title_missing:flags.7?true id:flags.7?int date:int peer:Peer title:string icon_color:int icon_emoji_id:flags.0?long top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int from_id:Peer notify_settings:PeerNotifySettings draft:flags.4?DraftMessage = ForumTopic; +forumTopic#cdff0eca flags:# my:flags.1?true closed:flags.2?true pinned:flags.3?true short:flags.5?true hidden:flags.6?true title_missing:flags.7?true id:int date:int peer:Peer title:string icon_color:int icon_emoji_id:flags.0?long top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int from_id:Peer notify_settings:PeerNotifySettings draft:flags.4?DraftMessage = ForumTopic; messages.forumTopics#367617d3 flags:# order_by_create_date:flags.0?true count:int topics:Vector messages:Vector chats:Vector users:Vector pts:int = messages.ForumTopics; @@ -1634,8 +1622,8 @@ defaultHistoryTTL#43b46b20 period:int = DefaultHistoryTTL; exportedContactToken#41bf109b url:string expires:int = ExportedContactToken; requestPeerTypeUser#5f3b8a00 flags:# bot:flags.0?Bool premium:flags.1?Bool = RequestPeerType; -requestPeerTypeChat#c9f06e1b flags:# creator:flags.0?true user_admin_rights:flags.1?ChatAdminRights bot_participant:flags.5?true bot_admin_rights:flags.2?ChatAdminRights has_username:flags.3?Bool forum:flags.4?Bool = RequestPeerType; -requestPeerTypeBroadcast#339bef6c flags:# creator:flags.0?true user_admin_rights:flags.1?ChatAdminRights has_username:flags.3?Bool bot_admin_rights:flags.2?ChatAdminRights = RequestPeerType; +requestPeerTypeChat#c9f06e1b flags:# creator:flags.0?true bot_participant:flags.5?true has_username:flags.3?Bool forum:flags.4?Bool user_admin_rights:flags.1?ChatAdminRights bot_admin_rights:flags.2?ChatAdminRights = RequestPeerType; +requestPeerTypeBroadcast#339bef6c flags:# creator:flags.0?true has_username:flags.3?Bool user_admin_rights:flags.1?ChatAdminRights bot_admin_rights:flags.2?ChatAdminRights = RequestPeerType; emojiListNotModified#481eadfa = EmojiList; emojiList#7a1e11d1 hash:long document_id:Vector = EmojiList; @@ -1674,7 +1662,7 @@ readParticipantDate#4a4ff172 user_id:long date:int = ReadParticipantDate; inputChatlistDialogFilter#f3e0da33 filter_id:int = InputChatlist; -exportedChatlistInvite#c5181ac flags:# revoked:flags.0?true title:string url:string peers:Vector = ExportedChatlistInvite; +exportedChatlistInvite#c5181ac flags:# title:string url:string peers:Vector = ExportedChatlistInvite; chatlists.exportedChatlistInvite#10e6e3a6 filter:DialogFilter invite:ExportedChatlistInvite = chatlists.ExportedChatlistInvite; @@ -1915,7 +1903,7 @@ starsTransactionPeerAPI#f9677aad = StarsTransactionPeer; starsTopupOption#bd915c0 flags:# extended:flags.1?true stars:long store_product:flags.0?string currency:string amount:long = StarsTopupOption; -starsTransaction#13659eb0 flags:# refund:flags.3?true pending:flags.4?true failed:flags.6?true gift:flags.10?true reaction:flags.11?true subscription:flags.12?true floodskip:flags.15?true stargift_upgrade:flags.18?true paid_message:flags.19?true premium_gift:flags.20?true business_transfer:flags.21?true stargift_resale:flags.22?true posts_search:flags.24?true stargift_prepaid_upgrade:flags.25?true stargift_drop_original_details:flags.26?true phonegroup_message:flags.27?true stargift_auction_bid:flags.28?true offer:flags.29?true id:string amount:StarsAmount date:int peer:StarsTransactionPeer title:flags.0?string description:flags.1?string photo:flags.2?WebDocument transaction_date:flags.5?int transaction_url:flags.5?string bot_payload:flags.7?bytes msg_id:flags.8?int extended_media:flags.9?Vector subscription_period:flags.12?int giveaway_post_id:flags.13?int stargift:flags.14?StarGift floodskip_number:flags.15?int starref_commission_permille:flags.16?int starref_peer:flags.17?Peer starref_amount:flags.17?StarsAmount paid_messages:flags.19?int premium_gift_months:flags.20?int ads_proceeds_from_date:flags.23?int ads_proceeds_to_date:flags.23?int = StarsTransaction; +starsTransaction#13659eb0 flags:# refund:flags.3?true pending:flags.4?true failed:flags.6?true gift:flags.10?true reaction:flags.11?true stargift_upgrade:flags.18?true business_transfer:flags.21?true stargift_resale:flags.22?true posts_search:flags.24?true stargift_prepaid_upgrade:flags.25?true stargift_drop_original_details:flags.26?true phonegroup_message:flags.27?true stargift_auction_bid:flags.28?true offer:flags.29?true id:string amount:StarsAmount date:int peer:StarsTransactionPeer title:flags.0?string description:flags.1?string photo:flags.2?WebDocument transaction_date:flags.5?int transaction_url:flags.5?string bot_payload:flags.7?bytes msg_id:flags.8?int extended_media:flags.9?Vector subscription_period:flags.12?int giveaway_post_id:flags.13?int stargift:flags.14?StarGift floodskip_number:flags.15?int starref_commission_permille:flags.16?int starref_peer:flags.17?Peer starref_amount:flags.17?StarsAmount paid_messages:flags.19?int premium_gift_months:flags.20?int ads_proceeds_from_date:flags.23?int ads_proceeds_to_date:flags.23?int = StarsTransaction; payments.starsStatus#6c9ce8ed flags:# balance:StarsAmount subscriptions:flags.1?Vector subscriptions_next_offset:flags.2?string subscriptions_missing_balance:flags.4?long history:flags.3?Vector next_offset:flags.0?string chats:Vector users:Vector = payments.StarsStatus; @@ -1953,7 +1941,7 @@ starsGiveawayOption#94ce852a flags:# extended:flags.0?true default:flags.1?true starsGiveawayWinnersOption#54236209 flags:# default:flags.0?true users:int per_user_stars:long = StarsGiveawayWinnersOption; -starGift#313a9547 flags:# limited:flags.0?true sold_out:flags.1?true birthday:flags.2?true can_upgrade:flags.3?true require_premium:flags.7?true limited_per_user:flags.8?true peer_color_available:flags.10?true auction:flags.11?true id:long sticker:Document stars:long availability_remains:flags.0?int availability_total:flags.0?int availability_resale:flags.4?long convert_stars:long first_sale_date:flags.1?int last_sale_date:flags.1?int upgrade_stars:flags.3?long resell_min_stars:flags.4?long title:flags.5?string released_by:flags.6?Peer per_user_total:flags.8?int per_user_remains:flags.8?int locked_until_date:flags.9?int auction_slug:flags.11?string gifts_per_round:flags.11?int auction_start_date:flags.11?int upgrade_variants:flags.12?int background:flags.13?StarGiftBackground = StarGift; +starGift#313a9547 flags:# limited:flags.0?true sold_out:flags.1?true birthday:flags.2?true require_premium:flags.7?true limited_per_user:flags.8?true peer_color_available:flags.10?true auction:flags.11?true id:long sticker:Document stars:long availability_remains:flags.0?int availability_total:flags.0?int availability_resale:flags.4?long convert_stars:long first_sale_date:flags.1?int last_sale_date:flags.1?int upgrade_stars:flags.3?long resell_min_stars:flags.4?long title:flags.5?string released_by:flags.6?Peer per_user_total:flags.8?int per_user_remains:flags.8?int locked_until_date:flags.9?int auction_slug:flags.11?string gifts_per_round:flags.11?int auction_start_date:flags.11?int upgrade_variants:flags.12?int background:flags.13?StarGiftBackground = StarGift; starGiftUnique#85f0a9cd flags:# require_premium:flags.6?true resale_ton_only:flags.7?true theme_available:flags.9?true burned:flags.14?true crafted:flags.15?true id:long gift_id:long title:string slug:string num:int owner_id:flags.0?Peer owner_name:flags.1?string owner_address:flags.2?string attributes:Vector availability_issued:int availability_total:int gift_address:flags.3?string resell_amount:flags.4?Vector released_by:flags.5?Peer value_amount:flags.8?long value_currency:flags.8?string value_usd_amount:flags.8?long theme_peer:flags.10?Peer peer_color:flags.11?PeerColor host_id:flags.12?Peer offer_min_stars:flags.13?int craft_chance_permille:flags.16?int = StarGift; payments.starGiftsNotModified#a388a368 = payments.StarGifts; @@ -2094,7 +2082,7 @@ starGiftUpgradePrice#99ea331d date:int upgrade_stars:long = StarGiftUpgradePrice groupCallMessage#1a8afc7e flags:# from_admin:flags.1?true id:int from_id:Peer date:int message:TextWithEntities paid_message_stars:flags.0?long = GroupCallMessage; -groupCallDonor#ee430c85 flags:# top:flags.0?true my:flags.1?true anonymous:flags.2?true peer_id:flags.3?Peer stars:long = GroupCallDonor; +groupCallDonor#ee430c85 flags:# top:flags.0?true my:flags.1?true peer_id:flags.3?Peer stars:long = GroupCallDonor; phone.groupCallStars#9d1dbd26 total_stars:long top_donors:Vector chats:Vector users:Vector = phone.GroupCallStars; @@ -2149,19 +2137,13 @@ messages.emojiGameUnavailable#59e65335 = messages.EmojiGameInfo; messages.emojiGameDiceInfo#44e56023 flags:# game_hash:string prev_stake:long current_streak:int params:Vector plays_left:flags.0?int = messages.EmojiGameInfo; starGiftAttributeRarity#36437737 permille:int = StarGiftAttributeRarity; -starGiftAttributeRarityEpic#78fbf3a8 = StarGiftAttributeRarity; -starGiftAttributeRarityLegendary#cef7e7a8 = StarGiftAttributeRarity; starGiftAttributeRarityUncommon#dbce6389 = StarGiftAttributeRarity; starGiftAttributeRarityRare#f08d516b = StarGiftAttributeRarity; - -messages.messageEmpty#3f4e0648 = messages.MessageEmpty; +starGiftAttributeRarityEpic#78fbf3a8 = StarGiftAttributeRarity; +starGiftAttributeRarityLegendary#cef7e7a8 = StarGiftAttributeRarity; keyboardButtonStyle#4fdd3430 flags:# bg_primary:flags.0?true bg_danger:flags.1?true bg_success:flags.2?true icon:flags.3?long = KeyboardButtonStyle; -premiumGiftOption#79c059f7 flags:# months:int currency:string amount:long bot_url:flags.1?string store_product:flags.0?string = PremiumGiftOption; - -messages.webViewResult#aadf159b result:BotInlineResult users:Vector = messages.WebViewResult; - ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -2173,7 +2155,7 @@ invokeWithMessagesRange#365275f2 {X:Type} range:MessageRange query:!X = X; invokeWithTakeout#aca9fd2e {X:Type} takeout_id:long query:!X = X; invokeWithBusinessConnection#dd289f8e {X:Type} connection_id:string query:!X = X; invokeWithGooglePlayIntegrity#1df92984 {X:Type} nonce:string token:string query:!X = X; -invokeWithApnsSecret#dae54f8 {X:Type} nonce:string secret:string query:!X = X; +invokeWithApnsSecret#0dae54f8 {X:Type} nonce:string secret:string query:!X = X; invokeWithReCaptcha#adbb0f94 {X:Type} token:string query:!X = X; auth.sendCode#a677244f phone_number:string api_id:int api_hash:string settings:CodeSettings = auth.SentCode; @@ -2363,7 +2345,6 @@ contacts.setBlocked#94c65c76 flags:# my_stories_from:flags.0?true id:Vector = User; messages.getMessages#63c66506 id:Vector = messages.Messages; messages.getDialogs#a0f4cb4f flags:# exclude_pinned:flags.0?true folder_id:flags.1?int offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:long = messages.Dialogs; @@ -2604,13 +2585,6 @@ messages.createForumTopic#2f98c3d5 flags:# title_missing:flags.4?true peer:Input messages.deleteTopicHistory#d2816f10 peer:InputPeer top_msg_id:int = messages.AffectedHistory; messages.getEmojiGameInfo#fb7e8ca7 = messages.EmojiGameInfo; messages.summarizeText#9d4104e2 flags:# peer:InputPeer id:int to_lang:flags.0?string = TextWithEntities; -messages.getWebViewResult#22b6c214 peer:InputPeer bot:InputUser query_id:long = messages.WebViewResult; -messages.forwardMessage#33963bf9 peer:InputPeer id:int random_id:long = Updates; -messages.getStatsURL#812c2ae6 flags:# dark:flags.0?true peer:InputPeer params:string = StatsURL; -messages.getAllChats#875f74be except_ids:Vector = messages.Chats; -messages.craftStarGift#b0f9684f stargift:Vector = Updates; -messages.setWebViewResult#e41cd11d query_id:long = Bool; -messages.getCraftStarGifts#fd05dd00 gift_id:long offset:string limit:int = payments.SavedStarGifts; updates.getState#edd4882a = updates.State; updates.getDifference#19c2f763 flags:# pts:int pts_limit:flags.1?int pts_total_limit:flags.0?int date:int qts:int qts_limit:flags.2?int = updates.Difference; @@ -2812,7 +2786,8 @@ payments.getStarGiftActiveAuctions#a5d0514d hash:long = payments.StarGiftActiveA payments.resolveStarGiftOffer#e9ce781c flags:# decline:flags.0?true offer_msg_id:int = Updates; payments.sendStarGiftOffer#8fb86b41 flags:# peer:InputPeer slug:string price:StarsAmount duration:int random_id:long allow_paid_stars:flags.0?long = Updates; payments.getStarGiftUpgradeAttributes#6d038b58 gift_id:long = payments.StarGiftUpgradeAttributes; -payments.requestRecurringPayment#146e958d user_id:InputUser recurring_init_charge:string invoice_media:InputMedia = Updates; +payments.getCraftStarGifts#fd05dd00 gift_id:long offset:string limit:int = payments.SavedStarGifts; +payments.craftStarGift#b0f9684f stargift:Vector = Updates; stickers.createStickerSet#9021ab67 flags:# masks:flags.0?true emojis:flags.5?true text_color:flags.6?true user_id:InputUser title:string short_name:string thumb:flags.2?InputDocument stickers:Vector software:flags.3?string = messages.StickerSet; stickers.removeStickerFromSet#f7760f51 sticker:InputDocument = messages.StickerSet; @@ -2877,7 +2852,6 @@ langpack.getLanguages#42c6978f lang_pack:string = Vector; langpack.getLanguage#6a596502 lang_pack:string lang_code:string = LangPackLanguage; folders.editPeerFolders#6847d0ab folder_peers:Vector = Updates; -folders.deleteFolder#1c295881 folder_id:int = Updates; stats.getBroadcastStats#ab42441a flags:# dark:flags.0?true channel:InputChannel = stats.BroadcastStats; stats.loadAsyncGraph#621d5fa0 flags:# token:string x:flags.0?long = StatsGraph; @@ -2889,7 +2863,7 @@ stats.getStoryPublicForwards#a6437ef6 peer:InputPeer id:int offset:string limit: chatlists.exportChatlistInvite#8472478e chatlist:InputChatlist title:string peers:Vector = chatlists.ExportedChatlistInvite; chatlists.deleteExportedInvite#719c5c5e chatlist:InputChatlist slug:string = Bool; -chatlists.editExportedInvite#653db63d flags:# revoked:flags.0?true chatlist:InputChatlist slug:string title:flags.1?string peers:flags.2?Vector = ExportedChatlistInvite; +chatlists.editExportedInvite#653db63d flags:# chatlist:InputChatlist slug:string title:flags.1?string peers:flags.2?Vector = ExportedChatlistInvite; chatlists.getExportedInvites#ce03da83 chatlist:InputChatlist = chatlists.ExportedInvites; chatlists.checkChatlistInvite#41c10fff slug:string = chatlists.ChatlistInvite; chatlists.joinChatlistInvite#a6b1e39a slug:string peers:Vector = Updates; @@ -2949,4 +2923,4 @@ smsjobs.finishJob#4f1ebf24 flags:# job_id:string error:flags.0?string = Bool; fragment.getCollectibleInfo#be1e85ba collectible:InputCollectible = fragment.CollectibleInfo; -// LAYER 224 +// LAYER 222 From 4d8b46575045597bd20772a8198fdf6483a221d2 Mon Sep 17 00:00:00 2001 From: 5hojib Date: Wed, 11 Feb 2026 20:05:01 +0600 Subject: [PATCH 05/22] update --- .github/workflows/fetch_mtproto.yml | 150 +++++++++++++++++ dev_tools/check_api_schema_updates.py | 222 ++++++++++++++++++++++++++ 2 files changed, 372 insertions(+) create mode 100644 .github/workflows/fetch_mtproto.yml create mode 100644 dev_tools/check_api_schema_updates.py diff --git a/.github/workflows/fetch_mtproto.yml b/.github/workflows/fetch_mtproto.yml new file mode 100644 index 00000000..a504da51 --- /dev/null +++ b/.github/workflows/fetch_mtproto.yml @@ -0,0 +1,150 @@ +name: Check MTProto API Schema Updates + +on: + schedule: + - cron: '0 */12 * * *' + workflow_dispatch: + inputs: + force_update: + description: 'Force update even if no changes detected' + required: false + default: false + type: boolean + +jobs: + check-schema-updates: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + cache: 'pip' + + - name: Install dependencies + run: | + pip install requests + + - name: Check for API schema updates + id: check-updates + run: | + FORCE_UPDATE="" + if [[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ github.event.inputs.force_update }}" == "true" ]]; then + FORCE_UPDATE="--force-update" + fi + + python dev_tools/check_api_schema_updates.py $FORCE_UPDATE + EXIT_CODE=$? + + if [ $EXIT_CODE -eq 0 ]; then + echo "updates_detected=true" >> $GITHUB_OUTPUT + CURRENT_LAYER=$(grep -o "// LAYER [0-9]*" compiler/api/source/main_api.tl | awk '{print $3}') + echo "layer_version=$CURRENT_LAYER" >> $GITHUB_OUTPUT + elif [ $EXIT_CODE -eq 2 ]; then + echo "updates_detected=false" >> $GITHUB_OUTPUT + else + echo "Error checking for updates" + exit 1 + fi + + - name: Set up Git config + if: steps.check-updates.outputs.updates_detected == 'true' + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + + - name: Check existing PR + if: steps.check-updates.outputs.updates_detected == 'true' + id: check-pr + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BRANCH_NAME="update/mtproto-api-updates" + + # Check if there's an open PR for this branch + PR_NUMBER=$(gh pr list --head "$BRANCH_NAME" --state open --json number -q '.[0].number') + + if [ -n "$PR_NUMBER" ]; then + echo "existing_pr=true" >> $GITHUB_OUTPUT + echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT + else + echo "existing_pr=false" >> $GITHUB_OUTPUT + fi + + - name: Compile API + if: steps.check-updates.outputs.updates_detected == 'true' + run: | + pip install . + python -m compiler.api.compiler + + - name: Compile errors + if: steps.check-updates.outputs.updates_detected == 'true' + run: | + python -m compiler.errors.compiler + + - name: Create branch and commit changes + if: steps.check-updates.outputs.updates_detected == 'true' && steps.check-pr.outputs.existing_pr == 'false' + run: | + LAYER_VERSION="${{ steps.check-updates.outputs.layer_version }}" + BRANCH_NAME="update/mtproto-api-updates" + + git checkout -b $BRANCH_NAME + git add compiler/api/source/main_api.tl pyrogram/raw/ pyrogram/errors/ + git commit -m "Update MTProto API schema to Layer ${LAYER_VERSION}" + git push origin $BRANCH_NAME + + - name: Update existing branch + if: steps.check-updates.outputs.updates_detected == 'true' && steps.check-pr.outputs.existing_pr == 'true' + run: | + LAYER_VERSION="${{ steps.check-updates.outputs.layer_version }}" + BRANCH_NAME="update/mtproto-api-updates" + + # Create a new branch based on the current main branch + git checkout -b $BRANCH_NAME-temp origin/main + + # Add the changes and commit + git add compiler/api/source/main_api.tl pyrogram/raw/ pyrogram/errors/ + git commit -m "Update MTProto API schema to Layer ${LAYER_VERSION}" + + # Force push to update the branch + git push --force origin $BRANCH_NAME-temp:$BRANCH_NAME + + - name: Create Pull Request + if: steps.check-updates.outputs.updates_detected == 'true' && steps.check-pr.outputs.existing_pr == 'false' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + LAYER_VERSION="${{ steps.check-updates.outputs.layer_version }}" + BRANCH_NAME="update/mtproto-api-updates" + PR_TITLE="Update MTProto API schema" + PR_BODY="This PR automatically updates the MTProto API schema to Layer ${LAYER_VERSION}.\n\n- Updated main schema file\n- Recompiled raw and errors modules\n- Created news entry for changelog" + + gh pr create \ + --title "$PR_TITLE" \ + --body "$PR_BODY" \ + --base main \ + --head "$BRANCH_NAME" \ + --label "enhancement" \ + --label "automated" + + - name: Update Pull Request Title and Description + if: steps.check-updates.outputs.updates_detected == 'true' && steps.check-pr.outputs.existing_pr == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + LAYER_VERSION="${{ steps.check-updates.outputs.layer_version }}" + PR_NUMBER="${{ steps.check-pr.outputs.pr_number }}" + PR_TITLE="Update MTProto API schema" + PR_BODY="This PR automatically updates the MTProto API schema to Layer ${LAYER_VERSION}.\n\n- Updated main schema file\n- Recompiled raw and errors modules\n- Created news entry for changelog" + + gh pr edit $PR_NUMBER --title "$PR_TITLE" --body "$PR_BODY" + + PR_COMMENT="Updated the MTProto API schema to Layer ${LAYER_VERSION}.\n\n- Updated main schema file\n- Recompiled raw and errors modules\n- Added new news entry for changelog" + gh pr comment $PR_NUMBER --body "$PR_COMMENT" \ No newline at end of file diff --git a/dev_tools/check_api_schema_updates.py b/dev_tools/check_api_schema_updates.py new file mode 100644 index 00000000..2c7b30b0 --- /dev/null +++ b/dev_tools/check_api_schema_updates.py @@ -0,0 +1,222 @@ +from __future__ import annotations + +import argparse +import hashlib +import logging +import re +import sys +from pathlib import Path +from typing import TypedDict + +import requests + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", +) +logger = logging.getLogger(__name__) + +# Constants +API_SCHEMA_URL = "https://raw.githubusercontent.com/telegramdesktop/tdesktop/dev/Telegram/SourceFiles/mtproto/scheme/api.tl" + +REPO_HOME = Path(__file__).parent.parent +API_DIR = REPO_HOME / "compiler" / "api" +SOURCE_DIR = API_DIR / "source" +MAIN_API_PATH = SOURCE_DIR / "main_api.tl" + +LAYER_RE = re.compile(r"//\s*LAYER\s+(\d+)") + +SCHEMA_HEADER = """// https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/mtproto/scheme/api.tl + +/////////////////////////////// +///////// Main application API +/////////////////////////////// + +---types--- + +// boolFalse#bc799737 = Bool; // Parsed manually +// boolTrue#997275b5 = Bool; // Parsed manually + +// true#3fedd339 = True; // Not used + +// vector#1cb5c415 {t:Type} # [ t ] = Vector t; // Parsed manually + +// error#c4b9f9bb code:int text:string = Error; // Not used + +// null#56730bcc = Null; // Parsed manually +""" + +BASIC_TYPES = [ + "boolFalse#bc799737 = Bool;", + "boolTrue#997275b5 = Bool;", + "true#3fedd339 = True;", + "vector#1cb5c415 {t:Type} # [ t ] = Vector t;", + "error#c4b9f9bb code:int text:string = Error;", + "null#56730bcc = Null;", +] + + +class SchemaData(TypedDict): + """Schema data returned from the Telegram API.""" + + content: str + hash: str + layer: str + + +def get_current_schema_hash() -> str | None: + """ + Get the hash of the current schema file if it exists. + + Returns: + str | None: SHA256 hash of the current schema file or None if it doesn't exist + """ + if not MAIN_API_PATH.exists(): + return None + + return hashlib.sha256(MAIN_API_PATH.read_bytes()).hexdigest() + + +def get_latest_schema() -> SchemaData | None: + """ + Fetch the latest API schema from Telegram's repository. + + Returns: + SchemaData | None: Dictionary containing the schema content, hash, and layer version + or None if fetching or processing fails + """ + logger.info("Fetching latest API schema from Telegram repository") + + try: + api_response = requests.get(API_SCHEMA_URL) + api_response.raise_for_status() + + api_content = api_response.text + + # Extract layer version from the API content + layer_match = LAYER_RE.search(api_content) + layer_version = layer_match.group(1) if layer_match else "Unknown" + + # Process in new format mode + functions_idx = api_content.find("---functions---") + if functions_idx != -1: + types_part = api_content[:functions_idx].strip() + functions_part = api_content[functions_idx:] + else: + # Just treat everything as types since there's no clear separator + types_part = api_content + functions_part = "" + + # Remove basic types that are already in our header + # But preserve empty lines to maintain block structure + processed_types: list[str] = [] + + for line in types_part.split("\n"): + line_stripped = line.strip() + + # Keep empty lines + if not line_stripped: + processed_types.append("") + continue + + # Skip basic types that are in our header + if not any( + line_stripped.startswith(basic_type.split("=")[0].strip()) + for basic_type in BASIC_TYPES + ): + processed_types.append(line) + + # Combine our header with processed schema - trim extra whitespace + processed_types_content = "\n".join(processed_types).strip() + + if functions_part: + schema_content = f"{SCHEMA_HEADER}\n{processed_types_content}\n\n{functions_part}" + else: + schema_content = f"{SCHEMA_HEADER}\n{processed_types_content}" + + schema_hash = hashlib.sha256(schema_content.encode()).hexdigest() + + return {"content": schema_content, "hash": schema_hash, "layer": layer_version} + except requests.RequestException as e: + logger.error("Error fetching schema: %s", e) + return None + except (ValueError, KeyError) as e: + logger.error("Error processing schema: %s", e) + return None + + +def update_schema(schema_data: SchemaData) -> bool: + """ + Update the schema file with new content. + + Args: + schema_data: Dictionary containing schema content, hash, and layer version + + Returns: + bool: True if update was successful + """ + logger.info("Updating schema to layer %s", schema_data["layer"]) + + SOURCE_DIR.mkdir(parents=True, exist_ok=True) + + MAIN_API_PATH.write_text(schema_data["content"], encoding="utf-8") + + logger.info("Schema updated successfully to layer %s", schema_data["layer"]) + return True + + +def get_current_layer() -> str: + """ + Get the layer version from the current schema file. + + Returns: + str: Current layer version or "Unknown" if not found + """ + if not MAIN_API_PATH.exists(): + return "Unknown" + + content = MAIN_API_PATH.read_text(encoding="utf-8") + layer_match = LAYER_RE.search(content) + return layer_match.group(1) if layer_match else "Unknown" + + +def main() -> int: + """ + Main function to check for and apply schema updates. + + Returns: + int: Exit code (0: update applied, 1: error, 2: no update needed) + """ + parser = argparse.ArgumentParser(description="Check for updates to the Telegram API schema") + parser.add_argument( + "--force-update", action="store_true", help="Force update even if no changes detected" + ) + args = parser.parse_args() + + current_hash = get_current_schema_hash() + schema_data = get_latest_schema() + + if not schema_data: + logger.error("Failed to fetch schema data") + return 1 + + if args.force_update or current_hash != schema_data["hash"]: + if current_hash: + logger.info( + "Schema update detected! Current layer: %s → New layer: %s", + get_current_layer(), + schema_data["layer"], + ) + else: + logger.info("Initializing schema with layer %s", schema_data["layer"]) + + update_schema(schema_data) + return 0 + + logger.info("No schema updates detected. Current layer: %s", get_current_layer()) + return 2 + + +if __name__ == "__main__": + sys.exit(main()) \ No newline at end of file From c113a4e749519abcafc42c8ab0cceff09e0fc00b Mon Sep 17 00:00:00 2001 From: 5hojib Date: Wed, 11 Feb 2026 14:05:30 +0000 Subject: [PATCH 06/22] InkyPinkyPonky [no ci] Signed-off-by: 5hojib --- dev_tools/check_api_schema_updates.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/dev_tools/check_api_schema_updates.py b/dev_tools/check_api_schema_updates.py index 2c7b30b0..20774a32 100644 --- a/dev_tools/check_api_schema_updates.py +++ b/dev_tools/check_api_schema_updates.py @@ -131,13 +131,19 @@ def get_latest_schema() -> SchemaData | None: processed_types_content = "\n".join(processed_types).strip() if functions_part: - schema_content = f"{SCHEMA_HEADER}\n{processed_types_content}\n\n{functions_part}" + schema_content = ( + f"{SCHEMA_HEADER}\n{processed_types_content}\n\n{functions_part}" + ) else: schema_content = f"{SCHEMA_HEADER}\n{processed_types_content}" schema_hash = hashlib.sha256(schema_content.encode()).hexdigest() - return {"content": schema_content, "hash": schema_hash, "layer": layer_version} + return { + "content": schema_content, + "hash": schema_hash, + "layer": layer_version, + } except requests.RequestException as e: logger.error("Error fetching schema: %s", e) return None @@ -188,9 +194,13 @@ def main() -> int: Returns: int: Exit code (0: update applied, 1: error, 2: no update needed) """ - parser = argparse.ArgumentParser(description="Check for updates to the Telegram API schema") + parser = argparse.ArgumentParser( + description="Check for updates to the Telegram API schema" + ) parser.add_argument( - "--force-update", action="store_true", help="Force update even if no changes detected" + "--force-update", + action="store_true", + help="Force update even if no changes detected", ) args = parser.parse_args() @@ -219,4 +229,4 @@ def main() -> int: if __name__ == "__main__": - sys.exit(main()) \ No newline at end of file + sys.exit(main()) From c98c9a0e07747772dcbc58f0c8b51e224b8797e1 Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Wed, 11 Feb 2026 20:11:56 +0600 Subject: [PATCH 07/22] Update compiler.py --- compiler/errors/compiler.py | 94 ++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 43 deletions(-) diff --git a/compiler/errors/compiler.py b/compiler/errors/compiler.py index a9f497f8..0eaedd01 100644 --- a/compiler/errors/compiler.py +++ b/compiler/errors/compiler.py @@ -5,26 +5,36 @@ import shutil from pathlib import Path -HOME = "compiler/errors" -DEST = "pyrogram/errors/exceptions" +ERRORS_HOME_PATH = Path(__file__).parent.resolve() +REPO_HOME_PATH = ERRORS_HOME_PATH.parent.parent + +ERRORS_DEST_PATH = REPO_HOME_PATH / "pyrogram" / "errors" / "exceptions" +NOTICE_PATH = REPO_HOME_PATH / "NOTICE" def snake(s): + # https://stackoverflow.com/questions/1175208/elegant-python-function-to-convert-camelcase-to-snake-case s = re.sub(r"(.)([A-Z][a-z]+)", r"\1_\2", s) return re.sub(r"([a-z0-9])([A-Z])", r"\1_\2", s).lower() def camel(s): s = snake(s).split("_") - return "".join([str(i.title()) for i in s]) + return "".join(str(i.title()) for i in s) + +def start(): + shutil.rmtree(ERRORS_DEST_PATH, ignore_errors=True) + ERRORS_DEST_PATH.mkdir(parents=True) -def start() -> None: - shutil.rmtree(DEST, ignore_errors=True) - Path(DEST).mkdir(parents=True, exist_ok=True) - files = [i.name for i in Path(HOME, "source").iterdir() if i.is_file()] + files = [i.name for i in (ERRORS_HOME_PATH / "source").iterdir()] - with Path(DEST, "all.py").open("w", encoding="utf-8") as f_all: + with NOTICE_PATH.open(encoding="utf-8") as f: + notice = [f"# {line}".strip() for line in f] + notice = "\n".join(notice) + + with (ERRORS_DEST_PATH / "all.py").open("w", encoding="utf-8") as f_all: + f_all.write(notice + "\n\n") f_all.write("count = {count}\n\n") f_all.write("exceptions = {\n") @@ -32,28 +42,30 @@ def start() -> None: for i in files: code, name = re.search(r"(\d+)_([A-Z_]+)", i).groups() + f_all.write(f" {code}: {{\n") - init = f"{DEST}/__init__.py" - with Path(init).open("a", encoding="utf-8") as f_init: + init = ERRORS_DEST_PATH / "__init__.py" + + if not init.exists(): + with init.open("w", encoding="utf-8") as f_init: + f_init.write(notice + "\n\n") + + with init.open("a", encoding="utf-8") as f_init: f_init.write(f"from .{name.lower()}_{code} import *\n") with ( - Path(HOME, "source", i).open(encoding="utf-8") as f_csv, - Path(DEST, f"{name.lower()}_{code}.py").open( - "w", - encoding="utf-8", + (ERRORS_HOME_PATH / "source" / i).open(encoding="utf-8") as f_csv, + (ERRORS_DEST_PATH / f"{name.lower()}_{code}.py").open( + "w", encoding="utf-8" ) as f_class, ): reader = csv.reader(f_csv, delimiter="\t") super_class = camel(name) - name = " ".join( - [ - str(i.capitalize()) - for i in re.sub(r"_", " ", name).lower().split(" ") - ], - ) + name = " ".join([ + i.capitalize() for i in name.replace(r"_", " ").lower().split(" ") + ]) sub_classes = [] @@ -70,39 +82,38 @@ def start() -> None: error_id, error_message = row - sub_class = camel(re.sub(r"_X", "_", error_id)) + sub_class = camel(error_id.replace(r"_X", "_")) sub_class = re.sub(r"^2", "Two", sub_class) - sub_class = re.sub(r" ", "", sub_class) + sub_class = sub_class.replace(r" ", "") f_all.write(f' "{error_id}": "{sub_class}",\n') sub_classes.append((sub_class, error_id, error_message)) - with Path(HOME, "template/class.txt").open( - encoding="utf-8", + with (ERRORS_HOME_PATH / "template" / "class.txt").open( + encoding="utf-8" ) as f_class_template: class_template = f_class_template.read() - with Path(HOME, "template/sub_class.txt").open( - encoding="utf-8", + with (ERRORS_HOME_PATH / "template" / "sub_class.txt").open( + encoding="utf-8" ) as f_sub_class_template: sub_class_template = f_sub_class_template.read() class_template = class_template.format( + notice=notice, super_class=super_class, code=code, docstring=f'"""{name}"""', - sub_classes="".join( - [ - sub_class_template.format( - sub_class=k[0], - super_class=super_class, - id=f'"{k[1]}"', - docstring=f'"""{k[2]}"""', - ) - for k in sub_classes - ], - ), + sub_classes="".join([ + sub_class_template.format( + sub_class=k[0], + super_class=super_class, + id=f'"{k[1]}"', + docstring=f'"""{k[2]}"""', + ) + for k in sub_classes + ]), ) f_class.write(class_template) @@ -111,15 +122,12 @@ def start() -> None: f_all.write("}\n") - with Path(DEST, "all.py").open(encoding="utf-8") as f: + with (ERRORS_DEST_PATH / "all.py").open(encoding="utf-8") as f: content = f.read() - with Path(DEST, "all.py").open("w", encoding="utf-8") as f: - f.write(re.sub("{count}", str(count), content)) + with (ERRORS_DEST_PATH / "all.py").open("w", encoding="utf-8") as f: + f.write(re.sub(r"{count}", str(count), content)) # noqa: RUF027 if __name__ == "__main__": - HOME = "." - DEST = "../../pyrogram/errors/exceptions" - start() From 1a10eaed841d4bdfd00f1d07bcf74c2788d831f9 Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Wed, 11 Feb 2026 20:14:58 +0600 Subject: [PATCH 08/22] Update compiler.py --- compiler/errors/compiler.py | 72 +++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/compiler/errors/compiler.py b/compiler/errors/compiler.py index 0eaedd01..13a28bd7 100644 --- a/compiler/errors/compiler.py +++ b/compiler/errors/compiler.py @@ -9,7 +9,6 @@ REPO_HOME_PATH = ERRORS_HOME_PATH.parent.parent ERRORS_DEST_PATH = REPO_HOME_PATH / "pyrogram" / "errors" / "exceptions" -NOTICE_PATH = REPO_HOME_PATH / "NOTICE" def snake(s): @@ -29,12 +28,7 @@ def start(): files = [i.name for i in (ERRORS_HOME_PATH / "source").iterdir()] - with NOTICE_PATH.open(encoding="utf-8") as f: - notice = [f"# {line}".strip() for line in f] - notice = "\n".join(notice) - with (ERRORS_DEST_PATH / "all.py").open("w", encoding="utf-8") as f_all: - f_all.write(notice + "\n\n") f_all.write("count = {count}\n\n") f_all.write("exceptions = {\n") @@ -48,8 +42,7 @@ def start(): init = ERRORS_DEST_PATH / "__init__.py" if not init.exists(): - with init.open("w", encoding="utf-8") as f_init: - f_init.write(notice + "\n\n") + init.write_text("", encoding="utf-8") with init.open("a", encoding="utf-8") as f_init: f_init.write(f"from .{name.lower()}_{code} import *\n") @@ -63,9 +56,10 @@ def start(): reader = csv.reader(f_csv, delimiter="\t") super_class = camel(name) - name = " ".join([ - i.capitalize() for i in name.replace(r"_", " ").lower().split(" ") - ]) + name = " ".join( + j.capitalize() + for j in name.replace("_", " ").lower().split(" ") + ) sub_classes = [] @@ -77,14 +71,14 @@ def start(): count += 1 - if not row: # Row is empty (blank line) + if not row: continue error_id, error_message = row - sub_class = camel(error_id.replace(r"_X", "_")) + sub_class = camel(error_id.replace("_X", "_")) sub_class = re.sub(r"^2", "Two", sub_class) - sub_class = sub_class.replace(r" ", "") + sub_class = sub_class.replace(" ", "") f_all.write(f' "{error_id}": "{sub_class}",\n') @@ -95,26 +89,25 @@ def start(): ) as f_class_template: class_template = f_class_template.read() - with (ERRORS_HOME_PATH / "template" / "sub_class.txt").open( - encoding="utf-8" - ) as f_sub_class_template: - sub_class_template = f_sub_class_template.read() - - class_template = class_template.format( - notice=notice, - super_class=super_class, - code=code, - docstring=f'"""{name}"""', - sub_classes="".join([ - sub_class_template.format( - sub_class=k[0], - super_class=super_class, - id=f'"{k[1]}"', - docstring=f'"""{k[2]}"""', - ) - for k in sub_classes - ]), - ) + with (ERRORS_HOME_PATH / "template" / "sub_class.txt").open( + encoding="utf-8" + ) as f_sub_class_template: + sub_class_template = f_sub_class_template.read() + + class_template = class_template.format( + super_class=super_class, + code=code, + docstring=f'"""{name}"""', + sub_classes="".join( + sub_class_template.format( + sub_class=k[0], + super_class=super_class, + id=f'"{k[1]}"', + docstring=f'"""{k[2]}"""', + ) + for k in sub_classes + ), + ) f_class.write(class_template) @@ -122,11 +115,12 @@ def start(): f_all.write("}\n") - with (ERRORS_DEST_PATH / "all.py").open(encoding="utf-8") as f: - content = f.read() - - with (ERRORS_DEST_PATH / "all.py").open("w", encoding="utf-8") as f: - f.write(re.sub(r"{count}", str(count), content)) # noqa: RUF027 + all_file = ERRORS_DEST_PATH / "all.py" + content = all_file.read_text(encoding="utf-8") + all_file.write_text( + re.sub(r"{count}", str(count), content), + encoding="utf-8", + ) if __name__ == "__main__": From a466bdebd9521121a60e3807eeec3ca19f239ba3 Mon Sep 17 00:00:00 2001 From: 5hojib Date: Wed, 11 Feb 2026 14:15:21 +0000 Subject: [PATCH 09/22] InkyPinkyPonky [no ci] Signed-off-by: 5hojib --- compiler/errors/compiler.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/compiler/errors/compiler.py b/compiler/errors/compiler.py index 13a28bd7..11938289 100644 --- a/compiler/errors/compiler.py +++ b/compiler/errors/compiler.py @@ -57,8 +57,7 @@ def start(): super_class = camel(name) name = " ".join( - j.capitalize() - for j in name.replace("_", " ").lower().split(" ") + j.capitalize() for j in name.replace("_", " ").lower().split(" ") ) sub_classes = [] From f55c341ca83d81231e528fcde6f6a183ecf13c4e Mon Sep 17 00:00:00 2001 From: 5hojib Date: Wed, 11 Feb 2026 20:23:36 +0600 Subject: [PATCH 10/22] update --- .github/workflows/docs_gen.yml | 2 +- .github/workflows/format_and_test.yml | 2 +- .github/workflows/tag_and_publish.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs_gen.yml b/.github/workflows/docs_gen.yml index b0e181ea..3853780a 100644 --- a/.github/workflows/docs_gen.yml +++ b/.github/workflows/docs_gen.yml @@ -3,7 +3,7 @@ name: Build-docs on: push: branches: - - test + - beta jobs: build: diff --git a/.github/workflows/format_and_test.yml b/.github/workflows/format_and_test.yml index 98382a8d..8542a23b 100644 --- a/.github/workflows/format_and_test.yml +++ b/.github/workflows/format_and_test.yml @@ -3,7 +3,7 @@ name: Format and test code with uv on: push: branches: - - test + - beta jobs: lint-format-and-test: diff --git a/.github/workflows/tag_and_publish.yml b/.github/workflows/tag_and_publish.yml index d3b2559d..fb90fa8b 100644 --- a/.github/workflows/tag_and_publish.yml +++ b/.github/workflows/tag_and_publish.yml @@ -3,7 +3,7 @@ name: Auto Tag and Upload Python Package on: push: branches: - - dev + - main workflow_dispatch: jobs: From 8dfabb8ccbf2587eb6e36795ee67cc74f1ef39a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 20:29:00 +0600 Subject: [PATCH 11/22] chore: update sphinx requirement from <8.0.0 to <9.0.0 (#63) Updates the requirements on [sphinx](https://github.com/sphinx-doc/sphinx) to permit the latest version. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/v8.1.3/CHANGES.rst) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v0.1.61611...v8.1.3) --- updated-dependencies: - dependency-name: sphinx dependency-version: 8.1.3 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9fd7a2f5..5e3569f9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ dev = [ ] docs = [ - "sphinx<8.0.0", + "sphinx<9.0.0", "sphinx-immaterial", "sphinx_copybutton", "sphinx-autobuild", From b19dc0ad13c27daa855236c8f821242c6e227840 Mon Sep 17 00:00:00 2001 From: 5hojib Date: Wed, 11 Feb 2026 14:29:25 +0000 Subject: [PATCH 12/22] InkyPinkyPonky [no ci] Signed-off-by: 5hojib --- uv.lock | 114 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 86 insertions(+), 28 deletions(-) diff --git a/uv.lock b/uv.lock index 8486f5bb..276282e3 100644 --- a/uv.lock +++ b/uv.lock @@ -17,11 +17,11 @@ wheels = [ [[package]] name = "alabaster" -version = "0.7.16" +version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/3e/13dd8e5ed9094e734ac430b5d0eb4f2bb001708a8b7856cbf8e084e001ba/alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65", size = 23776, upload-time = "2024-01-10T00:56:10.189Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511, upload-time = "2024-01-10T00:56:08.388Z" }, + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, ] [[package]] @@ -644,7 +644,8 @@ dev = [ { name = "twine" }, ] docs = [ - { name = "sphinx" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-autobuild", version = "2024.10.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx-autobuild", version = "2025.8.25", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-copybutton" }, @@ -664,7 +665,7 @@ requires-dist = [ { name = "pytest", marker = "extra == 'dev'" }, { name = "pytest-asyncio", marker = "extra == 'dev'" }, { name = "pytest-cov", marker = "extra == 'dev'" }, - { name = "sphinx", marker = "extra == 'docs'", specifier = "<8.0.0" }, + { name = "sphinx", marker = "extra == 'docs'", specifier = "<9.0.0" }, { name = "sphinx-autobuild", marker = "extra == 'docs'" }, { name = "sphinx-copybutton", marker = "extra == 'docs'" }, { name = "sphinx-immaterial", marker = "extra == 'docs'" }, @@ -1502,6 +1503,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl", hash = "sha256:08e67c3e90884651da3239ea668222d19bea7b589149d8014a21c633420dbb69", size = 309963, upload-time = "2026-02-01T16:20:46.078Z" }, ] +[[package]] +name = "roman-numerals" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/f9/41dc953bbeb056c17d5f7a519f50fdf010bd0553be2d630bc69d1e022703/roman_numerals-4.1.0.tar.gz", hash = "sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2", size = 9077, upload-time = "2025-12-17T18:25:34.381Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676, upload-time = "2025-12-17T18:25:33.098Z" }, +] + +[[package]] +name = "roman-numerals-py" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "roman-numerals", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/b5/de96fca640f4f656eb79bbee0e79aeec52e3e0e359f8a3e6a0d366378b64/roman_numerals_py-4.1.0.tar.gz", hash = "sha256:f5d7b2b4ca52dd855ef7ab8eb3590f428c0b1ea480736ce32b01fef2a5f8daf9", size = 4274, upload-time = "2025-12-17T18:25:41.153Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/2c/daca29684cbe9fd4bc711f8246da3c10adca1ccc4d24436b17572eb2590e/roman_numerals_py-4.1.0-py3-none-any.whl", hash = "sha256:553114c1167141c1283a51743759723ecd05604a1b6b507225e91dc1a6df0780", size = 4547, upload-time = "2025-12-17T18:25:40.136Z" }, +] + [[package]] name = "secretstorage" version = "3.5.0" @@ -1535,30 +1557,64 @@ wheels = [ [[package]] name = "sphinx" -version = "7.4.7" +version = "8.1.3" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] dependencies = [ - { name = "alabaster" }, - { name = "babel" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "docutils" }, - { name = "imagesize" }, - { name = "jinja2" }, - { name = "packaging" }, - { name = "pygments" }, - { name = "requests" }, - { name = "snowballstemmer" }, - { name = "sphinxcontrib-applehelp" }, - { name = "sphinxcontrib-devhelp" }, - { name = "sphinxcontrib-htmlhelp" }, - { name = "sphinxcontrib-jsmath" }, - { name = "sphinxcontrib-qthelp" }, - { name = "sphinxcontrib-serializinghtml" }, + { name = "alabaster", marker = "python_full_version < '3.11'" }, + { name = "babel", marker = "python_full_version < '3.11'" }, + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "docutils", marker = "python_full_version < '3.11'" }, + { name = "imagesize", marker = "python_full_version < '3.11'" }, + { name = "jinja2", marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "requests", marker = "python_full_version < '3.11'" }, + { name = "snowballstemmer", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/be/50e50cb4f2eff47df05673d361095cafd95521d2a22521b920c67a372dcb/sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe", size = 8067911, upload-time = "2024-07-20T14:46:56.059Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/ef/153f6803c5d5f8917dbb7f7fcf6d34a871ede3296fa89c2c703f5f8a6c8e/sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239", size = 3401624, upload-time = "2024-07-20T14:46:52.142Z" }, + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, +] + +[[package]] +name = "sphinx" +version = "8.2.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11'", +] +dependencies = [ + { name = "alabaster", marker = "python_full_version >= '3.11'" }, + { name = "babel", marker = "python_full_version >= '3.11'" }, + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "docutils", marker = "python_full_version >= '3.11'" }, + { name = "imagesize", marker = "python_full_version >= '3.11'" }, + { name = "jinja2", marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "requests", marker = "python_full_version >= '3.11'" }, + { name = "roman-numerals-py", marker = "python_full_version >= '3.11'" }, + { name = "snowballstemmer", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" }, ] [[package]] @@ -1570,7 +1626,7 @@ resolution-markers = [ ] dependencies = [ { name = "colorama", marker = "python_full_version < '3.11'" }, - { name = "sphinx", marker = "python_full_version < '3.11'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "starlette", marker = "python_full_version < '3.11'" }, { name = "uvicorn", marker = "python_full_version < '3.11'" }, { name = "watchfiles", marker = "python_full_version < '3.11'" }, @@ -1590,7 +1646,7 @@ resolution-markers = [ ] dependencies = [ { name = "colorama", marker = "python_full_version >= '3.11'" }, - { name = "sphinx", marker = "python_full_version >= '3.11'" }, + { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "starlette", marker = "python_full_version >= '3.11'" }, { name = "uvicorn", marker = "python_full_version >= '3.11'" }, { name = "watchfiles", marker = "python_full_version >= '3.11'" }, @@ -1606,7 +1662,8 @@ name = "sphinx-copybutton" version = "0.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sphinx" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039, upload-time = "2023-04-14T08:10:22.998Z" } wheels = [ @@ -1623,7 +1680,8 @@ dependencies = [ { name = "pydantic" }, { name = "pydantic-extra-types" }, { name = "requests" }, - { name = "sphinx" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "typing-extensions" }, ] wheels = [ From 6b5b39dee48adb8b9623da297ada9cbbd0cb575f Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Wed, 11 Feb 2026 20:30:20 +0600 Subject: [PATCH 13/22] Update MTProto API schema to Layer 222 (#66) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- compiler/api/source/main_api.tl | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/compiler/api/source/main_api.tl b/compiler/api/source/main_api.tl index 5f4b9052..903f6f3b 100644 --- a/compiler/api/source/main_api.tl +++ b/compiler/api/source/main_api.tl @@ -1,22 +1,11 @@ +// https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/mtproto/scheme/api.tl + /////////////////////////////// ///////// Main application API /////////////////////////////// - -// This file is auto-generated by TLExtractor -// Copyright (C) 2026 Laky-64 - - ---types--- -int ? = Int; -long ? = Long; -double ? = Double; -string ? = String; - -bytes = Bytes; -int256 = Int256; - // boolFalse#bc799737 = Bool; // Parsed manually // boolTrue#997275b5 = Bool; // Parsed manually @@ -28,7 +17,6 @@ int256 = Int256; // null#56730bcc = Null; // Parsed manually - inputPeerEmpty#7f3b18ea = InputPeer; inputPeerSelf#7da07ec9 = InputPeer; inputPeerChat#35a95cb9 chat_id:long = InputPeer; From 7f7fb043b5254830714e9ac8469d421513f2afed Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Wed, 11 Feb 2026 21:13:58 +0600 Subject: [PATCH 14/22] chore: update and lock all dependencies (#67) This commit updates top-level dependency constraints in `pyproject.toml` to their latest compatible versions and regenerates all lock files (`uv.lock`, `requirements.lock`, and `requirements-dev.lock`). Key changes: - Updated `pysocks`, `aiosqlite`, `pymediainfo`, `pymongo`, `ElectroCrypto`, and `anyio` minimum versions in `pyproject.toml`. - Bumped `hatch` and `pytest` minimum versions in `dev` extra. - Updated `sphinx` constraint to `<10.0.0` and added minimum versions for other documentation and development tools. - Regenerated `uv.lock` with latest compatible versions. - Re-exported `requirements.lock` and `requirements-dev.lock` with hashes using `uv export`, ensuring consistency across dependency management tools. - Verified all tests pass in the updated environment. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- pyproject.toml | 28 +- requirements-dev.lock | 970 ++++++++++++++++++++++++++++++++++++++---- requirements.lock | 182 +++++++- uv.lock | 158 ++++--- 4 files changed, 1156 insertions(+), 182 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5e3569f9..11bf85eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,11 +5,11 @@ description = "Telegram MTProto API framework in Python, designed for fluid user authors = [{ name = "5hojib", email = "yesiamshojib@gmail.com" }] license = { text = "MIT License" } dependencies = [ - "pysocks", - "aiosqlite", - "pymediainfo", - "pymongo", - "ElectroCrypto", + "pysocks>=1.7.1", + "aiosqlite>=0.22.1", + "pymediainfo>=7.0.1", + "pymongo>=4.16.0", + "ElectroCrypto>=2.0.2", "anyio>=4.12.1", ] requires-python = ">=3.10" @@ -39,19 +39,19 @@ build-backend = "hatchling.build" [project.optional-dependencies] dev = [ - "hatch", - "pytest", - "pytest-asyncio", - "pytest-cov", - "twine" + "hatch>=1.16.3", + "pytest>=9.0.2", + "pytest-asyncio>=1.3.0", + "pytest-cov>=7.0.0", + "twine>=6.2.0" ] docs = [ - "sphinx<9.0.0", - "sphinx-immaterial", - "sphinx_copybutton", + "sphinx<10.0.0", + "sphinx-immaterial>=0.13.9", + "sphinx_copybutton>=0.5.2", "sphinx-autobuild", - "tornado" + "tornado>=6.5.4" ] [tool.hatch.metadata] diff --git a/requirements-dev.lock b/requirements-dev.lock index a957e657..582c2545 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -1,117 +1,907 @@ -# generated by rye -# use `rye lock` or `rye sync` to update this lockfile -# -# last locked with the following flags: -# pre: false -# features: [] -# all-features: false -# with-sources: false -# generate-hashes: false -# universal: false - --e file:. -aiosqlite==0.20.0 +# This file was autogenerated by uv via the following command: +# uv export --format requirements-txt --extra dev --output-file requirements-dev.lock +-e . +aiosqlite==0.22.1 \ + --hash=sha256:043e0bd78d32888c0a9ca90fc788b38796843360c855a7262a532813133a0650 \ + --hash=sha256:21c002eb13823fad740196c5a2e9d8e62f6243bd9e7e4a1f87fb5e44ecb4fceb # via electrogram -certifi==2024.7.4 - # via requests -cffi==1.16.0 +anyio==4.12.1 \ + --hash=sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703 \ + --hash=sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c + # via + # electrogram + # httpx +backports-asyncio-runner==1.2.0 ; python_full_version < '3.11' \ + --hash=sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5 \ + --hash=sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162 + # via pytest-asyncio +backports-tarfile==1.2.0 ; python_full_version < '3.12' \ + --hash=sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34 \ + --hash=sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991 + # via jaraco-context +backports-zstd==1.3.0 ; python_full_version < '3.14' \ + --hash=sha256:01c699d8c803dc9f9c9d6ede21b75ec99f45c3b411821011692befca538928cb \ + --hash=sha256:0205ef809fb38bb5ca7f59fa03993596f918768b9378fb7fbd8a68889a6ce028 \ + --hash=sha256:0290979eea67f7275fa42d5859cc5bea94f2c08cca6bc36396673476773d2bad \ + --hash=sha256:04def169e4a9ae291298124da4e097c6d6545d0e93164f934b716da04d24630a \ + --hash=sha256:08dfdfb85da5915383bfae680b6ac10ab5769ab22e690f9a854320720011ae8e \ + --hash=sha256:09a2785e410ed2e812cb39b684ef5eb55083a5897bfd0e6f5de3bbd2c6345f70 \ + --hash=sha256:0a2db17a6d9bf6b4dc223b3f6414aa9db6d1afe9de9bff61d582c2934ca456a0 \ + --hash=sha256:10057d66fa4f0a7d3f6419ffb84b4fe61088da572e3ac4446134a1c8089e4166 \ + --hash=sha256:1049e804cc8754290b24dab383d4d6ed0b7f794ad8338813ddcb3907d15a89d0 \ + --hash=sha256:1124a169a647671ccb4654a0ef1d0b42d6735c45ce3d0adf609df22fb1f099db \ + --hash=sha256:116f65cce84e215dfac0414924b051faf8d29dc7188cf3944dd1e5be8dd15a32 \ + --hash=sha256:127b0d73c745b0684da3d95c31c0939570810dad8967dfe8231eea8f0e047b2f \ + --hash=sha256:142178fe981061f1d2a57c5348f2cd31a3b6397a35593e7a17dbda817b793a7f \ + --hash=sha256:1623e5bff1acd9c8ef90d24fc548110f20df2d14432bfe5de59e76fc036824ef \ + --hash=sha256:199eb9bd8aca6a9d489c41a682fad22c587dffe57b613d0fe6d492d0d38ce7c5 \ + --hash=sha256:1c389b667b0b07915781aa28beabf2481f11a6062a1a081873c4c443b98601a7 \ + --hash=sha256:1df583adc0ae84a8d13d7139f42eade6d90182b1dd3e0d28f7df3c564b9fd55d \ + --hash=sha256:21a9a542ccc7958ddb51ae6e46d8ed25d585b54d0d52aaa1c8da431ea158046a \ + --hash=sha256:249f90b39d3741c48620021a968b35f268ca70e35f555abeea9ff95a451f35f9 \ + --hash=sha256:2524bd6777a828d5e7ccd7bd1a57f9e7007ae654fc2bd1bc1a207f6428674e4a \ + --hash=sha256:27744870e38f017159b9c0241ea51562f94c7fefcfa4c5190fb3ec4a65a7fc63 \ + --hash=sha256:2ab5d3b5a54a674f4f6367bb9e0914063f22cd102323876135e9cc7a8f14f17e \ + --hash=sha256:2c662912cfc1a5ebd1d2162ac651549d58bd3c97a8096130ec13c703fca355f2 \ + --hash=sha256:3090a97738d6ce9545d3ca5446df43370928092a962cbc0153e5445a947e98ed \ + --hash=sha256:3180c8eb085396928e9946167e610aa625922b82c3e2263c5f17000556370168 \ + --hash=sha256:32974e71eff15897ed3f8b7766a753d9f3197ea4f1c9025d80f8de099a691b99 \ + --hash=sha256:330172aaf5fd3bfa53f49318abc6d1d4238cb043c384cf71f7b8f0fe2fb7ce31 \ + --hash=sha256:3321d00beaacbd647252a7f581c1e1cdbdbda2407f2addce4bfb10e8e404b7c7 \ + --hash=sha256:385bdadf0ea8fe6ba780a95e4c7d7f018db7bafdd630932f0f9f0fad05d608ff \ + --hash=sha256:3ab0d5632b84eff4355c42a04668cfe6466f7d390890f718978582bd1ff36949 \ + --hash=sha256:407e451f64e2f357c9218f5be4e372bb6102d7ae88582d415262a9d0a4f9b625 \ + --hash=sha256:41974dcacc9824c1effe1c8d2f9d762bcf47d265ca4581a3c63321c7b06c61f0 \ + --hash=sha256:4321a8a367537224b3559fe7aeb8012b98aea2a60a737e59e51d86e2e856fe0a \ + --hash=sha256:43a9fea6299c801da85221e387b32d90a9ad7c62aa2a34edf525359ce5ad8f3a \ + --hash=sha256:440ef1be06e82dc0d69dbb57177f2ce98bbd2151013ee7e551e2f2b54caa6120 \ + --hash=sha256:477895f2642f9397aeba69618df2c91d7f336e02df83d1e623ac37c5d3a5115e \ + --hash=sha256:481b586291ef02a250f03d4c31a37c9881e5e93556568abbd20ca1ad720d443f \ + --hash=sha256:497f5765126f11a5b3fd8fedfdae0166d1dd867e7179b8148370a3313d047197 \ + --hash=sha256:4abf29d706ba05f658ca0247eb55675bcc00e10f12bca15736e45b05f1f2d2dc \ + --hash=sha256:5434e86f2836d453ae3e19a2711449683b7e21e107686838d12a255ad256ca99 \ + --hash=sha256:58a071f3c198c781b2df801070290b7174e3ff61875454e9df93ab7ea9ea832b \ + --hash=sha256:5b9a8c75a294e7ffa18fc8425a763facc366435a8b442e4dffdc19fa9499a22c \ + --hash=sha256:5d5543945aae2a76a850b23f283249424f535de6a622d6002957b7d971e6a36d \ + --hash=sha256:5e137657c830a5ce99be40a1d713eb1d246bae488ada28ff0666ac4387aebdd5 \ + --hash=sha256:5eed0a09a163f3a8125a857cb031be87ed052e4a47bc75085ed7fca786e9bb5b \ + --hash=sha256:5f13033a3dd95f323c067199f2e61b4589a7880188ef4ef356c7ffbdb78a9f11 \ + --hash=sha256:60aa483fef5843749e993dde01229e5eedebca8c283023d27d6bf6800d1d4ce3 \ + --hash=sha256:622c28306dcc429c8f2057fc4421d5722b1f22968d299025b35d71b50cfd4e03 \ + --hash=sha256:668e6fb1805b825cb7504c71436f7b28d4d792bb2663ee901ec9a2bb15804437 \ + --hash=sha256:676eb5e177d4ef528cf3baaeea4fffe05f664e4dd985d3ac06960ef4619c81a9 \ + --hash=sha256:6b97cea95dbb1a97c02afd718155fad93f747815069722107a429804c355e206 \ + --hash=sha256:6f3115d203f387f77c23b5461fb6678d282d4f276f9f39298ad242b00120afc7 \ + --hash=sha256:7558fb0e8c8197c59a5f80c56bf8f56c3690c45fd62f14e9e2081661556e3e64 \ + --hash=sha256:7d3f0f2499d2049ec53d2674c605a4b3052c217cc7ee49c05258046411685adc \ + --hash=sha256:8410fda08b36202d01ab4503f6787c763898888cb1a48c19fce94711563d3ee3 \ + --hash=sha256:845defdb172385f17123d92a00d2e952d341e9ae310bfa2410c292bf03846034 \ + --hash=sha256:884a94c40f27affe986f394f219a4fd3cbbd08e1cff2e028d29d467574cd266e \ + --hash=sha256:88f94d238ef36c639c0ae17cf41054ce103da9c4d399c6a778ce82690d9f4919 \ + --hash=sha256:89ea8281821123b071a06b30b80da8e4d8a2b40a4f57315a19850337a21297ac \ + --hash=sha256:8aeee9210c54cf8bf83f4d263a6d0d6e7a0298aeb5a14a0a95e90487c5c3157c \ + --hash=sha256:8e7ac5ef693d49d6fb35cd7bbb98c4762cfea94a8bd2bf2ab112027004f70b11 \ + --hash=sha256:94048c8089755e482e4b34608029cf1142523a625873c272be2b1c9253871a72 \ + --hash=sha256:968167d29f012cee7b112ad031a8925e484e97e99288e55e4d62962c3a1013e3 \ + --hash=sha256:97d8c78fe20c7442c810adccfd5e3ea6a4e6f4f1fa4c73da2bc083260ebead17 \ + --hash=sha256:993e3a34eaba5928a2065545e34bf75c65b9c34ecb67e43d5ef49b16cc182077 \ + --hash=sha256:9c4c7bcda5619a754726e7f5b391827f5efbe4bed8e62e9ec7490d42bff18aa6 \ + --hash=sha256:a6ff6769948bb29bba07e1c2e8582d5a9765192a366108e42d6581a458475881 \ + --hash=sha256:a7f16b98ba81780a9517ce6c493e1aea9b7d72de2b1efa08375136c270e1ecba \ + --hash=sha256:ab139d1fc0e91a697e82fa834e6404098802f11b6035607174776173ded9a2cc \ + --hash=sha256:ade1f4127fdbe36a02f8067d75aa79c1ea1c8a306bf63c7b818bb7b530e1beaa \ + --hash=sha256:b099750755bb74c280827c7d68de621da0f245189082ab48ff91bda0ec2db9df \ + --hash=sha256:b0e71e83e46154a9d3ced6d4de9a2fea8207ee1e4832aeecf364dc125eda305c \ + --hash=sha256:b4116a9e12dfcd834dd9132cf6a94657bf0d328cba5b295f26de26ea0ae1adc8 \ + --hash=sha256:b808bf889722d889b792f7894e19c1f904bb0e9092d8c0eb0787b939b08bad9a \ + --hash=sha256:ba7114a3099e5ea05cbb46568bd0e08bca2ca11e12c6a7b563a24b86b2b4a67f \ + --hash=sha256:c66ad9eb5bfbe28c2387b7fc58ddcdecfb336d6e4e60bcba1694a906c1f21a6c \ + --hash=sha256:cbc6193acd21f96760c94dd71bf32b161223e8503f5277acb0a5ab54e5598957 \ + --hash=sha256:cbe341c7fcc723893663a37175ba859328b907a4e6d2d40a4c26629cc55efb67 \ + --hash=sha256:d339c1ec40485e97e600eb9a285fb13169dbf44c5094b945788a62f38b96e533 \ + --hash=sha256:d833fc23aa3cc2e05aeffc7cfadd87b796654ad3a7fb214555cda3f1db2d4dc2 \ + --hash=sha256:d8aac2e7cdcc8f310c16f98a0062b48d0a081dbb82862794f4f4f5bdafde30a4 \ + --hash=sha256:d8f6fc7d62b71083b574193dd8fb3a60e6bb34880cc0132aad242943af301f7a \ + --hash=sha256:db609e57b8ed88b3472930c87e93c08a4bbd5ffeb94608cd9c7c6f0ac0e166c6 \ + --hash=sha256:ddc874638abf03ea1ff3b0525b4a26a8d0adf7cb46a448c3449f08e4abc276b3 \ + --hash=sha256:df8473cb117e1316e6c6101f2724e025bd8f50af2dc009d0001c0aabfb5eb57c \ + --hash=sha256:e0f2eca6aac280fdb77991ad3362487ee91a7fb064ad40043fb5a0bf5a376943 \ + --hash=sha256:e38be15ebce82737deda2c9410c1f942f1df9da74121049243a009810432db75 \ + --hash=sha256:e3e3f58c76f4730607a4e0130d629173aa114ae72a5c8d3d5ad94e1bf51f18d8 \ + --hash=sha256:e86e03e3661900955f01afed6c59cae9baa63574e3b66896d99b7de97eaffce9 \ + --hash=sha256:e8b2d68e2812f5c9970cabc5e21da8b409b5ed04e79b4585dbffa33e9b45ebe2 \ + --hash=sha256:ea0886c1b619773544546e243ed73f6d6c2b1ae3c00c904ccc9903a352d731e1 \ + --hash=sha256:eb2f8fab0b1ea05148394cb34a9e543a43477178765f2d6e7c84ed332e34935e \ + --hash=sha256:eefda80c3dbfbd924f1c317e7b0543d39304ee645583cb58bae29e19f42948ed \ + --hash=sha256:f4a292e357f3046d18766ce06d990ccbab97411708d3acb934e63529c2ea7786 \ + --hash=sha256:f52523d2bdada29e653261abdc9cfcecd9e5500d305708b7e37caddb24909d4e \ + --hash=sha256:f6843ecb181480e423b02f60fe29e393cbc31a95fb532acdf0d3a2c87bd50ce3 \ + --hash=sha256:f7be27d56f2f715bcd252d0c65c232146d8e1e039c7e2835b8a3ad3dc88bc508 \ + --hash=sha256:fb4c386f38323698991b38edcc9c091d46d4713f5df02a3b5c80a28b40e289ea + # via hatch +certifi==2026.1.4 \ + --hash=sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c \ + --hash=sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120 + # via + # httpcore + # httpx + # requests +cffi==2.0.0 ; platform_python_implementation != 'PyPy' and sys_platform == 'linux' \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 # via cryptography -cfgv==3.4.0 - # via pre-commit -charset-normalizer==3.3.2 +charset-normalizer==3.4.4 \ + --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ + --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ + --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ + --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ + --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ + --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ + --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ + --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ + --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ + --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ + --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ + --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ + --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ + --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ + --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ + --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ + --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ + --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ + --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ + --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ + --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ + --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ + --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ + --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ + --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ + --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ + --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ + --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ + --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ + --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ + --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ + --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ + --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ + --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ + --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ + --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ + --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ + --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ + --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ + --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ + --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ + --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ + --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ + --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ + --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ + --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ + --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ + --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ + --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ + --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ + --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ + --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ + --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ + --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ + --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ + --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ + --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ + --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ + --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ + --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ + --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ + --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ + --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ + --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ + --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ + --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ + --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ + --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ + --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ + --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ + --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ + --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ + --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ + --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ + --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ + --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ + --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ + --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ + --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ + --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ + --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ + --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e # via requests -coverage==7.6.0 +click==8.3.1 \ + --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ + --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 + # via + # hatch + # userpath +colorama==0.4.6 ; sys_platform == 'win32' \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + # via + # click + # pytest +coverage==7.13.4 \ + --hash=sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246 \ + --hash=sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459 \ + --hash=sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129 \ + --hash=sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6 \ + --hash=sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415 \ + --hash=sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf \ + --hash=sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80 \ + --hash=sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11 \ + --hash=sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0 \ + --hash=sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b \ + --hash=sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9 \ + --hash=sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b \ + --hash=sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f \ + --hash=sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505 \ + --hash=sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47 \ + --hash=sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55 \ + --hash=sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def \ + --hash=sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689 \ + --hash=sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012 \ + --hash=sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5 \ + --hash=sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3 \ + --hash=sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95 \ + --hash=sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9 \ + --hash=sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601 \ + --hash=sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997 \ + --hash=sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c \ + --hash=sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac \ + --hash=sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c \ + --hash=sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa \ + --hash=sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750 \ + --hash=sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3 \ + --hash=sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d \ + --hash=sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12 \ + --hash=sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a \ + --hash=sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932 \ + --hash=sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356 \ + --hash=sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92 \ + --hash=sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148 \ + --hash=sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39 \ + --hash=sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634 \ + --hash=sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6 \ + --hash=sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72 \ + --hash=sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98 \ + --hash=sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef \ + --hash=sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3 \ + --hash=sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9 \ + --hash=sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0 \ + --hash=sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a \ + --hash=sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9 \ + --hash=sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552 \ + --hash=sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc \ + --hash=sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f \ + --hash=sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525 \ + --hash=sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940 \ + --hash=sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a \ + --hash=sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23 \ + --hash=sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f \ + --hash=sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc \ + --hash=sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b \ + --hash=sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056 \ + --hash=sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7 \ + --hash=sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb \ + --hash=sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a \ + --hash=sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd \ + --hash=sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea \ + --hash=sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126 \ + --hash=sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299 \ + --hash=sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9 \ + --hash=sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b \ + --hash=sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00 \ + --hash=sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf \ + --hash=sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda \ + --hash=sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2 \ + --hash=sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5 \ + --hash=sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d \ + --hash=sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9 \ + --hash=sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9 \ + --hash=sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b \ + --hash=sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa \ + --hash=sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092 \ + --hash=sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58 \ + --hash=sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea \ + --hash=sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26 \ + --hash=sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea \ + --hash=sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9 \ + --hash=sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053 \ + --hash=sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f \ + --hash=sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0 \ + --hash=sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3 \ + --hash=sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256 \ + --hash=sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a \ + --hash=sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903 \ + --hash=sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91 \ + --hash=sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd \ + --hash=sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505 \ + --hash=sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7 \ + --hash=sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0 \ + --hash=sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2 \ + --hash=sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a \ + --hash=sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71 \ + --hash=sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985 \ + --hash=sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242 \ + --hash=sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d \ + --hash=sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af \ + --hash=sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c \ + --hash=sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0 # via pytest-cov -cryptography==42.0.8 +cryptography==46.0.5 ; sys_platform == 'linux' \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 # via secretstorage -distlib==0.3.8 +distlib==0.4.0 \ + --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ + --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d # via virtualenv -dnspython==2.6.1 +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f # via pymongo -docutils==0.21.2 +docutils==0.21.2 ; python_full_version < '3.11' \ + --hash=sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f \ + --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 # via readme-renderer -electrocrypto==1.0.0 +docutils==0.22.4 ; python_full_version >= '3.11' \ + --hash=sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968 \ + --hash=sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de + # via readme-renderer +electrocrypto==2.0.2 \ + --hash=sha256:01bf402d59adee8e26974772258445c83641cf4d208d4a32855051293b43aa28 \ + --hash=sha256:08ec03075f328706501cd232d097978e27fafcab342e8c6a361a35d40d3851b8 \ + --hash=sha256:0b6efb3436133b60fc734a05c373efffb6106eef733afcc81247d01e041ae607 \ + --hash=sha256:0d4f1be3a91fbd2973f4de20cbc16c157bd5069fa8bebf28511d23e51b7800e2 \ + --hash=sha256:0f0194b44927aef240cebb298789d69415f0c35dbd0c3236efc09e6ca9a45e99 \ + --hash=sha256:111421aeaa889b58c2da13a404e92e8563bb2138f93cb1defa8ced4eaf6f8224 \ + --hash=sha256:123617e74468b29d3870e0bfc77027357da35533b6a51bf2fbdd32a8fa831988 \ + --hash=sha256:12f941c416658c1c73c5ac8a4bdb822b69ee20aaf9390a5af5ed549e8d7801ed \ + --hash=sha256:183f804a9f32e44dd5b1a435e1c7de0b2d87930e5ec6957973fb999dbcf4bc35 \ + --hash=sha256:1a87d5df3986f715316507a508968632a3b893f73596cacca0054245e37ff3ed \ + --hash=sha256:1b22b0d88ffe8936f135359aeb2e5441705d1a69d41587d449b0e1812f204d51 \ + --hash=sha256:2080a848f27233905d85dbd0e2c01ee608a5e6470189cb6230bb72d7da226f01 \ + --hash=sha256:2a34c98a7a3d620ef428600fdb7a23ce0b44c459a125beb93af69c8d6fe60891 \ + --hash=sha256:30c18e25b360c0825d5b372d12325242b51bc781f8163194df8db8504cb01ca2 \ + --hash=sha256:364fa6fe5c0313226825a0644f0891629a43f5a36c2658e1015f59051bcf8ead \ + --hash=sha256:3dba52e6d3330818729e230c07d0f302dd3f10aff2d1f1d0a252ff346596c0eb \ + --hash=sha256:40aac38a55ccaca24fb0f451dfcbb3feda4be81d6792c1c8281027a743b6f4fb \ + --hash=sha256:43c69cb6242920b5f724ad99f480ad4277a22d063a63574cc03c9ab7241f8d55 \ + --hash=sha256:4691f2e40542c0b202bfa76baf74a6d402d7fa0fe16496ba640a8a97a5f02141 \ + --hash=sha256:46f5c348ddeb9d22d697dad605aea69e472a22bb41ed13ace4fa553a9e27de25 \ + --hash=sha256:4a9c9ad57db80925e392d7924017b6e85487b185c57fab29684282022d2b635b \ + --hash=sha256:4fb7b4b6a371dc249c32e54be36920b7c2052a4d09a0d63291c405990cbd4f55 \ + --hash=sha256:547840c158442f3b2dcfdc43edb894643167354a2be0a7e1a091b38a2d266a33 \ + --hash=sha256:603817e90a1c89881894bbad0aa987dbb4571f7925ae55929d41afe6068c3c8c \ + --hash=sha256:6089d76c6e6498ee010639e2f2238aebee85a3fc2b32200416dc02cd3416b208 \ + --hash=sha256:649bedf010707e248b31e3bb78151b879aa8d1eeffd58443c8cbc1b260865c3d \ + --hash=sha256:6650164aea4dd69d7d1dfb5f51b3ad58946eb4984390a278424a2b59b5e843b4 \ + --hash=sha256:669d5fd03560ee524903093e06c753c66182eaed5f2ac3cf1ee83abc72863327 \ + --hash=sha256:68141ba4ba34f9c4e7eb399a37c06e61db2196d71522610d4a2349d4c723564e \ + --hash=sha256:6a54f8e754c5a7234257df9af4788a9ab9c7038c855e4aa5ad91600ac72c2ffc \ + --hash=sha256:6c76c49d0cc70781a619ce0608b7aff338ccf95e4c2e50aa19b2fcebfc86e766 \ + --hash=sha256:6c8bc0107403b15a3fef210debec1ce82240c0226d4be742a4f3ed237aa83ee2 \ + --hash=sha256:70776cd464f1abcb0528d29c64a34a885699919dd4de0c684410cffe9364f673 \ + --hash=sha256:7155808a720909ae543f01afdd7267ec9ad0bd53191e2f124c8bacee4c8004c4 \ + --hash=sha256:7bc4c3c0857e4785d25b2c99371254e0c418ec91941c3967f0df1c825207596e \ + --hash=sha256:7dc9520d902ed0091967ad5ab6d86be6eb88a51d7473e3c4145654fb5b451682 \ + --hash=sha256:816183a2cf3fe48d6837f814df8ea660dbe652a86a7d263f481b05ffa1c625eb \ + --hash=sha256:83e2dd8380336775bb7160344866d31f8787d1d5165df070a5954caa77846a64 \ + --hash=sha256:87ed1b9016d605d48d03f67c47e9365a53d8c3884a18618deb19c2b29a82f969 \ + --hash=sha256:94b2b804e11ddb15f33b48bc98b10dd0c5f70e0cb6fe3cb839f9ed1f10e9a499 \ + --hash=sha256:a1353c09b2af29466a29906c41b8c496f5bb0c3c9b4c9424f88b56f6fca113ec \ + --hash=sha256:a38b888664b95d8d26386ccc9f4db28e2b34cd1946509aa6ed86147f31cf0937 \ + --hash=sha256:a64e8c6545c54ced10bd2ef7987e3c800b29f045aad48a251ccf3ecc504e1bdf \ + --hash=sha256:a6a71a69fe12b014f2030cdf7403718d309a3167a7ef87bca3cf186684feff9a \ + --hash=sha256:ac72eee483fc38b0b07e713332383093b802e31f28c654d36e47ef3d1700e316 \ + --hash=sha256:af7f35b5a524104ee0360d58c16eae8d34039cfff11d03da142ecf249de3ad77 \ + --hash=sha256:b9539c50113340f3c2a374cacd8beda85d27b16c2139e6fb1a4209a7c0d59c90 \ + --hash=sha256:c526f7d0eca3b597c73111ed4c50942f3093cf4216e15ca32098835f12eb3418 \ + --hash=sha256:c5fca5dd03f78d79adc13f1e8dd57dbea1e16bcfd6628c862a2fa127b69ffa50 \ + --hash=sha256:cf9286771ec14c957031aea17e89c48b1c24ffff37573fc37d36b9746c2a81cf \ + --hash=sha256:d3e25abc571e7ea110a3c940c24930aaa21363667a1d00cfb877ff1b604125a6 \ + --hash=sha256:d5b0b634768f4a7cdc8a299256956057ba702dd4ef337012b29c37cad0ff4ddd \ + --hash=sha256:d7c98aa1b1f5b8101d91ab6dff7d0c2f094e2c048b69bda5345a6caa7e2056c6 \ + --hash=sha256:e0f49268beaf30d354949e441130bab3f2f0df4ced090760e6a403f993befafc \ + --hash=sha256:e3ea09bac7d00fec443da1d465073c629b7b6a0247c1fbf886d33dc5bf0ea96e \ + --hash=sha256:e43db41749aa0e301249fc948a4bcbadd84c1833b6b045b686b4e54bbf106568 \ + --hash=sha256:eae9ac15e22ce48a0aa080453ec18c2d6187f8414686342be655c6f032f527bb \ + --hash=sha256:eb67995cee37fbf1044e33792ed6d2fa990818c6cb70a909a1bd24ace506b764 \ + --hash=sha256:f525297b7dd4cb68f3ef085ff668063ced138e729b478088fd7fd346c27322eb \ + --hash=sha256:fa92068abee9c7afde1e9c67253fb6a547d7f981ea7da5dc45f688e056b57499 \ + --hash=sha256:fd68085fc4bb70bad76a1bd87c7d5dee1ac5ab7568ea931b3fddaf6468afbdf9 \ + --hash=sha256:ff8bbeeb35ac9b0728a9c444f1938e3c73301d2fbc5e9d4dfd8e03f4a2beb092 # via electrogram -filelock==3.15.4 +exceptiongroup==1.3.1 ; python_full_version < '3.11' \ + --hash=sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219 \ + --hash=sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598 + # via + # anyio + # pytest +filelock==3.20.3 \ + --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ + --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 # via virtualenv -identify==2.6.0 - # via pre-commit -idna==3.7 - # via requests -importlib-metadata==8.0.0 +h11==0.16.0 \ + --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ + --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 + # via httpcore +hatch==1.16.3 \ + --hash=sha256:2a50ecc912adfc8122cd2ccdcc15254cdef829e5d158be9014180cd7f0fb7ea9 \ + --hash=sha256:f5169025cf1cdfe981366eb96127cab1d1bc59f5f2acb87c4cc308c25d95a4b1 + # via electrogram +hatchling==1.28.0 \ + --hash=sha256:4d50b02aece6892b8cd0b3ce6c82cb218594d3ec5836dbde75bf41a21ab004c8 \ + --hash=sha256:dc48722b68b3f4bbfa3ff618ca07cdea6750e7d03481289ffa8be1521d18a961 + # via hatch +httpcore==1.0.9 \ + --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ + --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 + # via httpx +httpx==0.28.1 \ + --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ + --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad + # via hatch +hyperlink==21.0.0 \ + --hash=sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b \ + --hash=sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 + # via hatch +id==1.6.1 \ + --hash=sha256:d0732d624fb46fd4e7bc4e5152f00214450953b9e772c182c1c22964def1a069 \ + --hash=sha256:f5ec41ed2629a508f5d0988eda142e190c9c6da971100612c4de9ad9f9b237ca # via twine -iniconfig==2.0.0 - # via pytest -jaraco-classes==3.4.0 +idna==3.11 \ + --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ + --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 + # via + # anyio + # httpx + # hyperlink + # requests +importlib-metadata==8.7.1 ; python_full_version < '3.12' \ + --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \ + --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151 # via keyring -jaraco-context==5.3.0 +iniconfig==2.3.0 \ + --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \ + --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 + # via pytest +jaraco-classes==3.4.0 \ + --hash=sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 # via keyring -jaraco-functools==4.0.1 +jaraco-context==6.1.0 \ + --hash=sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f \ + --hash=sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda # via keyring -jeepney==0.8.0 +jaraco-functools==4.4.0 \ + --hash=sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176 \ + --hash=sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb # via keyring - # via secretstorage -keyring==25.2.1 - # via twine -markdown-it-py==3.0.0 +jeepney==0.9.0 ; sys_platform == 'linux' \ + --hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \ + --hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732 + # via + # keyring + # secretstorage +keyring==25.7.0 \ + --hash=sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f \ + --hash=sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b + # via + # hatch + # twine +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 # via rich -mdurl==0.1.2 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py -more-itertools==10.3.0 - # via jaraco-classes - # via jaraco-functools -nh3==0.2.18 +more-itertools==10.8.0 \ + --hash=sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b \ + --hash=sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd + # via + # jaraco-classes + # jaraco-functools +nh3==0.3.2 \ + --hash=sha256:019ecbd007536b67fdf76fab411b648fb64e2257ca3262ec80c3425c24028c80 \ + --hash=sha256:03d617e5c8aa7331bd2659c654e021caf9bba704b109e7b2b28b039a00949fe5 \ + --hash=sha256:0dca4365db62b2d71ff1620ee4f800c4729849906c5dd504ee1a7b2389558e31 \ + --hash=sha256:0fe7ee035dd7b2290715baf29cb27167dddd2ff70ea7d052c958dbd80d323c99 \ + --hash=sha256:13398e676a14d6233f372c75f52d5ae74f98210172991f7a3142a736bd92b131 \ + --hash=sha256:169db03df90da63286e0560ea0efa9b6f3b59844a9735514a1d47e6bb2c8c61b \ + --hash=sha256:1710f3901cd6440ca92494ba2eb6dc260f829fa8d9196b659fa10de825610ce0 \ + --hash=sha256:1f9ba555a797dbdcd844b89523f29cdc90973d8bd2e836ea6b962cf567cadd93 \ + --hash=sha256:2ab70e8c6c7d2ce953d2a58102eefa90c2d0a5ed7aa40c7e29a487bc5e613131 \ + --hash=sha256:2c9850041b77a9147d6bbd6dbbf13eeec7009eb60b44e83f07fcb2910075bf9b \ + --hash=sha256:403c11563e50b915d0efdb622866d1d9e4506bce590ef7da57789bf71dd148b5 \ + --hash=sha256:45c953e57028c31d473d6b648552d9cab1efe20a42ad139d78e11d8f42a36130 \ + --hash=sha256:562da3dca7a17f9077593214a9781a94b8d76de4f158f8c895e62f09573945fe \ + --hash=sha256:6d66f41672eb4060cf87c037f760bdbc6847852ca9ef8e9c5a5da18f090abf87 \ + --hash=sha256:7064ccf5ace75825bd7bf57859daaaf16ed28660c1c6b306b649a9eda4b54b1e \ + --hash=sha256:72d67c25a84579f4a432c065e8b4274e53b7cf1df8f792cf846abfe2c3090866 \ + --hash=sha256:7bb18403f02b655a1bbe4e3a4696c2ae1d6ae8f5991f7cacb684b1ae27e6c9f7 \ + --hash=sha256:91e9b001101fb4500a2aafe3e7c92928d85242d38bf5ac0aba0b7480da0a4cd6 \ + --hash=sha256:a40202fd58e49129764f025bbaae77028e420f1d5b3c8e6f6fd3a6490d513868 \ + --hash=sha256:c8745454cdd28bbbc90861b80a0111a195b0e3961b9fa2e672be89eb199fa5d8 \ + --hash=sha256:cf5964d54edd405e68583114a7cba929468bcd7db5e676ae38ee954de1cfc104 \ + --hash=sha256:d18957a90806d943d141cc5e4a0fefa1d77cf0d7a156878bf9a66eed52c9cc7d \ + --hash=sha256:dce4248edc427c9b79261f3e6e2b3ecbdd9b88c267012168b4a7b3fc6fd41d13 \ + --hash=sha256:f2f55c4d2d5a207e74eefe4d828067bbb01300e06e2a7436142f915c5928de07 \ + --hash=sha256:f394759a06df8b685a4ebfb1874fb67a9cbfd58c64fc5ed587a663c0e63ec376 \ + --hash=sha256:f97f8b25cb2681d25e2338148159447e4d689aafdccfcf19e61ff7db3905768a # via readme-renderer -nodeenv==1.9.1 - # via pre-commit -packaging==24.1 - # via pytest -pkginfo==1.10.0 - # via twine -platformdirs==4.2.2 - # via virtualenv -pluggy==1.5.0 - # via pytest -pre-commit==3.7.1 -pycparser==2.22 +packaging==26.0 \ + --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ + --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 + # via + # hatch + # hatchling + # pytest + # twine +pathspec==1.0.4 \ + --hash=sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645 \ + --hash=sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723 + # via hatchling +pexpect==4.9.0 \ + --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 \ + --hash=sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f + # via hatch +platformdirs==4.5.1 \ + --hash=sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda \ + --hash=sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31 + # via + # hatch + # virtualenv +pluggy==1.6.0 \ + --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \ + --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + # via + # hatchling + # pytest + # pytest-cov +ptyprocess==0.7.0 \ + --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \ + --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 + # via pexpect +pycparser==3.0 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy' and sys_platform == 'linux' \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 # via cffi -pygments==2.18.0 - # via readme-renderer - # via rich -pymediainfo==6.1.0 +pygments==2.19.2 \ + --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ + --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b + # via + # pytest + # readme-renderer + # rich +pymediainfo==7.0.1 \ + --hash=sha256:01bcaf82b72cefbf4b96f13b2547e1b2e0e734bab7173d7c33f7f01acc07c98b \ + --hash=sha256:0d5df59ecc615e24c56f303b8f651579c6accab7265715e5d429186d7ba21514 \ + --hash=sha256:13224fa7590e198763b8baf072e704ea81d334e71aa32a469091460e243893c7 \ + --hash=sha256:286f3bf6299be0997093254e0f371855bc5cf2aaf8641d19455a011e3ee3a84d \ + --hash=sha256:3648e2379fa67bd02433d1e28c707df3a53834dd480680615a9fefd2266f1182 \ + --hash=sha256:cde98112f1ce486589b17a12e5da42085faea996224f7c67fa45b8c1dca719c6 # via electrogram -pymongo==4.9.2 +pymongo==4.16.0 \ + --hash=sha256:12762e7cc0f8374a8cae3b9f9ed8dabb5d438c7b33329232dd9b7de783454033 \ + --hash=sha256:19a1c96e7f39c7a59a9cfd4d17920cf9382f6f684faeff4649bf587dc59f8edc \ + --hash=sha256:1c01e8a7cd0ea66baf64a118005535ab5bf9f9eb63a1b50ac3935dccf9a54abe \ + --hash=sha256:1d638b0b1b294d95d0fdc73688a3b61e05cc4188872818cd240d51460ccabcb5 \ + --hash=sha256:21d02cc10a158daa20cb040985e280e7e439832fc6b7857bff3d53ef6914ad50 \ + --hash=sha256:2290909275c9b8f637b0a92eb9b89281e18a72922749ebb903403ab6cc7da914 \ + --hash=sha256:25a6b03a68f9907ea6ec8bc7cf4c58a1b51a18e23394f962a6402f8e46d41211 \ + --hash=sha256:2b0714d7764efb29bf9d3c51c964aed7c4c7237b341f9346f15ceaf8321fdb35 \ + --hash=sha256:2cd60cd1e05de7f01927f8e25ca26b3ea2c09de8723241e5d3bcfdc70eaff76b \ + --hash=sha256:2d0082631a7510318befc2b4fdab140481eb4b9dd62d9245e042157085da2a70 \ + --hash=sha256:311d4549d6bf1f8c61d025965aebb5ba29d1481dc6471693ab91610aaffbc0eb \ + --hash=sha256:36ef2fee50eee669587d742fb456e349634b4fcf8926208766078b089054b24b \ + --hash=sha256:3ead8a0050c53eaa55935895d6919d393d0328ec24b2b9115bdbe881aa222673 \ + --hash=sha256:46ffb728d92dd5b09fc034ed91acf5595657c7ca17d4cf3751322cd554153c17 \ + --hash=sha256:4a19ea46a0fe71248965305a020bc076a163311aefbaa1d83e47d06fa30ac747 \ + --hash=sha256:4a9390dce61d705a88218f0d7b54d7e1fa1b421da8129fc7c009e029a9a6b81e \ + --hash=sha256:4c4872299ebe315a79f7f922051061634a64fda95b6b17677ba57ef00b2ba2a4 \ + --hash=sha256:4d4f7ba040f72a9f43a44059872af5a8c8c660aa5d7f90d5344f2ed1c3c02721 \ + --hash=sha256:4d79aa147ce86aef03079096d83239580006ffb684eead593917186aee407767 \ + --hash=sha256:4fbb8d3552c2ad99d9e236003c0b5f96d5f05e29386ba7abae73949bfebc13dd \ + --hash=sha256:55f8d5a6fe2fa0b823674db2293f92d74cd5f970bc0360f409a1fc21003862d3 \ + --hash=sha256:5b9c6d689bbe5beb156374508133218610e14f8c81e35bc17d7a14e30ab593e6 \ + --hash=sha256:5d9fdb386cf958e6ef6ff537d6149be7edb76c3268cd6833e6c36aa447e4443f \ + --hash=sha256:60307bb91e0ab44e560fe3a211087748b2b5f3e31f403baf41f5b7b0a70bd104 \ + --hash=sha256:61567f712bda04c7545a037e3284b4367cad8d29b3dec84b4bf3b2147020a75b \ + --hash=sha256:6af1aaa26f0835175d2200e62205b78e7ec3ffa430682e322cc91aaa1a0dbf28 \ + --hash=sha256:6b2a20edb5452ac8daa395890eeb076c570790dfce6b7a44d788af74c2f8cf96 \ + --hash=sha256:6f2077ec24e2f1248f9cac7b9a2dfb894e50cc7939fcebfb1759f99304caabef \ + --hash=sha256:77cfd37a43a53b02b7bd930457c7994c924ad8bbe8dff91817904bcbf291b371 \ + --hash=sha256:78037d02389745e247fe5ab0bcad5d1ab30726eaac3ad79219c7d6bbb07eec53 \ + --hash=sha256:85dc2f3444c346ea019a371e321ac868a4fab513b7a55fe368f0cc78de8177cc \ + --hash=sha256:8a0f73af1ea56c422b2dcfc0437459148a799ef4231c6aee189d2d4c59d6728f \ + --hash=sha256:8a254d49a9ffe9d7f888e3c677eed3729b14ce85abb08cd74732cead6ccc3c66 \ + --hash=sha256:8ba8405065f6e258a6f872fe62d797a28f383a12178c7153c01ed04e845c600c \ + --hash=sha256:91899dd7fb9a8c50f09c3c1cf0cb73bfbe2737f511f641f19b9650deb61c00ca \ + --hash=sha256:91ac0cb0fe2bf17616c2039dac88d7c9a5088f5cb5829b27c9d250e053664d31 \ + --hash=sha256:92a232af9927710de08a6c16a9710cc1b175fb9179c0d946cd4e213b92b2a69a \ + --hash=sha256:948152b30eddeae8355495f9943a3bf66b708295c0b9b6f467de1c620f215487 \ + --hash=sha256:9caacac0dd105e2555521002e2d17afc08665187017b466b5753e84c016628e6 \ + --hash=sha256:9d9885aad05f82fd7ea0c9ca505d60939746b39263fa273d0125170da8f59098 \ + --hash=sha256:9dc2c00bed568732b89e211b6adca389053d5e6d2d5a8979e80b813c3ec4d1f9 \ + --hash=sha256:a1bf44e13cf2d44d2ea2e928a8140d5d667304abe1a61c4d55b4906f389fbe64 \ + --hash=sha256:aa30cd16ddd2f216d07ba01d9635c873e97ddb041c61cf0847254edc37d1c60e \ + --hash=sha256:acda193f440dd88c2023cb00aa8bd7b93a9df59978306d14d87a8b12fe426b05 \ + --hash=sha256:bd4911c40a43a821dfd93038ac824b756b6e703e26e951718522d29f6eb166a8 \ + --hash=sha256:be1099a8295b1a722d03fb7b48be895d30f4301419a583dcf50e9045968a041c \ + --hash=sha256:c126fb72be2518395cc0465d4bae03125119136462e1945aea19840e45d89cfc \ + --hash=sha256:c53338613043038005bf2e41a2fafa08d29cdbc0ce80891b5366c819456c1ae9 \ + --hash=sha256:c789236366525c3ee3cd6e4e450a9ff629a7d1f4d88b8e18a0aea0615fd7ecf8 \ + --hash=sha256:cf0ec79e8ca7077f455d14d915d629385153b6a11abc0b93283ed73a8013e376 \ + --hash=sha256:d15f060bc6d0964a8bb70aba8f0cb6d11ae99715438f640cff11bbcf172eb0e8 \ + --hash=sha256:dabbf3c14de75a20cc3c30bf0c6527157224a93dfb605838eabb1a2ee3be008d \ + --hash=sha256:dbbc5b254c36c37d10abb50e899bc3939bbb7ab1e7c659614409af99bd3e7675 \ + --hash=sha256:dfc320f08ea9a7ec5b2403dc4e8150636f0d6150f4b9792faaae539c88e7db3b \ + --hash=sha256:ed162b2227f98d5b270ecbe1d53be56c8c81db08a1a8f5f02d89c7bb4d19591d \ + --hash=sha256:efe020c46ce3c3a89af6baec6569635812129df6fb6cf76d4943af3ba6ee2069 \ + --hash=sha256:f1c5f1f818b669875d191323a48912d3fcd2e4906410e8297bb09ac50c4d5ccc \ + --hash=sha256:f25001a955073b80510c0c3db0e043dbbc36904fd69e511c74e3d8640b8a5111 \ + --hash=sha256:f3867dc225d9423c245a51eaac2cfcd53dde8e0a8d8090bb6aed6e31bd6c2d4f \ + --hash=sha256:f513b2c6c0d5c491f478422f6b5b5c27ac1af06a54c93ef8631806f7231bd92e \ + --hash=sha256:f6e42c1bc985d9beee884780ae6048790eb4cd565c46251932906bdb1630034a # via electrogram -pysocks==1.7.1 +pyproject-hooks==1.2.0 \ + --hash=sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8 \ + --hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 + # via hatch +pysocks==1.7.1 \ + --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 \ + --hash=sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0 # via electrogram -pytest==8.2.2 - # via pytest-asyncio - # via pytest-cov -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pyyaml==6.0.1 - # via pre-commit -readme-renderer==44.0 - # via twine -requests==2.32.3 - # via requests-toolbelt - # via twine -requests-toolbelt==1.0.0 +pytest==9.0.2 \ + --hash=sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b \ + --hash=sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11 + # via + # electrogram + # pytest-asyncio + # pytest-cov +pytest-asyncio==1.3.0 \ + --hash=sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5 \ + --hash=sha256:d7f52f36d231b80ee124cd216ffb19369aa168fc10095013c6b014a34d3ee9e5 + # via electrogram +pytest-cov==7.0.0 \ + --hash=sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1 \ + --hash=sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861 + # via electrogram +pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \ + --hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \ + --hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755 + # via keyring +readme-renderer==44.0 \ + --hash=sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151 \ + --hash=sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1 # via twine -rfc3986==2.0.0 +requests==2.32.5 \ + --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ + --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf + # via + # requests-toolbelt + # twine +requests-toolbelt==1.0.0 \ + --hash=sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6 \ + --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 # via twine -rich==13.7.1 +rfc3986==2.0.0 \ + --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ + --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -ruff==0.5.2 -secretstorage==3.3.3 +rich==14.3.2 \ + --hash=sha256:08e67c3e90884651da3239ea668222d19bea7b589149d8014a21c633420dbb69 \ + --hash=sha256:e712f11c1a562a11843306f5ed999475f09ac31ffb64281f73ab29ffdda8b3b8 + # via + # hatch + # twine +secretstorage==3.5.0 ; sys_platform == 'linux' \ + --hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \ + --hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be # via keyring -twine==5.1.1 -typing-extensions==4.12.2 - # via aiosqlite -urllib3==2.2.2 - # via requests - # via twine -virtualenv==20.26.3 - # via pre-commit -zipp==3.19.2 +shellingham==1.5.4 \ + --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \ + --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de + # via hatch +tomli==2.4.0 ; python_full_version <= '3.11' \ + --hash=sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729 \ + --hash=sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b \ + --hash=sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d \ + --hash=sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df \ + --hash=sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576 \ + --hash=sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d \ + --hash=sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1 \ + --hash=sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a \ + --hash=sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e \ + --hash=sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc \ + --hash=sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702 \ + --hash=sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6 \ + --hash=sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd \ + --hash=sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4 \ + --hash=sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776 \ + --hash=sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a \ + --hash=sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66 \ + --hash=sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87 \ + --hash=sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2 \ + --hash=sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f \ + --hash=sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475 \ + --hash=sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f \ + --hash=sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95 \ + --hash=sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9 \ + --hash=sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3 \ + --hash=sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9 \ + --hash=sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76 \ + --hash=sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da \ + --hash=sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8 \ + --hash=sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51 \ + --hash=sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86 \ + --hash=sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8 \ + --hash=sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0 \ + --hash=sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b \ + --hash=sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1 \ + --hash=sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e \ + --hash=sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d \ + --hash=sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c \ + --hash=sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867 \ + --hash=sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a \ + --hash=sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c \ + --hash=sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0 \ + --hash=sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4 \ + --hash=sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614 \ + --hash=sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132 \ + --hash=sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa \ + --hash=sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087 + # via + # coverage + # hatchling + # pytest +tomli-w==1.2.0 \ + --hash=sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90 \ + --hash=sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021 + # via hatch +tomlkit==0.14.0 \ + --hash=sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680 \ + --hash=sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064 + # via hatch +trove-classifiers==2026.1.14.14 \ + --hash=sha256:00492545a1402b09d4858605ba190ea33243d361e2b01c9c296ce06b5c3325f3 \ + --hash=sha256:1f9553927f18d0513d8e5ff80ab8980b8202ce37ecae0e3274ed2ef11880e74d + # via hatchling +twine==6.2.0 \ + --hash=sha256:418ebf08ccda9a8caaebe414433b0ba5e25eb5e4a927667122fbe8f829f985d8 \ + --hash=sha256:e5ed0d2fd70c9959770dce51c8f39c8945c574e18173a7b81802dab51b4b75cf + # via electrogram +typing-extensions==4.15.0 ; python_full_version < '3.13' \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + # via + # anyio + # cryptography + # exceptiongroup + # pytest-asyncio + # virtualenv +urllib3==2.6.3 \ + --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ + --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 + # via + # id + # requests + # twine +userpath==1.9.2 \ + --hash=sha256:2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d \ + --hash=sha256:6c52288dab069257cc831846d15d48133522455d4677ee69a9781f11dbefd815 + # via hatch +uv==0.10.2 \ + --hash=sha256:0b7eef95c36fe92e7aac399c0dce555474432cbfeaaa23975ed83a63923f78fd \ + --hash=sha256:111c05182c5630ac523764e0ec2e58d7b54eb149dbe517b578993a13c2f71aff \ + --hash=sha256:45c3deaba0343fd27ab5385d6b7cde0765df1a15389ee7978b14a51c32895662 \ + --hash=sha256:69e35aa3e91a245b015365e5e6ca383ecf72a07280c6d00c17c9173f2d3b68ab \ + --hash=sha256:6dd2dc41043e92b3316d7124a7bf48c2affe7117c93079419146f083df71933c \ + --hash=sha256:6ec75cfe638b316b329474aa798c3988e5946ead4d9e977fe4dc6fc2ea3e0b8b \ + --hash=sha256:7b3685aa1da15acbe080b4cba8684afbb6baf11c9b04d4d4b347cc18b7b9cfa0 \ + --hash=sha256:937687df0380d636ceafcb728cf6357f0432588e721892128985417b283c3b54 \ + --hash=sha256:9f878837938103ee1307ed3ed5d9228118e3932816ab0deb451e7e16dc8ce82a \ + --hash=sha256:abdd5b3c6b871b17bf852a90346eb7af881345706554fd082346b000a9393afd \ + --hash=sha256:acc08e420abab21de987151059991e3f04bc7f4044d94ca58b5dd547995b4843 \ + --hash=sha256:aefbcd749ab2ad48bb533ec028607607f7b03be11c83ea152dbb847226cd6285 \ + --hash=sha256:b5016f038e191cc9ef00e17be802f44363d1b1cc3ef3454d1d76839a4246c10a \ + --hash=sha256:bb2cac4f3be60b64a23d9f035019c30a004d378b563c94f60525c9591665a56b \ + --hash=sha256:cca026c2e584788e1264879a123bf499dd8f169b9cafac4a2065a416e09d3823 \ + --hash=sha256:f7f3c7e09bf53b81f55730a67dd86299158f470dffb2bd279b6432feb198d231 \ + --hash=sha256:f90bca8703ae66bccfcfb7313b4b697a496c4d3df662f4a1a2696a6320c47598 \ + --hash=sha256:fad554c38d9988409ceddfac69a465e6e5f925a8b689e7606a395c20bb4d1d78 + # via hatch +virtualenv==20.36.1 \ + --hash=sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f \ + --hash=sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba + # via hatch +zipp==3.23.0 ; python_full_version < '3.12' \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 # via importlib-metadata diff --git a/requirements.lock b/requirements.lock index a83a01db..a9c41f2e 100644 --- a/requirements.lock +++ b/requirements.lock @@ -1,26 +1,168 @@ -# generated by rye -# use `rye lock` or `rye sync` to update this lockfile -# -# last locked with the following flags: -# pre: false -# features: [] -# all-features: false -# with-sources: false -# generate-hashes: false -# universal: false - --e file:. -aiosqlite==0.20.0 +# This file was autogenerated by uv via the following command: +# uv export --format requirements-txt --no-dev --output-file requirements.lock +-e . +aiosqlite==0.22.1 \ + --hash=sha256:043e0bd78d32888c0a9ca90fc788b38796843360c855a7262a532813133a0650 \ + --hash=sha256:21c002eb13823fad740196c5a2e9d8e62f6243bd9e7e4a1f87fb5e44ecb4fceb # via electrogram -dnspython==2.6.1 +anyio==4.12.1 \ + --hash=sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703 \ + --hash=sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c + # via electrogram +dnspython==2.8.0 \ + --hash=sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af \ + --hash=sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f # via pymongo -electrocrypto==1.0.0 +electrocrypto==2.0.2 \ + --hash=sha256:01bf402d59adee8e26974772258445c83641cf4d208d4a32855051293b43aa28 \ + --hash=sha256:08ec03075f328706501cd232d097978e27fafcab342e8c6a361a35d40d3851b8 \ + --hash=sha256:0b6efb3436133b60fc734a05c373efffb6106eef733afcc81247d01e041ae607 \ + --hash=sha256:0d4f1be3a91fbd2973f4de20cbc16c157bd5069fa8bebf28511d23e51b7800e2 \ + --hash=sha256:0f0194b44927aef240cebb298789d69415f0c35dbd0c3236efc09e6ca9a45e99 \ + --hash=sha256:111421aeaa889b58c2da13a404e92e8563bb2138f93cb1defa8ced4eaf6f8224 \ + --hash=sha256:123617e74468b29d3870e0bfc77027357da35533b6a51bf2fbdd32a8fa831988 \ + --hash=sha256:12f941c416658c1c73c5ac8a4bdb822b69ee20aaf9390a5af5ed549e8d7801ed \ + --hash=sha256:183f804a9f32e44dd5b1a435e1c7de0b2d87930e5ec6957973fb999dbcf4bc35 \ + --hash=sha256:1a87d5df3986f715316507a508968632a3b893f73596cacca0054245e37ff3ed \ + --hash=sha256:1b22b0d88ffe8936f135359aeb2e5441705d1a69d41587d449b0e1812f204d51 \ + --hash=sha256:2080a848f27233905d85dbd0e2c01ee608a5e6470189cb6230bb72d7da226f01 \ + --hash=sha256:2a34c98a7a3d620ef428600fdb7a23ce0b44c459a125beb93af69c8d6fe60891 \ + --hash=sha256:30c18e25b360c0825d5b372d12325242b51bc781f8163194df8db8504cb01ca2 \ + --hash=sha256:364fa6fe5c0313226825a0644f0891629a43f5a36c2658e1015f59051bcf8ead \ + --hash=sha256:3dba52e6d3330818729e230c07d0f302dd3f10aff2d1f1d0a252ff346596c0eb \ + --hash=sha256:40aac38a55ccaca24fb0f451dfcbb3feda4be81d6792c1c8281027a743b6f4fb \ + --hash=sha256:43c69cb6242920b5f724ad99f480ad4277a22d063a63574cc03c9ab7241f8d55 \ + --hash=sha256:4691f2e40542c0b202bfa76baf74a6d402d7fa0fe16496ba640a8a97a5f02141 \ + --hash=sha256:46f5c348ddeb9d22d697dad605aea69e472a22bb41ed13ace4fa553a9e27de25 \ + --hash=sha256:4a9c9ad57db80925e392d7924017b6e85487b185c57fab29684282022d2b635b \ + --hash=sha256:4fb7b4b6a371dc249c32e54be36920b7c2052a4d09a0d63291c405990cbd4f55 \ + --hash=sha256:547840c158442f3b2dcfdc43edb894643167354a2be0a7e1a091b38a2d266a33 \ + --hash=sha256:603817e90a1c89881894bbad0aa987dbb4571f7925ae55929d41afe6068c3c8c \ + --hash=sha256:6089d76c6e6498ee010639e2f2238aebee85a3fc2b32200416dc02cd3416b208 \ + --hash=sha256:649bedf010707e248b31e3bb78151b879aa8d1eeffd58443c8cbc1b260865c3d \ + --hash=sha256:6650164aea4dd69d7d1dfb5f51b3ad58946eb4984390a278424a2b59b5e843b4 \ + --hash=sha256:669d5fd03560ee524903093e06c753c66182eaed5f2ac3cf1ee83abc72863327 \ + --hash=sha256:68141ba4ba34f9c4e7eb399a37c06e61db2196d71522610d4a2349d4c723564e \ + --hash=sha256:6a54f8e754c5a7234257df9af4788a9ab9c7038c855e4aa5ad91600ac72c2ffc \ + --hash=sha256:6c76c49d0cc70781a619ce0608b7aff338ccf95e4c2e50aa19b2fcebfc86e766 \ + --hash=sha256:6c8bc0107403b15a3fef210debec1ce82240c0226d4be742a4f3ed237aa83ee2 \ + --hash=sha256:70776cd464f1abcb0528d29c64a34a885699919dd4de0c684410cffe9364f673 \ + --hash=sha256:7155808a720909ae543f01afdd7267ec9ad0bd53191e2f124c8bacee4c8004c4 \ + --hash=sha256:7bc4c3c0857e4785d25b2c99371254e0c418ec91941c3967f0df1c825207596e \ + --hash=sha256:7dc9520d902ed0091967ad5ab6d86be6eb88a51d7473e3c4145654fb5b451682 \ + --hash=sha256:816183a2cf3fe48d6837f814df8ea660dbe652a86a7d263f481b05ffa1c625eb \ + --hash=sha256:83e2dd8380336775bb7160344866d31f8787d1d5165df070a5954caa77846a64 \ + --hash=sha256:87ed1b9016d605d48d03f67c47e9365a53d8c3884a18618deb19c2b29a82f969 \ + --hash=sha256:94b2b804e11ddb15f33b48bc98b10dd0c5f70e0cb6fe3cb839f9ed1f10e9a499 \ + --hash=sha256:a1353c09b2af29466a29906c41b8c496f5bb0c3c9b4c9424f88b56f6fca113ec \ + --hash=sha256:a38b888664b95d8d26386ccc9f4db28e2b34cd1946509aa6ed86147f31cf0937 \ + --hash=sha256:a64e8c6545c54ced10bd2ef7987e3c800b29f045aad48a251ccf3ecc504e1bdf \ + --hash=sha256:a6a71a69fe12b014f2030cdf7403718d309a3167a7ef87bca3cf186684feff9a \ + --hash=sha256:ac72eee483fc38b0b07e713332383093b802e31f28c654d36e47ef3d1700e316 \ + --hash=sha256:af7f35b5a524104ee0360d58c16eae8d34039cfff11d03da142ecf249de3ad77 \ + --hash=sha256:b9539c50113340f3c2a374cacd8beda85d27b16c2139e6fb1a4209a7c0d59c90 \ + --hash=sha256:c526f7d0eca3b597c73111ed4c50942f3093cf4216e15ca32098835f12eb3418 \ + --hash=sha256:c5fca5dd03f78d79adc13f1e8dd57dbea1e16bcfd6628c862a2fa127b69ffa50 \ + --hash=sha256:cf9286771ec14c957031aea17e89c48b1c24ffff37573fc37d36b9746c2a81cf \ + --hash=sha256:d3e25abc571e7ea110a3c940c24930aaa21363667a1d00cfb877ff1b604125a6 \ + --hash=sha256:d5b0b634768f4a7cdc8a299256956057ba702dd4ef337012b29c37cad0ff4ddd \ + --hash=sha256:d7c98aa1b1f5b8101d91ab6dff7d0c2f094e2c048b69bda5345a6caa7e2056c6 \ + --hash=sha256:e0f49268beaf30d354949e441130bab3f2f0df4ced090760e6a403f993befafc \ + --hash=sha256:e3ea09bac7d00fec443da1d465073c629b7b6a0247c1fbf886d33dc5bf0ea96e \ + --hash=sha256:e43db41749aa0e301249fc948a4bcbadd84c1833b6b045b686b4e54bbf106568 \ + --hash=sha256:eae9ac15e22ce48a0aa080453ec18c2d6187f8414686342be655c6f032f527bb \ + --hash=sha256:eb67995cee37fbf1044e33792ed6d2fa990818c6cb70a909a1bd24ace506b764 \ + --hash=sha256:f525297b7dd4cb68f3ef085ff668063ced138e729b478088fd7fd346c27322eb \ + --hash=sha256:fa92068abee9c7afde1e9c67253fb6a547d7f981ea7da5dc45f688e056b57499 \ + --hash=sha256:fd68085fc4bb70bad76a1bd87c7d5dee1ac5ab7568ea931b3fddaf6468afbdf9 \ + --hash=sha256:ff8bbeeb35ac9b0728a9c444f1938e3c73301d2fbc5e9d4dfd8e03f4a2beb092 # via electrogram -pymediainfo==6.1.0 +exceptiongroup==1.3.1 ; python_full_version < '3.11' \ + --hash=sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219 \ + --hash=sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598 + # via anyio +idna==3.11 \ + --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ + --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 + # via anyio +pymediainfo==7.0.1 \ + --hash=sha256:01bcaf82b72cefbf4b96f13b2547e1b2e0e734bab7173d7c33f7f01acc07c98b \ + --hash=sha256:0d5df59ecc615e24c56f303b8f651579c6accab7265715e5d429186d7ba21514 \ + --hash=sha256:13224fa7590e198763b8baf072e704ea81d334e71aa32a469091460e243893c7 \ + --hash=sha256:286f3bf6299be0997093254e0f371855bc5cf2aaf8641d19455a011e3ee3a84d \ + --hash=sha256:3648e2379fa67bd02433d1e28c707df3a53834dd480680615a9fefd2266f1182 \ + --hash=sha256:cde98112f1ce486589b17a12e5da42085faea996224f7c67fa45b8c1dca719c6 # via electrogram -pymongo==4.9.2 +pymongo==4.16.0 \ + --hash=sha256:12762e7cc0f8374a8cae3b9f9ed8dabb5d438c7b33329232dd9b7de783454033 \ + --hash=sha256:19a1c96e7f39c7a59a9cfd4d17920cf9382f6f684faeff4649bf587dc59f8edc \ + --hash=sha256:1c01e8a7cd0ea66baf64a118005535ab5bf9f9eb63a1b50ac3935dccf9a54abe \ + --hash=sha256:1d638b0b1b294d95d0fdc73688a3b61e05cc4188872818cd240d51460ccabcb5 \ + --hash=sha256:21d02cc10a158daa20cb040985e280e7e439832fc6b7857bff3d53ef6914ad50 \ + --hash=sha256:2290909275c9b8f637b0a92eb9b89281e18a72922749ebb903403ab6cc7da914 \ + --hash=sha256:25a6b03a68f9907ea6ec8bc7cf4c58a1b51a18e23394f962a6402f8e46d41211 \ + --hash=sha256:2b0714d7764efb29bf9d3c51c964aed7c4c7237b341f9346f15ceaf8321fdb35 \ + --hash=sha256:2cd60cd1e05de7f01927f8e25ca26b3ea2c09de8723241e5d3bcfdc70eaff76b \ + --hash=sha256:2d0082631a7510318befc2b4fdab140481eb4b9dd62d9245e042157085da2a70 \ + --hash=sha256:311d4549d6bf1f8c61d025965aebb5ba29d1481dc6471693ab91610aaffbc0eb \ + --hash=sha256:36ef2fee50eee669587d742fb456e349634b4fcf8926208766078b089054b24b \ + --hash=sha256:3ead8a0050c53eaa55935895d6919d393d0328ec24b2b9115bdbe881aa222673 \ + --hash=sha256:46ffb728d92dd5b09fc034ed91acf5595657c7ca17d4cf3751322cd554153c17 \ + --hash=sha256:4a19ea46a0fe71248965305a020bc076a163311aefbaa1d83e47d06fa30ac747 \ + --hash=sha256:4a9390dce61d705a88218f0d7b54d7e1fa1b421da8129fc7c009e029a9a6b81e \ + --hash=sha256:4c4872299ebe315a79f7f922051061634a64fda95b6b17677ba57ef00b2ba2a4 \ + --hash=sha256:4d4f7ba040f72a9f43a44059872af5a8c8c660aa5d7f90d5344f2ed1c3c02721 \ + --hash=sha256:4d79aa147ce86aef03079096d83239580006ffb684eead593917186aee407767 \ + --hash=sha256:4fbb8d3552c2ad99d9e236003c0b5f96d5f05e29386ba7abae73949bfebc13dd \ + --hash=sha256:55f8d5a6fe2fa0b823674db2293f92d74cd5f970bc0360f409a1fc21003862d3 \ + --hash=sha256:5b9c6d689bbe5beb156374508133218610e14f8c81e35bc17d7a14e30ab593e6 \ + --hash=sha256:5d9fdb386cf958e6ef6ff537d6149be7edb76c3268cd6833e6c36aa447e4443f \ + --hash=sha256:60307bb91e0ab44e560fe3a211087748b2b5f3e31f403baf41f5b7b0a70bd104 \ + --hash=sha256:61567f712bda04c7545a037e3284b4367cad8d29b3dec84b4bf3b2147020a75b \ + --hash=sha256:6af1aaa26f0835175d2200e62205b78e7ec3ffa430682e322cc91aaa1a0dbf28 \ + --hash=sha256:6b2a20edb5452ac8daa395890eeb076c570790dfce6b7a44d788af74c2f8cf96 \ + --hash=sha256:6f2077ec24e2f1248f9cac7b9a2dfb894e50cc7939fcebfb1759f99304caabef \ + --hash=sha256:77cfd37a43a53b02b7bd930457c7994c924ad8bbe8dff91817904bcbf291b371 \ + --hash=sha256:78037d02389745e247fe5ab0bcad5d1ab30726eaac3ad79219c7d6bbb07eec53 \ + --hash=sha256:85dc2f3444c346ea019a371e321ac868a4fab513b7a55fe368f0cc78de8177cc \ + --hash=sha256:8a0f73af1ea56c422b2dcfc0437459148a799ef4231c6aee189d2d4c59d6728f \ + --hash=sha256:8a254d49a9ffe9d7f888e3c677eed3729b14ce85abb08cd74732cead6ccc3c66 \ + --hash=sha256:8ba8405065f6e258a6f872fe62d797a28f383a12178c7153c01ed04e845c600c \ + --hash=sha256:91899dd7fb9a8c50f09c3c1cf0cb73bfbe2737f511f641f19b9650deb61c00ca \ + --hash=sha256:91ac0cb0fe2bf17616c2039dac88d7c9a5088f5cb5829b27c9d250e053664d31 \ + --hash=sha256:92a232af9927710de08a6c16a9710cc1b175fb9179c0d946cd4e213b92b2a69a \ + --hash=sha256:948152b30eddeae8355495f9943a3bf66b708295c0b9b6f467de1c620f215487 \ + --hash=sha256:9caacac0dd105e2555521002e2d17afc08665187017b466b5753e84c016628e6 \ + --hash=sha256:9d9885aad05f82fd7ea0c9ca505d60939746b39263fa273d0125170da8f59098 \ + --hash=sha256:9dc2c00bed568732b89e211b6adca389053d5e6d2d5a8979e80b813c3ec4d1f9 \ + --hash=sha256:a1bf44e13cf2d44d2ea2e928a8140d5d667304abe1a61c4d55b4906f389fbe64 \ + --hash=sha256:aa30cd16ddd2f216d07ba01d9635c873e97ddb041c61cf0847254edc37d1c60e \ + --hash=sha256:acda193f440dd88c2023cb00aa8bd7b93a9df59978306d14d87a8b12fe426b05 \ + --hash=sha256:bd4911c40a43a821dfd93038ac824b756b6e703e26e951718522d29f6eb166a8 \ + --hash=sha256:be1099a8295b1a722d03fb7b48be895d30f4301419a583dcf50e9045968a041c \ + --hash=sha256:c126fb72be2518395cc0465d4bae03125119136462e1945aea19840e45d89cfc \ + --hash=sha256:c53338613043038005bf2e41a2fafa08d29cdbc0ce80891b5366c819456c1ae9 \ + --hash=sha256:c789236366525c3ee3cd6e4e450a9ff629a7d1f4d88b8e18a0aea0615fd7ecf8 \ + --hash=sha256:cf0ec79e8ca7077f455d14d915d629385153b6a11abc0b93283ed73a8013e376 \ + --hash=sha256:d15f060bc6d0964a8bb70aba8f0cb6d11ae99715438f640cff11bbcf172eb0e8 \ + --hash=sha256:dabbf3c14de75a20cc3c30bf0c6527157224a93dfb605838eabb1a2ee3be008d \ + --hash=sha256:dbbc5b254c36c37d10abb50e899bc3939bbb7ab1e7c659614409af99bd3e7675 \ + --hash=sha256:dfc320f08ea9a7ec5b2403dc4e8150636f0d6150f4b9792faaae539c88e7db3b \ + --hash=sha256:ed162b2227f98d5b270ecbe1d53be56c8c81db08a1a8f5f02d89c7bb4d19591d \ + --hash=sha256:efe020c46ce3c3a89af6baec6569635812129df6fb6cf76d4943af3ba6ee2069 \ + --hash=sha256:f1c5f1f818b669875d191323a48912d3fcd2e4906410e8297bb09ac50c4d5ccc \ + --hash=sha256:f25001a955073b80510c0c3db0e043dbbc36904fd69e511c74e3d8640b8a5111 \ + --hash=sha256:f3867dc225d9423c245a51eaac2cfcd53dde8e0a8d8090bb6aed6e31bd6c2d4f \ + --hash=sha256:f513b2c6c0d5c491f478422f6b5b5c27ac1af06a54c93ef8631806f7231bd92e \ + --hash=sha256:f6e42c1bc985d9beee884780ae6048790eb4cd565c46251932906bdb1630034a # via electrogram -pysocks==1.7.1 +pysocks==1.7.1 \ + --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 \ + --hash=sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0 # via electrogram -typing-extensions==4.12.2 - # via aiosqlite +typing-extensions==4.15.0 ; python_full_version < '3.13' \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + # via + # anyio + # exceptiongroup diff --git a/uv.lock b/uv.lock index 276282e3..5832bb53 100644 --- a/uv.lock +++ b/uv.lock @@ -2,7 +2,8 @@ version = 1 revision = 3 requires-python = ">=3.10" resolution-markers = [ - "python_full_version >= '3.11'", + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", "python_full_version < '3.11'", ] @@ -549,11 +550,27 @@ wheels = [ name = "docutils" version = "0.21.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, ] +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" }, +] + [[package]] name = "electrocrypto" version = "2.0.2" @@ -645,7 +662,8 @@ dev = [ ] docs = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "sphinx-autobuild", version = "2024.10.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx-autobuild", version = "2025.8.25", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-copybutton" }, @@ -655,22 +673,22 @@ docs = [ [package.metadata] requires-dist = [ - { name = "aiosqlite" }, + { name = "aiosqlite", specifier = ">=0.22.1" }, { name = "anyio", specifier = ">=4.12.1" }, - { name = "electrocrypto" }, - { name = "hatch", marker = "extra == 'dev'" }, - { name = "pymediainfo" }, - { name = "pymongo" }, - { name = "pysocks" }, - { name = "pytest", marker = "extra == 'dev'" }, - { name = "pytest-asyncio", marker = "extra == 'dev'" }, - { name = "pytest-cov", marker = "extra == 'dev'" }, - { name = "sphinx", marker = "extra == 'docs'", specifier = "<9.0.0" }, + { name = "electrocrypto", specifier = ">=2.0.2" }, + { name = "hatch", marker = "extra == 'dev'", specifier = ">=1.16.3" }, + { name = "pymediainfo", specifier = ">=7.0.1" }, + { name = "pymongo", specifier = ">=4.16.0" }, + { name = "pysocks", specifier = ">=1.7.1" }, + { name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.2" }, + { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=1.3.0" }, + { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=7.0.0" }, + { name = "sphinx", marker = "extra == 'docs'", specifier = "<10.0.0" }, { name = "sphinx-autobuild", marker = "extra == 'docs'" }, - { name = "sphinx-copybutton", marker = "extra == 'docs'" }, - { name = "sphinx-immaterial", marker = "extra == 'docs'" }, - { name = "tornado", marker = "extra == 'docs'" }, - { name = "twine", marker = "extra == 'dev'" }, + { name = "sphinx-copybutton", marker = "extra == 'docs'", specifier = ">=0.5.2" }, + { name = "sphinx-immaterial", marker = "extra == 'docs'", specifier = ">=0.13.9" }, + { name = "tornado", marker = "extra == 'docs'", specifier = ">=6.5.4" }, + { name = "twine", marker = "extra == 'dev'", specifier = ">=6.2.0" }, ] provides-extras = ["dev", "docs"] @@ -823,7 +841,7 @@ name = "importlib-metadata" version = "8.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "zipp" }, + { name = "zipp", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } wheels = [ @@ -1445,7 +1463,8 @@ name = "readme-renderer" version = "44.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "docutils" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "nh3" }, { name = "pygments" }, ] @@ -1512,18 +1531,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676, upload-time = "2025-12-17T18:25:33.098Z" }, ] -[[package]] -name = "roman-numerals-py" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "roman-numerals", marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cb/b5/de96fca640f4f656eb79bbee0e79aeec52e3e0e359f8a3e6a0d366378b64/roman_numerals_py-4.1.0.tar.gz", hash = "sha256:f5d7b2b4ca52dd855ef7ab8eb3590f428c0b1ea480736ce32b01fef2a5f8daf9", size = 4274, upload-time = "2025-12-17T18:25:41.153Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/2c/daca29684cbe9fd4bc711f8246da3c10adca1ccc4d24436b17572eb2590e/roman_numerals_py-4.1.0-py3-none-any.whl", hash = "sha256:553114c1167141c1283a51743759723ecd05604a1b6b507225e91dc1a6df0780", size = 4547, upload-time = "2025-12-17T18:25:40.136Z" }, -] - [[package]] name = "secretstorage" version = "3.5.0" @@ -1566,7 +1573,7 @@ dependencies = [ { name = "alabaster", marker = "python_full_version < '3.11'" }, { name = "babel", marker = "python_full_version < '3.11'" }, { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version < '3.11'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "imagesize", marker = "python_full_version < '3.11'" }, { name = "jinja2", marker = "python_full_version < '3.11'" }, { name = "packaging", marker = "python_full_version < '3.11'" }, @@ -1588,33 +1595,64 @@ wheels = [ [[package]] name = "sphinx" -version = "8.2.3" +version = "9.0.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*'", +] +dependencies = [ + { name = "alabaster", marker = "python_full_version == '3.11.*'" }, + { name = "babel", marker = "python_full_version == '3.11.*'" }, + { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "imagesize", marker = "python_full_version == '3.11.*'" }, + { name = "jinja2", marker = "python_full_version == '3.11.*'" }, + { name = "packaging", marker = "python_full_version == '3.11.*'" }, + { name = "pygments", marker = "python_full_version == '3.11.*'" }, + { name = "requests", marker = "python_full_version == '3.11.*'" }, + { name = "roman-numerals", marker = "python_full_version == '3.11.*'" }, + { name = "snowballstemmer", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version == '3.11.*'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502, upload-time = "2025-12-04T07:45:27.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl", hash = "sha256:5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb", size = 3917713, upload-time = "2025-12-04T07:45:24.944Z" }, +] + +[[package]] +name = "sphinx" +version = "9.1.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.11'", + "python_full_version >= '3.12'", ] dependencies = [ - { name = "alabaster", marker = "python_full_version >= '3.11'" }, - { name = "babel", marker = "python_full_version >= '3.11'" }, - { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version >= '3.11'" }, - { name = "imagesize", marker = "python_full_version >= '3.11'" }, - { name = "jinja2", marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pygments", marker = "python_full_version >= '3.11'" }, - { name = "requests", marker = "python_full_version >= '3.11'" }, - { name = "roman-numerals-py", marker = "python_full_version >= '3.11'" }, - { name = "snowballstemmer", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" }, + { name = "alabaster", marker = "python_full_version >= '3.12'" }, + { name = "babel", marker = "python_full_version >= '3.12'" }, + { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "imagesize", marker = "python_full_version >= '3.12'" }, + { name = "jinja2", marker = "python_full_version >= '3.12'" }, + { name = "packaging", marker = "python_full_version >= '3.12'" }, + { name = "pygments", marker = "python_full_version >= '3.12'" }, + { name = "requests", marker = "python_full_version >= '3.12'" }, + { name = "roman-numerals", marker = "python_full_version >= '3.12'" }, + { name = "snowballstemmer", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324, upload-time = "2025-12-31T15:09:27.646Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978", size = 3921742, upload-time = "2025-12-31T15:09:25.561Z" }, ] [[package]] @@ -1642,11 +1680,13 @@ name = "sphinx-autobuild" version = "2025.8.25" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.11'", + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", ] dependencies = [ { name = "colorama", marker = "python_full_version >= '3.11'" }, - { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "starlette", marker = "python_full_version >= '3.11'" }, { name = "uvicorn", marker = "python_full_version >= '3.11'" }, { name = "watchfiles", marker = "python_full_version >= '3.11'" }, @@ -1663,7 +1703,8 @@ version = "0.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039, upload-time = "2023-04-14T08:10:22.998Z" } wheels = [ @@ -1681,7 +1722,8 @@ dependencies = [ { name = "pydantic-extra-types" }, { name = "requests" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "typing-extensions" }, ] wheels = [ From 644ff513f64f9c32ffd790396a7782311dcb0b25 Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Wed, 11 Feb 2026 23:14:53 +0600 Subject: [PATCH 15/22] Improve documentation UI and automate enum index generation (#68) - Updated `compiler/docs/compiler.py` to support categorized Enums. - Enhanced documentation visuals with modern fonts (Inter, JetBrains Mono) and theme features (instant navigation). - Refined `docs/source/_static/css/custom.css` for a modern minimalist UI with backdrop-filter blurs and improved typography. - Improved `docs/source/index.rst` layout for a better first impression. - Fixed typo in enum filename: renamed `listerner_types.py` to `listener_types.py`. - Regenerated all API and documentation files. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- compiler/docs/compiler.py | 51 ++++- docs/source/_static/css/custom.css | 178 ++++++++++++++---- docs/source/api/enums/ButtonStyle.rst | 5 + docs/source/api/enums/index.rst | 168 +++++++++++++---- docs/source/conf.py | 8 + docs/source/index.rst | 30 ++- pyrogram/enums/__init__.py | 2 +- .../{listerner_types.py => listener_types.py} | 0 8 files changed, 349 insertions(+), 93 deletions(-) create mode 100644 docs/source/api/enums/ButtonStyle.rst rename pyrogram/enums/{listerner_types.py => listener_types.py} (100%) diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py index c2f50f32..f28b0144 100644 --- a/compiler/docs/compiler.py +++ b/compiler/docs/compiler.py @@ -38,6 +38,32 @@ "input_privacy_rule": "Input Privacy Rule", } +ENUMS_CATEGORIES = { + "General": ["ClientPlatform", "ListenerTypes", "ParseMode"], + "Chats": [ + "ChatAction", + "ChatEventAction", + "ChatJoinType", + "ChatMemberStatus", + "ChatMembersFilter", + "ChatType", + ], + "Messages": [ + "MessageEntityType", + "MessageMediaType", + "MessageServiceType", + "MessagesFilter", + "ButtonStyle", + ], + "Users": ["UserStatus"], + "Colors": ["AccentColor", "FolderColor", "ProfileColor", "ReplyColor"], + "Privacy": ["PrivacyKey", "StoryPrivacy", "StoriesPrivacyRules"], + "Polls": ["PollType"], + "Business": ["BusinessSchedule"], + "Authentication": ["SentCodeType", "NextCodeType"], + "Reactions": ["ReactionType"], +} + def snake(s: str): s = re.sub(r"(.)([A-Z][a-z]+)", r"\1_\2", s) @@ -413,10 +439,27 @@ def pyrogram_api() -> None: with Path(root, "index.rst").open("w", encoding="utf-8") as f: f.write("Available Enums\n===============\n\n") f.write(".. currentmodule:: pyrogram.enums\n\n") - f.write(".. autosummary::\n :nosignatures:\n\n") - f.writelines(f" {e}\n" for e in sorted(enums_list)) - f.write("\n.. toctree::\n :hidden:\n\n") - f.writelines(f" {e} <{e}>\n" for e in sorted(enums_list)) + + # Group enums + categorized_enums = {} + assigned_enums = set() + for title, e_list in ENUMS_CATEGORIES.items(): + current_list = [e for e in e_list if e in enums_list] + if current_list: + categorized_enums[title] = sorted(current_list) + assigned_enums.update(current_list) + + others = sorted([e for e in enums_list if e not in assigned_enums]) + if others: + categorized_enums["Others"] = others + + for title, e_list in categorized_enums.items(): + f.write(f"{title}\n" + "-" * len(title) + "\n\n") + f.write(".. autosummary::\n :nosignatures:\n\n") + f.writelines(f" {e}\n" for e in e_list) + f.write("\n.. toctree::\n :hidden:\n\n") + f.writelines(f" {e} <{e}>\n" for e in e_list) + f.write("\n") for e in enums_list: with Path(root, f"{e}.rst").open("w", encoding="utf-8") as f2: diff --git a/docs/source/_static/css/custom.css b/docs/source/_static/css/custom.css index 2ac5792e..30377b02 100644 --- a/docs/source/_static/css/custom.css +++ b/docs/source/_static/css/custom.css @@ -1,69 +1,169 @@ :root { - --md-primary-fg-color: #3f51b5; - --md-primary-fg-color--light: #7986cb; - --md-primary-fg-color--dark: #303f9f; - --md-accent-fg-color: #3f51b5; + --md-primary-fg-color: #3f51b5; + --md-primary-fg-color--light: #7986cb; + --md-primary-fg-color--dark: #303f9f; + --md-accent-fg-color: #3f51b5; } body { - --color-green: #2e7d32; - --color-red: #c62828; + --color-green: #2e7d32; + --color-red: #c62828; } +/* Modern Header with blur */ +.md-header { + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + background-color: rgba(63, 81, 181, 0.85); +} + +[data-md-color-scheme="slate"] .md-header { + background-color: rgba(38, 50, 56, 0.85); +} + +/* Typography refinements */ +.md-typeset { + font-size: 0.75rem; +} + +.md-typeset h1 { + font-weight: 800; + letter-spacing: -0.03em; + margin-bottom: 1.5rem; +} + +.md-typeset h2 { + font-weight: 700; + letter-spacing: -0.02em; +} + +/* Rounded and clean code blocks */ +.highlight { + border-radius: 8px !important; + border: 1px solid rgba(0, 0, 0, 0.05) !important; + transition: box-shadow 0.3s ease; +} + +.highlight:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); +} + +[data-md-color-scheme="slate"] .highlight { + border-color: rgba(255, 255, 255, 0.05) !important; +} + +/* Pill-style badges for usable-by */ .usable-by { - border: 1px solid #e0e0e0; - border-radius: .4em; - padding: 4px 8px; - background-color: #f5f5f5; - font-size: 0.9em; - font-weight: 500; - display: inline-block; - margin-bottom: 1em; + border: none; + border-radius: 20px; + padding: 4px 12px; + background-color: #e8eaf6; + color: #3f51b5; + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; + display: inline-flex; + align-items: center; + margin-bottom: 1.5rem; + box-shadow: 0 2px 4px rgba(63, 81, 181, 0.1); } [data-md-color-scheme="slate"] .usable-by { - border-color: #37474f; - background-color: #263238; - color: #eceff1; + background-color: #1a237e; + color: #c5cae9; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +/* Enhanced links */ +.md-typeset a { + text-decoration: none; + transition: color 0.2s, border-bottom 0.2s; + font-weight: 500; +} + +.md-typeset a:hover { + color: var(--md-primary-fg-color--light); } a .pre { - color: inherit; - font-weight: 500; + color: inherit; + font-weight: 600; } -.md-main a { - text-decoration: none; - color: var(--md-primary-fg-color); - transition: color 0.3s; +/* Improved Tables */ +table.docutils { + width: 100%; + border-collapse: separate; + border-spacing: 0; + border: 1px solid #eee; + border-radius: 8px; + overflow: hidden; + margin-bottom: 1.5rem; } -.md-main a:hover { - color: var(--md-primary-fg-color--light); - text-decoration: underline; +[data-md-color-scheme="slate"] table.docutils { + border-color: #37474f; } -.md-sidebar a { - text-decoration: none; +table.docutils td, +table.docutils th { + padding: 12px 16px; + border-bottom: 1px solid #eee; + border-right: 1px solid #eee; } -/* Improve code blocks */ -.highlight { - border-radius: 4px; +table.docutils tr:last-child td { + border-bottom: none; } -/* Improve tables */ -table.docutils { - width: 100%; - border-collapse: collapse; +table.docutils td:last-child, +table.docutils th:last-child { + border-right: none; +} + +table.docutils th { + background-color: #f8f9fa; + font-weight: 600; } -table.docutils td, table.docutils th { - padding: 8px 12px; - border: 1px solid #e0e0e0; +[data-md-color-scheme="slate"] table.docutils th { + background-color: #263238; } [data-md-color-scheme="slate"] table.docutils td, [data-md-color-scheme="slate"] table.docutils th { - border-color: #37474f; + border-color: #37474f; +} + +/* Custom modern scrollbar */ +::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, 0.15); + border-radius: 10px; +} + +[data-md-color-scheme="slate"] ::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.15); +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.3); +} + +/* Smoother transitions for theme toggle */ +body { + transition: background-color 0.5s, color 0.5s; +} + +/* Admonitions styling */ +.md-typeset .admonition, +.md-typeset details { + border-radius: 8px; + border-left-width: 0.2rem; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); } diff --git a/docs/source/api/enums/ButtonStyle.rst b/docs/source/api/enums/ButtonStyle.rst new file mode 100644 index 00000000..e333c8fc --- /dev/null +++ b/docs/source/api/enums/ButtonStyle.rst @@ -0,0 +1,5 @@ +ButtonStyle +=========== + +.. autoclass:: pyrogram.enums.ButtonStyle() + :members: diff --git a/docs/source/api/enums/index.rst b/docs/source/api/enums/index.rst index 100ee56b..a3d3887e 100644 --- a/docs/source/api/enums/index.rst +++ b/docs/source/api/enums/index.rst @@ -3,62 +3,166 @@ Available Enums .. currentmodule:: pyrogram.enums +General +------- + +.. autosummary:: + :nosignatures: + + ClientPlatform + ListenerTypes + ParseMode + +.. toctree:: + :hidden: + + ClientPlatform + ListenerTypes + ParseMode + +Chats +----- + .. autosummary:: :nosignatures: - AccentColor - BusinessSchedule ChatAction ChatEventAction ChatJoinType ChatMemberStatus ChatMembersFilter ChatType - ClientPlatform - FolderColor - ListenerTypes - MessageEntityType - MessageMediaType - MessageServiceType - MessagesFilter - NextCodeType - ParseMode - PollType - PrivacyKey - ProfileColor - ReactionType - ReplyColor - SentCodeType - StoriesPrivacyRules - StoryPrivacy - UserStatus .. toctree:: :hidden: - AccentColor - BusinessSchedule ChatAction ChatEventAction ChatJoinType ChatMemberStatus ChatMembersFilter ChatType - ClientPlatform - FolderColor - ListenerTypes + +Messages +-------- + +.. autosummary:: + :nosignatures: + + ButtonStyle + MessageEntityType + MessageMediaType + MessageServiceType + MessagesFilter + +.. toctree:: + :hidden: + + ButtonStyle MessageEntityType MessageMediaType MessageServiceType MessagesFilter - NextCodeType - ParseMode - PollType - PrivacyKey + +Users +----- + +.. autosummary:: + :nosignatures: + + UserStatus + +.. toctree:: + :hidden: + + UserStatus + +Colors +------ + +.. autosummary:: + :nosignatures: + + AccentColor + FolderColor + ProfileColor + ReplyColor + +.. toctree:: + :hidden: + + AccentColor + FolderColor ProfileColor - ReactionType ReplyColor - SentCodeType + +Privacy +------- + +.. autosummary:: + :nosignatures: + + PrivacyKey + StoriesPrivacyRules + StoryPrivacy + +.. toctree:: + :hidden: + + PrivacyKey StoriesPrivacyRules StoryPrivacy - UserStatus + +Polls +----- + +.. autosummary:: + :nosignatures: + + PollType + +.. toctree:: + :hidden: + + PollType + +Business +-------- + +.. autosummary:: + :nosignatures: + + BusinessSchedule + +.. toctree:: + :hidden: + + BusinessSchedule + +Authentication +-------------- + +.. autosummary:: + :nosignatures: + + NextCodeType + SentCodeType + +.. toctree:: + :hidden: + + NextCodeType + SentCodeType + +Reactions +--------- + +.. autosummary:: + :nosignatures: + + ReactionType + +.. toctree:: + :hidden: + + ReactionType diff --git a/docs/source/conf.py b/docs/source/conf.py index b481aadd..56b975b9 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -68,6 +68,10 @@ "repo_url": "https://github.com/5hojib/Electrogram/", "repo_name": "Electrogram", "globaltoc_collapse": True, + "font": { + "text": "Inter", + "code": "JetBrains Mono", + }, "features": [ "navigation.expand", "navigation.tabs", @@ -78,6 +82,10 @@ "toc.sticky", "content.tabs.link", "announce.dismiss", + "navigation.instant", + "navigation.tracking", + "content.code.copy", + "content.code.annotate", ], "palette": [ { diff --git a/docs/source/index.rst b/docs/source/index.rst index b417bfa8..eb8aa98c 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -3,17 +3,17 @@ Welcome to Electrogram .. raw:: html -

- Telegram MTProto API Framework for Python -
- - Development - - • - - Issues - -

+
+
+

+ Modern MTProto API Framework for Python +

+
+ GitHub + Issues +
+
+
.. code-block:: python @@ -36,12 +36,8 @@ It enables you to easily interact with the main Telegram API through a user acco How the Documentation is Organized ---------------------------------- -Contents are organized into sections composed of self-contained topics which can be all accessed from the sidebar, or by -following them in order using the :guilabel:`Next` button at the end of each page. -You can also switch to Dark or Light theme or leave on Auto (follows system preferences) by using the dedicated button -in the top left corner. - -Here below you can, instead, find a list of the most relevant pages for a quick access. +Contents are organized into sections composed of self-contained topics which can be all accessed from the sidebar. +Here below you can find a list of the most relevant pages for quick access. First Steps ^^^^^^^^^^^ diff --git a/pyrogram/enums/__init__.py b/pyrogram/enums/__init__.py index b7418bbd..fcc80a82 100644 --- a/pyrogram/enums/__init__.py +++ b/pyrogram/enums/__init__.py @@ -11,7 +11,7 @@ from .chat_type import ChatType from .client_platform import ClientPlatform from .folder_color import FolderColor -from .listerner_types import ListenerTypes +from .listener_types import ListenerTypes from .message_entity_type import MessageEntityType from .message_media_type import MessageMediaType from .message_service_type import MessageServiceType diff --git a/pyrogram/enums/listerner_types.py b/pyrogram/enums/listener_types.py similarity index 100% rename from pyrogram/enums/listerner_types.py rename to pyrogram/enums/listener_types.py From 456292357061ddec4946688741f53a8b4797c517 Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Fri, 13 Feb 2026 01:10:17 +0600 Subject: [PATCH 16/22] Fix errors and warnings in documentation generation (#70) - Fixed duplicate and missing decorators in `docs/source/api/decorators.rst`. - Renamed `refund_star_payment` to `refund_stars_payment` and `RefundStarPayment` to `RefundStarsPayment` for consistency with Telegram's terminology, with backward compatibility aliases. - Fixed a cut-off docstring in `pyrogram/types/user_and_chats/chat.py`. - Exported `Str` and `Link` types in `pyrogram.types` to resolve Sphinx import failures. - Removed a trailing transition in `docs/source/support.rst` that caused a docutils warning. - Configured Sphinx to preserve default values and suppress lexing warnings for better documentation output. - Verified that documentation now builds with zero warnings. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- docs/source/api/decorators.rst | 4 ++-- docs/source/conf.py | 3 ++- docs/source/support.rst | 2 -- pyrogram/methods/business/__init__.py | 4 ++-- pyrogram/methods/business/refund_stars_payment.py | 13 +++++++++---- pyrogram/types/__init__.py | 4 ++++ pyrogram/types/messages_and_media/__init__.py | 3 ++- pyrogram/types/user_and_chats/__init__.py | 2 ++ pyrogram/types/user_and_chats/chat.py | 2 +- 9 files changed, 24 insertions(+), 13 deletions(-) diff --git a/docs/source/api/decorators.rst b/docs/source/api/decorators.rst index cd203ca5..791d0553 100644 --- a/docs/source/api/decorators.rst +++ b/docs/source/api/decorators.rst @@ -41,6 +41,8 @@ Index - :meth:`~Client.on_edited_message` - :meth:`~Client.on_edited_bot_business_message` - :meth:`~Client.on_callback_query` + - :meth:`~Client.on_shipping_query` + - :meth:`~Client.on_pre_checkout_query` - :meth:`~Client.on_message_reaction_updated` - :meth:`~Client.on_message_reaction_count_updated` - :meth:`~Client.on_inline_query` @@ -48,7 +50,6 @@ Index - :meth:`~Client.on_chat_member_updated` - :meth:`~Client.on_chat_join_request` - :meth:`~Client.on_deleted_messages` - - :meth:`~Client.on_edited_bot_business_message` - :meth:`~Client.on_user_status` - :meth:`~Client.on_story` - :meth:`~Client.on_poll` @@ -76,7 +77,6 @@ Details .. autodecorator:: pyrogram.Client.on_chat_member_updated() .. autodecorator:: pyrogram.Client.on_chat_join_request() .. autodecorator:: pyrogram.Client.on_deleted_messages() -.. autodecorator:: pyrogram.Client.on_edited_bot_business_message() .. autodecorator:: pyrogram.Client.on_user_status() .. autodecorator:: pyrogram.Client.on_story() .. autodecorator:: pyrogram.Client.on_poll() diff --git a/docs/source/conf.py b/docs/source/conf.py index 56b975b9..312f84da 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -33,6 +33,7 @@ master_doc = "index" source_suffix = ".rst" autodoc_member_order = "bysource" +autodoc_preserve_defaults = True # Paths for templates and static files templates_path = [] @@ -56,7 +57,7 @@ copybutton_prompt_text = "$ " # Suppress specific warnings -suppress_warnings = ["image.not_readable"] +suppress_warnings = ["image.not_readable", "misc.highlighting_failure"] # HTML theme options html_theme_options = { diff --git a/docs/source/support.rst b/docs/source/support.rst index 132a87de..a3caa39b 100644 --- a/docs/source/support.rst +++ b/docs/source/support.rst @@ -39,5 +39,3 @@ GitHub Sponsor data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="octicon-heart" data-size="large" aria-label="Sponsor @5hojib on GitHub">Sponsor - ------ diff --git a/pyrogram/methods/business/__init__.py b/pyrogram/methods/business/__init__.py index 57c1d813..9669fbc7 100644 --- a/pyrogram/methods/business/__init__.py +++ b/pyrogram/methods/business/__init__.py @@ -9,7 +9,7 @@ from .get_stars_transactions import GetStarsTransactions from .get_stars_transactions_by_id import GetStarsTransactionsById from .get_user_gifts import GetUserGifts -from .refund_stars_payment import RefundStarPayment +from .refund_stars_payment import RefundStarsPayment, RefundStarPayment from .sell_gift import SellGift from .send_gift import SendGift from .send_invoice import SendInvoice @@ -29,7 +29,7 @@ class TelegramBusiness( ToggleGiftIsSaved, GetStarsTransactions, GetStarsTransactionsById, - RefundStarPayment, + RefundStarsPayment, SendInvoice, GetPaymentForm, SendPaymentForm, diff --git a/pyrogram/methods/business/refund_stars_payment.py b/pyrogram/methods/business/refund_stars_payment.py index 309a0c6a..4c2e3013 100644 --- a/pyrogram/methods/business/refund_stars_payment.py +++ b/pyrogram/methods/business/refund_stars_payment.py @@ -4,13 +4,13 @@ from pyrogram import raw -class RefundStarPayment: - async def refund_star_payment( +class RefundStarsPayment: + async def refund_stars_payment( self: pyrogram.Client, user_id: int | str, telegram_payment_charge_id: str, ) -> bool: - """Refund the star to the user. + """Refund the stars to the user. Parameters: user_id (``int`` | ``str``): @@ -25,7 +25,7 @@ async def refund_star_payment( Example: .. code-block:: python - await app.refund_star_payment(user_id, telegram_payment_charge_id) + await app.refund_stars_payment(user_id, telegram_payment_charge_id) """ await self.invoke( raw.functions.payments.RefundStarsCharge( @@ -35,3 +35,8 @@ async def refund_star_payment( ) return True + + refund_star_payment = refund_stars_payment + + +RefundStarPayment = RefundStarsPayment diff --git a/pyrogram/types/__init__.py b/pyrogram/types/__init__.py index 0bcd33bd..da23b49b 100644 --- a/pyrogram/types/__init__.py +++ b/pyrogram/types/__init__.py @@ -161,6 +161,7 @@ ScreenshotTaken, Sticker, StickerSet, + Str, StrippedThumbnail, Thumbnail, TranslatedText, @@ -227,6 +228,7 @@ GeneralTopicHidden, GeneralTopicUnhidden, InviteLinkImporter, + Link, PeerChannel, PeerUser, PrivacyRule, @@ -367,6 +369,7 @@ "KeyboardButton", "KeyboardButtonStyle", "LabeledPrice", + "Link", "List", "Location", "LoginUrl", @@ -424,6 +427,7 @@ "Sticker", "StickerSet", "StoriesPrivacyRules", + "Str", "Story", "StoryDeleted", "StoryForwardHeader", diff --git a/pyrogram/types/messages_and_media/__init__.py b/pyrogram/types/messages_and_media/__init__.py index 2ad6b3a8..5f211318 100644 --- a/pyrogram/types/messages_and_media/__init__.py +++ b/pyrogram/types/messages_and_media/__init__.py @@ -28,7 +28,7 @@ from .giveaway_result import GiveawayResult from .labeled_price import LabeledPrice from .location import Location -from .message import Message +from .message import Message, Str from .message_entity import MessageEntity from .message_reaction_count_updated import ( MessageReactionCountUpdated, @@ -107,6 +107,7 @@ "Sticker", "StickerSet", "StoriesPrivacyRules", + "Str", "Story", "StoryDeleted", "StoryForwardHeader", diff --git a/pyrogram/types/user_and_chats/__init__.py b/pyrogram/types/user_and_chats/__init__.py index 5e891d8b..b48dfade 100644 --- a/pyrogram/types/user_and_chats/__init__.py +++ b/pyrogram/types/user_and_chats/__init__.py @@ -34,6 +34,7 @@ from .general_forum_topic_hidden import GeneralTopicHidden from .general_forum_topic_unhidden import GeneralTopicUnhidden from .invite_link_importer import InviteLinkImporter +from .user import Link from .peer_channel import PeerChannel from .peer_user import PeerUser from .privacy_rule import PrivacyRule @@ -80,6 +81,7 @@ "GeneralTopicHidden", "GeneralTopicUnhidden", "InviteLinkImporter", + "Link", "PeerChannel", "PeerUser", "PrivacyRule", diff --git a/pyrogram/types/user_and_chats/chat.py b/pyrogram/types/user_and_chats/chat.py index ae99c901..01c5aa03 100644 --- a/pyrogram/types/user_and_chats/chat.py +++ b/pyrogram/types/user_and_chats/chat.py @@ -154,7 +154,7 @@ class Chat(Object): join_requests_count (``int``, *optional*): Number of users who requested to join the chat. - Returned only in :meth:`~pyrogram.Client.get + Returned only in :meth:`~pyrogram.Client.get_chat`. restrictions (List of :obj:`~pyrogram.types.Restriction`, *optional*): The list of reasons why this chat might be unavailable to some users. From 6938fc3a7e0275852c91997593a3e452d547857a Mon Sep 17 00:00:00 2001 From: 5hojib Date: Thu, 12 Feb 2026 19:10:38 +0000 Subject: [PATCH 17/22] InkyPinkyPonky [no ci] Signed-off-by: 5hojib --- pyrogram/methods/business/__init__.py | 2 +- pyrogram/types/__init__.py | 2 +- pyrogram/types/messages_and_media/__init__.py | 2 +- pyrogram/types/user_and_chats/__init__.py | 3 +-- uv.lock | 12 ++++++------ 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/pyrogram/methods/business/__init__.py b/pyrogram/methods/business/__init__.py index 9669fbc7..049d6641 100644 --- a/pyrogram/methods/business/__init__.py +++ b/pyrogram/methods/business/__init__.py @@ -9,7 +9,7 @@ from .get_stars_transactions import GetStarsTransactions from .get_stars_transactions_by_id import GetStarsTransactionsById from .get_user_gifts import GetUserGifts -from .refund_stars_payment import RefundStarsPayment, RefundStarPayment +from .refund_stars_payment import RefundStarPayment, RefundStarsPayment from .sell_gift import SellGift from .send_gift import SendGift from .send_invoice import SendInvoice diff --git a/pyrogram/types/__init__.py b/pyrogram/types/__init__.py index da23b49b..39bbda2f 100644 --- a/pyrogram/types/__init__.py +++ b/pyrogram/types/__init__.py @@ -427,12 +427,12 @@ "Sticker", "StickerSet", "StoriesPrivacyRules", - "Str", "Story", "StoryDeleted", "StoryForwardHeader", "StorySkipped", "StoryViews", + "Str", "StrippedThumbnail", "SuccessfulPayment", "SuggestedPost", diff --git a/pyrogram/types/messages_and_media/__init__.py b/pyrogram/types/messages_and_media/__init__.py index 5f211318..be4b6193 100644 --- a/pyrogram/types/messages_and_media/__init__.py +++ b/pyrogram/types/messages_and_media/__init__.py @@ -107,12 +107,12 @@ "Sticker", "StickerSet", "StoriesPrivacyRules", - "Str", "Story", "StoryDeleted", "StoryForwardHeader", "StorySkipped", "StoryViews", + "Str", "StrippedThumbnail", "Thumbnail", "TranslatedText", diff --git a/pyrogram/types/user_and_chats/__init__.py b/pyrogram/types/user_and_chats/__init__.py index b48dfade..36190034 100644 --- a/pyrogram/types/user_and_chats/__init__.py +++ b/pyrogram/types/user_and_chats/__init__.py @@ -34,12 +34,11 @@ from .general_forum_topic_hidden import GeneralTopicHidden from .general_forum_topic_unhidden import GeneralTopicUnhidden from .invite_link_importer import InviteLinkImporter -from .user import Link from .peer_channel import PeerChannel from .peer_user import PeerUser from .privacy_rule import PrivacyRule from .restriction import Restriction -from .user import User +from .user import Link, User from .username import Username from .video_chat_ended import VideoChatEnded from .video_chat_members_invited import VideoChatMembersInvited diff --git a/uv.lock b/uv.lock index 5832bb53..ed78c7c2 100644 --- a/uv.lock +++ b/uv.lock @@ -706,11 +706,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.20.3" +version = "3.21.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/65/ce7f1b70157833bf3cb851b556a37d4547ceafc158aa9b34b36782f23696/filelock-3.20.3.tar.gz", hash = "sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1", size = 19485, upload-time = "2026-01-09T17:55:05.421Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/6b/cc63cdbff46eba1ce2fbd058e9699f99c43f7e604da15413ca0331040bff/filelock-3.21.0.tar.gz", hash = "sha256:48c739c73c6fcacd381ed532226991150947c4a76dcd674f84d6807fd55dbaf2", size = 31341, upload-time = "2026-02-12T15:40:48.544Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/36/7fb70f04bf00bc646cd5bb45aa9eddb15e19437a28b8fb2b4a5249fac770/filelock-3.20.3-py3-none-any.whl", hash = "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1", size = 16701, upload-time = "2026-01-09T17:55:04.334Z" }, + { url = "https://files.pythonhosted.org/packages/da/ab/05190b5a64101fcb743bc63a034c0fac86a515c27c303c69221093565f28/filelock-3.21.0-py3-none-any.whl", hash = "sha256:0f90eee4c62101243df3007db3cf8fc3ebf1bb13541d3e72c687d6e0f3f7d531", size = 21381, upload-time = "2026-02-12T15:40:46.964Z" }, ] [[package]] @@ -1112,11 +1112,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.5.1" +version = "4.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715, upload-time = "2025-12-05T13:52:58.638Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/474d0a8508029286b905622e6929470fb84337cfa08f9d09fbb624515249/platformdirs-4.6.0.tar.gz", hash = "sha256:4a13c2db1071e5846c3b3e04e5b095c0de36b2a24be9a3bc0145ca66fce4e328", size = 23433, upload-time = "2026-02-12T14:36:21.288Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, + { url = "https://files.pythonhosted.org/packages/da/10/1b0dcf51427326f70e50d98df21b18c228117a743a1fc515a42f8dc7d342/platformdirs-4.6.0-py3-none-any.whl", hash = "sha256:dd7f808d828e1764a22ebff09e60f175ee3c41876606a6132a688d809c7c9c73", size = 19549, upload-time = "2026-02-12T14:36:19.743Z" }, ] [[package]] From 8743831c2702047e36258ebbc541fc4dfe738a4d Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Sat, 14 Feb 2026 12:22:10 +0600 Subject: [PATCH 18/22] Performance boost for TL serialization (#69) * perf: optimize TL object serialization with buffer passing This change transitions the serialization process from a recursive "return bytes" pattern to a "write to buffer" pattern. By passing a shared BytesIO buffer through nested write calls, we avoid many redundant memory allocations and byte-copying operations, which significantly improves performance for large and deeply nested TL objects. Key changes: - Added optional `b: BytesIO` parameter to `TLObject.write`. - Optimized Primitives (Int, Long, Bytes, String, Vector, Bool) to support writing directly to a buffer. - Updated the API compiler and templates to generate optimized serialization logic for thousands of raw API classes. - Updated manually implemented core objects (Message, GzipPacked, etc.). - Pre-calculated Boolean byte constants. Co-authored-by: 5hojib <107526130+5hojib@users.noreply.github.com> * perf: refine TL object serialization and fix review issues - Explicitly delegate String.write to Bytes.write. - Use Int.write for Vector constructor ID instead of hardcoded literal. - Ensure BytesIO is imported at runtime in all primitive files. - Add missing write methods to Bool and Double primitives. - Optimize Vector.write to use inner type's write method. - Regenerate raw API with refined templates. Co-authored-by: 5hojib <107526130+5hojib@users.noreply.github.com> --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- compiler/api/compiler.py | 14 ++++++------- compiler/api/template/combinator.txt | 14 +++++++++---- pyrogram/raw/core/future_salt.py | 16 ++++++++------ pyrogram/raw/core/future_salts.py | 20 +++++++++++------- pyrogram/raw/core/gzip_packed.py | 13 +++++++----- pyrogram/raw/core/message.py | 18 +++++++++------- pyrogram/raw/core/msg_container.py | 16 ++++++++------ pyrogram/raw/core/primitives/bool.py | 15 ++++++++----- pyrogram/raw/core/primitives/bytes.py | 24 ++++++++++++++------- pyrogram/raw/core/primitives/double.py | 10 +++++---- pyrogram/raw/core/primitives/int.py | 10 +++++---- pyrogram/raw/core/primitives/string.py | 10 +++++---- pyrogram/raw/core/primitives/vector.py | 29 +++++++++++++++++++------- pyrogram/raw/core/tl_object.py | 10 ++++----- 14 files changed, 137 insertions(+), 82 deletions(-) diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index e584d55b..da54fffc 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -432,7 +432,7 @@ def start() -> None: # noqa: C901 [ f"{arg_name} = 0", "\n ".join(write_flags), - f"b.write(Int({arg_name}))\n ", + f"Int.write({arg_name}, b)\n ", ], ) @@ -451,7 +451,7 @@ def start() -> None: # noqa: C901 write_types += "\n " write_types += f"if self.{arg_name} is not None:\n " write_types += ( - f"b.write({flag_type.title()}(self.{arg_name}))\n " + f"{flag_type.title()}.write(self.{arg_name}, b)\n " ) read_types += "\n " @@ -461,14 +461,14 @@ def start() -> None: # noqa: C901 write_types += "\n " write_types += f"if self.{arg_name} is not None:\n " - write_types += f"b.write(Vector(self.{arg_name}{f', {sub_type.title()}' if sub_type in CORE_TYPES else ''}))\n " + write_types += f"Vector.write(self.{arg_name}, {sub_type.title() if sub_type in CORE_TYPES else 'None'}, b)\n " read_types += "\n " read_types += f"{arg_name} = TLObject.read(b{f', {sub_type.title()}' if sub_type in CORE_TYPES else ''}) if flags{number} & (1 << {index}) else []\n " else: write_types += "\n " write_types += f"if self.{arg_name} is not None:\n " - write_types += f"b.write(self.{arg_name}.write())\n " + write_types += f"self.{arg_name}.write(b)\n " read_types += "\n " read_types += f"{arg_name} = TLObject.read(b) if flags{number} & (1 << {index}) else None\n " @@ -476,7 +476,7 @@ def start() -> None: # noqa: C901 write_types += "\n " if arg_type in CORE_TYPES: write_types += ( - f"b.write({arg_type.title()}(self.{arg_name}))\n " + f"{arg_type.title()}.write(self.{arg_name}, b)\n " ) read_types += "\n " @@ -486,12 +486,12 @@ def start() -> None: # noqa: C901 elif "vector" in arg_type.lower(): sub_type = arg_type.split("<")[1][:-1] - write_types += f"b.write(Vector(self.{arg_name}{f', {sub_type.title()}' if sub_type in CORE_TYPES else ''}))\n " + write_types += f"Vector.write(self.{arg_name}, {sub_type.title() if sub_type in CORE_TYPES else 'None'}, b)\n " read_types += "\n " read_types += f"{arg_name} = TLObject.read(b{f', {sub_type.title()}' if sub_type in CORE_TYPES else ''})\n " else: - write_types += f"b.write(self.{arg_name}.write())\n " + write_types += f"self.{arg_name}.write(b)\n " read_types += "\n " read_types += f"{arg_name} = TLObject.read(b)\n " diff --git a/compiler/api/template/combinator.txt b/compiler/api/template/combinator.txt index 379b3fb9..dbd1f763 100644 --- a/compiler/api/template/combinator.txt +++ b/compiler/api/template/combinator.txt @@ -25,9 +25,15 @@ class {name}(TLObject): # type: ignore {read_types} return {name}({return_arguments}) - def write(self, *args) -> bytes: - b = BytesIO() - b.write(Int(self.ID, False)) + def write(self, b: BytesIO = None) -> bytes: + is_top = b is None + + if is_top: + b = BytesIO() + + Int.write(self.ID, b, False) {write_types} - return b.getvalue() + + if is_top: + return b.getvalue() diff --git a/pyrogram/raw/core/future_salt.py b/pyrogram/raw/core/future_salt.py index 615b91db..2787aede 100644 --- a/pyrogram/raw/core/future_salt.py +++ b/pyrogram/raw/core/future_salt.py @@ -27,11 +27,15 @@ def read(data: BytesIO, *args: Any) -> FutureSalt: # noqa: ARG004 return FutureSalt(valid_since, valid_until, salt) - def write(self, *args: Any) -> bytes: # noqa: ARG002 - b = BytesIO() + def write(self, b: BytesIO = None) -> bytes: + is_top = b is None - b.write(Int(self.valid_since)) - b.write(Int(self.valid_until)) - b.write(Long(self.salt)) + if is_top: + b = BytesIO() - return b.getvalue() + Int.write(self.valid_since, b) + Int.write(self.valid_until, b) + Long.write(self.salt, b) + + if is_top: + return b.getvalue() diff --git a/pyrogram/raw/core/future_salts.py b/pyrogram/raw/core/future_salts.py index beb8a4a4..6922b9dd 100644 --- a/pyrogram/raw/core/future_salts.py +++ b/pyrogram/raw/core/future_salts.py @@ -30,18 +30,22 @@ def read(data: BytesIO, *args: Any) -> FutureSalts: # noqa: ARG004 return FutureSalts(req_msg_id, now, salts) - def write(self, *args: Any) -> bytes: # noqa: ARG002 - b = BytesIO() + def write(self, b: BytesIO = None) -> bytes: + is_top = b is None - b.write(Int(self.ID, False)) + if is_top: + b = BytesIO() - b.write(Long(self.req_msg_id)) - b.write(Int(self.now)) + Int.write(self.ID, b, False) + + Long.write(self.req_msg_id, b) + Int.write(self.now, b) count = len(self.salts) - b.write(Int(count)) + Int.write(count, b) for salt in self.salts: - b.write(salt.write()) + salt.write(b) - return b.getvalue() + if is_top: + return b.getvalue() diff --git a/pyrogram/raw/core/gzip_packed.py b/pyrogram/raw/core/gzip_packed.py index 1cd5cf0f..ec9d0e0f 100644 --- a/pyrogram/raw/core/gzip_packed.py +++ b/pyrogram/raw/core/gzip_packed.py @@ -27,11 +27,14 @@ def read(data: BytesIO, *args: Any) -> GzipPacked: # noqa: ARG004 TLObject.read(BytesIO(decompress(Bytes.read(data)))), ) - def write(self, *args: Any) -> bytes: # noqa: ARG002 - b = BytesIO() + def write(self, b: BytesIO = None) -> bytes: + is_top = b is None - b.write(Int(self.ID, False)) + if is_top: + b = BytesIO() - b.write(Bytes(compress(self.packed_data.write()))) + Int.write(self.ID, b, False) + Bytes.write(compress(self.packed_data.write()), b) - return b.getvalue() + if is_top: + return b.getvalue() diff --git a/pyrogram/raw/core/message.py b/pyrogram/raw/core/message.py index 98a7d466..531fb8b7 100644 --- a/pyrogram/raw/core/message.py +++ b/pyrogram/raw/core/message.py @@ -35,12 +35,16 @@ def read(data: BytesIO, *args: Any) -> Message: # noqa: ARG004 return Message(TLObject.read(BytesIO(body)), msg_id, seq_no, length) - def write(self, *args: Any) -> bytes: # noqa: ARG002 - b = BytesIO() + def write(self, b: BytesIO = None) -> bytes: + is_top = b is None - b.write(Long(self.msg_id)) - b.write(Int(self.seq_no)) - b.write(Int(self.length)) - b.write(self.body.write()) + if is_top: + b = BytesIO() - return b.getvalue() + Long.write(self.msg_id, b) + Int.write(self.seq_no, b) + Int.write(self.length, b) + self.body.write(b) + + if is_top: + return b.getvalue() diff --git a/pyrogram/raw/core/msg_container.py b/pyrogram/raw/core/msg_container.py index 4748922b..1234c21d 100644 --- a/pyrogram/raw/core/msg_container.py +++ b/pyrogram/raw/core/msg_container.py @@ -23,15 +23,19 @@ def read(data: BytesIO, *args: Any) -> MsgContainer: # noqa: ARG004 count = Int.read(data) return MsgContainer([Message.read(data) for _ in range(count)]) - def write(self, *args: Any) -> bytes: # noqa: ARG002 - b = BytesIO() + def write(self, b: BytesIO = None) -> bytes: + is_top = b is None - b.write(Int(self.ID, False)) + if is_top: + b = BytesIO() + + Int.write(self.ID, b, False) count = len(self.messages) - b.write(Int(count)) + Int.write(count, b) for message in self.messages: - b.write(message.write()) + message.write(b) - return b.getvalue() + if is_top: + return b.getvalue() diff --git a/pyrogram/raw/core/primitives/bool.py b/pyrogram/raw/core/primitives/bool.py index 19a3d51c..ce60368c 100644 --- a/pyrogram/raw/core/primitives/bool.py +++ b/pyrogram/raw/core/primitives/bool.py @@ -1,12 +1,10 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any +from io import BytesIO +from typing import Any from pyrogram.raw.core.tl_object import TLObject -if TYPE_CHECKING: - from io import BytesIO - class BoolFalse(bytes, TLObject): ID = 0xBC799737 @@ -17,13 +15,16 @@ def read(cls, *args: Any) -> bool: # noqa: ARG003 return cls.value def __new__(cls) -> bytes: # type: ignore - return cls.ID.to_bytes(4, "little") + return b"\x37\x97\x79\xbc" class BoolTrue(BoolFalse): ID = 0x997275B5 value = True + def __new__(cls) -> bytes: # type: ignore + return b"\xb5\x75\x72\x99" + class Bool(bytes, TLObject): @classmethod @@ -32,3 +33,7 @@ def read(cls, data: BytesIO, *args: Any) -> bool: # noqa: ARG003 def __new__(cls, value: bool) -> bytes: # type: ignore return BoolTrue() if value else BoolFalse() + + @classmethod + def write(cls, value: bool, b: BytesIO): + b.write(BoolTrue() if value else BoolFalse()) diff --git a/pyrogram/raw/core/primitives/bytes.py b/pyrogram/raw/core/primitives/bytes.py index e262ab2c..6d16cfe9 100644 --- a/pyrogram/raw/core/primitives/bytes.py +++ b/pyrogram/raw/core/primitives/bytes.py @@ -1,12 +1,10 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any +from io import BytesIO +from typing import Any from pyrogram.raw.core.tl_object import TLObject -if TYPE_CHECKING: - from io import BytesIO - class Bytes(bytes, TLObject): @classmethod @@ -24,10 +22,20 @@ def read(cls, data: BytesIO, *args: Any) -> bytes: # noqa: ARG003 return x def __new__(cls, value: bytes) -> bytes: # type: ignore + b = BytesIO() + cls.write(value, b) + return b.getvalue() + + @classmethod + def write(cls, value: bytes, b: BytesIO): length = len(value) if length <= 253: - return bytes([length]) + value + bytes(-(length + 1) % 4) - return ( - bytes([254]) + length.to_bytes(3, "little") + value + bytes(-length % 4) - ) + b.write(bytes([length])) + b.write(value) + b.write(bytes(-(length + 1) % 4)) + else: + b.write(bytes([254])) + b.write(length.to_bytes(3, "little")) + b.write(value) + b.write(bytes(-length % 4)) diff --git a/pyrogram/raw/core/primitives/double.py b/pyrogram/raw/core/primitives/double.py index bb9a2932..bd7e0fb3 100644 --- a/pyrogram/raw/core/primitives/double.py +++ b/pyrogram/raw/core/primitives/double.py @@ -1,13 +1,11 @@ from __future__ import annotations +from io import BytesIO from struct import pack, unpack -from typing import TYPE_CHECKING, Any, cast +from typing import Any, cast from pyrogram.raw.core.tl_object import TLObject -if TYPE_CHECKING: - from io import BytesIO - class Double(bytes, TLObject): @classmethod @@ -16,3 +14,7 @@ def read(cls, data: BytesIO, *args: Any) -> float: # noqa: ARG003 def __new__(cls, value: float) -> bytes: # type: ignore return pack("d", value) + + @classmethod + def write(cls, value: float, b: BytesIO): + b.write(pack("d", value)) diff --git a/pyrogram/raw/core/primitives/int.py b/pyrogram/raw/core/primitives/int.py index f4efc60d..a1e2b176 100644 --- a/pyrogram/raw/core/primitives/int.py +++ b/pyrogram/raw/core/primitives/int.py @@ -1,12 +1,10 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any +from io import BytesIO +from typing import Any from pyrogram.raw.core.tl_object import TLObject -if TYPE_CHECKING: - from io import BytesIO - class Int(bytes, TLObject): SIZE = 4 @@ -23,6 +21,10 @@ def read( def __new__(cls, value: int, signed: bool = True) -> bytes: return value.to_bytes(cls.SIZE, "little", signed=signed) + @classmethod + def write(cls, value: int, b: BytesIO, signed: bool = True): + b.write(value.to_bytes(cls.SIZE, "little", signed=signed)) + class Long(Int): SIZE = 8 diff --git a/pyrogram/raw/core/primitives/string.py b/pyrogram/raw/core/primitives/string.py index eb16bd43..33d2aa6a 100644 --- a/pyrogram/raw/core/primitives/string.py +++ b/pyrogram/raw/core/primitives/string.py @@ -1,12 +1,10 @@ from __future__ import annotations -from typing import TYPE_CHECKING, cast +from io import BytesIO +from typing import cast from .bytes import Bytes -if TYPE_CHECKING: - from io import BytesIO - class String(Bytes): @classmethod @@ -17,3 +15,7 @@ def read(cls, data: BytesIO, *args) -> str: # noqa: ARG003 def __new__(cls, value: str) -> bytes: return super().__new__(cls, value.encode()) + + @classmethod + def write(cls, value: str, b: BytesIO): + Bytes.write(value.encode(), b) diff --git a/pyrogram/raw/core/primitives/vector.py b/pyrogram/raw/core/primitives/vector.py index 37e5acd8..bb366293 100644 --- a/pyrogram/raw/core/primitives/vector.py +++ b/pyrogram/raw/core/primitives/vector.py @@ -1,6 +1,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, cast +from io import BytesIO +from typing import Any, cast from pyrogram.raw.core.list import List from pyrogram.raw.core.tl_object import TLObject @@ -8,9 +9,6 @@ from .bool import Bool, BoolFalse, BoolTrue from .int import Int, Long -if TYPE_CHECKING: - from io import BytesIO - class Vector(bytes, TLObject): ID = 0x1CB5C415 @@ -43,7 +41,22 @@ def read(cls, data: BytesIO, t: Any = None, *args: Any) -> List: # noqa: ARG003 ) def __new__(cls, value: list, t: Any = None) -> bytes: # type: ignore - return b"".join( - [Int(cls.ID, False), Int(len(value))] - + [cast("bytes", t(i)) if t else i.write() for i in value], - ) + b = BytesIO() + cls.write(value, t, b) + return b.getvalue() + + @classmethod + def write(cls, value: list, t: Any = None, b: BytesIO = None) -> bytes | None: + if b is None: + return cls(value, t) + + Int.write(cls.ID, b, False) + Int.write(len(value), b) + + for i in value: + if t: + t.write(i, b) + else: + i.write(b) + + return None diff --git a/pyrogram/raw/core/tl_object.py b/pyrogram/raw/core/tl_object.py index 4f28fc3d..052c1e32 100644 --- a/pyrogram/raw/core/tl_object.py +++ b/pyrogram/raw/core/tl_object.py @@ -1,13 +1,11 @@ from __future__ import annotations +from io import BytesIO from json import dumps -from typing import TYPE_CHECKING, Any, cast +from typing import Any, cast from pyrogram.raw.all import objects -if TYPE_CHECKING: - from io import BytesIO - class TLObject: __slots__: list[str] = [] @@ -21,8 +19,8 @@ def read(cls, b: BytesIO, *args: Any) -> Any: *args, ) - def write(self, *args: Any) -> bytes: - pass + def write(self, b: BytesIO = None) -> bytes: + return b"" @staticmethod def default(obj: TLObject) -> str | dict[str, str]: From b4c2b2121b4fc738aafdf9ac43a7996ea61caf06 Mon Sep 17 00:00:00 2001 From: 5hojib Date: Sat, 14 Feb 2026 06:22:31 +0000 Subject: [PATCH 19/22] InkyPinkyPonky [no ci] Signed-off-by: 5hojib --- pyrogram/raw/core/future_salt.py | 3 ++- pyrogram/raw/core/future_salts.py | 3 ++- pyrogram/raw/core/gzip_packed.py | 3 ++- pyrogram/raw/core/message.py | 3 ++- pyrogram/raw/core/msg_container.py | 3 ++- pyrogram/raw/core/primitives/bool.py | 6 ++++-- pyrogram/raw/core/primitives/double.py | 6 ++++-- pyrogram/raw/core/primitives/int.py | 6 ++++-- pyrogram/raw/core/primitives/string.py | 6 ++++-- pyrogram/raw/core/primitives/vector.py | 6 ++++-- pyrogram/raw/core/tl_object.py | 8 +++++--- uv.lock | 12 ++++++------ 12 files changed, 41 insertions(+), 24 deletions(-) diff --git a/pyrogram/raw/core/future_salt.py b/pyrogram/raw/core/future_salt.py index 2787aede..be191c88 100644 --- a/pyrogram/raw/core/future_salt.py +++ b/pyrogram/raw/core/future_salt.py @@ -27,7 +27,7 @@ def read(data: BytesIO, *args: Any) -> FutureSalt: # noqa: ARG004 return FutureSalt(valid_since, valid_until, salt) - def write(self, b: BytesIO = None) -> bytes: + def write(self, b: BytesIO | None = None) -> bytes: is_top = b is None if is_top: @@ -39,3 +39,4 @@ def write(self, b: BytesIO = None) -> bytes: if is_top: return b.getvalue() + return None diff --git a/pyrogram/raw/core/future_salts.py b/pyrogram/raw/core/future_salts.py index 6922b9dd..a40e480a 100644 --- a/pyrogram/raw/core/future_salts.py +++ b/pyrogram/raw/core/future_salts.py @@ -30,7 +30,7 @@ def read(data: BytesIO, *args: Any) -> FutureSalts: # noqa: ARG004 return FutureSalts(req_msg_id, now, salts) - def write(self, b: BytesIO = None) -> bytes: + def write(self, b: BytesIO | None = None) -> bytes: is_top = b is None if is_top: @@ -49,3 +49,4 @@ def write(self, b: BytesIO = None) -> bytes: if is_top: return b.getvalue() + return None diff --git a/pyrogram/raw/core/gzip_packed.py b/pyrogram/raw/core/gzip_packed.py index ec9d0e0f..3c4151c5 100644 --- a/pyrogram/raw/core/gzip_packed.py +++ b/pyrogram/raw/core/gzip_packed.py @@ -27,7 +27,7 @@ def read(data: BytesIO, *args: Any) -> GzipPacked: # noqa: ARG004 TLObject.read(BytesIO(decompress(Bytes.read(data)))), ) - def write(self, b: BytesIO = None) -> bytes: + def write(self, b: BytesIO | None = None) -> bytes: is_top = b is None if is_top: @@ -38,3 +38,4 @@ def write(self, b: BytesIO = None) -> bytes: if is_top: return b.getvalue() + return None diff --git a/pyrogram/raw/core/message.py b/pyrogram/raw/core/message.py index 531fb8b7..27a935eb 100644 --- a/pyrogram/raw/core/message.py +++ b/pyrogram/raw/core/message.py @@ -35,7 +35,7 @@ def read(data: BytesIO, *args: Any) -> Message: # noqa: ARG004 return Message(TLObject.read(BytesIO(body)), msg_id, seq_no, length) - def write(self, b: BytesIO = None) -> bytes: + def write(self, b: BytesIO | None = None) -> bytes: is_top = b is None if is_top: @@ -48,3 +48,4 @@ def write(self, b: BytesIO = None) -> bytes: if is_top: return b.getvalue() + return None diff --git a/pyrogram/raw/core/msg_container.py b/pyrogram/raw/core/msg_container.py index 1234c21d..bf41cf2b 100644 --- a/pyrogram/raw/core/msg_container.py +++ b/pyrogram/raw/core/msg_container.py @@ -23,7 +23,7 @@ def read(data: BytesIO, *args: Any) -> MsgContainer: # noqa: ARG004 count = Int.read(data) return MsgContainer([Message.read(data) for _ in range(count)]) - def write(self, b: BytesIO = None) -> bytes: + def write(self, b: BytesIO | None = None) -> bytes: is_top = b is None if is_top: @@ -39,3 +39,4 @@ def write(self, b: BytesIO = None) -> bytes: if is_top: return b.getvalue() + return None diff --git a/pyrogram/raw/core/primitives/bool.py b/pyrogram/raw/core/primitives/bool.py index ce60368c..4fa1f600 100644 --- a/pyrogram/raw/core/primitives/bool.py +++ b/pyrogram/raw/core/primitives/bool.py @@ -1,10 +1,12 @@ from __future__ import annotations -from io import BytesIO -from typing import Any +from typing import TYPE_CHECKING, Any from pyrogram.raw.core.tl_object import TLObject +if TYPE_CHECKING: + from io import BytesIO + class BoolFalse(bytes, TLObject): ID = 0xBC799737 diff --git a/pyrogram/raw/core/primitives/double.py b/pyrogram/raw/core/primitives/double.py index bd7e0fb3..0da4c5c1 100644 --- a/pyrogram/raw/core/primitives/double.py +++ b/pyrogram/raw/core/primitives/double.py @@ -1,11 +1,13 @@ from __future__ import annotations -from io import BytesIO from struct import pack, unpack -from typing import Any, cast +from typing import TYPE_CHECKING, Any, cast from pyrogram.raw.core.tl_object import TLObject +if TYPE_CHECKING: + from io import BytesIO + class Double(bytes, TLObject): @classmethod diff --git a/pyrogram/raw/core/primitives/int.py b/pyrogram/raw/core/primitives/int.py index a1e2b176..e8110122 100644 --- a/pyrogram/raw/core/primitives/int.py +++ b/pyrogram/raw/core/primitives/int.py @@ -1,10 +1,12 @@ from __future__ import annotations -from io import BytesIO -from typing import Any +from typing import TYPE_CHECKING, Any from pyrogram.raw.core.tl_object import TLObject +if TYPE_CHECKING: + from io import BytesIO + class Int(bytes, TLObject): SIZE = 4 diff --git a/pyrogram/raw/core/primitives/string.py b/pyrogram/raw/core/primitives/string.py index 33d2aa6a..87b70b49 100644 --- a/pyrogram/raw/core/primitives/string.py +++ b/pyrogram/raw/core/primitives/string.py @@ -1,10 +1,12 @@ from __future__ import annotations -from io import BytesIO -from typing import cast +from typing import TYPE_CHECKING, cast from .bytes import Bytes +if TYPE_CHECKING: + from io import BytesIO + class String(Bytes): @classmethod diff --git a/pyrogram/raw/core/primitives/vector.py b/pyrogram/raw/core/primitives/vector.py index bb366293..bdc80fc9 100644 --- a/pyrogram/raw/core/primitives/vector.py +++ b/pyrogram/raw/core/primitives/vector.py @@ -1,7 +1,7 @@ from __future__ import annotations from io import BytesIO -from typing import Any, cast +from typing import Any from pyrogram.raw.core.list import List from pyrogram.raw.core.tl_object import TLObject @@ -46,7 +46,9 @@ def __new__(cls, value: list, t: Any = None) -> bytes: # type: ignore return b.getvalue() @classmethod - def write(cls, value: list, t: Any = None, b: BytesIO = None) -> bytes | None: + def write( + cls, value: list, t: Any = None, b: BytesIO | None = None + ) -> bytes | None: if b is None: return cls(value, t) diff --git a/pyrogram/raw/core/tl_object.py b/pyrogram/raw/core/tl_object.py index 052c1e32..febd6627 100644 --- a/pyrogram/raw/core/tl_object.py +++ b/pyrogram/raw/core/tl_object.py @@ -1,11 +1,13 @@ from __future__ import annotations -from io import BytesIO from json import dumps -from typing import Any, cast +from typing import TYPE_CHECKING, Any, cast from pyrogram.raw.all import objects +if TYPE_CHECKING: + from io import BytesIO + class TLObject: __slots__: list[str] = [] @@ -19,7 +21,7 @@ def read(cls, b: BytesIO, *args: Any) -> Any: *args, ) - def write(self, b: BytesIO = None) -> bytes: + def write(self, b: BytesIO | None = None) -> bytes: return b"" @staticmethod diff --git a/uv.lock b/uv.lock index ed78c7c2..2cf890a7 100644 --- a/uv.lock +++ b/uv.lock @@ -706,11 +706,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.21.0" +version = "3.23.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/6b/cc63cdbff46eba1ce2fbd058e9699f99c43f7e604da15413ca0331040bff/filelock-3.21.0.tar.gz", hash = "sha256:48c739c73c6fcacd381ed532226991150947c4a76dcd674f84d6807fd55dbaf2", size = 31341, upload-time = "2026-02-12T15:40:48.544Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/f7/5e0dec5165ca52203d9f2c248db0a72dd31d6f15aad0b1e4a874f2187452/filelock-3.23.0.tar.gz", hash = "sha256:f64442f6f4707b9385049bb490be0bc48e3ab8e74ad27d4063435252917f4d4b", size = 32798, upload-time = "2026-02-14T02:53:58.703Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/ab/05190b5a64101fcb743bc63a034c0fac86a515c27c303c69221093565f28/filelock-3.21.0-py3-none-any.whl", hash = "sha256:0f90eee4c62101243df3007db3cf8fc3ebf1bb13541d3e72c687d6e0f3f7d531", size = 21381, upload-time = "2026-02-12T15:40:46.964Z" }, + { url = "https://files.pythonhosted.org/packages/0b/10/da216e25ef2f3c9dfa75574aa27f5f4c7e5fb5540308f04e4d8c4d834ecb/filelock-3.23.0-py3-none-any.whl", hash = "sha256:4203c3f43983c7c95e4bbb68786f184f6acb7300899bf99d686bb82d526bdf62", size = 22227, upload-time = "2026-02-14T02:53:56.122Z" }, ] [[package]] @@ -1112,11 +1112,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.6.0" +version = "4.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/474d0a8508029286b905622e6929470fb84337cfa08f9d09fbb624515249/platformdirs-4.6.0.tar.gz", hash = "sha256:4a13c2db1071e5846c3b3e04e5b095c0de36b2a24be9a3bc0145ca66fce4e328", size = 23433, upload-time = "2026-02-12T14:36:21.288Z" } +sdist = { url = "https://files.pythonhosted.org/packages/41/9b/20c8288dc591129bf9dd7be2c91aec6ef23e450605c3403716bd6c74833e/platformdirs-4.8.0.tar.gz", hash = "sha256:c1d4a51ab04087041dd602707fbe7ee8b62b64e590f30e336e5c99c2d0c542d2", size = 27607, upload-time = "2026-02-14T01:52:03.451Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/10/1b0dcf51427326f70e50d98df21b18c228117a743a1fc515a42f8dc7d342/platformdirs-4.6.0-py3-none-any.whl", hash = "sha256:dd7f808d828e1764a22ebff09e60f175ee3c41876606a6132a688d809c7c9c73", size = 19549, upload-time = "2026-02-12T14:36:19.743Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f0/227a7d1b8d80ae55c4b47f271c0870dd7a153aa65353bf71921265df2300/platformdirs-4.8.0-py3-none-any.whl", hash = "sha256:1c1328b4d2ea997bbcb904175a9bde14e824a3fa79f751ea3888d63d7d727557", size = 20647, upload-time = "2026-02-14T01:52:01.915Z" }, ] [[package]] From 076367eeb4d9be26aaa2d3505fbdf859495036ec Mon Sep 17 00:00:00 2001 From: Mehedi Hasan Shojib Date: Sat, 14 Feb 2026 12:26:12 +0600 Subject: [PATCH 20/22] Update __init__.py --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index b9b89f5e..24c21ea6 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -1,6 +1,6 @@ from __future__ import annotations -__version__ = "v0.2.224.4" +__version__ = "v0.3.222" __license__ = "MIT License" from concurrent.futures.thread import ThreadPoolExecutor From d127da1f64ebd59d6fdb37e5029ed7695b217067 Mon Sep 17 00:00:00 2001 From: 5hojib Date: Sat, 14 Feb 2026 14:39:25 +0600 Subject: [PATCH 21/22] re --- compiler/api/compiler.py | 14 ++++++------ compiler/api/template/combinator.txt | 14 ++++-------- pyrogram/raw/core/future_salt.py | 17 +++++--------- pyrogram/raw/core/future_salts.py | 21 +++++++---------- pyrogram/raw/core/gzip_packed.py | 14 +++++------- pyrogram/raw/core/message.py | 19 ++++++---------- pyrogram/raw/core/msg_container.py | 17 +++++--------- pyrogram/raw/core/primitives/bool.py | 9 +------- pyrogram/raw/core/primitives/bytes.py | 24 +++++++------------- pyrogram/raw/core/primitives/double.py | 4 ---- pyrogram/raw/core/primitives/int.py | 4 ---- pyrogram/raw/core/primitives/string.py | 4 ---- pyrogram/raw/core/primitives/vector.py | 31 +++++++------------------- pyrogram/raw/core/tl_object.py | 4 ++-- uv.lock | 12 +++++----- 15 files changed, 68 insertions(+), 140 deletions(-) diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index da54fffc..e584d55b 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -432,7 +432,7 @@ def start() -> None: # noqa: C901 [ f"{arg_name} = 0", "\n ".join(write_flags), - f"Int.write({arg_name}, b)\n ", + f"b.write(Int({arg_name}))\n ", ], ) @@ -451,7 +451,7 @@ def start() -> None: # noqa: C901 write_types += "\n " write_types += f"if self.{arg_name} is not None:\n " write_types += ( - f"{flag_type.title()}.write(self.{arg_name}, b)\n " + f"b.write({flag_type.title()}(self.{arg_name}))\n " ) read_types += "\n " @@ -461,14 +461,14 @@ def start() -> None: # noqa: C901 write_types += "\n " write_types += f"if self.{arg_name} is not None:\n " - write_types += f"Vector.write(self.{arg_name}, {sub_type.title() if sub_type in CORE_TYPES else 'None'}, b)\n " + write_types += f"b.write(Vector(self.{arg_name}{f', {sub_type.title()}' if sub_type in CORE_TYPES else ''}))\n " read_types += "\n " read_types += f"{arg_name} = TLObject.read(b{f', {sub_type.title()}' if sub_type in CORE_TYPES else ''}) if flags{number} & (1 << {index}) else []\n " else: write_types += "\n " write_types += f"if self.{arg_name} is not None:\n " - write_types += f"self.{arg_name}.write(b)\n " + write_types += f"b.write(self.{arg_name}.write())\n " read_types += "\n " read_types += f"{arg_name} = TLObject.read(b) if flags{number} & (1 << {index}) else None\n " @@ -476,7 +476,7 @@ def start() -> None: # noqa: C901 write_types += "\n " if arg_type in CORE_TYPES: write_types += ( - f"{arg_type.title()}.write(self.{arg_name}, b)\n " + f"b.write({arg_type.title()}(self.{arg_name}))\n " ) read_types += "\n " @@ -486,12 +486,12 @@ def start() -> None: # noqa: C901 elif "vector" in arg_type.lower(): sub_type = arg_type.split("<")[1][:-1] - write_types += f"Vector.write(self.{arg_name}, {sub_type.title() if sub_type in CORE_TYPES else 'None'}, b)\n " + write_types += f"b.write(Vector(self.{arg_name}{f', {sub_type.title()}' if sub_type in CORE_TYPES else ''}))\n " read_types += "\n " read_types += f"{arg_name} = TLObject.read(b{f', {sub_type.title()}' if sub_type in CORE_TYPES else ''})\n " else: - write_types += f"self.{arg_name}.write(b)\n " + write_types += f"b.write(self.{arg_name}.write())\n " read_types += "\n " read_types += f"{arg_name} = TLObject.read(b)\n " diff --git a/compiler/api/template/combinator.txt b/compiler/api/template/combinator.txt index dbd1f763..379b3fb9 100644 --- a/compiler/api/template/combinator.txt +++ b/compiler/api/template/combinator.txt @@ -25,15 +25,9 @@ class {name}(TLObject): # type: ignore {read_types} return {name}({return_arguments}) - def write(self, b: BytesIO = None) -> bytes: - is_top = b is None - - if is_top: - b = BytesIO() - - Int.write(self.ID, b, False) + def write(self, *args) -> bytes: + b = BytesIO() + b.write(Int(self.ID, False)) {write_types} - - if is_top: - return b.getvalue() + return b.getvalue() diff --git a/pyrogram/raw/core/future_salt.py b/pyrogram/raw/core/future_salt.py index be191c88..615b91db 100644 --- a/pyrogram/raw/core/future_salt.py +++ b/pyrogram/raw/core/future_salt.py @@ -27,16 +27,11 @@ def read(data: BytesIO, *args: Any) -> FutureSalt: # noqa: ARG004 return FutureSalt(valid_since, valid_until, salt) - def write(self, b: BytesIO | None = None) -> bytes: - is_top = b is None + def write(self, *args: Any) -> bytes: # noqa: ARG002 + b = BytesIO() - if is_top: - b = BytesIO() + b.write(Int(self.valid_since)) + b.write(Int(self.valid_until)) + b.write(Long(self.salt)) - Int.write(self.valid_since, b) - Int.write(self.valid_until, b) - Long.write(self.salt, b) - - if is_top: - return b.getvalue() - return None + return b.getvalue() diff --git a/pyrogram/raw/core/future_salts.py b/pyrogram/raw/core/future_salts.py index a40e480a..beb8a4a4 100644 --- a/pyrogram/raw/core/future_salts.py +++ b/pyrogram/raw/core/future_salts.py @@ -30,23 +30,18 @@ def read(data: BytesIO, *args: Any) -> FutureSalts: # noqa: ARG004 return FutureSalts(req_msg_id, now, salts) - def write(self, b: BytesIO | None = None) -> bytes: - is_top = b is None + def write(self, *args: Any) -> bytes: # noqa: ARG002 + b = BytesIO() - if is_top: - b = BytesIO() + b.write(Int(self.ID, False)) - Int.write(self.ID, b, False) - - Long.write(self.req_msg_id, b) - Int.write(self.now, b) + b.write(Long(self.req_msg_id)) + b.write(Int(self.now)) count = len(self.salts) - Int.write(count, b) + b.write(Int(count)) for salt in self.salts: - salt.write(b) + b.write(salt.write()) - if is_top: - return b.getvalue() - return None + return b.getvalue() diff --git a/pyrogram/raw/core/gzip_packed.py b/pyrogram/raw/core/gzip_packed.py index 3c4151c5..1cd5cf0f 100644 --- a/pyrogram/raw/core/gzip_packed.py +++ b/pyrogram/raw/core/gzip_packed.py @@ -27,15 +27,11 @@ def read(data: BytesIO, *args: Any) -> GzipPacked: # noqa: ARG004 TLObject.read(BytesIO(decompress(Bytes.read(data)))), ) - def write(self, b: BytesIO | None = None) -> bytes: - is_top = b is None + def write(self, *args: Any) -> bytes: # noqa: ARG002 + b = BytesIO() - if is_top: - b = BytesIO() + b.write(Int(self.ID, False)) - Int.write(self.ID, b, False) - Bytes.write(compress(self.packed_data.write()), b) + b.write(Bytes(compress(self.packed_data.write()))) - if is_top: - return b.getvalue() - return None + return b.getvalue() diff --git a/pyrogram/raw/core/message.py b/pyrogram/raw/core/message.py index 27a935eb..98a7d466 100644 --- a/pyrogram/raw/core/message.py +++ b/pyrogram/raw/core/message.py @@ -35,17 +35,12 @@ def read(data: BytesIO, *args: Any) -> Message: # noqa: ARG004 return Message(TLObject.read(BytesIO(body)), msg_id, seq_no, length) - def write(self, b: BytesIO | None = None) -> bytes: - is_top = b is None + def write(self, *args: Any) -> bytes: # noqa: ARG002 + b = BytesIO() - if is_top: - b = BytesIO() + b.write(Long(self.msg_id)) + b.write(Int(self.seq_no)) + b.write(Int(self.length)) + b.write(self.body.write()) - Long.write(self.msg_id, b) - Int.write(self.seq_no, b) - Int.write(self.length, b) - self.body.write(b) - - if is_top: - return b.getvalue() - return None + return b.getvalue() diff --git a/pyrogram/raw/core/msg_container.py b/pyrogram/raw/core/msg_container.py index bf41cf2b..4748922b 100644 --- a/pyrogram/raw/core/msg_container.py +++ b/pyrogram/raw/core/msg_container.py @@ -23,20 +23,15 @@ def read(data: BytesIO, *args: Any) -> MsgContainer: # noqa: ARG004 count = Int.read(data) return MsgContainer([Message.read(data) for _ in range(count)]) - def write(self, b: BytesIO | None = None) -> bytes: - is_top = b is None + def write(self, *args: Any) -> bytes: # noqa: ARG002 + b = BytesIO() - if is_top: - b = BytesIO() - - Int.write(self.ID, b, False) + b.write(Int(self.ID, False)) count = len(self.messages) - Int.write(count, b) + b.write(Int(count)) for message in self.messages: - message.write(b) + b.write(message.write()) - if is_top: - return b.getvalue() - return None + return b.getvalue() diff --git a/pyrogram/raw/core/primitives/bool.py b/pyrogram/raw/core/primitives/bool.py index 4fa1f600..19a3d51c 100644 --- a/pyrogram/raw/core/primitives/bool.py +++ b/pyrogram/raw/core/primitives/bool.py @@ -17,16 +17,13 @@ def read(cls, *args: Any) -> bool: # noqa: ARG003 return cls.value def __new__(cls) -> bytes: # type: ignore - return b"\x37\x97\x79\xbc" + return cls.ID.to_bytes(4, "little") class BoolTrue(BoolFalse): ID = 0x997275B5 value = True - def __new__(cls) -> bytes: # type: ignore - return b"\xb5\x75\x72\x99" - class Bool(bytes, TLObject): @classmethod @@ -35,7 +32,3 @@ def read(cls, data: BytesIO, *args: Any) -> bool: # noqa: ARG003 def __new__(cls, value: bool) -> bytes: # type: ignore return BoolTrue() if value else BoolFalse() - - @classmethod - def write(cls, value: bool, b: BytesIO): - b.write(BoolTrue() if value else BoolFalse()) diff --git a/pyrogram/raw/core/primitives/bytes.py b/pyrogram/raw/core/primitives/bytes.py index 6d16cfe9..e262ab2c 100644 --- a/pyrogram/raw/core/primitives/bytes.py +++ b/pyrogram/raw/core/primitives/bytes.py @@ -1,10 +1,12 @@ from __future__ import annotations -from io import BytesIO -from typing import Any +from typing import TYPE_CHECKING, Any from pyrogram.raw.core.tl_object import TLObject +if TYPE_CHECKING: + from io import BytesIO + class Bytes(bytes, TLObject): @classmethod @@ -22,20 +24,10 @@ def read(cls, data: BytesIO, *args: Any) -> bytes: # noqa: ARG003 return x def __new__(cls, value: bytes) -> bytes: # type: ignore - b = BytesIO() - cls.write(value, b) - return b.getvalue() - - @classmethod - def write(cls, value: bytes, b: BytesIO): length = len(value) if length <= 253: - b.write(bytes([length])) - b.write(value) - b.write(bytes(-(length + 1) % 4)) - else: - b.write(bytes([254])) - b.write(length.to_bytes(3, "little")) - b.write(value) - b.write(bytes(-length % 4)) + return bytes([length]) + value + bytes(-(length + 1) % 4) + return ( + bytes([254]) + length.to_bytes(3, "little") + value + bytes(-length % 4) + ) diff --git a/pyrogram/raw/core/primitives/double.py b/pyrogram/raw/core/primitives/double.py index 0da4c5c1..bb9a2932 100644 --- a/pyrogram/raw/core/primitives/double.py +++ b/pyrogram/raw/core/primitives/double.py @@ -16,7 +16,3 @@ def read(cls, data: BytesIO, *args: Any) -> float: # noqa: ARG003 def __new__(cls, value: float) -> bytes: # type: ignore return pack("d", value) - - @classmethod - def write(cls, value: float, b: BytesIO): - b.write(pack("d", value)) diff --git a/pyrogram/raw/core/primitives/int.py b/pyrogram/raw/core/primitives/int.py index e8110122..f4efc60d 100644 --- a/pyrogram/raw/core/primitives/int.py +++ b/pyrogram/raw/core/primitives/int.py @@ -23,10 +23,6 @@ def read( def __new__(cls, value: int, signed: bool = True) -> bytes: return value.to_bytes(cls.SIZE, "little", signed=signed) - @classmethod - def write(cls, value: int, b: BytesIO, signed: bool = True): - b.write(value.to_bytes(cls.SIZE, "little", signed=signed)) - class Long(Int): SIZE = 8 diff --git a/pyrogram/raw/core/primitives/string.py b/pyrogram/raw/core/primitives/string.py index 87b70b49..eb16bd43 100644 --- a/pyrogram/raw/core/primitives/string.py +++ b/pyrogram/raw/core/primitives/string.py @@ -17,7 +17,3 @@ def read(cls, data: BytesIO, *args) -> str: # noqa: ARG003 def __new__(cls, value: str) -> bytes: return super().__new__(cls, value.encode()) - - @classmethod - def write(cls, value: str, b: BytesIO): - Bytes.write(value.encode(), b) diff --git a/pyrogram/raw/core/primitives/vector.py b/pyrogram/raw/core/primitives/vector.py index bdc80fc9..37e5acd8 100644 --- a/pyrogram/raw/core/primitives/vector.py +++ b/pyrogram/raw/core/primitives/vector.py @@ -1,7 +1,6 @@ from __future__ import annotations -from io import BytesIO -from typing import Any +from typing import TYPE_CHECKING, Any, cast from pyrogram.raw.core.list import List from pyrogram.raw.core.tl_object import TLObject @@ -9,6 +8,9 @@ from .bool import Bool, BoolFalse, BoolTrue from .int import Int, Long +if TYPE_CHECKING: + from io import BytesIO + class Vector(bytes, TLObject): ID = 0x1CB5C415 @@ -41,24 +43,7 @@ def read(cls, data: BytesIO, t: Any = None, *args: Any) -> List: # noqa: ARG003 ) def __new__(cls, value: list, t: Any = None) -> bytes: # type: ignore - b = BytesIO() - cls.write(value, t, b) - return b.getvalue() - - @classmethod - def write( - cls, value: list, t: Any = None, b: BytesIO | None = None - ) -> bytes | None: - if b is None: - return cls(value, t) - - Int.write(cls.ID, b, False) - Int.write(len(value), b) - - for i in value: - if t: - t.write(i, b) - else: - i.write(b) - - return None + return b"".join( + [Int(cls.ID, False), Int(len(value))] + + [cast("bytes", t(i)) if t else i.write() for i in value], + ) diff --git a/pyrogram/raw/core/tl_object.py b/pyrogram/raw/core/tl_object.py index febd6627..4f28fc3d 100644 --- a/pyrogram/raw/core/tl_object.py +++ b/pyrogram/raw/core/tl_object.py @@ -21,8 +21,8 @@ def read(cls, b: BytesIO, *args: Any) -> Any: *args, ) - def write(self, b: BytesIO | None = None) -> bytes: - return b"" + def write(self, *args: Any) -> bytes: + pass @staticmethod def default(obj: TLObject) -> str | dict[str, str]: diff --git a/uv.lock b/uv.lock index 2cf890a7..ed78c7c2 100644 --- a/uv.lock +++ b/uv.lock @@ -706,11 +706,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.23.0" +version = "3.21.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/f7/5e0dec5165ca52203d9f2c248db0a72dd31d6f15aad0b1e4a874f2187452/filelock-3.23.0.tar.gz", hash = "sha256:f64442f6f4707b9385049bb490be0bc48e3ab8e74ad27d4063435252917f4d4b", size = 32798, upload-time = "2026-02-14T02:53:58.703Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/6b/cc63cdbff46eba1ce2fbd058e9699f99c43f7e604da15413ca0331040bff/filelock-3.21.0.tar.gz", hash = "sha256:48c739c73c6fcacd381ed532226991150947c4a76dcd674f84d6807fd55dbaf2", size = 31341, upload-time = "2026-02-12T15:40:48.544Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/10/da216e25ef2f3c9dfa75574aa27f5f4c7e5fb5540308f04e4d8c4d834ecb/filelock-3.23.0-py3-none-any.whl", hash = "sha256:4203c3f43983c7c95e4bbb68786f184f6acb7300899bf99d686bb82d526bdf62", size = 22227, upload-time = "2026-02-14T02:53:56.122Z" }, + { url = "https://files.pythonhosted.org/packages/da/ab/05190b5a64101fcb743bc63a034c0fac86a515c27c303c69221093565f28/filelock-3.21.0-py3-none-any.whl", hash = "sha256:0f90eee4c62101243df3007db3cf8fc3ebf1bb13541d3e72c687d6e0f3f7d531", size = 21381, upload-time = "2026-02-12T15:40:46.964Z" }, ] [[package]] @@ -1112,11 +1112,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.8.0" +version = "4.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/9b/20c8288dc591129bf9dd7be2c91aec6ef23e450605c3403716bd6c74833e/platformdirs-4.8.0.tar.gz", hash = "sha256:c1d4a51ab04087041dd602707fbe7ee8b62b64e590f30e336e5c99c2d0c542d2", size = 27607, upload-time = "2026-02-14T01:52:03.451Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/474d0a8508029286b905622e6929470fb84337cfa08f9d09fbb624515249/platformdirs-4.6.0.tar.gz", hash = "sha256:4a13c2db1071e5846c3b3e04e5b095c0de36b2a24be9a3bc0145ca66fce4e328", size = 23433, upload-time = "2026-02-12T14:36:21.288Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f0/227a7d1b8d80ae55c4b47f271c0870dd7a153aa65353bf71921265df2300/platformdirs-4.8.0-py3-none-any.whl", hash = "sha256:1c1328b4d2ea997bbcb904175a9bde14e824a3fa79f751ea3888d63d7d727557", size = 20647, upload-time = "2026-02-14T01:52:01.915Z" }, + { url = "https://files.pythonhosted.org/packages/da/10/1b0dcf51427326f70e50d98df21b18c228117a743a1fc515a42f8dc7d342/platformdirs-4.6.0-py3-none-any.whl", hash = "sha256:dd7f808d828e1764a22ebff09e60f175ee3c41876606a6132a688d809c7c9c73", size = 19549, upload-time = "2026-02-12T14:36:19.743Z" }, ] [[package]] From 13f6c38e001488045cbd9a5639724d01afa1f09a Mon Sep 17 00:00:00 2001 From: 5hojib Date: Sat, 14 Feb 2026 08:39:50 +0000 Subject: [PATCH 22/22] InkyPinkyPonky [no ci] Signed-off-by: 5hojib --- uv.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/uv.lock b/uv.lock index ed78c7c2..2cf890a7 100644 --- a/uv.lock +++ b/uv.lock @@ -706,11 +706,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.21.0" +version = "3.23.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/6b/cc63cdbff46eba1ce2fbd058e9699f99c43f7e604da15413ca0331040bff/filelock-3.21.0.tar.gz", hash = "sha256:48c739c73c6fcacd381ed532226991150947c4a76dcd674f84d6807fd55dbaf2", size = 31341, upload-time = "2026-02-12T15:40:48.544Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/f7/5e0dec5165ca52203d9f2c248db0a72dd31d6f15aad0b1e4a874f2187452/filelock-3.23.0.tar.gz", hash = "sha256:f64442f6f4707b9385049bb490be0bc48e3ab8e74ad27d4063435252917f4d4b", size = 32798, upload-time = "2026-02-14T02:53:58.703Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/ab/05190b5a64101fcb743bc63a034c0fac86a515c27c303c69221093565f28/filelock-3.21.0-py3-none-any.whl", hash = "sha256:0f90eee4c62101243df3007db3cf8fc3ebf1bb13541d3e72c687d6e0f3f7d531", size = 21381, upload-time = "2026-02-12T15:40:46.964Z" }, + { url = "https://files.pythonhosted.org/packages/0b/10/da216e25ef2f3c9dfa75574aa27f5f4c7e5fb5540308f04e4d8c4d834ecb/filelock-3.23.0-py3-none-any.whl", hash = "sha256:4203c3f43983c7c95e4bbb68786f184f6acb7300899bf99d686bb82d526bdf62", size = 22227, upload-time = "2026-02-14T02:53:56.122Z" }, ] [[package]] @@ -1112,11 +1112,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.6.0" +version = "4.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/474d0a8508029286b905622e6929470fb84337cfa08f9d09fbb624515249/platformdirs-4.6.0.tar.gz", hash = "sha256:4a13c2db1071e5846c3b3e04e5b095c0de36b2a24be9a3bc0145ca66fce4e328", size = 23433, upload-time = "2026-02-12T14:36:21.288Z" } +sdist = { url = "https://files.pythonhosted.org/packages/41/9b/20c8288dc591129bf9dd7be2c91aec6ef23e450605c3403716bd6c74833e/platformdirs-4.8.0.tar.gz", hash = "sha256:c1d4a51ab04087041dd602707fbe7ee8b62b64e590f30e336e5c99c2d0c542d2", size = 27607, upload-time = "2026-02-14T01:52:03.451Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/10/1b0dcf51427326f70e50d98df21b18c228117a743a1fc515a42f8dc7d342/platformdirs-4.6.0-py3-none-any.whl", hash = "sha256:dd7f808d828e1764a22ebff09e60f175ee3c41876606a6132a688d809c7c9c73", size = 19549, upload-time = "2026-02-12T14:36:19.743Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f0/227a7d1b8d80ae55c4b47f271c0870dd7a153aa65353bf71921265df2300/platformdirs-4.8.0-py3-none-any.whl", hash = "sha256:1c1328b4d2ea997bbcb904175a9bde14e824a3fa79f751ea3888d63d7d727557", size = 20647, upload-time = "2026-02-14T01:52:01.915Z" }, ] [[package]]