From 9fe0b7e7b0f0de4b44df41cbd2381c8db28e236b Mon Sep 17 00:00:00 2001 From: 9FS Date: Sat, 13 Jan 2024 19:29:00 +0000 Subject: [PATCH] upgraded to a general minecraft server monitor program; added settings.json; updated readme; updated .gitignore --- .gitignore | 1 + poetry.lock | 552 ++++++++++++++++++------------------ pyproject.toml | 2 +- readme.md | 23 +- readme.pdf | Bin 42131 -> 120704 bytes requirements.txt | 19 +- src/convert_to_ip_global.py | 61 ---- src/convert_to_ip_public.py | 83 ++++++ src/main.py | 132 +++++---- src/main_outer.py | 14 +- 10 files changed, 460 insertions(+), 427 deletions(-) delete mode 100644 src/convert_to_ip_global.py create mode 100644 src/convert_to_ip_public.py diff --git a/.gitignore b/.gitignore index 417c4da..5cc2c95 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ .hypothesis/ .pytest_cache/ doc_templates/ +config/ log/ Dockerfile diff --git a/poetry.lock b/poetry.lock index 1b094d6..82d84c6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,111 +2,98 @@ [[package]] name = "aiohttp" -version = "3.8.6" +version = "3.9.1" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, - {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, - {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, - {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, - {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, - {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, - {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, - {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, - {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, - {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, - {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, - {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, - {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, - {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, - {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, - {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, - {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, - {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, + {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, + {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, + {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, + {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, + {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, + {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, + {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, + {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, + {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, + {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, + {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, ] [package.dependencies] aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] +speedups = ["Brotli", "aiodns", "brotlicffi"] [[package]] name = "aiosignal" @@ -122,17 +109,6 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - [[package]] name = "asyncio-dgram" version = "2.1.2" @@ -149,31 +125,32 @@ test = ["black (>=20.8b1)", "flake8 (>=3.8.3)", "mypy (>=0.812)", "mypy-extensio [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] @@ -341,91 +318,107 @@ wmi = ["wmi (>=1.5.1,<2.0.0)"] [[package]] name = "frozenlist" -version = "1.4.0" +version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] [[package]] name = "hypothesis" -version = "6.88.3" +version = "6.93.0" description = "A library for property-based testing" optional = false python-versions = ">=3.8" files = [ - {file = "hypothesis-6.88.3-py3-none-any.whl", hash = "sha256:781ce6fd35e11ca77ad132a20cebe66fd215f56678f8efd6b87013b14500151b"}, - {file = "hypothesis-6.88.3.tar.gz", hash = "sha256:5cfda253e34726c98ab04b9595fca15677ee9f4f6055146aea25a6278d71f6f1"}, + {file = "hypothesis-6.93.0-py3-none-any.whl", hash = "sha256:bfe6173e36c8cf0779a79de757a8a7151568b2703cb14dcbc186517c7a79144b"}, + {file = "hypothesis-6.93.0.tar.gz", hash = "sha256:e9ceaa5bbd244471fa1c28272fb2b0c68bb6ee014473394d63519ed02bd2d4de"}, ] [package.dependencies] -attrs = ">=19.2.0" +attrs = ">=22.2.0" sortedcontainers = ">=2.1.0,<3.0.0" [package.extras] -all = ["backports.zoneinfo (>=0.2.1)", "black (>=19.10b0)", "click (>=7.0)", "django (>=3.2)", "dpcontracts (>=0.4)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.17.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2023.3)"] +all = ["backports.zoneinfo (>=0.2.1)", "black (>=19.10b0)", "click (>=7.0)", "django (>=3.2)", "dpcontracts (>=0.4)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.17.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2023.4)"] cli = ["black (>=19.10b0)", "click (>=7.0)", "rich (>=9.0.0)"] codemods = ["libcst (>=0.3.16)"] dateutil = ["python-dateutil (>=1.4)"] @@ -438,17 +431,17 @@ pandas = ["pandas (>=1.1)"] pytest = ["pytest (>=4.6)"] pytz = ["pytz (>=2014.1)"] redis = ["redis (>=3.0.0)"] -zoneinfo = ["backports.zoneinfo (>=0.2.1)", "tzdata (>=2023.3)"] +zoneinfo = ["backports.zoneinfo (>=0.2.1)", "tzdata (>=2023.4)"] [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] @@ -464,13 +457,13 @@ files = [ [[package]] name = "kfsconfig" -version = "1.0.2" +version = "1.1.0" description = "" optional = false python-versions = ">=3.11.0,<4.0.0" files = [ - {file = "kfsconfig-1.0.2-py3-none-any.whl", hash = "sha256:37d9c556b4016575cffb9e45bb08f018bdc4bc1bee962808c17313eeec82f140"}, - {file = "kfsconfig-1.0.2.tar.gz", hash = "sha256:6c7e92f12bc1dddc4eb629ca0c2bef6c72832dfb1c4425baa5b4f336369ff6c2"}, + {file = "kfsconfig-1.1.0-py3-none-any.whl", hash = "sha256:e6f80028db4346cbf2e8303d8f8f6276f83f437c4702fd4f723292272023027b"}, + {file = "kfsconfig-1.1.0.tar.gz", hash = "sha256:f4db6a35813b81e84bcf56f1de42d6db111542aa0ee79caa6e54ccff9e825234"}, ] [package.dependencies] @@ -520,18 +513,18 @@ files = [ [[package]] name = "mcstatus" -version = "11.0.1" +version = "11.1.1" description = "A library to query Minecraft Servers for their status and capabilities." optional = false python-versions = ">=3.8.1,<4" files = [ - {file = "mcstatus-11.0.1-py3-none-any.whl", hash = "sha256:813c403ddd32782f6734021a536154aba5daaf190f19f45325a931dc273a137a"}, - {file = "mcstatus-11.0.1.tar.gz", hash = "sha256:489c5424693bc41fc443d4194d40cc09849eb6af3f908751366131e73b3ef0ef"}, + {file = "mcstatus-11.1.1-py3-none-any.whl", hash = "sha256:7f5f7f44fa1d17c4e05c0ae94ecc114d9d146ef572e7dd9f2d9da72771ce135c"}, + {file = "mcstatus-11.1.1.tar.gz", hash = "sha256:b2856ee4032faf810b0c6af10a141381e6115caf14a7348c47edc8e3da84f5d4"}, ] [package.dependencies] asyncio-dgram = ">=2.1.2,<3.0.0" -dnspython = ">=2.3.0,<3.0.0" +dnspython = ">=2.4.2,<3.0.0" [[package]] name = "multidict" @@ -644,13 +637,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pytest" -version = "7.4.3" +version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, ] [package.dependencies] @@ -696,102 +689,117 @@ files = [ [[package]] name = "urllib3" -version = "2.0.7" +version = "2.1.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, - {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "yarl" -version = "1.9.2" +version = "1.9.4" description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, ] [package.dependencies] diff --git a/pyproject.toml b/pyproject.toml index 4950a4a..5c34a64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ license = "MIT" name = "x" readme = "readme.md" repository = "https://github.com/9-FS/2023-05-07-Minecraft-Server-Status-for-Discord" -version = "1.1.2" +version = "2.0.0" [tool.poetry.dependencies] aiohttp = "^3.8.5" diff --git a/readme.md b/readme.md index 0ce7938..0337a0b 100644 --- a/readme.md +++ b/readme.md @@ -11,32 +11,31 @@ Author: "구FS" - [1. General](#1-general) - [2. How to Install](#2-how-to-install) -- [3. Planned Features](#3-planned-features) ## 1. General -This bot loads a minecraft server IP from `minecraft_server_ip.config`, connects to the discord bot with token `discord_bot.token`, and displays the current status of the specified minecraft server via its rich presence title and bot status. It states either: -- offline, current global IP -- current and maximum possible players online, a player name list should there be any online, current global IP +This discord bot queries the minecraft server specified in "./config/settings.json" `minecraft_server_ip`:`minecraft_server_port` and displays the current status of the minecraft server via its rich presence title and bot status. It states either: +- offline, current IP or domain +- current and maximum possible players online, a player name list should there be any online, current IP or domain + +By default, it just displays the given IP or domain. If `convert_to_ip_global` is set to `true`, it will convert the given domain or IP to a public IP for its display. This is useful if you are hosting your server on a local machine and want to display the public IP of your router. Be advised that the given IP or domain in `minecraft_server_ip` will still be used for the query. If you convert the given IP or domain to a public IP, you can choose the preferred IP version with `ip_public_version`. This version is not guaranteed though and will fallback to another version if the preferred version is not available with "https://{ip_public_version}.ident.me/". `minecraft_server_port` can be used to manually specify the port, but it can also be left empty and will default to 25565. + +You can specify a bot channel with `discord_bot_channel_name`. If you write "ip" into that channel, the bot will answer with the current display IP or domain for easy copy and paste. ## 2. How to Install As far as I know, there is currently no way of having rich presences on a per server basis. That's why you can not use this bot by just inviting it to your server. To use this bot: 1. Download the source code or download a release `Minecraft Server Status for Discord.exe`. -1. Copy your discord bot token into `discord_bot.token`. +1. Copy your discord bot token into "./config/settings.json" `discord_bot_token`. 1. Create a discord application [here](https://discord.com/developers/applications). 1. Create your bot. 1. Add it to your server. 1. Copy your token into `discord_bot.token`. If you don't know how to do these steps, I recommend [this tutorial](https://www.writebots.com/discord-bot-token/). -1. Copy your minecraft server IP with port into `minecraft_server_ip.config`. -1. Execute `main_outer.py` with python or execute the compiled `Metric METAR for Discord.exe`. +1. Copy your minecraft server IP or domain into "./config/settings.json" `minecraft_server_ip`. +1. Execute `main_outer.py` with python or execute the compiled program.
- - -## 3. Planned Features - -I want to move the current IP and player list into a separate, multiline text field. I think `discord.Activites.details` should be what I'm looking for, but I can't make it work for some reason. Any help would be greatly appreciated! \ No newline at end of file + \ No newline at end of file diff --git a/readme.pdf b/readme.pdf index 2583ad98a618ea2d84c8b53b5f3de723274ef507..16e217567d21e26813a7655e4a9cad70565b45fb 100644 GIT binary patch literal 120704 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≶X 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 delta 25140 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 CQ_Eri diff --git a/requirements.txt b/requirements.txt index 29e2763..80db193 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,22 +1,21 @@ -aiohttp==3.8.6 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" +aiohttp==3.9.1 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" aiosignal==1.3.1 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" -async-timeout==4.0.3 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" asyncio-dgram==2.1.2 ; python_full_version >= "3.11.0" and python_version < "4" -attrs==23.1.0 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" -certifi==2023.7.22 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" +attrs==23.2.0 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" +certifi==2023.11.17 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" charset-normalizer==3.3.2 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" colorama==0.4.6 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" discord-py==2.3.2 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" discord==2.3.2 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" dnspython==2.4.2 ; python_full_version >= "3.11.0" and python_version < "4.0" -frozenlist==1.4.0 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" -idna==3.4 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" -kfsconfig==1.0.2 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" +frozenlist==1.4.1 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" +idna==3.6 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" +kfsconfig==1.1.0 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" kfsfstr==1.1.0 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" kfslog==1.0.1 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" kfsmath==1.0.1 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" -mcstatus==11.0.1 ; python_full_version >= "3.11.0" and python_version < "4" +mcstatus==11.1.1 ; python_full_version >= "3.11.0" and python_version < "4" multidict==6.0.4 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" requests==2.31.0 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" -urllib3==2.0.7 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" -yarl==1.9.2 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" +urllib3==2.1.0 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" +yarl==1.9.4 ; python_full_version >= "3.11.0" and python_full_version < "4.0.0" diff --git a/src/convert_to_ip_global.py b/src/convert_to_ip_global.py deleted file mode 100644 index 24eee8f..0000000 --- a/src/convert_to_ip_global.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright (c) 2023 구FS, all rights reserved. Subject to the MIT licence in `licence.md`. -import inspect -import ipaddress -import logging -import requests -import socket - - -def convert_to_ip_global(ip_or_domain: str) -> ipaddress.IPv4Address|ipaddress.IPv6Address: - """ - Converts given IP or domain, which may me local or global, to a guaranteed global IP using "https://ident.me/". - - Arguments: - - ip_local: IP to convert - - Returns: - - ip_global: converted IP, guaranteed global - - Raises: - - ValueError: IP or domain cannot be converted to IP object. - - TimeoutError: Converting local IP to global IP via "https://ident.me/" timed out. - """ - - ip_local_or_global: ipaddress.IPv4Address|ipaddress.IPv6Address # ip which may be local or global - ip_global: ipaddress.IPv4Address|ipaddress.IPv6Address # ip that is guaranteed global, result - TIMEOUT: int=50 # internet connection timeout - - - logging.info(f"Converting given IP or domain \"{ip_or_domain}\" to IP...") - try: - ip_local_or_global=ipaddress.ip_address(socket.gethostbyname(ip_or_domain)) # convert domain to IP, construct IP object - except socket.gaierror: - logging.error(f"\rConverting given IP or domain \"{ip_or_domain}\" to IP failed. Unable to get IP address information. Check the given domain/IP and the internet connection.") - raise ValueError(f"Error in {convert_to_ip_global.__name__}{inspect.signature(convert_to_ip_global)}: Converting given IP or domain \"{ip_or_domain}\" to IP failed. Unable to get IP address information. Check the given domain/IP and the internet connection.") - logging.info(f"\rConverted given IP or domain \"{ip_or_domain}\" to IP \"{ip_local_or_global.exploded.upper()}\".") - - if ip_local_or_global.is_global==True: # if already global IP: work done, return - ip_global=ip_local_or_global - return ip_global - - logging.info(f"Converting local IP \"{ip_local_or_global.exploded.upper()}\" to global IPv4...") - try: - ip_global=ipaddress.ip_address(requests.get("https://4.ident.me/", timeout=TIMEOUT).text) # try to convert to global IPv4 first - except TimeoutError: - logging.error(f"\rConverting local IP \"{ip_local_or_global.exploded.upper()}\" to global IPv4 timed out.") - raise - except ValueError: - logging.error(f"\rConverting local IP \"{ip_local_or_global.exploded.upper()}\" to global IPv4 failed with ValueError. Response from https://4.ident.me/: \"{requests.get('https://4.ident.me/', timeout=TIMEOUT)}\" Network does not seem to have an IPv4.") - else: - logging.info(f"\rConverted local IP \"{ip_local_or_global.exploded.upper()}\" to global IPv4 \"{ip_global.exploded.upper()}\".") - return ip_global - - logging.info(f"Converting local IP \"{ip_local_or_global.exploded.upper()}\" to global IP...") - try: - ip_global=ipaddress.ip_address(requests.get("https://ident.me/", timeout=TIMEOUT).text) # convert to global IP, don't care about IPv4 or IPv6 - except TimeoutError: - logging.error(f"\rConverting local IP \"{ip_local_or_global.exploded.upper()}\" to global IP timed out.") - raise - else: - logging.info(f"\rConverted local IP \"{ip_local_or_global.exploded.upper()}\" to global IP \"{ip_global.exploded.upper()}\".") - return ip_global \ No newline at end of file diff --git a/src/convert_to_ip_public.py b/src/convert_to_ip_public.py new file mode 100644 index 0000000..b679bca --- /dev/null +++ b/src/convert_to_ip_public.py @@ -0,0 +1,83 @@ +# Copyright (c) 2023 구FS, all rights reserved. Subject to the MIT licence in `licence.md`. +import inspect +import ipaddress +import logging +import requests +import socket + + +def convert_to_ip_public(ip_or_domain: str, ip_public_version: int=4) -> str: + """ + Converts given IP or domain, which may me local or public, to a guaranteed public IP using "https://ident.me/". + + Arguments: + - ip_or_domain: IP given to convert + - ip_public_version: try to convert to IPv4 or IPv6, if fails will fallback to other version, if fails again try any version, if fails again raises ValueError + + Returns: + - ip_public: converted IP, guaranteed public + + Raises: + - ValueError: IP or domain cannot be converted to IP object. + - TimeoutError: Converting given IP or domain to public IP via "https://ident.me/" timed out. + """ + + ip: ipaddress.IPv4Address|ipaddress.IPv6Address # ip which may be local or public + ip_public: ipaddress.IPv4Address|ipaddress.IPv6Address # ip that is guaranteed public, result + TIMEOUT: int=50 # internet connection timeout + + + if ip_public_version not in (4, 6): + logging.error(f"ip_public_version ({ip_public_version}) must be 4 or 6.") + raise ValueError(f"Error in {convert_to_ip_public.__name__}{inspect.signature(convert_to_ip_public)}: ip_public_version ({ip_public_version}) must be 4 or 6.") + + + logging.info(f"Converting given IP or domain \"{ip_or_domain}\" to IP...") + try: + ip=ipaddress.ip_address(socket.gethostbyname(ip_or_domain)) # convert IP or domain to IP, construct IP object + except socket.gaierror: + logging.error(f"\rConverting given IP or domain \"{ip_or_domain}\" to IP failed. Unable to get IP address information. Check the given domain/IP and the internet connection.") + raise ValueError(f"Error in {convert_to_ip_public.__name__}{inspect.signature(convert_to_ip_public)}: Converting given IP or domain \"{ip_or_domain}\" to IP failed. Unable to get IP address information. Check the given domain/IP and the internet connection.") + logging.info(f"\rConverted given IP or domain \"{ip_or_domain}\" to IP \"{ip.exploded.upper()}\".") + + + for _ in range(2): # try to convert to IPv4 or IPv6, if fails will fallback to other version + logging.info(f"Converting given IP \"{ip.exploded.upper()}\" to public IPv{ip_public_version}...") + try: + ip_public=ipaddress.ip_address(requests.get(f"https://{ip_public_version}.ident.me/", timeout=TIMEOUT).text) # try to convert + except TimeoutError: + logging.error(f"\rConverting given IP \"{ip.exploded.upper()}\" to public IPv{ip_public_version} timed out.") + ip_public_version=6 + except ValueError as e: + logging.error(f"\rConverting given IP \"{ip.exploded.upper()}\" to public IPv{ip_public_version} failed with ValueError. Network does not seem to have an IPv{ip_public_version}. Error message:\n{e.args}") + match ip_public_version: # fallback to other version + case 4: + ip_public_version=6 + case 6: + ip_public_version=4 + case _: + logging.critical(f"ip_public_version ({ip_public_version}) is neither 4 nor 6 despite having checked earlier.") + raise RuntimeError(f"Error in {convert_to_ip_public.__name__}{inspect.signature(convert_to_ip_public)}: ip_public_version ({ip_public_version}) is neither 4 nor 6 despite having checked earlier.") + else: + logging.info(f"\rConverted given IP \"{ip.exploded.upper()}\" to public IPv{ip_public_version} \"{ip_public.exploded.upper()}\".") + match ip_public_version: # specific formatting depending on version + case 4: + return ip_public.exploded.upper() + case 6: + return f"[{ip_public.exploded.upper()}]" + case _: + logging.critical(f"ip_public_version ({ip_public_version}) is neither 4 nor 6 despite having checked earlier.") + raise RuntimeError(f"Error in {convert_to_ip_public.__name__}{inspect.signature(convert_to_ip_public)}: ip_public_version ({ip_public_version}) is neither 4 nor 6 despite having checked earlier.") + + logging.info(f"Converting given IP \"{ip.exploded.upper()}\" to public IP...") # last ditch effort, try any version + try: + ip_public=ipaddress.ip_address(requests.get("https://ident.me/", timeout=TIMEOUT).text) # convert to public IP, don't care about IPv4 or IPv6 + except TimeoutError: + logging.error(f"\rConverting given IP \"{ip.exploded.upper()}\" to public IP timed out.") + raise + except ValueError as e: + logging.error(f"\rConverting given IP \"{ip.exploded.upper()}\" to public IP failed with ValueError. Network does not seem to have an IP. Error message:\n{e.args}") + raise + else: + logging.info(f"\rConverted given IP \"{ip.exploded.upper()}\" to public IP \"{ip_public.exploded.upper()}\".") + return ip_public.exploded.upper() \ No newline at end of file diff --git a/src/main.py b/src/main.py index ae100f7..074b1a1 100644 --- a/src/main.py +++ b/src/main.py @@ -1,29 +1,42 @@ # Copyright (c) 2023 구FS, all rights reserved. Subject to the MIT licence in `licence.md`. import aiohttp.client_exceptions import discord, discord.ext.commands, discord.ext.tasks -import inspect -import ipaddress +import json from KFSconfig import KFSconfig from KFSfstr import KFSfstr from KFSlog import KFSlog import logging import mcstatus, mcstatus.pinger import time -from convert_to_ip_global import convert_to_ip_global +from convert_to_ip_public import convert_to_ip_public @KFSlog.timeit -def main() -> None: - discord_bot: discord.ext.commands.Bot # discord bot instance - DISCORD_BOT_CHANNEL_NAME: str="botspam" # channel to monitor for ip command - discord_bot_token: str # discord bot token +def main(DEBUG: bool) -> None: + discord_bot: discord.ext.commands.Bot # discord bot instance intents: discord.Intents # bot permissions - REFRESH_FREQUENCY: float=200e-3 # refresh display with 200mHz (every 5s) + settings: dict # settings, loaded from settings.json + SETTINGS_DEFAULT: str=json.dumps({ # settings default + "discord_bot_channel_name": "", # channel to monitor for IP command + "discord_bot_token": "", # discord bot token + "convert_to_ip_public": False, # if true, convert given server IP or domain to public IP + "ip_public_version": 4, # if convert_to_ip_public is true, use IPv4 or IPv6 + "minecraft_server_ip": "", # minecraft server IP or domain, do not add port here + "minecraft_server_port": "", # minecraft server port, may be left empty + "refresh_frequency": 200e-3, # refresh display with 200mHz (every 5s) + }, indent=4) + try: - discord_bot_token=KFSconfig.load_config("./config/discord_bot.token") # load discord bot token + settings=json.loads(KFSconfig.load_config("./config/settings.json", SETTINGS_DEFAULT)) # load settings except FileNotFoundError: return + if settings["discord_bot_token"]=="": + logging.critical("discord_bot_token must be set in ./config/settings.json. If you don't know how to do that, refer to: https://www.writebots.com/discord-bot-token/") + return + if settings["minecraft_server_ip"]=="": + logging.critical("minecraft_server_ip must be set in ./config/settings.json.") + return intents=discord.Intents.default() # standard permissions intents.message_content=True # in addition with message contents discord_bot=discord.ext.commands.Bot(command_prefix="", intents=intents) # create bot instance @@ -35,7 +48,7 @@ async def on_ready() -> None: logging.info("Started discord bot.") return - @discord.ext.tasks.loop(seconds=1/REFRESH_FREQUENCY) + @discord.ext.tasks.loop(seconds=1/settings["refresh_frequency"]) async def refresh(discord_bot: discord.ext.commands.Bot) -> None: # refresh display regurarily """ Refreshes bot presence with current number of players online, maximum number of players, player names, and server IP. Also sets status to online or offline as appropiate. @@ -44,40 +57,41 @@ async def refresh(discord_bot: discord.ext.commands.Bot) -> None: # refresh d discord_presence_title: str # presence, important information discord_status: discord.Status # current status, online (green) for server online, do not disturb (red) for server offline minecraft_server: mcstatus.JavaServer # server instance - minecraft_server_ip_global: ipaddress.IPv4Address|ipaddress.IPv6Address # target server IP, global - minecraft_server_ip_user: str # target server IP as defined by user, local or global - minecraft_server_port: int # target server port + minecraft_server_ip_port: str # target server IP and if set port, may be IP or domain given or public IP minecraft_server_status: mcstatus.pinger.PingResponse # server status + LOOKUP_TIMEOUT: float=10 # timeout for server lookup in seconds + logging.info("Refreshing presence...") + minecraft_server_ip_port=settings["minecraft_server_ip"] + if settings["minecraft_server_port"]!="": # if port given in settings: + minecraft_server_ip_port+=f":{settings['minecraft_server_port']}" + + logging.info(f"Looking up \"{minecraft_server_ip_port}\"...") + minecraft_server=mcstatus.JavaServer.lookup(minecraft_server_ip_port, timeout=LOOKUP_TIMEOUT) # lookup server with IP or domain given + logging.info(f"\rLooked up \"{minecraft_server_ip_port}\".") + logging.info(f"Fetching server status at \"{minecraft_server_ip_port}\"...") try: - minecraft_server_ip_port=KFSconfig.load_config("./config/minecraft_server_ip.txt").rsplit(":", 1) # load set server IP/domain and port, may be local or global - except FileNotFoundError: - return - minecraft_server_ip_user=minecraft_server_ip_port[0] - minecraft_server_ip_global=convert_to_ip_global(minecraft_server_ip_user) - try: - minecraft_server_port=int(minecraft_server_ip_port[1]) - except ValueError: - logging.error(f"Converting given port \"{minecraft_server_ip_port[1]}\" to int failed.") - return - - - minecraft_server=mcstatus.JavaServer.lookup(f"{minecraft_server_ip_user}:{minecraft_server_port}") - logging.info(f"Fetching server status at \"{minecraft_server_ip_user}:{minecraft_server_port}\"...") - try: - minecraft_server_status=minecraft_server.status() # current server status - except (IOError, TimeoutError): # if server currently transitioning between online offline or is currently offline: - logging.info(f"\rFetching server status at \"{minecraft_server_ip_user}:{minecraft_server_port}\" failed. Server is assumed to be offline.") - discord_presence_title="offline" # just say it's offline - discord_status=discord.Status.do_not_disturb # status red + minecraft_server_status=minecraft_server.status() # current server status + except (IOError, TimeoutError): # if server currently transitioning between online offline or is currently offline: + logging.info(f"\rFetching server status at \"{minecraft_server_ip_port}\" failed. Server is assumed to be offline.") + discord_presence_title="offline" # just say it's offline + discord_status=discord.Status.do_not_disturb # status red else: # if server online: - logging.info(f"\rFetched server status at \"{minecraft_server_ip_user}:{minecraft_server_port}\" with latency {KFSfstr.notation_tech(minecraft_server_status.latency/1000, 2)}s.") + logging.info(f"\rFetched server status at \"{minecraft_server_ip_port}\" with latency {KFSfstr.notation_tech(minecraft_server_status.latency/1000, 2)}s.") discord_presence_title=f"{minecraft_server_status.players.online}/{minecraft_server_status.players.max}" # player numbers online if 1<=minecraft_server_status.players.online: # if at least 1 player online: discord_presence_title+=f": {', '.join(sorted([player.name for player in minecraft_server_status.players.sample]))}" # append player name list # type:ignore discord_status=discord.Status.online # status green - discord_presence_title+=f"; IP: {minecraft_server_ip_global.exploded.upper()} :{minecraft_server_port}" # display, separate ip and port with space because IPv6 is so long and display needs a linebreak + + + if settings["convert_to_ip_public"]==True: # if convert to public IP: convert + minecraft_server_ip_port=convert_to_ip_public(settings["minecraft_server_ip"], settings["ip_public_version"]) + else: # else: use given IP or domain + minecraft_server_ip_port=settings["minecraft_server_ip"] + if settings["minecraft_server_port"]!="": # if port given in settings: + minecraft_server_ip_port+=f":{settings['minecraft_server_port']}" + discord_presence_title+=f"; IP: {settings['minecraft_server_ip']}" # append IP logging.info(f"Applying presence title \"{discord_presence_title}\" and bot status \"{discord_status.name}\"...") await discord_bot.change_presence(activity=discord.Activity(name=discord_presence_title, type=discord.ActivityType.playing), # apply presence @@ -94,44 +108,28 @@ async def on_message(message: discord.Message): - \"ip\" sends the current IP for copy and paste purposes. """ - message_send: str # message to send to discord - minecraft_server_ip_global: ipaddress.IPv4Address|ipaddress.IPv6Address # target server IP, global - minecraft_server_ip_user: str # target server IP as defined by user, local or global - minecraft_server_port: int # target server port + message_send: str # message to send to discord - if( message.author==discord_bot.user # if message from bot itself or outside dedicated bot channel or not the right command: do nothing - or message.channel.name!=DISCORD_BOT_CHANNEL_NAME # type:ignore - or message.content.upper()!="IP"): - return - logging.info("Executing IP command...") - try: - minecraft_server_ip_port=KFSconfig.load_config("./config/minecraft_server_ip.config").rsplit(":", 1) # load set server IP/domain and port, may be local or global - except FileNotFoundError: - return - minecraft_server_ip_user=minecraft_server_ip_port[0] - minecraft_server_ip_global=convert_to_ip_global(minecraft_server_ip_user) - try: - minecraft_server_port=int(minecraft_server_ip_port[1]) - except ValueError: - logging.error(f"Converting given port \"{minecraft_server_ip_port[1]}\" to int failed.") + if( message.author==discord_bot.user # if message from bot itself or outside dedicated bot channel or not the right command: do nothing + or message.channel.name!=settings["discord_bot_channel_name"] # type:ignore + or message.content.casefold()!="ip"): return + + + logging.info("Executing IP command...") + if settings["convert_to_ip_public"]==True: # if convert to public IP: convert + message_send=convert_to_ip_public(settings["minecraft_server_ip"], settings["ip_public_version"]) + else: # else: use IP or domain given + message_send=settings["minecraft_server_ip"] + if settings["minecraft_server_port"]!="": # if port given in settings: + message_send+=f":{settings['minecraft_server_port']}" - match type(minecraft_server_ip_global): # depending on ip type: output formatting with brackets or without - case ipaddress.IPv4Address: - message_send=f"{minecraft_server_ip_global.exploded.upper()}:{minecraft_server_port}" - case ipaddress.IPv6Address: - message_send=f"[{minecraft_server_ip_global.exploded.upper()}]:{minecraft_server_port}" - case _: - logging.critical(f"minecraft_server_ip_global is of type \"{type(minecraft_server_ip_global)}\" instead of \"ipaddress.IPv4Address\" or \"ipaddress.IPv6Address\".") - raise RuntimeError(f"Error in {main.__name__}{inspect.signature(main)}: minecraft_server_ip_global is of type \"{type(minecraft_server_ip_global)}\" instead of \"ipaddress.IPv4Address\" or \"ipaddress.IPv6Address\".") logging.info(f"Sending message \"{message_send}\" to discord...") try: await discord_bot.get_channel(message.channel.id).send(message_send) # send message to discord # type:ignore - except AttributeError: # get_channel already returned None, bot has probably been removed from server - logging.error(f"Sending message \"{message_send}\" to discord failed with AttributeError.") - except discord.errors.DiscordServerError: # send failed - logging.error(f"Sending message \"{message_send}\" to discord failed with discord.errors.DiscordServerError.") + except (AttributeError, discord.errors.DiscordServerError) as e: # get_channel already returned None, bot has probably been removed from server; send failed + logging.error(f"Sending message \"{message_send}\" to discord failed with with {KFSfstr.full_class_name(e)}. Error: {e.args}") else: logging.info(f"\rSent message \"{message_send}\" to discord.") @@ -141,7 +139,7 @@ async def on_message(message: discord.Message): while True: logging.info("Starting discord bot...") try: - discord_bot.run(discord_bot_token) # start discord bot now + discord_bot.run(settings["discord_bot_token"]) # start discord bot now except aiohttp.client_exceptions.ClientConnectorError: # if temporary internet failure: retry connection logging.error("Starting discord bot failed, because bot could not connect. Retrying in 10s...") time.sleep(10) diff --git a/src/main_outer.py b/src/main_outer.py index 99b0c2b..77bf6b5 100644 --- a/src/main_outer.py +++ b/src/main_outer.py @@ -6,13 +6,19 @@ from main import main -if __name__ == "__main__": +if __name__=="__main__": + DEBUG: bool=False # debug mode? + + + if DEBUG==True: + KFSlog.setup_logging("", logging.DEBUG, filepath_format="./log/%Y-%m-%dT%H_%M.log", rotate_filepath_when="M") + else: + KFSlog.setup_logging("", logging.INFO) multiprocessing.freeze_support() # for multiprocessing to work on windows executables - KFSlog.setup_logging("", logging.INFO) - #KFSlog.setup_logging("", logging.DEBUG, filepath_format="./log/%Y-%m-%dT%H_%M.log", rotate_filepath_when="M") + try: - main() + main(DEBUG) except: logging.critical(traceback.format_exc()) print("\nPress enter to close program.", flush=True)