diff --git a/.gitignore b/.gitignore index f1777c4..d7150c1 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ .DS_Store playground/ +a.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 58cc9c6..ac475ae 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,19 +29,19 @@ repos: # supported by your project here, or alternatively use # pre-commit's default_language_version, see # https://pre-commit.com/#top_level-default_language_version - language_version: python3.11 + language_version: python3.12 - repo: https://github.com/pycqa/isort rev: 5.13.2 hooks: - id: isort name: isort (python) - language_version: python3.11 + language_version: python3.12 - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.14.1 hooks: - id: mypy additional_dependencies: [pydantic, types-redis, aiomqtt] - language_version: python3.11 + language_version: python3.12 - repo: https://github.com/PyCQA/pylint rev: v3.3.3 hooks: @@ -58,7 +58,7 @@ repos: types-redis, aiomqtt, ] - language_version: python3.11 + language_version: python3.12 - repo: https://github.com/asottile/pyupgrade rev: v3.19.1 hooks: diff --git a/.vscode/settings.json b/.vscode/settings.json index 2c317d4..e5d00d4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -22,7 +22,11 @@ "isort.severity": { "E": "Error" }, + "mypy-type-checker.args": [ + "--enable-incomplete-feature=NewGenericSyntax" + ], "pylint.args": [ + "--py-version=3.12", "--load-plugins=pylint.extensions.bad_builtin,pylint_pydantic", "--ignore=CVS,.git,__pycache__,.mypy_cache,tests", "--disable=no-self-argument", diff --git a/Pipfile b/Pipfile index 71736d3..e18e92c 100644 --- a/Pipfile +++ b/Pipfile @@ -28,4 +28,4 @@ pylint-pydantic = "*" #pre-commit = "*" [requires] -python_version = "3.11" +python_version = "3.12" diff --git a/Pipfile.lock b/Pipfile.lock index ee19916..809918b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "8703de67c838856ee792ecd2fba397e4b6bab0475c039c4ed254efc9c04925dd" + "sha256": "9dd7294cd783e05464ca5ef964a9d19e75412832f1468ccfd1e8012dc370b63a" }, "pipfile-spec": 6, "requires": { - "python_version": "3.11" + "python_version": "3.12" }, "sources": [ { @@ -43,11 +43,11 @@ }, "anyio": { "hashes": [ - "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48", - "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352" + "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a", + "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a" ], "markers": "python_version >= '3.9'", - "version": "==4.7.0" + "version": "==4.8.0" }, "billiard": { "hashes": [ @@ -148,7 +148,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.17.1" }, "click": { @@ -228,6 +228,7 @@ "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7" ], + "markers": "python_version >= '3.8'", "version": "==2.2.0" }, "fastapi": { @@ -235,11 +236,11 @@ "all" ], "hashes": [ - "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654", - "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305" + "sha256:0f106da6c01d88a6786b3248fb4d7a940d071f6f488488898ad5d354b25ed015", + "sha256:eb6a8c8bf7f26009e8147111ff15b5177a0e19bb4a45bc3486ab14804539d21e" ], "markers": "python_version >= '3.8'", - "version": "==0.115.6" + "version": "==0.115.7" }, "fastapi-cli": { "extras": [ @@ -249,6 +250,7 @@ "sha256:02b3b65956f526412515907a0793c9094abd4bfb5457b389f645b0ea6ba3605e", "sha256:d549368ff584b2804336c61f192d86ddea080c11255f375959627911944804f4" ], + "markers": "python_version >= '3.8'", "version": "==0.0.7" }, "h11": { @@ -371,6 +373,7 @@ "sha256:f9ea0678806c53d96758e74c6a898f9d506a2e3367a344757f768bef9e069366", "sha256:fcb91ba42903de637b94a1b64477f381f94ad82c0742c264f9245be76a7a3cbc" ], + "markers": "python_version >= '3.8'", "version": "==3.1.0" }, "httpcore": { @@ -427,6 +430,7 @@ "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f", "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43" ], + "markers": "python_full_version >= '3.8.0'", "version": "==0.6.4" }, "httpx": { @@ -434,6 +438,7 @@ "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad" ], + "markers": "python_version >= '3.8'", "version": "==0.28.1" }, "idna": { @@ -449,6 +454,7 @@ "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173" ], + "markers": "python_version >= '3.8'", "version": "==2.2.0" }, "jinja2": { @@ -456,6 +462,7 @@ "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb" ], + "markers": "python_version >= '3.7'", "version": "==3.1.5" }, "kombu": { @@ -551,92 +558,97 @@ }, "motor": { "hashes": [ - "sha256:0ef7f520213e852bf0eac306adf631aabe849227d8aec900a2612512fb9c5b8d", - "sha256:9f07ed96f1754963d4386944e1b52d403a5350c687edc60da487d66f98dbf894" + "sha256:7fe552353aded4fa9f05ae515a179df5b1d192b1da56726f422dbb2d8c3b5962", + "sha256:ee2b18386292f9ceb3cc8279a4cd34e4c641c5ac8de3500c30374081c76a9d03" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==3.6.0" + "version": "==3.6.1" }, "orjson": { "hashes": [ - "sha256:003721c72930dbb973f25c5d8e68d0f023d6ed138b14830cc94e57c6805a2eab", - "sha256:0065896f85d9497990731dfd4a9991a45b0a524baec42ef0a63c34630ee26fd6", - "sha256:03b0f29d485411e3c13d79604b740b14e4e5fb58811743f6f4f9693ee6480a8f", - "sha256:064b9dbb0217fd64a8d016a8929f2fae6f3312d55ab3036b00b1d17399ab2f3e", - "sha256:0bc858086088b39dc622bc8219e73d3f246fb2bce70a6104abd04b3a080a66a8", - "sha256:0dbf3b97e52e093d7c3e93eb5eb5b31dc7535b33c2ad56872c83f0160f943487", - "sha256:0e2759d3172300b2f892dee85500b22fca5ac49e0c42cfff101aaf9c12ac9617", - "sha256:0fee076134398d4e6cb827002468679ad402b22269510cf228301b787fdff5ae", - "sha256:1232c5e873a4d1638ef957c5564b4b0d6f2a6ab9e207a9b3de9de05a09d1d920", - "sha256:1884e53c6818686891cc6fc5a3a2540f2f35e8c76eac8dc3b40480fb59660b00", - "sha256:1a7d64f1db5ecbc21eb83097e5236d6ab7e86092c1cd4c216c02533332951afc", - "sha256:2149e2fcd084c3fd584881c7f9d7f9e5ad1e2e006609d8b80649655e0d52cd02", - "sha256:22f1c9a30b43d14a041a6ea190d9eca8a6b80c4beb0e8b67602c82d30d6eec3e", - "sha256:233aae4474078d82f425134bb6a10fb2b3fc5a1a1b3420c6463ddd1b6a97eda8", - "sha256:2cdaf8b028a976ebab837a2c27b82810f7fc76ed9fb243755ba650cc83d07730", - "sha256:33ef84f7e9513fb13b3999c2a64b9ca9c8143f3da9722fbf9c9ce51ce0d8076e", - "sha256:3723e137772639af8adb68230f2aa4bcb27c48b3335b1b1e2d49328fed5e244c", - "sha256:3a7df63076435f39ec024bdfeb4c9767ebe7b49abc4949068d61cf4857fa6d6c", - "sha256:3ca6f17467ebbd763f8862f1d89384a5051b461bb0e41074f583a0ebd7120e8e", - "sha256:4222881d0aab76224d7b003a8e5fdae4082e32c86768e0e8652de8afd6c4e2c1", - "sha256:46c249b4e934453be4ff2e518cd1adcd90467da7391c7a79eaf2fbb79c51e8c7", - "sha256:48a946796e390cbb803e069472de37f192b7a80f4ac82e16d6eb9909d9e39d56", - "sha256:4a11532cbfc2f5752c37e84863ef8435b68b0e6d459b329933294f65fa4bda1a", - "sha256:527afb6ddb0fa3fe02f5d9fba4920d9d95da58917826a9be93e0242da8abe94a", - "sha256:5385935a73adce85cc7faac9d396683fd813566d3857fa95a0b521ef84a5b588", - "sha256:54433e421618cd5873e51c0e9d0b9fb35f7bf76eb31c8eab20b3595bb713cd3d", - "sha256:5f00c7fb18843bad2ac42dc1ce6dd214a083c53f1e324a0fd1c8137c6436269b", - "sha256:5f74d878d1efb97a930b8a9f9898890067707d683eb5c7e20730030ecb3fb930", - "sha256:6066729cf9552d70de297b56556d14b4f49c8f638803ee3c90fd212fa43cc6af", - "sha256:62c3cc00c7e776c71c6b7b9c48c5d2701d4c04e7d1d7cdee3572998ee6dc57cc", - "sha256:63664bf12addb318dc8f032160e0f5dc17eb8471c93601e8f5e0d07f95003784", - "sha256:69b21d91c5c5ef8a201036d207b1adf3aa596b930b6ca3c71484dd11386cf6c3", - "sha256:6a428afb5720f12892f64920acd2eeb4d996595bf168a26dd9190115dbf1130d", - "sha256:711878da48f89df194edd2ba603ad42e7afed74abcd2bac164685e7ec15f96de", - "sha256:7184f608ad563032e398f311910bc536e62b9fbdca2041be889afcbc39500de8", - "sha256:8257c3fb8dd7b0b446b5e87bf85a28e4071ac50f8c04b6ce2d38cb4abd7dff57", - "sha256:89367767ed27b33c25c026696507c76e3d01958406f51d3a2239fe9e91959df2", - "sha256:8a1152e2761025c5d13b5e1908d4b1c57f3797ba662e485ae6f26e4e0c466388", - "sha256:92b4ec30d6025a9dcdfe0df77063cbce238c08d0404471ed7a79f309364a3d19", - "sha256:9c976bad3996aa027cd3aef78aa57873f3c959b6c38719de9724b71bdc7bd14b", - "sha256:a3614b00621c77f3f6487792238f9ed1dd8a42f2ec0e6540ee34c2d4e6db813a", - "sha256:a36c0d48d2f084c800763473020a12976996f1109e2fcb66cfea442fdf88047f", - "sha256:a42b9fe4b0114b51eb5cdf9887d8c94447bc59df6dbb9c5884434eab947888d8", - "sha256:a5a7624ab4d121c7e035708c8dd1f99c15ff155b69a1c0affc4d9d8b551281ba", - "sha256:a94542d12271c30044dadad1125ee060e7a2048b6c7034e432e116077e1d13d2", - "sha256:a9ecea472f3eb653e1c0a3d68085f031f18fc501ea392b98dcca3e87c24f9ebe", - "sha256:aa6fe68f0981fba0d4bf9cdc666d297a7cdba0f1b380dcd075a9a3dd5649a69e", - "sha256:ae537fcf330b3947e82c6ae4271e092e6cf16b9bc2cef68b14ffd0df1fa8832a", - "sha256:b12a63f48bb53dba8453d36ca2661f2330126d54e26c1661e550b32864b28ce3", - "sha256:b42f56821c29e697c68d7d421410d7c1d8f064ae288b525af6a50cf99a4b1200", - "sha256:b5f7c298d4b935b222f52d6c7f2ba5eafb59d690d9a3840b7b5c5cda97f6ec5c", - "sha256:ba5b13b8739ce5b630c65cb1c85aedbd257bcc2b9c256b06ab2605209af75a2e", - "sha256:c0044b0b8c85a565e7c3ce0a72acc5d35cda60793edf871ed94711e712cb637d", - "sha256:c96d2fb80467d1d0dfc4d037b4e1c0f84f1fe6229aa7fea3f070083acef7f3d7", - "sha256:cab83e67f6aabda1b45882254b2598b48b80ecc112968fc6483fa6dae609e9f0", - "sha256:cf16f06cb77ce8baf844bc222dbcb03838f61d0abda2c3341400c2b7604e436e", - "sha256:d26a0eca3035619fa366cbaf49af704c7cb1d4a0e6c79eced9f6a3f2437964b6", - "sha256:d36f689e7e1b9b6fb39dbdebc16a6f07cbe994d3644fb1c22953020fc575935f", - "sha256:d4b6acd7c9c829895e50d385a357d4b8c3fafc19c5989da2bae11783b0fd4977", - "sha256:d9c3a87abe6f849a4a7ac8a8a1dede6320a4303d5304006b90da7a3cd2b70d2c", - "sha256:dbcd7aad6bcff258f6896abfbc177d54d9b18149c4c561114f47ebfe74ae6bfd", - "sha256:dc03db4922e75bbc870b03fc49734cefbd50fe975e0878327d200022210b82d8", - "sha256:dca1d20f1af0daff511f6e26a27354a424f0b5cf00e04280279316df0f604a6f", - "sha256:dce1cc42ed75b585c0c4dc5eb53a90a34ccb493c09a10750d1a1f9b9eff2bd12", - "sha256:dd2bcde107221bb9c2fa0c4aaba735a537225104173d7e19cf73f70b3126c993", - "sha256:dda4ba4d3e6f6c53b6b9c35266788053b61656a716a7fef5c884629c2a52e7aa", - "sha256:e1ba0c5857dd743438acecc1cd0e1adf83f0a81fee558e32b2b36f89e40cee8b", - "sha256:e384e330a67cf52b3597ee2646de63407da6f8fc9e9beec3eaaaef5514c7a1c9", - "sha256:e400436950ba42110a20c50c80dff4946c8e3ec09abc1c9cf5473467e83fd1c5", - "sha256:e49333d1038bc03a25fdfe11c86360df9b890354bfe04215f1f54d030f33c342", - "sha256:e4f998bbf300690be881772ee9c5281eb9c0044e295bcd4722504f5b5c6092ff", - "sha256:eb9bfb14ab8f68d9d9492d4817ae497788a15fd7da72e14dfabc289c3bb088ec", - "sha256:ee948c6c01f6b337589c88f8e0bb11e78d32a15848b8b53d3f3b6fea48842c12", - "sha256:f47c9e7d224b86ffb086059cdcf634f4b3f32480f9838864aa09022fe2617ce2", - "sha256:f81b26c03f5fb5f0d0ee48d83cea4d7bc5e67e420d209cc1a990f5d1c62f9be0" - ], - "version": "==3.10.13" + "sha256:035fb83585e0f15e076759b6fedaf0abb460d1765b6a36f48018a52858443514", + "sha256:05ca7fe452a2e9d8d9d706a2984c95b9c2ebc5db417ce0b7a49b91d50642a23e", + "sha256:0a4f27ea5617828e6b58922fdbec67b0aa4bb844e2d363b9244c47fa2180e665", + "sha256:13242f12d295e83c2955756a574ddd6741c81e5b99f2bef8ed8d53e47a01e4b7", + "sha256:17085a6aa91e1cd70ca8533989a18b5433e15d29c574582f76f821737c8d5806", + "sha256:1e6d33efab6b71d67f22bf2962895d3dc6f82a6273a965fab762e64fa90dc399", + "sha256:208beedfa807c922da4e81061dafa9c8489c6328934ca2a562efa707e049e561", + "sha256:295c70f9dc154307777ba30fe29ff15c1bcc9dfc5c48632f37d20a607e9ba85a", + "sha256:305b38b2b8f8083cc3d618927d7f424349afce5975b316d33075ef0f73576b60", + "sha256:33aedc3d903378e257047fee506f11e0833146ca3e57a1a1fb0ddb789876c1e1", + "sha256:3614ea508d522a621384c1d6639016a5a2e4f027f3e4a1c93a51867615d28829", + "sha256:3766ac4702f8f795ff3fa067968e806b4344af257011858cc3d6d8721588b53f", + "sha256:3a63bb41559b05360ded9132032239e47983a39b151af1201f07ec9370715c82", + "sha256:43e17289ffdbbac8f39243916c893d2ae41a2ea1a9cbb060a56a4d75286351ae", + "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04", + "sha256:5dd9ef1639878cc3efffed349543cbf9372bdbd79f478615a1c633fe4e4180d1", + "sha256:5e8afd6200e12771467a1a44e5ad780614b86abb4b11862ec54861a82d677746", + "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8", + "sha256:63309e3ff924c62404923c80b9e2048c1f74ba4b615e7584584389ada50ed428", + "sha256:6875210307d36c94873f553786a808af2788e362bd0cf4c8e66d976791e7b528", + "sha256:6fd9bc64421e9fe9bd88039e7ce8e58d4fead67ca88e3a4014b143cec7684fd4", + "sha256:7066b74f9f259849629e0d04db6609db4cf5b973248f455ba5d3bd58a4daaa5b", + "sha256:73cb85490aa6bf98abd20607ab5c8324c0acb48d6da7863a51be48505646c814", + "sha256:763dadac05e4e9d2bc14938a45a2d0560549561287d41c465d3c58aec818b164", + "sha256:7723ad949a0ea502df656948ddd8b392780a5beaa4c3b5f97e525191b102fff0", + "sha256:781d54657063f361e89714293c095f506c533582ee40a426cb6489c48a637b81", + "sha256:7946922ada8f3e0b7b958cc3eb22cfcf6c0df83d1fe5521b4a100103e3fa84c8", + "sha256:7a1c73dcc8fadbd7c55802d9aa093b36878d34a3b3222c41052ce6b0fc65f8e8", + "sha256:7c203f6f969210128af3acae0ef9ea6aab9782939f45f6fe02d05958fe761ef9", + "sha256:7c2c79fa308e6edb0ffab0a31fd75a7841bf2a79a20ef08a3c6e3b26814c8ca8", + "sha256:7c864a80a2d467d7786274fce0e4f93ef2a7ca4ff31f7fc5634225aaa4e9e98c", + "sha256:88dc3f65a026bd3175eb157fea994fca6ac7c4c8579fc5a86fc2114ad05705b7", + "sha256:8918719572d662e18b8af66aef699d8c21072e54b6c82a3f8f6404c1f5ccd5e0", + "sha256:9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a", + "sha256:9e590a0477b23ecd5b0ac865b1b907b01b3c5535f5e8a8f6ab0e503efb896334", + "sha256:9e992fd5cfb8b9f00bfad2fd7a05a4299db2bbe92e6440d9dd2fab27655b3182", + "sha256:a2f708c62d026fb5340788ba94a55c23df4e1869fec74be455e0b2f5363b8507", + "sha256:a330b9b4734f09a623f74a7490db713695e13b67c959713b78369f26b3dee6bf", + "sha256:a61a4622b7ff861f019974f73d8165be1bd9a0855e1cad18ee167acacabeb061", + "sha256:a6be38bd103d2fd9bdfa31c2720b23b5d47c6796bcb1d1b598e3924441b4298d", + "sha256:abc7abecdbf67a173ef1316036ebbf54ce400ef2300b4e26a7b843bd446c2480", + "sha256:acd271247691574416b3228db667b84775c497b245fa275c6ab90dc1ffbbd2b3", + "sha256:b0482b21d0462eddd67e7fce10b89e0b6ac56570424662b685a0d6fccf581e13", + "sha256:b299383825eafe642cbab34be762ccff9fd3408d72726a6b2a4506d410a71ab3", + "sha256:b342567e5465bd99faa559507fe45e33fc76b9fb868a63f1642c6bc0735ad02a", + "sha256:b48f59114fe318f33bbaee8ebeda696d8ccc94c9e90bc27dbe72153094e26f41", + "sha256:b7155eb1623347f0f22c38c9abdd738b287e39b9982e1da227503387b81b34ca", + "sha256:bae0e6ec2b7ba6895198cd981b7cca95d1487d0147c8ed751e5632ad16f031a6", + "sha256:bb00b7bfbdf5d34a13180e4805d76b4567025da19a197645ca746fc2fb536586", + "sha256:bb5cc3527036ae3d98b65e37b7986a918955f85332c1ee07f9d3f82f3a6899b5", + "sha256:c03cd6eea1bd3b949d0d007c8d57049aa2b39bd49f58b4b2af571a5d3833d890", + "sha256:c25774c9e88a3e0013d7d1a6c8056926b607a61edd423b50eb5c88fd7f2823ae", + "sha256:c33be3795e299f565681d69852ac8c1bc5c84863c0b0030b2b3468843be90388", + "sha256:c4cc83960ab79a4031f3119cc4b1a1c627a3dc09df125b27c4201dff2af7eaa6", + "sha256:cf45e0214c593660339ef63e875f32ddd5aa3b4adc15e662cdb80dc49e194f8e", + "sha256:d13b7fe322d75bf84464b075eafd8e7dd9eae05649aa2a5354cfa32f43c59f17", + "sha256:d433bf32a363823863a96561a555227c18a522a8217a6f9400f00ddc70139ae2", + "sha256:d569c1c462912acdd119ccbf719cf7102ea2c67dd03b99edcb1a3048651ac96b", + "sha256:d5ac11b659fd798228a7adba3e37c010e0152b78b1982897020a8e019a94882e", + "sha256:da03392674f59a95d03fa5fb9fe3a160b0511ad84b7a3914699ea5a1b3a38da2", + "sha256:da9a18c500f19273e9e104cca8c1f0b40a6470bcccfc33afcc088045d0bf5ea6", + "sha256:dadba0e7b6594216c214ef7894c4bd5f08d7c0135f4dd0145600be4fbcc16767", + "sha256:dba5a1e85d554e3897fa9fe6fbcff2ed32d55008973ec9a2b992bd9a65d2352d", + "sha256:dd0099ae6aed5eb1fc84c9eb72b95505a3df4267e6962eb93cdd5af03be71c98", + "sha256:ddbeef2481d895ab8be5185f2432c334d6dec1f5d1933a9c83014d188e102cef", + "sha256:e117eb299a35f2634e25ed120c37c641398826c2f5a3d3cc39f5993b96171b9e", + "sha256:e4759b109c37f635aa5c5cc93a1b26927bfde24b254bcc0e1149a9fada253d2d", + "sha256:e78c211d0074e783d824ce7bb85bf459f93a233eb67a5b5003498232ddfb0e8a", + "sha256:eca81f83b1b8c07449e1d6ff7074e82e3fd6777e588f1a6632127f286a968825", + "sha256:eea80037b9fae5339b214f59308ef0589fc06dc870578b7cce6d71eb2096764c", + "sha256:ef5b87e7aa9545ddadd2309efe6824bd3dd64ac101c15dae0f2f597911d46eaa", + "sha256:efcf6c735c3d22ef60c4aa27a5238f1a477df85e9b15f2142f9d669beb2d13fd", + "sha256:f71eae9651465dff70aa80db92586ad5b92df46a9373ee55252109bb6b703307", + "sha256:f93ce145b2db1252dd86af37d4165b6faa83072b46e3995ecc95d4b2301b725a", + "sha256:f95fb363d79366af56c3f26b71df40b9a583b07bbaaf5b317407c4d58497852e", + "sha256:f9875f5fea7492da8ec2444839dcc439b0ef298978f311103d0b7dfd775898ab", + "sha256:fd56a26a04f6ba5fb2045b0acc487a63162a958ed837648c5781e1fe3316cfbf", + "sha256:ff4f6edb1578960ed628a3b998fa54d78d9bb3e2eb2cfc5c2a09732431c678d0", + "sha256:ffe19f3e8d68111e8644d4f4e267a069ca427926855582ff01fc012496d19969" + ], + "markers": "python_version >= '3.8'", + "version": "==3.10.15" }, "paho-mqtt": { "hashes": [ @@ -648,11 +660,11 @@ }, "prompt-toolkit": { "hashes": [ - "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90", - "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e" + "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", + "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198" ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.0.48" + "markers": "python_full_version >= '3.8.0'", + "version": "==3.0.50" }, "pycparser": { "hashes": [ @@ -664,12 +676,12 @@ }, "pydantic": { "hashes": [ - "sha256:597e135ea68be3a37552fb524bc7d0d66dcf93d395acd93a00682f1efcb8ee3d", - "sha256:82f12e9723da6de4fe2ba888b5971157b3be7ad914267dea8f05f82b28254f06" + "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", + "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.10.4" + "version": "==2.10.6" }, "pydantic-core": { "hashes": [ @@ -779,25 +791,27 @@ }, "pydantic-extra-types": { "hashes": [ - "sha256:db2c86c04a837bbac0d2d79bbd6f5d46c4c9253db11ca3fdd36a2b282575f1e2", - "sha256:e4f937af34a754b8f1fa228a2fac867091a51f56ed0e8a61d5b3a6719b13c923" + "sha256:934d59ab7a02ff788759c3a97bc896f5cfdc91e62e4f88ea4669067a73f14b98", + "sha256:9eccd55a2b7935cea25f0a67f6ff763d55d80c41d86b887d88915412ccf5b7fa" ], - "version": "==2.10.1" + "markers": "python_version >= '3.8'", + "version": "==2.10.2" }, "pydantic-settings": { "hashes": [ "sha256:10c9caad35e64bfb3c2fbf70a078c0e25cc92499782e5200747f942a065dec93", "sha256:590be9e6e24d06db33a4262829edef682500ef008565a969c73d39d5f8bfb3fd" ], + "markers": "python_version >= '3.8'", "version": "==2.7.1" }, "pygments": { "hashes": [ - "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", - "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" + "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", + "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c" ], "markers": "python_version >= '3.8'", - "version": "==2.18.0" + "version": "==2.19.1" }, "pymongo": { "extras": [ @@ -880,6 +894,7 @@ "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a" ], + "markers": "python_version >= '3.8'", "version": "==1.0.1" }, "python-multipart": { @@ -887,6 +902,7 @@ "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13" ], + "markers": "python_version >= '3.8'", "version": "==0.0.20" }, "pyyaml": { @@ -945,6 +961,7 @@ "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" ], + "markers": "python_version >= '3.8'", "version": "==6.0.2" }, "redis": { @@ -968,11 +985,11 @@ }, "rich-toolkit": { "hashes": [ - "sha256:a2da4416384410ae871e890db7edf8623e1f5e983341dbbc8cc03603ce24f0ab", - "sha256:facb0b40418010309f77abd44e2583b4936656f6ee5c8625da807564806a6c40" + "sha256:f3f6c583e5283298a2f7dbd3c65aca18b7f818ad96174113ab5bec0b0e35ed61", + "sha256:fea92557530de7c28f121cbed572ad93d9e0ddc60c3ca643f1b831f2f56b95d3" ], "markers": "python_version >= '3.8'", - "version": "==0.12.0" + "version": "==0.13.2" }, "shellingham": { "hashes": [ @@ -1000,12 +1017,11 @@ }, "starlette": { "hashes": [ - "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835", - "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7" + "sha256:2cbcba2a75806f8a41c722141486f37c28e30a0921c5f6fe4346cb0dcee1302f", + "sha256:dfb6d332576f136ec740296c7e8bb8c8a7125044e7c6da30744718880cdd059d" ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==0.41.3" + "markers": "python_version >= '3.9'", + "version": "==0.45.3" }, "typer": { "hashes": [ @@ -1042,11 +1058,11 @@ }, "types-setuptools": { "hashes": [ - "sha256:7cbfd3bf2944f88bbcdd321b86ddd878232a277be95d44c78a53585d78ebc2f6", - "sha256:d9478a985057ed48a994c707f548e55aababa85fe1c9b212f43ab5a1fffd3211" + "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271", + "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480" ], "markers": "python_version >= '3.8'", - "version": "==75.6.0.20241223" + "version": "==75.8.0.20250110" }, "typing-extensions": { "hashes": [ @@ -1058,11 +1074,11 @@ }, "tzdata": { "hashes": [ - "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", - "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd" + "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", + "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639" ], "markers": "python_version >= '2'", - "version": "==2024.2" + "version": "==2025.1" }, "ujson": { "hashes": [ @@ -1145,6 +1161,7 @@ "sha256:f8ccb77b3e40b151e20519c6ae6d89bfe3f4c14e8e210d910287f778368bb3d1", "sha256:fbd8fd427f57a03cff3ad6574b5e299131585d9727c8c366da4624a9069ed746" ], + "markers": "python_version >= '3.8'", "version": "==5.10.0" }, "uvicorn": { @@ -1198,6 +1215,7 @@ "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2" ], + "markers": "python_full_version >= '3.8.0'", "version": "==0.21.0" }, "vine": { @@ -1210,79 +1228,80 @@ }, "watchfiles": { "hashes": [ - "sha256:0179252846be03fa97d4d5f8233d1c620ef004855f0717712ae1c558f1974a16", - "sha256:06ce08549e49ba69ccc36fc5659a3d0ff4e3a07d542b895b8a9013fcab46c2dc", - "sha256:0b90651b4cf9e158d01faa0833b073e2e37719264bcee3eac49fc3c74e7d304b", - "sha256:0d1ec043f02ca04bf21b1b32cab155ce90c651aaf5540db8eb8ad7f7e645cba8", - "sha256:0fe4e740ea94978b2b2ab308cbf9270a246bcbb44401f77cc8740348cbaeac3d", - "sha256:127de3883bdb29dbd3b21f63126bb8fa6e773b74eaef46521025a9ce390e1073", - "sha256:1550be1a5cb3be08a3fb84636eaafa9b7119b70c71b0bed48726fd1d5aa9b868", - "sha256:160eff7d1267d7b025e983ca8460e8cc67b328284967cbe29c05f3c3163711a3", - "sha256:16db2d7e12f94818cbf16d4c8938e4d8aaecee23826344addfaaa671a1527b07", - "sha256:1c6cf7709ed3e55704cc06f6e835bf43c03bc8e3cb8ff946bf69a2e0a78d9d77", - "sha256:1da46bb1eefb5a37a8fb6fd52ad5d14822d67c498d99bda8754222396164ae42", - "sha256:1df924ba82ae9e77340101c28d56cbaff2c991bd6fe8444a545d24075abb0a87", - "sha256:1e263cc718545b7f897baeac1f00299ab6fabe3e18caaacacb0edf6d5f35513c", - "sha256:228e2247de583475d4cebf6b9af5dc9918abb99d1ef5ee737155bb39fb33f3c0", - "sha256:275c1b0e942d335fccb6014d79267d1b9fa45b5ac0639c297f1e856f2f532552", - "sha256:29b9cb35b7f290db1c31fb2fdf8fc6d3730cfa4bca4b49761083307f441cac5a", - "sha256:2b4691234d31686dca133c920f94e478b548a8e7c750f28dbbc2e4333e0d3da9", - "sha256:2b961b86cd3973f5822826017cad7f5a75795168cb645c3a6b30c349094e02e3", - "sha256:2dcc3f60c445f8ce14156854a072ceb36b83807ed803d37fdea2a50e898635d6", - "sha256:2f492d2907263d6d0d52f897a68647195bc093dafed14508a8d6817973586b6b", - "sha256:310505ad305e30cb6c5f55945858cdbe0eb297fc57378f29bacceb534ac34199", - "sha256:34e87c7b3464d02af87f1059fedda5484e43b153ef519e4085fe1a03dd94801e", - "sha256:418c5ce332f74939ff60691e5293e27c206c8164ce2b8ce0d9abf013003fb7fe", - "sha256:46e86ed457c3486080a72bc837300dd200e18d08183f12b6ca63475ab64ed651", - "sha256:48681c86f2cb08348631fed788a116c89c787fdf1e6381c5febafd782f6c3b44", - "sha256:489b80812f52a8d8c7b0d10f0d956db0efed25df2821c7a934f6143f76938bd6", - "sha256:48c9f3bc90c556a854f4cab6a79c16974099ccfa3e3e150673d82d47a4bc92c9", - "sha256:49bc1bc26abf4f32e132652f4b3bfeec77d8f8f62f57652703ef127e85a3e38d", - "sha256:52bb50a4c4ca2a689fdba84ba8ecc6a4e6210f03b6af93181bb61c4ec3abaf86", - "sha256:5691340f259b8f76b45fb31b98e594d46c36d1dc8285efa7975f7f50230c9093", - "sha256:62691f1c0894b001c7cde1195c03b7801aaa794a837bd6eef24da87d1542838d", - "sha256:632a52dcaee44792d0965c17bdfe5dc0edad5b86d6a29e53d6ad4bf92dc0ff49", - "sha256:65ab1fb635476f6170b07e8e21db0424de94877e4b76b7feabfe11f9a5fc12b5", - "sha256:6a5bc3ca468bb58a2ef50441f953e1f77b9a61bd1b8c347c8223403dc9b4ac9a", - "sha256:6a76494d2c5311584f22416c5a87c1e2cb954ff9b5f0988027bc4ef2a8a67181", - "sha256:6f8dc09ae69af50bead60783180f656ad96bd33ffbf6e7a6fce900f6d53b08f1", - "sha256:703aa5e50e465be901e0e0f9d5739add15e696d8c26c53bc6fc00eb65d7b9469", - "sha256:713f67132346bdcb4c12df185c30cf04bdf4bf6ea3acbc3ace0912cab6b7cb8c", - "sha256:75d3bcfa90454dba8df12adc86b13b6d85fda97d90e708efc036c2760cc6ba44", - "sha256:7ca05cacf2e5c4a97d02a2878a24020daca21dbb8823b023b978210a75c79098", - "sha256:80bf4b459d94a0387617a1b499f314aa04d8a64b7a0747d15d425b8c8b151da0", - "sha256:84fac88278f42d61c519a6c75fb5296fd56710b05bbdcc74bdf85db409a03780", - "sha256:889a37e2acf43c377b5124166bece139b4c731b61492ab22e64d371cce0e6e80", - "sha256:8af4b582d5fc1b8465d1d2483e5e7b880cc1a4e99f6ff65c23d64d070867ac58", - "sha256:90b0fe1fcea9bd6e3084b44875e179b4adcc4057a3b81402658d0eb58c98edf8", - "sha256:93436ed550e429da007fbafb723e0769f25bae178fbb287a94cb4ccdf42d3af3", - "sha256:995c374e86fa82126c03c5b4630c4e312327ecfe27761accb25b5e1d7ab50ec8", - "sha256:9af037d3df7188ae21dc1c7624501f2f90d81be6550904e07869d8d0e6766655", - "sha256:9e080cf917b35b20c889225a13f290f2716748362f6071b859b60b8847a6aa43", - "sha256:a2ec98e31e1844eac860e70d9247db9d75440fc8f5f679c37d01914568d18721", - "sha256:abd85de513eb83f5ec153a802348e7a5baa4588b818043848247e3e8986094e8", - "sha256:ac1be85fe43b4bf9a251978ce5c3bb30e1ada9784290441f5423a28633a958a7", - "sha256:be37f9b1f8934cd9e7eccfcb5612af9fb728fecbe16248b082b709a9d1b348bf", - "sha256:bfcae6aecd9e0cb425f5145afee871465b98b75862e038d42fe91fd753ddd780", - "sha256:c05b021f7b5aa333124f2a64d56e4cb9963b6efdf44e8d819152237bbd93ba15", - "sha256:c14a07bdb475eb696f85c715dbd0f037918ccbb5248290448488a0b4ef201aad", - "sha256:c18f3502ad0737813c7dad70e3e1cc966cc147fbaeef47a09463bbffe70b0a00", - "sha256:c2e9fe695ff151b42ab06501820f40d01310fbd58ba24da8923ace79cf6d702d", - "sha256:c68be72b1666d93b266714f2d4092d78dc53bd11cf91ed5a3c16527587a52e29", - "sha256:ca94c85911601b097d53caeeec30201736ad69a93f30d15672b967558df02885", - "sha256:cf745cbfad6389c0e331786e5fe9ae3f06e9d9c2ce2432378e1267954793975c", - "sha256:d9dd2b89a16cf7ab9c1170b5863e68de6bf83db51544875b25a5f05a7269e678", - "sha256:ddff3f8b9fa24a60527c137c852d0d9a7da2a02cf2151650029fdc97c852c974", - "sha256:e153a690b7255c5ced17895394b4f109d5dcc2a4f35cb809374da50f0e5c456a", - "sha256:ea2b51c5f38bad812da2ec0cd7eec09d25f521a8b6b6843cbccedd9a1d8a5c15", - "sha256:ef9ec8068cf23458dbf36a08e0c16f0a2df04b42a8827619646637be1769300a", - "sha256:f280b02827adc9d87f764972fbeb701cf5611f80b619c20568e1982a277d6146", - "sha256:f3ff7da165c99a5412fe5dd2304dd2dbaaaa5da718aad942dcb3a178eaa70c56", - "sha256:f58d3bfafecf3d81c15d99fc0ecf4319e80ac712c77cf0ce2661c8cf8bf84066", - "sha256:f79fe7993e230a12172ce7d7c7db061f046f672f2b946431c81aff8f60b2758b", - "sha256:ffe709b1d0bc2e9921257569675674cafb3a5f8af689ab9f3f2b3f88775b960f" - ], - "version": "==1.0.3" + "sha256:02a526ee5b5a09e8168314c905fc545c9bc46509896ed282aeb5a8ba9bd6ca27", + "sha256:05d341c71f3d7098920f8551d4df47f7b57ac5b8dad56558064c3431bdfc0b74", + "sha256:076f293100db3b0b634514aa0d294b941daa85fc777f9c698adb1009e5aca0b1", + "sha256:0799ae68dfa95136dde7c472525700bd48777875a4abb2ee454e3ab18e9fc712", + "sha256:0986902677a1a5e6212d0c49b319aad9cc48da4bd967f86a11bde96ad9676ca1", + "sha256:0bc80d91ddaf95f70258cf78c471246846c1986bcc5fd33ccc4a1a67fcb40f9a", + "sha256:13c2ce7b72026cfbca120d652f02c7750f33b4c9395d79c9790b27f014c8a5a2", + "sha256:1941b4e39de9b38b868a69b911df5e89dc43767feeda667b40ae032522b9b5f1", + "sha256:1eacd91daeb5158c598fe22d7ce66d60878b6294a86477a4715154990394c9b3", + "sha256:229e6ec880eca20e0ba2f7e2249c85bae1999d330161f45c78d160832e026ee2", + "sha256:22bb55a7c9e564e763ea06c7acea24fc5d2ee5dfc5dafc5cfbedfe58505e9f90", + "sha256:278aaa395f405972e9f523bd786ed59dfb61e4b827856be46a42130605fd0899", + "sha256:2a9f93f8439639dc244c4d2902abe35b0279102bca7bbcf119af964f51d53c19", + "sha256:308ac265c56f936636e3b0e3f59e059a40003c655228c131e1ad439957592303", + "sha256:31f1a379c9dcbb3f09cf6be1b7e83b67c0e9faabed0471556d9438a4a4e14202", + "sha256:32b026a6ab64245b584acf4931fe21842374da82372d5c039cba6bf99ef722f3", + "sha256:342622287b5604ddf0ed2d085f3a589099c9ae8b7331df3ae9845571586c4f3d", + "sha256:39f4914548b818540ef21fd22447a63e7be6e24b43a70f7642d21f1e73371590", + "sha256:3f68d8e9d5a321163ddacebe97091000955a1b74cd43724e346056030b0bacee", + "sha256:43b168bba889886b62edb0397cab5b6490ffb656ee2fcb22dec8bfeb371a9e12", + "sha256:47eb32ef8c729dbc4f4273baece89398a4d4b5d21a1493efea77a17059f4df8a", + "sha256:4810ea2ae622add560f4aa50c92fef975e475f7ac4900ce5ff5547b2434642d8", + "sha256:4e997802d78cdb02623b5941830ab06f8860038faf344f0d288d325cc9c5d2ff", + "sha256:4ebbeca9360c830766b9f0df3640b791be569d988f4be6c06d6fae41f187f105", + "sha256:4f8c4998506241dedf59613082d1c18b836e26ef2a4caecad0ec41e2a15e4226", + "sha256:55ccfd27c497b228581e2838d4386301227fc0cb47f5a12923ec2fe4f97b95af", + "sha256:5717021b199e8353782dce03bd8a8f64438832b84e2885c4a645f9723bf656d9", + "sha256:5c11ea22304d17d4385067588123658e9f23159225a27b983f343fcffc3e796a", + "sha256:5e0227b8ed9074c6172cf55d85b5670199c99ab11fd27d2c473aa30aec67ee42", + "sha256:62c9953cf85529c05b24705639ffa390f78c26449e15ec34d5339e8108c7c407", + "sha256:6ba473efd11062d73e4f00c2b730255f9c1bdd73cd5f9fe5b5da8dbd4a717205", + "sha256:740d103cd01458f22462dedeb5a3382b7f2c57d07ff033fbc9465919e5e1d0f3", + "sha256:74cb3ca19a740be4caa18f238298b9d472c850f7b2ed89f396c00a4c97e2d9ff", + "sha256:7b75fee5a16826cf5c46fe1c63116e4a156924d668c38b013e6276f2582230f0", + "sha256:7cf684aa9bba4cd95ecb62c822a56de54e3ae0598c1a7f2065d51e24637a3c5d", + "sha256:8012bd820c380c3d3db8435e8cf7592260257b378b649154a7948a663b5f84e9", + "sha256:857f5fc3aa027ff5e57047da93f96e908a35fe602d24f5e5d8ce64bf1f2fc733", + "sha256:8b1f135238e75d075359cf506b27bf3f4ca12029c47d3e769d8593a2024ce161", + "sha256:8d0d0630930f5cd5af929040e0778cf676a46775753e442a3f60511f2409f48f", + "sha256:90192cdc15ab7254caa7765a98132a5a41471cf739513cc9bcf7d2ffcc0ec7b2", + "sha256:95b42cac65beae3a362629950c444077d1b44f1790ea2772beaea95451c086bb", + "sha256:9745a4210b59e218ce64c91deb599ae8775c8a9da4e95fb2ee6fe745fc87d01a", + "sha256:9d1ef56b56ed7e8f312c934436dea93bfa3e7368adfcf3df4c0da6d4de959a1e", + "sha256:9eea33ad8c418847dd296e61eb683cae1c63329b6d854aefcd412e12d94ee235", + "sha256:9f25d0ba0fe2b6d2c921cf587b2bf4c451860086534f40c384329fb96e2044d1", + "sha256:9fe37a2de80aa785d340f2980276b17ef697ab8db6019b07ee4fd28a8359d2f3", + "sha256:a38320582736922be8c865d46520c043bff350956dfc9fbaee3b2df4e1740a4b", + "sha256:a462490e75e466edbb9fc4cd679b62187153b3ba804868452ef0577ec958f5ff", + "sha256:a5ae5706058b27c74bac987d615105da17724172d5aaacc6c362a40599b6de43", + "sha256:aa216f87594f951c17511efe5912808dfcc4befa464ab17c98d387830ce07b60", + "sha256:ab0311bb2ffcd9f74b6c9de2dda1612c13c84b996d032cd74799adb656af4e8b", + "sha256:ab594e75644421ae0a2484554832ca5895f8cab5ab62de30a1a57db460ce06c6", + "sha256:aee397456a29b492c20fda2d8961e1ffb266223625346ace14e4b6d861ba9c80", + "sha256:b045c800d55bc7e2cadd47f45a97c7b29f70f08a7c2fa13241905010a5493f94", + "sha256:b77d5622ac5cc91d21ae9c2b284b5d5c51085a0bdb7b518dba263d0af006132c", + "sha256:ba5bb3073d9db37c64520681dd2650f8bd40902d991e7b4cfaeece3e32561d08", + "sha256:bdef5a1be32d0b07dcea3318a0be95d42c98ece24177820226b56276e06b63b0", + "sha256:c2acfa49dd0ad0bf2a9c0bb9a985af02e89345a7189be1efc6baa085e0f72d7c", + "sha256:c7cce76c138a91e720d1df54014a047e680b652336e1b73b8e3ff3158e05061e", + "sha256:cc27a65069bcabac4552f34fd2dce923ce3fcde0721a16e4fb1b466d63ec831f", + "sha256:cdbd912a61543a36aef85e34f212e5d2486e7c53ebfdb70d1e0b060cc50dd0bf", + "sha256:cdcc92daeae268de1acf5b7befcd6cfffd9a047098199056c72e4623f531de18", + "sha256:d3452c1ec703aa1c61e15dfe9d482543e4145e7c45a6b8566978fbb044265a21", + "sha256:d6097538b0ae5c1b88c3b55afa245a66793a8fec7ada6755322e465fb1a0e8cc", + "sha256:d8d3d9203705b5797f0af7e7e5baa17c8588030aaadb7f6a86107b7247303817", + "sha256:e0611d244ce94d83f5b9aff441ad196c6e21b55f77f3c47608dcf651efe54c4a", + "sha256:f12969a3765909cf5dc1e50b2436eb2c0e676a3c75773ab8cc3aa6175c16e902", + "sha256:f44a39aee3cbb9b825285ff979ab887a25c5d336e5ec3574f1506a4671556a8d", + "sha256:f9ce064e81fe79faa925ff03b9f4c1a98b0bbb4a1b8c1b015afa93030cb21a49", + "sha256:fb2c46e275fbb9f0c92e7654b231543c7bbfa1df07cdc4b99fa73bedfde5c844", + "sha256:fc2eb5d14a8e0d5df7b36288979176fbb39672d45184fc4b1c004d7c3ce29317" + ], + "markers": "python_version >= '3.9'", + "version": "==1.0.4" }, "wcwidth": { "hashes": [ @@ -1293,77 +1312,78 @@ }, "websockets": { "hashes": [ - "sha256:00fe5da3f037041da1ee0cf8e308374e236883f9842c7c465aa65098b1c9af59", - "sha256:01bb2d4f0a6d04538d3c5dfd27c0643269656c28045a53439cbf1c004f90897a", - "sha256:034feb9f4286476f273b9a245fb15f02c34d9586a5bc936aff108c3ba1b21beb", - "sha256:04a97aca96ca2acedf0d1f332c861c5a4486fdcba7bcef35873820f940c4231e", - "sha256:0d4290d559d68288da9f444089fd82490c8d2744309113fc26e2da6e48b65da6", - "sha256:1288369a6a84e81b90da5dbed48610cd7e5d60af62df9851ed1d1d23a9069f10", - "sha256:14839f54786987ccd9d03ed7f334baec0f02272e7ec4f6e9d427ff584aeea8b4", - "sha256:1d045cbe1358d76b24d5e20e7b1878efe578d9897a25c24e6006eef788c0fdf0", - "sha256:1f874ba705deea77bcf64a9da42c1f5fc2466d8f14daf410bc7d4ceae0a9fcb0", - "sha256:205f672a6c2c671a86d33f6d47c9b35781a998728d2c7c2a3e1cf3333fcb62b7", - "sha256:2177ee3901075167f01c5e335a6685e71b162a54a89a56001f1c3e9e3d2ad250", - "sha256:219c8187b3ceeadbf2afcf0f25a4918d02da7b944d703b97d12fb01510869078", - "sha256:25225cc79cfebc95ba1d24cd3ab86aaa35bcd315d12fa4358939bd55e9bd74a5", - "sha256:3630b670d5057cd9e08b9c4dab6493670e8e762a24c2c94ef312783870736ab9", - "sha256:368a05465f49c5949e27afd6fbe0a77ce53082185bbb2ac096a3a8afaf4de52e", - "sha256:36ebd71db3b89e1f7b1a5deaa341a654852c3518ea7a8ddfdf69cc66acc2db1b", - "sha256:39450e6215f7d9f6f7bc2a6da21d79374729f5d052333da4d5825af8a97e6735", - "sha256:398b10c77d471c0aab20a845e7a60076b6390bfdaac7a6d2edb0d2c59d75e8d8", - "sha256:3c3deac3748ec73ef24fc7be0b68220d14d47d6647d2f85b2771cb35ea847aa1", - "sha256:3f14a96a0034a27f9d47fd9788913924c89612225878f8078bb9d55f859272b0", - "sha256:3fc753451d471cff90b8f467a1fc0ae64031cf2d81b7b34e1811b7e2691bc4bc", - "sha256:414ffe86f4d6f434a8c3b7913655a1a5383b617f9bf38720e7c0799fac3ab1c6", - "sha256:449d77d636f8d9c17952628cc7e3b8faf6e92a17ec581ec0c0256300717e1512", - "sha256:4b6caec8576e760f2c7dd878ba817653144d5f369200b6ddf9771d64385b84d4", - "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e", - "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d", - "sha256:5b918d288958dc3fa1c5a0b9aa3256cb2b2b84c54407f4813c45d52267600cd3", - "sha256:5ef440054124728cc49b01c33469de06755e5a7a4e83ef61934ad95fc327fbb0", - "sha256:660c308dabd2b380807ab64b62985eaccf923a78ebc572bd485375b9ca2b7dc7", - "sha256:6a6c9bcf7cdc0fd41cc7b7944447982e8acfd9f0d560ea6d6845428ed0562058", - "sha256:6d24fc337fc055c9e83414c94e1ee0dee902a486d19d2a7f0929e49d7d604b09", - "sha256:7048eb4415d46368ef29d32133134c513f507fff7d953c18c91104738a68c3b3", - "sha256:77569d19a13015e840b81550922056acabc25e3f52782625bc6843cfa034e1da", - "sha256:8149a0f5a72ca36720981418eeffeb5c2729ea55fa179091c81a0910a114a5d2", - "sha256:836bef7ae338a072e9d1863502026f01b14027250a4545672673057997d5c05a", - "sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0", - "sha256:87e31011b5c14a33b29f17eb48932e63e1dcd3fa31d72209848652310d3d1f0d", - "sha256:88cf9163ef674b5be5736a584c999e98daf3aabac6e536e43286eb74c126b9c7", - "sha256:8fda642151d5affdee8a430bd85496f2e2517be3a2b9d2484d633d5712b15c56", - "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179", - "sha256:90f4c7a069c733d95c308380aae314f2cb45bd8a904fb03eb36d1a4983a4993f", - "sha256:9481a6de29105d73cf4515f2bef8eb71e17ac184c19d0b9918a3701c6c9c4f23", - "sha256:9607b9a442392e690a57909c362811184ea429585a71061cd5d3c2b98065c199", - "sha256:9777564c0a72a1d457f0848977a1cbe15cfa75fa2f67ce267441e465717dcf1a", - "sha256:a032855dc7db987dff813583d04f4950d14326665d7e714d584560b140ae6b8b", - "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29", - "sha256:a35f704be14768cea9790d921c2c1cc4fc52700410b1c10948511039be824aac", - "sha256:a3dfff83ca578cada2d19e665e9c8368e1598d4e787422a460ec70e531dbdd58", - "sha256:a4c805c6034206143fbabd2d259ec5e757f8b29d0a2f0bf3d2fe5d1f60147a4a", - "sha256:a655bde548ca98f55b43711b0ceefd2a88a71af6350b0c168aa77562104f3f45", - "sha256:ad2ab2547761d79926effe63de21479dfaf29834c50f98c4bf5b5480b5838434", - "sha256:b1f3628a0510bd58968c0f60447e7a692933589b791a6b572fcef374053ca280", - "sha256:b7e7ea2f782408c32d86b87a0d2c1fd8871b0399dd762364c731d86c86069a78", - "sha256:bc6ccf7d54c02ae47a48ddf9414c54d48af9c01076a2e1023e3b486b6e72c707", - "sha256:bea45f19b7ca000380fbd4e02552be86343080120d074b87f25593ce1700ad58", - "sha256:cc1fc87428c1d18b643479caa7b15db7d544652e5bf610513d4a3478dbe823d0", - "sha256:cd7c11968bc3860d5c78577f0dbc535257ccec41750675d58d8dc66aa47fe52c", - "sha256:ceada5be22fa5a5a4cdeec74e761c2ee7db287208f54c718f2df4b7e200b8d4a", - "sha256:cf5201a04550136ef870aa60ad3d29d2a59e452a7f96b94193bee6d73b8ad9a9", - "sha256:d9fd19ecc3a4d5ae82ddbfb30962cf6d874ff943e56e0c81f5169be2fda62979", - "sha256:ddaa4a390af911da6f680be8be4ff5aaf31c4c834c1a9147bc21cbcbca2d4370", - "sha256:df174ece723b228d3e8734a6f2a6febbd413ddec39b3dc592f5a4aa0aff28098", - "sha256:e0744623852f1497d825a49a99bfbec9bea4f3f946df6eb9d8a2f0c37a2fec2e", - "sha256:e5dc25a9dbd1a7f61eca4b7cb04e74ae4b963d658f9e4f9aad9cd00b688692c8", - "sha256:e7591d6f440af7f73c4bd9404f3772bfee064e639d2b6cc8c94076e71b2471c1", - "sha256:eb6d38971c800ff02e4a6afd791bbe3b923a9a57ca9aeab7314c21c84bf9ff05", - "sha256:ed907449fe5e021933e46a3e65d651f641975a768d0649fee59f10c2985529ed", - "sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6", - "sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89" - ], - "version": "==14.1" + "sha256:02687db35dbc7d25fd541a602b5f8e451a238ffa033030b172ff86a93cb5dc2a", + "sha256:065ce275e7c4ffb42cb738dd6b20726ac26ac9ad0a2a48e33ca632351a737267", + "sha256:091ab63dfc8cea748cc22c1db2814eadb77ccbf82829bac6b2fbe3401d548eda", + "sha256:0a52a6d7cf6938e04e9dceb949d35fbdf58ac14deea26e685ab6368e73744e4c", + "sha256:0a6f3efd47ffd0d12080594f434faf1cd2549b31e54870b8470b28cc1d3817d9", + "sha256:0d8c3e2cdb38f31d8bd7d9d28908005f6fa9def3324edb9bf336d7e4266fd397", + "sha256:1979bee04af6a78608024bad6dfcc0cc930ce819f9e10342a29a05b5320355d0", + "sha256:1a5a20d5843886d34ff8c57424cc65a1deda4375729cbca4cb6b3353f3ce4142", + "sha256:1c9b6535c0e2cf8a6bf938064fb754aaceb1e6a4a51a80d884cd5db569886910", + "sha256:1f20522e624d7ffbdbe259c6b6a65d73c895045f76a93719aa10cd93b3de100c", + "sha256:2066dc4cbcc19f32c12a5a0e8cc1b7ac734e5b64ac0a325ff8353451c4b15ef2", + "sha256:20e6dd0984d7ca3037afcb4494e48c74ffb51e8013cac71cf607fffe11df7205", + "sha256:22441c81a6748a53bfcb98951d58d1af0661ab47a536af08920d129b4d1c3473", + "sha256:2c6c0097a41968b2e2b54ed3424739aab0b762ca92af2379f152c1aef0187e1c", + "sha256:2dddacad58e2614a24938a50b85969d56f88e620e3f897b7d80ac0d8a5800258", + "sha256:2e20c5f517e2163d76e2729104abc42639c41cf91f7b1839295be43302713661", + "sha256:34277a29f5303d54ec6468fb525d99c99938607bc96b8d72d675dee2b9f5bf1d", + "sha256:3bdc8c692c866ce5fefcaf07d2b55c91d6922ac397e031ef9b774e5b9ea42166", + "sha256:3c1426c021c38cf92b453cdf371228d3430acd775edee6bac5a4d577efc72365", + "sha256:44bba1a956c2c9d268bdcdf234d5e5ff4c9b6dc3e300545cbe99af59dda9dcce", + "sha256:4b27ece32f63150c268593d5fdb82819584831a83a3f5809b7521df0685cd5d8", + "sha256:4da98b72009836179bb596a92297b1a61bb5a830c0e483a7d0766d45070a08ad", + "sha256:4daa0faea5424d8713142b33825fff03c736f781690d90652d2c8b053345b0e7", + "sha256:5059ed9c54945efb321f097084b4c7e52c246f2c869815876a69d1efc4ad6eb5", + "sha256:577a4cebf1ceaf0b65ffc42c54856214165fb8ceeba3935852fc33f6b0c55e7f", + "sha256:647b573f7d3ada919fd60e64d533409a79dcf1ea21daeb4542d1d996519ca967", + "sha256:669c3e101c246aa85bc8534e495952e2ca208bd87994650b90a23d745902db9a", + "sha256:6af6a4b26eea4fc06c6818a6b962a952441e0e39548b44773502761ded8cc1d4", + "sha256:6af99a38e49f66be5a64b1e890208ad026cda49355661549c507152113049990", + "sha256:6d7ff794c8b36bc402f2e07c0b2ceb4a2424147ed4785ff03e2a7af03711d60a", + "sha256:6f1372e511c7409a542291bce92d6c83320e02c9cf392223272287ce55bc224e", + "sha256:714a9b682deb4339d39ffa674f7b674230227d981a37d5d174a4a83e3978a610", + "sha256:75862126b3d2d505e895893e3deac0a9339ce750bd27b4ba515f008b5acf832d", + "sha256:7a570862c325af2111343cc9b0257b7119b904823c675b22d4ac547163088d0d", + "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b", + "sha256:7cd5706caec1686c5d233bc76243ff64b1c0dc445339bd538f30547e787c11fe", + "sha256:80c8efa38957f20bba0117b48737993643204645e9ec45512579132508477cfc", + "sha256:862e9967b46c07d4dcd2532e9e8e3c2825e004ffbf91a5ef9dde519ee2effb0b", + "sha256:86cf1aaeca909bf6815ea714d5c5736c8d6dd3a13770e885aafe062ecbd04f1f", + "sha256:89a71173caaf75fa71a09a5f614f450ba3ec84ad9fca47cb2422a860676716f0", + "sha256:9f05702e93203a6ff5226e21d9b40c037761b2cfb637187c9802c10f58e40473", + "sha256:a39d7eceeea35db85b85e1169011bb4321c32e673920ae9c1b6e0978590012a3", + "sha256:a3c4aa3428b904d5404a0ed85f3644d37e2cb25996b7f096d77caeb0e96a3b42", + "sha256:a9b0f6c3ba3b1240f602ebb3971d45b02cc12bd1845466dd783496b3b05783a5", + "sha256:a9e72fb63e5f3feacdcf5b4ff53199ec8c18d66e325c34ee4c551ca748623bbc", + "sha256:ab95d357cd471df61873dadf66dd05dd4709cae001dd6342edafc8dc6382f307", + "sha256:ad1c1d02357b7665e700eca43a31d52814ad9ad9b89b58118bdabc365454b574", + "sha256:b374e8953ad477d17e4851cdc66d83fdc2db88d9e73abf755c94510ebddceb95", + "sha256:b439ea828c4ba99bb3176dc8d9b933392a2413c0f6b149fdcba48393f573377f", + "sha256:b4c8cef610e8d7c70dea92e62b6814a8cd24fbd01d7103cc89308d2bfe1659ef", + "sha256:bbe03eb853e17fd5b15448328b4ec7fb2407d45fb0245036d06a3af251f8e48f", + "sha256:bc63cee8596a6ec84d9753fd0fcfa0452ee12f317afe4beae6b157f0070c6c7f", + "sha256:c3ecadc7ce90accf39903815697917643f5b7cfb73c96702318a096c00aa71f5", + "sha256:c76193c1c044bd1e9b3316dcc34b174bbf9664598791e6fb606d8d29000e070c", + "sha256:c93215fac5dadc63e51bcc6dceca72e72267c11def401d6668622b47675b097f", + "sha256:cc45afb9c9b2dc0852d5c8b5321759cf825f82a31bfaf506b65bf4668c96f8b2", + "sha256:d7d9cafbccba46e768be8a8ad4635fa3eae1ffac4c6e7cb4eb276ba41297ed29", + "sha256:da85651270c6bfb630136423037dd4975199e5d4114cae6d3066641adcc9d1c7", + "sha256:dec254fcabc7bd488dab64846f588fc5b6fe0d78f641180030f8ea27b76d72c3", + "sha256:e3fbd68850c837e57373d95c8fe352203a512b6e49eaae4c2f4088ef8cf21980", + "sha256:e8179f95323b9ab1c11723e5d91a89403903f7b001828161b480a7810b334885", + "sha256:e9d0e53530ba7b8b5e389c02282f9d2aa47581514bd6049d3a7cffe1385cf5fe", + "sha256:eabdb28b972f3729348e632ab08f2a7b616c7e53d5414c12108c29972e655b20", + "sha256:ec607328ce95a2f12b595f7ae4c5d71bf502212bddcea528290b35c286932b12", + "sha256:efd9b868d78b194790e6236d9cbc46d68aba4b75b22497eb4ab64fa640c3af56", + "sha256:f2e53c72052f2596fb792a7acd9704cbc549bf70fcde8a99e899311455974ca3", + "sha256:f390024a47d904613577df83ba700bd189eedc09c57af0a904e5c39624621270", + "sha256:f8a86a269759026d2bde227652b87be79f8a734e582debf64c9d302faa1e9f03", + "sha256:fd475a974d5352390baf865309fe37dec6831aafc3014ffac1eea99e84e83fc2" + ], + "markers": "python_version >= '3.9'", + "version": "==14.2" } }, "develop": { diff --git a/README.md b/README.md index 91b39aa..cb0ef1c 100644 --- a/README.md +++ b/README.md @@ -90,10 +90,13 @@ - [Literal: `typing.Literal`](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_literal) - [Any: `typing.Any` and `object`](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_any) - [Type objects](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_type) +- [Type Alias](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_type_alias) - [Callable objects](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_callable) - [Class Variables: `typing.ClassVar`](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_class_var) - [Restricting Inheritance and Overriding: `@typing.final`](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_inheritance) - [`typing.NoReturn`](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_noreturn) +- [Generic Function and Class](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_generic) +- [Override](https://lucas-six.github.io/python-cookbook/cookbook/core/type_hint/type_hint_for_override) ### I/O, File-Like Object @@ -233,9 +236,7 @@ - [**`aiomqtt`**: Async](https://lucas-six.github.io/python-cookbook/cookbook/system_services/mqtt_aiomqtt) -## Recipes - -### Language Core (语言核心) +## TODO: Language Core (语言核心) - Parallelism and Concurrent (并发) - [Multi-Threads Parallelism for **I/O-bound** tasks](https://lucas-six.github.io/python-cookbook/recipes/core/multi_threads) @@ -272,7 +273,7 @@ ## More Details - [Linux Cookbook](https://lucas-six.github.io/linux-cookbook/) -- [Cookbook collections](https://lucas-six.github.io/) +- [Lucas' Cookbook](https://lucas-six.github.io/) ## License diff --git a/cookbook/core/text/str_fmt_spec.md b/cookbook/core/text/str_fmt_spec.md index 865d30f..cc207f5 100644 --- a/cookbook/core/text/str_fmt_spec.md +++ b/cookbook/core/text/str_fmt_spec.md @@ -170,3 +170,4 @@ Combination examples: - [PEP 3101 – Advanced String Formatting](https://peps.python.org/pep-3101/) - [PEP 498 – Literal String Interpolation](https://peps.python.org/pep-0498/) +- [PEP 701 – Syntactic formalization of f-strings](https://peps.python.org/pep-0701/) diff --git a/cookbook/core/type_hint/type_hint.md b/cookbook/core/type_hint/type_hint.md index 9a1e18f..1f96826 100644 --- a/cookbook/core/type_hint/type_hint.md +++ b/cookbook/core/type_hint/type_hint.md @@ -54,7 +54,6 @@ are handled by evaluating them in `globalns` and `localns` namespaces. - [PEP 3107 – Function Annotations](https://peps.python.org/pep-3107/) - [PEP 484 – Type Hints](https://peps.python.org/pep-0484/) - [PEP 483 – The Theory of Type Hints](https://peps.python.org/pep-0483/) -- [PEP 586 – Literal Types](https://peps.python.org/pep-0586/) - [PEP 563 – Postponed Evaluation of Annotations](https://peps.python.org/pep-0563/) - [`mypy` Documentation](https://mypy.readthedocs.io/en/latest/) - [GitHub - `typeshed`](https://github.com/python/typeshed) diff --git a/cookbook/core/type_hint/type_hint_for_generic.md b/cookbook/core/type_hint/type_hint_for_generic.md new file mode 100644 index 0000000..1a1d222 --- /dev/null +++ b/cookbook/core/type_hint/type_hint_for_generic.md @@ -0,0 +1,49 @@ +# Type Hint for Generic + +## Recipes + +### Generic Function + +```python +def generic_func[T](arg: T) -> T: + return arg + 1 +``` + +```python +# Python 3.11- + +from typing import TypeVar + +# Generic Type Variables +T = TypeVar['T', int, float] + +def generic_func(arg: T) -> T: + return arg + 1 +``` + +### Generic Class + +```python +class GenericClass[T]: + pass +``` + +```python +# Python 3.11- + +from typing import TypeVar, Generic + +# Generic Type Variables +T = TypeVar['T', int, float] + +class GenericClass(Generic[T]): + pass +``` + +## More Details + +- [Type Hint](type_hint) + +## References + +- [PEP 695 – Type Parameter Syntax](https://peps.python.org/pep-0695/) diff --git a/cookbook/core/type_hint/type_hint_for_override.md b/cookbook/core/type_hint/type_hint_for_override.md new file mode 100644 index 0000000..288146f --- /dev/null +++ b/cookbook/core/type_hint/type_hint_for_override.md @@ -0,0 +1,34 @@ +# Type Hint for Override + +New in Python **3.12**. + +## Recipes + +```python +from typing import override + +class Parent: + def foo(self) -> int: + return 1 + + def bar(self, x: str) -> str: + return x + +class Child(Parent): + @override + def foo(self) -> int: + return 2 + + @override + def baz(self) -> int: # Type check error: no matching signature in ancestor + return 1 +``` + +## More Details + +- [Type Hint](type_hint) + +## References + +- [Python - `typing.override` module](https://docs.python.org/3/library/typing.html#typing.override) +- [PEP 698 – Override Decorator for Static Typing](https://peps.python.org/pep-0698/) diff --git a/cookbook/core/type_hint/type_hint_for_type_alias.md b/cookbook/core/type_hint/type_hint_for_type_alias.md new file mode 100644 index 0000000..f6dd5ec --- /dev/null +++ b/cookbook/core/type_hint/type_hint_for_type_alias.md @@ -0,0 +1,28 @@ +# Type Hint for Type Alias + +## Recipes + +```python +# Python 3.12+ + +type Vector = list[float] +type Point[T] = tuple[T, T] +type IntOrStrSequence[T: (int, str)] = Sequence[T] # 带约束的 TypeVar +type IntFunc[**P] = Callable[P, int] # ParamSpec +``` + +```python +# Python 3.11- + +from typing import TypeAlias + +Vector: TypeAlias = list[float] +``` + +## More Details + +- [Type Hint](type_hint) + +## References + +- [`typing.TypeAliasType` - Python](https://docs.python.org/zh-cn/3.12/library/typing.html#typing.TypeAliasType) diff --git a/cookbook/core/type_hint/type_hint_for_typeddict.md b/cookbook/core/type_hint/type_hint_for_typeddict.md index e28d43c..4c89aaa 100644 --- a/cookbook/core/type_hint/type_hint_for_typeddict.md +++ b/cookbook/core/type_hint/type_hint_for_typeddict.md @@ -5,19 +5,28 @@ ## Recipes ```python -from typing import TypedDict, NotRequired +from typing import TypedDict, NotRequired, Unpack -class MyDict(TypedDict): +class KwArgs(TypedDict): key_a: int key_b: float label: NotRequired[str] # functional syntax: alternative syntax -MyDict = TypedDict('MyDict', {'key_a': int, 'key_b': float, 'label': NotRequired}) +KwArgs = TypedDict('MyDict', {'key_a': int, 'key_b': float, 'label': NotRequired}) -d: MyDict = {} +# Using `Unpack` since Python 3.12. +def func(**kwargs: Unpack[KwArgs]) -> None: + pass + + +d: KwArgs = {'key_a': 1, 'key_b': 1.2} +func(**d) +func(key_a=1, key_b=1.2) +d1: dict[int, float] = {'key_a': 1, 'key_b': 1.2} +func(**d1) # WRONG! ``` ## More Details @@ -29,4 +38,5 @@ d: MyDict = {} - [Python - `typing.TypedDict` module](https://docs.python.org/3/library/typing.html#typing.TypedDict) - [Python - `typing.NotRequired` module](https://docs.python.org/3/library/typing.html#typing.NotRequired) - [PEP 655 – Marking individual `TypedDict` items as required or potentially-missing](https://peps.python.org/pep-0655/) +- [PEP 692 – Using TypedDict for more precise **kwargs typing](https://peps.python.org/pep-0692/) - [typing - `Required`/`NotRequired`](https://typing.readthedocs.io/en/latest/spec/typeddict.html#required-notrequired) diff --git a/pyproject.toml b/pyproject.toml index c7d6bbd..ba39d76 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,15 +3,15 @@ name = "python-cookbook" description = "Recipes for Python. Hands-on code examples and snippets for daily work." authors = [{ name = "Li Yun", email = "lucassix.lee@gmail.com" }] readme = "README.md" -requires-python = "~=3.11" +requires-python = "~=3.12" license = { file = "LICENSE" } maintainers = [{ name = "Li Yun", email = "lucassix.lee@gmail.com" }] keywords = ["cookbook", "recipe", "fastapi", "mongodb"] classifiers = [ "Development Status :: 1 - Planning", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities", @@ -100,7 +100,7 @@ extend_skip = [".gitignore", ".env", ".dockerignore"] extend_skip_glob = [] [tool.mypy] -python_version = "3.11" +python_version = "3.12" plugins = ["pydantic.mypy"] exclude = [] follow_imports = "silent" @@ -128,7 +128,7 @@ ignore_missing_imports = true [tool.pylint.main] recursive = true -py-version = 3.11 +py-version = 3.12 jobs = 0 ignore = "CVS,.git,__pycache__,.mypy_cache,tests" ignore-paths = "tests" @@ -197,4 +197,4 @@ exclude = [".git", "**/__pycache__", "**/.mypy_cache"] reportGeneralTypeIssues = "none" reportUnboundVariable = "none" stubPath = "" -pythonVersion = "3.11" +pythonVersion = "3.12"