From 1b3129fd6dccbf6d20f54118c45d322b9807c33f Mon Sep 17 00:00:00 2001 From: Sergey Zhumatiy Date: Sun, 12 Jul 2026 15:59:18 -0700 Subject: [PATCH 01/14] add release notes --- Pipfile.lock | 267 +++++++++--------- .../notes/bugfix-503a9fee8f80e714.yaml | 1 - scripts/bootstrap-dev-debian.sh | 2 +- 3 files changed, 139 insertions(+), 131 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 96c5f6624..760eab78f 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -18,145 +18,154 @@ "default": { "cython": { "hashes": [ - "sha256:0b1d1f6f94cc5d42a4591f6d60d616786b9cd15576b112bc92a23131fcf38020", - "sha256:0e25f6425ad4a700d7f77cd468da9161e63658837d1bc34861a9861a4ef6346d", - "sha256:0fc6fdd6fa493be7bdda22355689d5446ac944cd71286f6f44a14b0d67ee3ff5", - "sha256:104d6f2f2c827ccc5e9e42c80ef6773a6aa94752fe6bc5b24a4eab4306fb7f07", - "sha256:11996c40c32abf843ba652a6d53cb15944c88d91f91fc4e6f0028f5df8a8f8a1", - "sha256:13062ce556a1e98d2821f7a0253b50569fdc98c36efd6653a65b21e3f8bbbf5f", - "sha256:14701edb3107a5d9305a82d9d646c4f28bfecbba74b26cc1ee2f4be08f602057", - "sha256:187685e25e037320cae513b8cc4bf9dbc4465c037051aede509cbbf207524de2", - "sha256:1dd47865f4c0a224da73acf83d113f93488d17624e2457dce1753acdfb1cc40c", - "sha256:221de0b48bf387f209003508e602ce839a80463522fc6f583ad3c8d5c890d2c1", - "sha256:2252b5aa57621848e310fe7fa6f7dce5f73aa452884a183d201a8bcebfa05a00", - "sha256:2a8ea2e7e2d3bc0d8630dafe6c4a5a89485598ff8a61885b74f8ed882597efd5", - "sha256:301bde949b4f312a1c70e214b0c3bc51a3f955d466010d2f68eb042df36447b0", - "sha256:3379c6521e25aa6cd7703bb7d635eaca75c0f9c7f1b0fdd6dd15a03bfac5f68d", - "sha256:351955559b37e6c98b48aecb178894c311be9d731b297782f2b78d111f0c9015", - "sha256:3699391125ab344d8d25438074d1097d9ba0fb674d0320599316cfe7cf5f002a", - "sha256:3999fb52d3328a6a5e8c63122b0a8bd110dfcdb98dda585a3def1426b991cba7", - "sha256:3f2b062f6df67e8a56c75e500ca330cf62c85ac26dd7fd006f07ef0f83aebfa3", - "sha256:3ff8ac1f0ecd4f505db4ab051e58e4531f5d098b6ac03b91c3b902e8d10c67b3", - "sha256:421017466e9260aca86823974e26e158e6358622f27c0f4da9c682f3b6d2e624", - "sha256:4341d6a64d47112884e0bcf31e6c075268220ee4cd02223047182d4dda94d637", - "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa", - "sha256:46aec30f217bdf096175a1a639203d44ac73a36fe7fa3dd06bd012e8f39eca0f", - "sha256:473d35681d9f93ce380e6a7c8feb2d65fc6333bd7117fbc62989e404e241dbb0", - "sha256:4e9a8d92978b15a0c7ca7f98447c6c578dc8923a0941d9d172d0b077cb69c576", - "sha256:52186101d51497519e99b60d955fd5cb3bf747c67f00d742e70ab913f1e42d31", - "sha256:52205347e916dd65d2400b977df4c697390c3aae0e96275a438cc4ae85dadc08", - "sha256:525d09b3405534763fa73bd78c8e51ac8264036ce4c16d37dfd1555a7da6d3a7", - "sha256:53b6072a89049a991d07f42060f65398448365c59c9cb515c5925b9bdc9d71f8", - "sha256:598699165cfa7c6d69513ee1bffc9e1fdd63b00b624409174c388538aa217975", - "sha256:63f2c892e9f9c1698ecfee78205541623eb31cd3a1b682668be7ac12de94aa8e", - "sha256:6823aef13669a32caf18bbb036de56065c485d9f558551a9b55061acf9c4c27f", - "sha256:6fb68cef33684f8cc97987bee6ae919eee7e18ee6a3ad7ed9516b8386ef95ae6", - "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff", - "sha256:75ba1c70b6deeaffbac123856b8d35f253da13552207aa969078611c197377e4", - "sha256:780f89c95b8aec1e403005b3bf2f0a2afa060b3eba168c86830f079339adad89", - "sha256:790263b74432cb997740d73665f4d8d00b9cd1cecbdd981d93591ddf993d4f12", - "sha256:8948802e1f5677a673ea5d22a1e7e273ca5f83e7a452786ca286eebf97cee67c", - "sha256:8acdc87e9009110adbceb7569765eb0980129055cc954c62f99fe9f094c9505e", - "sha256:8b14c24f1dc4c4c9d997cca8d1b7fb01187a218aab932328247dcf5694a10102", - "sha256:989899a85f0d9a57cebb508bd1f194cb52f0e3f7e22ac259f33d148d6422375c", - "sha256:9c02361af9bfa10ff1ccf967fc75159e56b1c8093caf565739ed77a559c1f29f", - "sha256:a0583076c4152b417a3a8a5d81ec02f58c09b67d3f22d5857e64c8734ceada8c", - "sha256:a1f4cbc70f6b7f0c939522118820e708e0d490edca42d852fa8004ec16780be2", - "sha256:a690f2ff460682ea985e8d38ec541be97e0977fa0544aadc21efc116ff8d7579", - "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1", - "sha256:aedceb6090a60854b31bf9571dc55f642a3fa5b91f11b62bcef167c52cac93d8", - "sha256:af91497dc098718e634d6ec8f91b182aea6bb3690f333fc9a7777bc70abe8810", - "sha256:b4ab2b92a3e6ed552adbe9350fd2ef3aa0cc7853cf91569f9dbed0c0699bbeab", - "sha256:b8c7e514075696ca0f60c337f9e416e61d7ccbc1aa879a56c39181ed90ec3059", - "sha256:bcd29945fafd12484cf37b1d84f12f0e7a33ba3eac5836531c6bd5283a6b3a0c", - "sha256:bfa550d9ae39e827a6e7198076df763571cb53397084974a6948af558355e028", - "sha256:c3d68751668c66c7a140b6023dba5d5d507f72063407bb609d3a5b0f3b8dfbe4", - "sha256:c69d5cad51388522b98a99b4be1b77316de85b0c0523fa865e0ea58bbb622e0a", - "sha256:c8eed5c015685106db15dd103fd040948ddca9197b1dd02222711815ea782a27", - "sha256:cee29846471ce60226b18e931d8c1c66a158db94853e3e79bc2da9bd22345008", - "sha256:d02f4ebe15aac7cdacce1a628e556c1983f26d140fd2e0ac5e0a090e605a2d38", - "sha256:d566a4e09b8979be8ab9f843bac0dd216c81f5e5f45661a9b25cd162ed80508c", - "sha256:d80a7232938d523c1a12f6b1794ab5efb1ae77ad3fde79de4bb558d8ab261619", - "sha256:d89a82937ce4037f092e9848a7bbcc65bc8e9fc9aef2bb74f5c15e7d21a73080", - "sha256:da394654c6da15c1d37f0b7ec5afd325c69a15ceafee2afba14b67a5df8a82c8", - "sha256:ddd1fe25af330f4e003421636746a546474e4ccd8f239f55d2898d80983d20ed", - "sha256:e6dd395d1a704e34a9fac00b25f0036dce6654c6b898be6f872ac2bb4f2eda48", - "sha256:eeb6860b0f4bfa402de8929833fe5370fa34069c7ebacb2d543cb017f21fb891", - "sha256:f3953d2f504176f929862e5579cfc421860c33e9707f585d70d24e1096accdf7", - "sha256:f988f7f8164a6079c705c39e2d75dbe9967e3dacafe041420d9af7b9ee424162" + "sha256:0961ba91f59492d1bef974cc6b45993c743162776188bcb79e029b442d5d4fcc", + "sha256:0d78205f525287de94effa2f2fab6b9edafdab44ef8c58ecf52fcb1013225d68", + "sha256:1034facc082cb882e1e5beb61e136ae8e282df2eafa11e9771e9b0a15c860801", + "sha256:127bc4039be48c6eebe7f1d68c33d23eb3a0c5ae95e1d730bdd048837751438b", + "sha256:1c3a33c2ff250d0277d0ee8b080ba0a0391a00e48af4a96fb09dbebbd1ac4b0e", + "sha256:1c7f4143d0f9fb7b26444e00ebf7c8845f585d56f37b73bd3fb3dac269af8732", + "sha256:2d6858eb212b9272c5daed9d76e1c82b857e4963b2b892acf7ece4f8bb22aee6", + "sha256:3142407b9d63f233c766e17000e2aac782411bf0409b9adc97cb7c320aecd199", + "sha256:3fd6464433d925cba66ae31bf5780c8a469a06da1d109180cffb39ee3c88ae20", + "sha256:41c118fd91d320cd72af26e29232ff3f1a0a170c47d477c9a176d766067a4718", + "sha256:474d9c5378032c0237b70c7af4d2122eb00719fec2cab296ddc9cf2907d55d58", + "sha256:4e9447d9b652396a285cdfbd4f9f0721842c63c6df281720e87dcc4b9ea65af5", + "sha256:4f1bbec7a7bd2c3836314e84f68e3f9a4c20e11cd164a01990a9ca34f595d5dd", + "sha256:51a1d2df1545c480f377f1bb2aea514e28956c87908f351bedc3772b3737c598", + "sha256:61767412d252558104f14c006bc89eefe00496d4f57dd951dd13666bda2ff43b", + "sha256:6335c6e8737a39734e20d25f89f425bf3274c104fc7efc05aacc7ed1a4858c9d", + "sha256:6c9bf89ac1d43a9e1c3bfee61e7b4dd8d1ef7a610001aa7779f0cb824bad8ae7", + "sha256:6f788a2fec204bdd9291d5d542a4856db101dba59f8d83789d3f1eb2895971a0", + "sha256:70db7a0c5fe5aebf272a56ddfc177bf608d6355571fd714b38f5ce14cba3b17c", + "sha256:75770f79cf67f89f7d0b08590ffc114c7a1b47352ef0ee5a3494d5fc098299f0", + "sha256:7cae933e6b82c198b42e934472a41d2a14c5e115da6ea794c33039c2694ce4e5", + "sha256:8297efe129e6421c34ddbeb09ed5627ef6c0fc4868bf7f9bdf6c147f595ccaed", + "sha256:84def174fbf8886fb026e04716908276c074d8c231e66db803abd04afcdcb998", + "sha256:8896ff6b133f346ebcf22aa23706c4031e8d9d5ae184433dfc67dc1053318b69", + "sha256:89b0fdc2ca0b502afedc4dd4ddbc4f9cb5a135245afacf9483e556e8ad3ada3b", + "sha256:a134a19bba6ce7b1dd21dedc5cb2d4ea39a4177e42e535e333786eb9d0ba61a7", + "sha256:a7761e1a97081b707a9ea4fb7c8ecdeddcc6b5ae00dda0f0b7bbf933c1b599f9", + "sha256:ab1fe11ebd61e497a848622cdd157a4324ac06e7935b1219715408844e15dd13", + "sha256:ad9a80e5dda71cf30b9c9577902f0c080aa14a215d7c178d669cda21cf5ab801", + "sha256:c85c2ceb6bc6d3bc442241038c4e8bdd9883a3afd655a9b47e1222e10fe9edf1", + "sha256:d497b1048c61a94cff61baaa1db1c441254935671311f9fb0f84c8912e532d60", + "sha256:d63a43813fef3f3e8fb14502b8526d9bb9ad2eabd0c899b22f6409c4a97d265f", + "sha256:e2221be06b6aa92486d7c3644c18cb3643b3e794600f0d6c8555a523e959a069", + "sha256:e480ae9f195cd29e5ce334e3d434c83dbac0783c0cc88f2407e31ba997724192", + "sha256:eb25b2afedc6a3585c5ae50db79ba0c3d6277ee8e1d6ce0223528db2c4981d9b", + "sha256:f2547a31fbd3b1610a8859a16edee2a141f7781691cb98a2c6fd54870c5f7541", + "sha256:f3bce1f079734753649f8a3d3a95832297207feb120d0ef4fd5db4c813cc6c04", + "sha256:f4f23a56b25221a06f91817fe8f3114ab8b48a4fac73187dbb64bc2c4a87961f", + "sha256:f635e113677666de13a2ec2979e9b1d5b90617cdfd1a691d3559be81e2dd6cb9" ], "index": "pypi", - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==3.0.11" + "markers": "python_version >= '3.8'", + "version": "==3.2.8" + }, + "packaging": { + "hashes": [ + "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", + "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661" + ], + "markers": "python_version >= '3.8'", + "version": "==26.2" }, "pbr": { "hashes": [ - "sha256:788183e382e3d1d7707db08978239965e8b9e4e5ed42669bf4758186734d5f24", - "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a" + "sha256:b46004ec30a5324672683ec848aed9e8fc500b0d261d40a3229c2d2bbfcedc29", + "sha256:ff223894eb1cd271a98076b13d3badff3bb36c424074d26334cd25aebeecea6b" ], "index": "pypi", "markers": "python_version >= '2.6'", - "version": "==6.1.0" + "version": "==7.0.3" }, "pyyaml": { "hashes": [ - "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", - "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", - "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", - "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", - "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", - "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", - "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", - "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", - "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", - "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", - "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", - "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", - "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", - "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", - "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", - "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", - "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", - "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", - "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", - "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", - "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", - "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", - "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", - "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", - "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", - "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", - "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", - "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", - "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", - "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", - "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", - "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", - "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", - "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", - "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", - "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", - "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", - "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", - "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", - "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", - "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", - "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", - "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", - "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", - "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", - "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", - "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", - "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", - "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", - "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", - "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", - "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", - "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" + "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", + "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", + "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", + "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", + "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", + "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", + "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", + "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", + "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", + "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", + "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", + "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6", + "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", + "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", + "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", + "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", + "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", + "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", + "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295", + "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", + "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", + "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", + "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", + "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", + "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", + "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", + "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", + "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b", + "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", + "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", + "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", + "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", + "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369", + "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", + "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", + "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", + "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", + "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", + "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", + "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", + "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", + "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", + "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", + "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", + "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", + "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", + "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", + "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", + "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", + "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4", + "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", + "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", + "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", + "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", + "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", + "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", + "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", + "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", + "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", + "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", + "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", + "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f", + "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", + "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", + "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", + "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", + "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", + "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", + "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", + "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3", + "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", + "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", + "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==6.0.2" + "version": "==6.0.3" + }, + "setuptools": { + "hashes": [ + "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", + "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3" + ], + "markers": "python_version >= '3.10'", + "version": "==83.0.0" }, "typing": { "hashes": [ @@ -168,12 +177,12 @@ }, "wheel": { "hashes": [ - "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", - "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248" + "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", + "sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==0.45.1" + "markers": "python_version >= '3.9'", + "version": "==0.47.0" } }, "develop": { diff --git a/releasenotes/notes/bugfix-503a9fee8f80e714.yaml b/releasenotes/notes/bugfix-503a9fee8f80e714.yaml index af50e8be7..81d55d2bc 100644 --- a/releasenotes/notes/bugfix-503a9fee8f80e714.yaml +++ b/releasenotes/notes/bugfix-503a9fee8f80e714.yaml @@ -3,4 +3,3 @@ release_summary: > fixes: - Save Content works for newer versions of Vte, fixes #1958 - diff --git a/scripts/bootstrap-dev-debian.sh b/scripts/bootstrap-dev-debian.sh index dcb1cd8d0..b6fa40048 100755 --- a/scripts/bootstrap-dev-debian.sh +++ b/scripts/bootstrap-dev-debian.sh @@ -53,7 +53,7 @@ if [[ $RUN == "1" ]]; then libcairo2-dev \ pkg-config fi - + if [[ $MAKE == "1" ]]; then echo "Install packages needed for making guake" sudo apt-get install --no-install-recommends -y \ From 1b607af4ad13f5662443ff9cb90ce24ed2fb41da Mon Sep 17 00:00:00 2001 From: Sergey Zhumatiy Date: Fri, 19 Jun 2026 11:16:07 -0700 Subject: [PATCH 02/14] Add tab activity highlighting with grace periods Highlight the title of a background tab (bold + orange) when its terminal produces output, clearing once the tab is selected. Gated behind a new "display-tab-activity" setting, off by default. To avoid lighting up every tab on session restore, activity is ignored for adjustable grace periods: a new-tab grace (default 3s) starting at tab creation, and a shorter focus-loss grace (default 1s) when a tab loses focus. The focus-loss grace never shortens an existing longer grace, so the rapid switch-page cascade during restore can't clobber the creation grace. Both periods are configurable in Preferences > General. Co-Authored-By: Claude Opus 4.8 --- guake/boxes.py | 38 ++++++++++- guake/data/org.guake.gschema.xml | 15 +++++ guake/data/prefs.glade | 110 +++++++++++++++++++++++++++++++ guake/gsettings.py | 9 +++ guake/notebook.py | 54 +++++++++++++++ guake/prefs.py | 22 +++++++ 6 files changed, 246 insertions(+), 2 deletions(-) diff --git a/guake/boxes.py b/guake/boxes.py index 665ded971..a5365c237 100644 --- a/guake/boxes.py +++ b/guake/boxes.py @@ -5,6 +5,7 @@ gi.require_version("Vte", "2.91") # vte-0.42 gi.require_version("Gtk", "3.0") +from gi.repository import GLib from gi.repository import GObject from gi.repository import Gdk from gi.repository import Gio @@ -636,10 +637,17 @@ def remove_dead_child(self, child): print("I have never seen this widget!") +# Foreground color applied to a background tab's title when it has unseen +# activity. Chosen to stay readable on both light and dark tab bars. +TAB_ACTIVITY_COLOR = "#E8A33D" + + class TabLabelEventBox(Gtk.EventBox): def __init__(self, notebook, text, settings): super().__init__() self.notebook = notebook + self._text = text + self._activity = False self.box = Gtk.Box(homogeneous=Gtk.Orientation.HORIZONTAL, spacing=0, visible=True) self.label = Gtk.Label(label=text, visible=True) self.close_button = Gtk.Button( @@ -656,10 +664,36 @@ def __init__(self, notebook, text, settings): self.connect("button-press-event", self.on_button_press, self.label) def set_text(self, text): - self.label.set_text(text) + self._text = text + self._render() def get_text(self): - return self.label.get_text() + return self._text + + def set_activity(self, active): + """Highlight (or clear) this tab's title to signal unseen output. + + Returns True if the activity state actually changed, so callers can + avoid redundant re-rendering on the frequent contents-changed signal. + """ + active = bool(active) + if active == self._activity: + return False + self._activity = active + self._render() + return True + + def get_activity(self): + return self._activity + + def _render(self): + if self._activity: + self.label.set_markup( + f'' + f"{GLib.markup_escape_text(self._text)}" + ) + else: + self.label.set_text(self._text) def grab_focus_on_last_focused_terminal(self): server_time = get_server_time(self.notebook.guake.window) diff --git a/guake/data/org.guake.gschema.xml b/guake/data/org.guake.gschema.xml index d8846e77b..cad5252fa 100644 --- a/guake/data/org.guake.gschema.xml +++ b/guake/data/org.guake.gschema.xml @@ -171,6 +171,21 @@ Audible bell If true, the system alert sound will be played on a bell character. + + false + Highlight tabs with activity + If true, the title of a background tab is highlighted when its terminal produces output, until the tab is selected. + + + 3.0 + Activity grace period for new tabs + Number of seconds during which activity is ignored on a newly created tab, to avoid highlighting it because of its initial shell prompt. + + + 1.0 + Activity grace period after losing focus + Number of seconds during which activity is ignored on a tab right after it loses focus. + 100 Window width. diff --git a/guake/data/prefs.glade b/guake/data/prefs.glade index f1b2c2db2..6e58140d5 100644 --- a/guake/data/prefs.glade +++ b/guake/data/prefs.glade @@ -52,6 +52,16 @@ 1 10 + + 60 + 0.5 + 5 + + + 60 + 0.5 + 5 + 10000000 5000 @@ -397,6 +407,106 @@ 3 + + + Highlight tabs with activity + True + True + False + start + True + True + + + + 0 + 5 + + + + + True + False + 6 + + + True + False + center + Ignore activity on new tabs for (seconds): + + + False + False + 0 + + + + + True + True + 3.0 + tab_activity_new_tab_grace_adj + 1 + 1 + True + + + + False + True + 1 + + + + + 0 + 6 + 2 + + + + + True + False + 6 + + + True + False + center + Ignore activity after losing focus for (seconds): + + + False + False + 0 + + + + + True + True + 1.0 + tab_activity_focus_loss_grace_adj + 1 + 1 + True + + + + False + True + 1 + + + + + 0 + 7 + 2 + + True diff --git a/guake/gsettings.py b/guake/gsettings.py index ea5d91b32..a53084bf1 100644 --- a/guake/gsettings.py +++ b/guake/gsettings.py @@ -89,6 +89,7 @@ def __init__(self, guake_inst): settings.general.onChangedValue("max-tab-name-length", self.max_tab_name_length_changed) settings.general.onChangedValue("display-tab-names", self.display_tab_names_changed) settings.general.onChangedValue("hide-tabs-if-one-tab", self.hide_tabs_if_one_tab_changed) + settings.general.onChangedValue("display-tab-activity", self.display_tab_activity_changed) def custom_command_file_changed(self, settings, key, user_data): self.guake.load_custom_commands() @@ -475,3 +476,11 @@ def hide_tabs_if_one_tab_changed(self, settings, key, user_data): be called and will show/hide the tab bar if necessary """ self.guake.get_notebook().hide_tabbar_if_one_tab() + + def display_tab_activity_changed(self, settings, key, user_data): + """If the gconf var display-tab-activity was disabled, clear any + activity highlights that are currently shown on tabs. + """ + if not settings.get_boolean(key): + for notebook in self.guake.notebook_manager.iter_notebooks(): + notebook.clear_all_tab_activity() diff --git a/guake/notebook.py b/guake/notebook.py index 90cb58bf7..e7606586a 100644 --- a/guake/notebook.py +++ b/guake/notebook.py @@ -36,6 +36,7 @@ import gi import os +import time gi.require_version("Gtk", "3.0") gi.require_version("Wnck", "3.0") @@ -90,6 +91,9 @@ def __init__(self, *args, **kwargs): self.notebook_on_button_press_id = self.connect( "button-press-event", self.on_button_press, None ) + # Clear the activity highlight from a tab once it becomes the current one. + self._activity_last_page = None + self.connect("switch-page", self.on_switch_page) # Action box self.pin_button = Gtk.ToggleButton( @@ -371,6 +375,12 @@ def new_page(self, directory=None, position=None, empty=False, open_tab_cwd=Fals terminal_box.set_terminal(terminal) root_terminal_box = RootTerminalBox(self.guake, self) root_terminal_box.set_child(terminal_box) + # Ignore activity on a freshly created tab for a grace period, so the + # initial shell prompt (especially on session restore) does not light up + # every background tab at once. + if self.guake: + grace = self.guake.settings.general.get_double("tab-activity-new-tab-grace") + root_terminal_box.activity_ignore_until = time.monotonic() + grace page_num = self.insert_page( root_terminal_box, None, position if position is not None else -1 ) @@ -408,6 +418,7 @@ def terminal_spawn(self, directory=None, open_tab_cwd=False): "key-press-event", lambda x, y: self.guake.accel_group.activate(x, y) if self.guake.accel_group else False, ) + terminal.connect("contents-changed", self.on_terminal_activity) if not isinstance(directory, str): directory = os.environ["HOME"] try: @@ -427,6 +438,49 @@ def terminal_spawn(self, directory=None, open_tab_cwd=False): terminal.spawn_sync_pid(directory) return terminal + def on_terminal_activity(self, terminal): + """Highlight a background tab's title when its terminal produces output.""" + if not getattr(self, "guake", None): + return + if not self.guake.settings.general.get_boolean("display-tab-activity"): + return + page_index = self.find_page_index_by_terminal(terminal) + if page_index < 0 or page_index == self.get_current_page(): + return + page = self.get_nth_page(page_index) + if time.monotonic() < getattr(page, "activity_ignore_until", 0): + return + label = self.get_tab_label(page) + if hasattr(label, "set_activity"): + label.set_activity(True) + + def on_switch_page(self, notebook, page, page_num): + """Clear the highlight from the tab being switched to, and start a short + grace period on the tab that just lost focus.""" + previous_page = self._activity_last_page + self._activity_last_page = page + if previous_page is not None and previous_page is not page and getattr( + self, "guake", None + ): + grace = self.guake.settings.general.get_double("tab-activity-focus-loss-grace") + # Never shorten an existing (e.g. longer new-tab) grace: on session + # restore every tab briefly becomes current, and clobbering the + # creation grace with this one would let the startup burst through. + previous_page.activity_ignore_until = max( + getattr(previous_page, "activity_ignore_until", 0), + time.monotonic() + grace, + ) + label = self.get_tab_label(page) + if hasattr(label, "set_activity"): + label.set_activity(False) + + def clear_all_tab_activity(self): + """Remove activity highlights from every tab (e.g. when the feature is + disabled).""" + for label in self.iter_tabs(): + if hasattr(label, "set_activity"): + label.set_activity(False) + def terminal_attached(self, terminal): terminal.emit("focus", Gtk.DirectionType.TAB_FORWARD) self.emit("terminal-spawned", terminal, terminal.pid) diff --git a/guake/prefs.py b/guake/prefs.py index d69237510..5c3097a37 100644 --- a/guake/prefs.py +++ b/guake/prefs.py @@ -480,6 +480,18 @@ def on_use_audible_bell_toggled(self, chk): """Changes the value of use_audible_bell in dconf""" self.settings.general.set_boolean("use-audible-bell", chk.get_active()) + def on_display_tab_activity_toggled(self, chk): + """Changes the value of display_tab_activity in dconf""" + self.settings.general.set_boolean("display-tab-activity", chk.get_active()) + + def on_tab_activity_new_tab_grace_changed(self, spin): + """Changes the value of tab_activity_new_tab_grace in dconf""" + self.settings.general.set_double("tab-activity-new-tab-grace", spin.get_value()) + + def on_tab_activity_focus_loss_grace_changed(self, spin): + """Changes the value of tab_activity_focus_loss_grace in dconf""" + self.settings.general.set_double("tab-activity-focus-loss-grace", spin.get_value()) + # scrolling tab def on_use_scrollbar_toggled(self, chk): @@ -1195,6 +1207,16 @@ def load_configs(self): value = self.settings.general.get_boolean("use-audible-bell") self.get_widget("use_audible_bell").set_active(value) + # highlight tabs with activity + value = self.settings.general.get_boolean("display-tab-activity") + self.get_widget("display_tab_activity").set_active(value) + + # tab activity grace periods + value = self.settings.general.get_double("tab-activity-new-tab-grace") + self.get_widget("tab_activity_new_tab_grace").set_value(value) + value = self.settings.general.get_double("tab-activity-focus-loss-grace") + self.get_widget("tab_activity_focus_loss_grace").set_value(value) + self._load_screen_settings() value = self.settings.general.get_boolean("quick-open-enable") From c65cf5766b116bc2d70b45d6c6ce9dea2a9c2417 Mon Sep 17 00:00:00 2001 From: Sergey Zhumatiy Date: Wed, 24 Jun 2026 22:26:07 -0700 Subject: [PATCH 03/14] add release note --- Pipfile | 95 ++++++- Pipfile.lock | 256 ++++++++++++++---- guake/notebook.py | 4 +- ..._activity_indication-be54b262d370a96b.yaml | 23 ++ scripts/bootstrap-dev-pip.sh | 2 +- 5 files changed, 326 insertions(+), 54 deletions(-) create mode 100644 releasenotes/notes/tab_activity_indication-be54b262d370a96b.yaml diff --git a/Pipfile b/Pipfile index 1dc1bf4a6..24ea64af1 100644 --- a/Pipfile +++ b/Pipfile @@ -35,8 +35,95 @@ tomli = "*" pre-commit = "==2.17.0" [packages] -pbr = "*" wheel = "*" -typing = {markers = "python_version < '3.5'"} -cython = "*" -pyyaml = "*" +alabaster = "==1.0.0" +astroid = "==3.3.8" +autopep8 = "==2.3.1" +babel = "==2.16.0" +black = "==24.10.0" +certifi = "==2024.12.14" +cffi = "==1.17.1" +cfgv = "==3.4.0" +charset-normalizer = "==3.4.1" +click = "==8.1.8" +colorlog = "==6.9.0" +coverage = {extras = ["toml"], version = "==7.6.10"} +cryptography = "==44.0.0" +dill = "==0.3.9" +distlib = "==0.3.9" +docutils = "==0.21.2" +dulwich = "==0.22.7" +filelock = "==3.16.1" +fiximports = "==0.1.18" +flake8 = "==7.1.1" +identify = "==2.6.4" +idna = "==3.10" +imagesize = "==1.4.1" +iniconfig = "==2.0.0" +isort = "==5.13.2" +"jaraco.classes" = "==3.4.0" +"jaraco.context" = "==6.0.1" +"jaraco.functools" = "==4.1.0" +jeepney = "==0.8.0" +jinja2 = "==3.1.5" +keyring = "==25.6.0" +markdown-it-py = "==3.0.0" +markupsafe = "==3.0.2" +mccabe = "==0.7.0" +mdurl = "==0.1.2" +mock = "==5.1.0" +more-itertools = "==10.5.0" +mypy-extensions = "==1.0.0" +nh3 = "==0.2.20" +nodeenv = "==1.9.1" +packaging = "==24.2" +pathlib2 = "==2.3.7.post1" +pathspec = "==0.12.1" +pbr = "==6.1.0" +pep8 = "==1.7.1" +pew = "==1.2.0" +pkginfo = "==1.12.0" +platformdirs = "==4.3.6" +pluggy = "==1.5.0" +pre-commit = "==2.17.0" +pycodestyle = "==2.12.1" +pycparser = "==2.22" +pyfakefs = "==5.7.3" +pyflakes = "==3.2.0" +pygments = "==2.18.0" +pylint = "==3.3.2" +pytest = "==8.3.4" +pytest-cov = "==6.0.0" +pytest-mock = "==3.14.0" +pyyaml = "==6.0.2" +readme-renderer = "==44.0" +reno = {extras = ["sphinx"], version = "==4.1.0"} +requests = "==2.32.3" +requests-toolbelt = "==1.0.0" +rfc3986 = "==2.0.0" +rich = "==13.9.4" +scandir = "==1.10.0" +secretstorage = "==3.3.3" +six = "==1.17.0" +snowballstemmer = "==2.2.0" +sphinx = "==8.1.3" +sphinx-rtd-theme = "==3.0.2" +sphinxcontrib-applehelp = "==2.0.0" +sphinxcontrib-devhelp = "==2.0.0" +sphinxcontrib-htmlhelp = "==2.1.0" +sphinxcontrib-jquery = "==4.1" +sphinxcontrib-jsmath = "==1.0.1" +sphinxcontrib-programoutput = "==0.18" +sphinxcontrib-qthelp = "==2.0.0" +sphinxcontrib-serializinghtml = "==2.0.0" +toml = "==0.10.2" +tomli = "==2.2.1" +tomlkit = "==0.13.2" +twine = "==6.0.1" +typing-extensions = "==4.12.2" +urllib3 = "==2.3.0" +virtualenv = "==20.28.0" +virtualenv-clone = "==0.5.7" +yapf = "==0.43.0" +cython = "==3.0.11" +typing = "==3.7.4.3" diff --git a/Pipfile.lock b/Pipfile.lock index 760eab78f..e868028ef 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "662e1fde9539df5911a5bd1489565617814cbd843dbe57d9bf0efe5a5d24b3ec" + "sha256": "1e9f36a4f544e92a3ad868b7e14649d333257f6463fd754827d7cb756cad44e6" }, "pipfile-spec": 6, "requires": { @@ -16,51 +16,165 @@ ] }, "default": { + "cfgv": { + "hashes": [ + "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", + "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132" + ], + "markers": "python_version >= '3.10'", + "version": "==3.5.0" + }, "cython": { "hashes": [ - "sha256:0961ba91f59492d1bef974cc6b45993c743162776188bcb79e029b442d5d4fcc", - "sha256:0d78205f525287de94effa2f2fab6b9edafdab44ef8c58ecf52fcb1013225d68", - "sha256:1034facc082cb882e1e5beb61e136ae8e282df2eafa11e9771e9b0a15c860801", - "sha256:127bc4039be48c6eebe7f1d68c33d23eb3a0c5ae95e1d730bdd048837751438b", - "sha256:1c3a33c2ff250d0277d0ee8b080ba0a0391a00e48af4a96fb09dbebbd1ac4b0e", - "sha256:1c7f4143d0f9fb7b26444e00ebf7c8845f585d56f37b73bd3fb3dac269af8732", - "sha256:2d6858eb212b9272c5daed9d76e1c82b857e4963b2b892acf7ece4f8bb22aee6", - "sha256:3142407b9d63f233c766e17000e2aac782411bf0409b9adc97cb7c320aecd199", - "sha256:3fd6464433d925cba66ae31bf5780c8a469a06da1d109180cffb39ee3c88ae20", - "sha256:41c118fd91d320cd72af26e29232ff3f1a0a170c47d477c9a176d766067a4718", - "sha256:474d9c5378032c0237b70c7af4d2122eb00719fec2cab296ddc9cf2907d55d58", - "sha256:4e9447d9b652396a285cdfbd4f9f0721842c63c6df281720e87dcc4b9ea65af5", - "sha256:4f1bbec7a7bd2c3836314e84f68e3f9a4c20e11cd164a01990a9ca34f595d5dd", - "sha256:51a1d2df1545c480f377f1bb2aea514e28956c87908f351bedc3772b3737c598", - "sha256:61767412d252558104f14c006bc89eefe00496d4f57dd951dd13666bda2ff43b", - "sha256:6335c6e8737a39734e20d25f89f425bf3274c104fc7efc05aacc7ed1a4858c9d", - "sha256:6c9bf89ac1d43a9e1c3bfee61e7b4dd8d1ef7a610001aa7779f0cb824bad8ae7", - "sha256:6f788a2fec204bdd9291d5d542a4856db101dba59f8d83789d3f1eb2895971a0", - "sha256:70db7a0c5fe5aebf272a56ddfc177bf608d6355571fd714b38f5ce14cba3b17c", - "sha256:75770f79cf67f89f7d0b08590ffc114c7a1b47352ef0ee5a3494d5fc098299f0", - "sha256:7cae933e6b82c198b42e934472a41d2a14c5e115da6ea794c33039c2694ce4e5", - "sha256:8297efe129e6421c34ddbeb09ed5627ef6c0fc4868bf7f9bdf6c147f595ccaed", - "sha256:84def174fbf8886fb026e04716908276c074d8c231e66db803abd04afcdcb998", - "sha256:8896ff6b133f346ebcf22aa23706c4031e8d9d5ae184433dfc67dc1053318b69", - "sha256:89b0fdc2ca0b502afedc4dd4ddbc4f9cb5a135245afacf9483e556e8ad3ada3b", - "sha256:a134a19bba6ce7b1dd21dedc5cb2d4ea39a4177e42e535e333786eb9d0ba61a7", - "sha256:a7761e1a97081b707a9ea4fb7c8ecdeddcc6b5ae00dda0f0b7bbf933c1b599f9", - "sha256:ab1fe11ebd61e497a848622cdd157a4324ac06e7935b1219715408844e15dd13", - "sha256:ad9a80e5dda71cf30b9c9577902f0c080aa14a215d7c178d669cda21cf5ab801", - "sha256:c85c2ceb6bc6d3bc442241038c4e8bdd9883a3afd655a9b47e1222e10fe9edf1", - "sha256:d497b1048c61a94cff61baaa1db1c441254935671311f9fb0f84c8912e532d60", - "sha256:d63a43813fef3f3e8fb14502b8526d9bb9ad2eabd0c899b22f6409c4a97d265f", - "sha256:e2221be06b6aa92486d7c3644c18cb3643b3e794600f0d6c8555a523e959a069", - "sha256:e480ae9f195cd29e5ce334e3d434c83dbac0783c0cc88f2407e31ba997724192", - "sha256:eb25b2afedc6a3585c5ae50db79ba0c3d6277ee8e1d6ce0223528db2c4981d9b", - "sha256:f2547a31fbd3b1610a8859a16edee2a141f7781691cb98a2c6fd54870c5f7541", - "sha256:f3bce1f079734753649f8a3d3a95832297207feb120d0ef4fd5db4c813cc6c04", - "sha256:f4f23a56b25221a06f91817fe8f3114ab8b48a4fac73187dbb64bc2c4a87961f", - "sha256:f635e113677666de13a2ec2979e9b1d5b90617cdfd1a691d3559be81e2dd6cb9" + "sha256:0b1d1f6f94cc5d42a4591f6d60d616786b9cd15576b112bc92a23131fcf38020", + "sha256:0e25f6425ad4a700d7f77cd468da9161e63658837d1bc34861a9861a4ef6346d", + "sha256:0fc6fdd6fa493be7bdda22355689d5446ac944cd71286f6f44a14b0d67ee3ff5", + "sha256:104d6f2f2c827ccc5e9e42c80ef6773a6aa94752fe6bc5b24a4eab4306fb7f07", + "sha256:11996c40c32abf843ba652a6d53cb15944c88d91f91fc4e6f0028f5df8a8f8a1", + "sha256:13062ce556a1e98d2821f7a0253b50569fdc98c36efd6653a65b21e3f8bbbf5f", + "sha256:14701edb3107a5d9305a82d9d646c4f28bfecbba74b26cc1ee2f4be08f602057", + "sha256:187685e25e037320cae513b8cc4bf9dbc4465c037051aede509cbbf207524de2", + "sha256:1dd47865f4c0a224da73acf83d113f93488d17624e2457dce1753acdfb1cc40c", + "sha256:221de0b48bf387f209003508e602ce839a80463522fc6f583ad3c8d5c890d2c1", + "sha256:2252b5aa57621848e310fe7fa6f7dce5f73aa452884a183d201a8bcebfa05a00", + "sha256:2a8ea2e7e2d3bc0d8630dafe6c4a5a89485598ff8a61885b74f8ed882597efd5", + "sha256:301bde949b4f312a1c70e214b0c3bc51a3f955d466010d2f68eb042df36447b0", + "sha256:3379c6521e25aa6cd7703bb7d635eaca75c0f9c7f1b0fdd6dd15a03bfac5f68d", + "sha256:351955559b37e6c98b48aecb178894c311be9d731b297782f2b78d111f0c9015", + "sha256:3699391125ab344d8d25438074d1097d9ba0fb674d0320599316cfe7cf5f002a", + "sha256:3999fb52d3328a6a5e8c63122b0a8bd110dfcdb98dda585a3def1426b991cba7", + "sha256:3f2b062f6df67e8a56c75e500ca330cf62c85ac26dd7fd006f07ef0f83aebfa3", + "sha256:3ff8ac1f0ecd4f505db4ab051e58e4531f5d098b6ac03b91c3b902e8d10c67b3", + "sha256:421017466e9260aca86823974e26e158e6358622f27c0f4da9c682f3b6d2e624", + "sha256:4341d6a64d47112884e0bcf31e6c075268220ee4cd02223047182d4dda94d637", + "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa", + "sha256:46aec30f217bdf096175a1a639203d44ac73a36fe7fa3dd06bd012e8f39eca0f", + "sha256:473d35681d9f93ce380e6a7c8feb2d65fc6333bd7117fbc62989e404e241dbb0", + "sha256:4e9a8d92978b15a0c7ca7f98447c6c578dc8923a0941d9d172d0b077cb69c576", + "sha256:52186101d51497519e99b60d955fd5cb3bf747c67f00d742e70ab913f1e42d31", + "sha256:52205347e916dd65d2400b977df4c697390c3aae0e96275a438cc4ae85dadc08", + "sha256:525d09b3405534763fa73bd78c8e51ac8264036ce4c16d37dfd1555a7da6d3a7", + "sha256:53b6072a89049a991d07f42060f65398448365c59c9cb515c5925b9bdc9d71f8", + "sha256:598699165cfa7c6d69513ee1bffc9e1fdd63b00b624409174c388538aa217975", + "sha256:63f2c892e9f9c1698ecfee78205541623eb31cd3a1b682668be7ac12de94aa8e", + "sha256:6823aef13669a32caf18bbb036de56065c485d9f558551a9b55061acf9c4c27f", + "sha256:6fb68cef33684f8cc97987bee6ae919eee7e18ee6a3ad7ed9516b8386ef95ae6", + "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff", + "sha256:75ba1c70b6deeaffbac123856b8d35f253da13552207aa969078611c197377e4", + "sha256:780f89c95b8aec1e403005b3bf2f0a2afa060b3eba168c86830f079339adad89", + "sha256:790263b74432cb997740d73665f4d8d00b9cd1cecbdd981d93591ddf993d4f12", + "sha256:8948802e1f5677a673ea5d22a1e7e273ca5f83e7a452786ca286eebf97cee67c", + "sha256:8acdc87e9009110adbceb7569765eb0980129055cc954c62f99fe9f094c9505e", + "sha256:8b14c24f1dc4c4c9d997cca8d1b7fb01187a218aab932328247dcf5694a10102", + "sha256:989899a85f0d9a57cebb508bd1f194cb52f0e3f7e22ac259f33d148d6422375c", + "sha256:9c02361af9bfa10ff1ccf967fc75159e56b1c8093caf565739ed77a559c1f29f", + "sha256:a0583076c4152b417a3a8a5d81ec02f58c09b67d3f22d5857e64c8734ceada8c", + "sha256:a1f4cbc70f6b7f0c939522118820e708e0d490edca42d852fa8004ec16780be2", + "sha256:a690f2ff460682ea985e8d38ec541be97e0977fa0544aadc21efc116ff8d7579", + "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1", + "sha256:aedceb6090a60854b31bf9571dc55f642a3fa5b91f11b62bcef167c52cac93d8", + "sha256:af91497dc098718e634d6ec8f91b182aea6bb3690f333fc9a7777bc70abe8810", + "sha256:b4ab2b92a3e6ed552adbe9350fd2ef3aa0cc7853cf91569f9dbed0c0699bbeab", + "sha256:b8c7e514075696ca0f60c337f9e416e61d7ccbc1aa879a56c39181ed90ec3059", + "sha256:bcd29945fafd12484cf37b1d84f12f0e7a33ba3eac5836531c6bd5283a6b3a0c", + "sha256:bfa550d9ae39e827a6e7198076df763571cb53397084974a6948af558355e028", + "sha256:c3d68751668c66c7a140b6023dba5d5d507f72063407bb609d3a5b0f3b8dfbe4", + "sha256:c69d5cad51388522b98a99b4be1b77316de85b0c0523fa865e0ea58bbb622e0a", + "sha256:c8eed5c015685106db15dd103fd040948ddca9197b1dd02222711815ea782a27", + "sha256:cee29846471ce60226b18e931d8c1c66a158db94853e3e79bc2da9bd22345008", + "sha256:d02f4ebe15aac7cdacce1a628e556c1983f26d140fd2e0ac5e0a090e605a2d38", + "sha256:d566a4e09b8979be8ab9f843bac0dd216c81f5e5f45661a9b25cd162ed80508c", + "sha256:d80a7232938d523c1a12f6b1794ab5efb1ae77ad3fde79de4bb558d8ab261619", + "sha256:d89a82937ce4037f092e9848a7bbcc65bc8e9fc9aef2bb74f5c15e7d21a73080", + "sha256:da394654c6da15c1d37f0b7ec5afd325c69a15ceafee2afba14b67a5df8a82c8", + "sha256:ddd1fe25af330f4e003421636746a546474e4ccd8f239f55d2898d80983d20ed", + "sha256:e6dd395d1a704e34a9fac00b25f0036dce6654c6b898be6f872ac2bb4f2eda48", + "sha256:eeb6860b0f4bfa402de8929833fe5370fa34069c7ebacb2d543cb017f21fb891", + "sha256:f3953d2f504176f929862e5579cfc421860c33e9707f585d70d24e1096accdf7", + "sha256:f988f7f8164a6079c705c39e2d75dbe9967e3dacafe041420d9af7b9ee424162" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==3.2.8" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==3.0.11" + }, + "distlib": { + "hashes": [ + "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", + "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed" + ], + "version": "==0.4.3" + }, + "dulwich": { + "hashes": [ + "sha256:04252b107a1600325f5f0301dde8b5b62f5bb51a0467e360070baddbb4edcea7", + "sha256:116ac7decb923a473540bf813c1ceb061bef07209fad5fb002d867f1907f9393", + "sha256:11b1f5a6a6075ab4f906dfb755c1d805c8c898ba4f4816b0fdb6123e113030ac", + "sha256:1c35c294acfc5a0a88d01d5db1abeba550bf6274bcc3fddbf8b365e9eea280da", + "sha256:204d14692fb1dd850ab773690f7530f4065f405e9e7dd3f85bdf92e9330ffa2d", + "sha256:21e2e9b81ab04ad83f2d4101ac515ef56ee08d06fd853c1a7ac255f20bb49963", + "sha256:27db364f2f3cf5b0dddd44d6c2ae9a20f6021e2bae8b1268fa689076f0192244", + "sha256:371394e2c6f3f9789cdc0abb965dae9bc62e79984b84f35339e9d466598c9fb0", + "sha256:405cfd53a99374ff03aacdd7a86d6a07615feca072ed69721f49ae2ebaa3eab4", + "sha256:493e2ea0f23a8e9aae8e3000a366d1fbf0ed2c13eaf8f41863f050c6392ef138", + "sha256:4940fbf7cb37870686c63dfc7682e1afdab0e55b663bb614572909b68e775d31", + "sha256:4cf80217e73a039614dde5ab2c74917833632912b788074bc7158058aafbf3e5", + "sha256:5ff9f36c95deaf7eb5d6ccde4c68adbcb932a87e03c1b479a8d94d779e7cc5d2", + "sha256:6993ad48f92dc38a43e3c1bf25efb03a62fc2cf4db86a2e904b6c7176dafc3d5", + "sha256:6d9720d591052730775dcbf450f0cd5b35162f4eeb4754337a5d763326481b2f", + "sha256:6fcbb3dec5733898be2114476ff5abaa1dbb8a6d28ffbe492b3225a5a556197e", + "sha256:6fd9911fb57ee2d6eefaf895df65e1139fbc911fa560e959b38feabe5f15003f", + "sha256:72512e2a22df6fb65ba7b66f5037046019a12343f6e9e54f42bcc4a68ab3d628", + "sha256:72ac4f3fc92d54115ba2d812263117d9577b17f4c62ae8f170c177515f62e9d3", + "sha256:794a85b8b9d4ad57d02c8cb455735419ac50c0f2e3d26d83873e34abee58cb1b", + "sha256:79728d98e0ec184856d71fd0d55abbf5ac7345b5baea9f2d1533a4de9064e13d", + "sha256:7b4a2f497718bfe1a3b21f933ee27c111b9cea560c0b2d8a6d939e1b5f297f79", + "sha256:7c187efaebb72146245ebcb872b89fdc99314fa37442119c5a5feb18af3f4b8a", + "sha256:824b7f5b22b128c1e1ad7c655e9790e2d75c7ab1ba1e40a708024193f1dc47a3", + "sha256:82e8810e57f9651a624116e3fede33276f89406cb910f517b944105e284e6755", + "sha256:8d8175dbe4feaf62bcafc8708448bfe223b4dfc71609be25c0cf2b0962abc36c", + "sha256:9139d0110580a3038048286e761e9be166ec40a2eb19218b41b75541c5d87a86", + "sha256:9e357d825b82e7fec2b83cd8e50f3c099c14c1070e1df961bfefb83943dc1582", + "sha256:ad4b6114440f9cf72315b173532ee3284f27a288b8a24bc27e45b2e54593720d", + "sha256:c60ddc8206e04e8e08208eac80130004eff0d587c82d398beeca7330cade061f", + "sha256:c639a8c9fb7e745749f2dcbd5b63a82df2fc99cfe62e2c3654ec025a42d2e51f", + "sha256:cb1f8d658f36b2ac3982715dc3e49f0d741a3e5a8c40136bebb6d8493968aa12", + "sha256:cdd15b8442b527575d733d90cfd6d3c4cbaebf989e2298b0cb57a7916c66254f", + "sha256:dd2783352917b7cb3ab12b7c3f7757210d93af6df0bd2d876a8e5b53b2feb3eb", + "sha256:dd2b66c915f1b22ca6533b48e8ee435800b25f74f419c40e1a92271666d8b297", + "sha256:e103584421b7205f022bd413a324ff26905ffa84fcc1536f5787bf554d5d390b", + "sha256:e995ad77b0685747bdb51f7a5cd7e6cb8efe73e29517b0f2c95fc2e6d10d5a90", + "sha256:eb27a9ebe9029c872abadf4f9dcb18c9f6a4b7a4afe137f79a61df1ae59dc6bf", + "sha256:f682671a2e19b7b4caa572ff3073557de049a153946305e051a4f50bb0e5e1bd", + "sha256:f887643cf1c7a04e898547bd9f0acf6654d772ebd153012433ef950315dcf776", + "sha256:fa7a089298fcbdaed493dd25c2f13574ccfc708f89a7aae8e3c25fd8393f5c81", + "sha256:fae59c5e345f5ca234c85d157f1c7d5e0086126b45b5f7cfa66ffe41d049fdd6" + ], + "markers": "python_version >= '3.10'", + "version": "==1.2.6" + }, + "filelock": { + "hashes": [ + "sha256:10cdb3656fc44541cdf30652a93fb10ec6b05325620eb316bd26893e4201538a", + "sha256:dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767" + ], + "markers": "python_version >= '3.10'", + "version": "==3.29.4" + }, + "identify": { + "hashes": [ + "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", + "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842" + ], + "markers": "python_version >= '3.10'", + "version": "==2.6.19" + }, + "nodeenv": { + "hashes": [ + "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", + "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==1.10.0" }, "packaging": { "hashes": [ @@ -79,6 +193,31 @@ "markers": "python_version >= '2.6'", "version": "==7.0.3" }, + "platformdirs": { + "hashes": [ + "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", + "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a" + ], + "markers": "python_version >= '3.10'", + "version": "==4.10.0" + }, + "pre-commit": { + "hashes": [ + "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", + "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b" + ], + "index": "pypi", + "markers": "python_version >= '3.10'", + "version": "==4.6.0" + }, + "python-discovery": { + "hashes": [ + "sha256:475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500", + "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690" + ], + "markers": "python_version >= '3.8'", + "version": "==1.4.2" + }, "pyyaml": { "hashes": [ "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", @@ -159,13 +298,22 @@ "markers": "python_version >= '3.8'", "version": "==6.0.3" }, + "reno": { + "hashes": [ + "sha256:9b6a2cb768ffb7f7c74bbd76822acff70840a1219f45bcec5080dbc108df4f96", + "sha256:f992f1fdbd16215ec9de47af08131d53a2830c9e78439eb563ce8d6a7f625370" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==4.1.0" + }, "setuptools": { "hashes": [ - "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", - "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3" + "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", + "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb" ], - "markers": "python_version >= '3.10'", - "version": "==83.0.0" + "markers": "python_version >= '3.9'", + "version": "==82.0.1" }, "typing": { "hashes": [ @@ -175,6 +323,22 @@ "markers": "python_version < '3.5'", "version": "==3.7.4.3" }, + "urllib3": { + "hashes": [ + "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", + "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897" + ], + "markers": "python_version >= '3.10'", + "version": "==2.7.0" + }, + "virtualenv": { + "hashes": [ + "sha256:55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783", + "sha256:dca3bf98275a59c652b69d68e73433e597d977c2da9198882479d1a7188009c8" + ], + "markers": "python_version >= '3.9'", + "version": "==21.5.1" + }, "wheel": { "hashes": [ "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", diff --git a/guake/notebook.py b/guake/notebook.py index e7606586a..96e199b65 100644 --- a/guake/notebook.py +++ b/guake/notebook.py @@ -459,9 +459,7 @@ def on_switch_page(self, notebook, page, page_num): grace period on the tab that just lost focus.""" previous_page = self._activity_last_page self._activity_last_page = page - if previous_page is not None and previous_page is not page and getattr( - self, "guake", None - ): + if previous_page is not None and previous_page is not page and getattr(self, "guake", None): grace = self.guake.settings.general.get_double("tab-activity-focus-loss-grace") # Never shorten an existing (e.g. longer new-tab) grace: on session # restore every tab briefly becomes current, and clobbering the diff --git a/releasenotes/notes/tab_activity_indication-be54b262d370a96b.yaml b/releasenotes/notes/tab_activity_indication-be54b262d370a96b.yaml new file mode 100644 index 000000000..c12dcc9fe --- /dev/null +++ b/releasenotes/notes/tab_activity_indication-be54b262d370a96b.yaml @@ -0,0 +1,23 @@ +release_summary: > + Added indication of activity in non-focused tabs. Added settings for enabling/disabling + tab activity indication, and "grace" time intervals for new tab and unfocused tab. + +features: + - | + - add tabs activity indication + +known_issues: + +upgrade: + +deprecations: + +security: + +fixes: + +translations: + +notes_for_package_maintainers: + +other: diff --git a/scripts/bootstrap-dev-pip.sh b/scripts/bootstrap-dev-pip.sh index e6bf2c2c5..d4c2da5db 100755 --- a/scripts/bootstrap-dev-pip.sh +++ b/scripts/bootstrap-dev-pip.sh @@ -8,7 +8,7 @@ else op="--user " fi -python3 -m pip install $op --upgrade \ +python3 -m pip install $op --upgrade --break-system-packages \ 'pip==24.3.1' \ 'pipenv==2024.4.0' \ || echo "you may need to sudo me !" From 5e3b0cbdd8f0c3c789442aaabef22583a1aa973b Mon Sep 17 00:00:00 2001 From: Sergey Zhumatiy Date: Fri, 10 Jul 2026 12:30:10 -0700 Subject: [PATCH 04/14] Add stale/cooldown color stage to tab activity indicator Fade a highlighted tab from active (orange) to stale (blue) once tab-activity-cooldown seconds pass with no new terminal output, so long-quiet tabs are visually distinct from tabs with fresh activity. Co-Authored-By: Claude Sonnet 5 --- guake/boxes.py | 32 +++++++++--- guake/data/org.guake.gschema.xml | 5 ++ guake/data/prefs.glade | 47 +++++++++++++++++ guake/notebook.py | 51 ++++++++++++++++--- guake/prefs.py | 6 +++ ...ab_activity_cooldown-5cf02db0a9a035dd.yaml | 25 +++++++++ 6 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 releasenotes/notes/tab_activity_cooldown-5cf02db0a9a035dd.yaml diff --git a/guake/boxes.py b/guake/boxes.py index a5365c237..c524aa9d7 100644 --- a/guake/boxes.py +++ b/guake/boxes.py @@ -640,6 +640,9 @@ def remove_dead_child(self, child): # Foreground color applied to a background tab's title when it has unseen # activity. Chosen to stay readable on both light and dark tab bars. TAB_ACTIVITY_COLOR = "#E8A33D" +# Foreground color applied once unseen activity has gone quiet for a while +# (see tab-activity-cooldown): still unread, but no longer urgent. +TAB_ACTIVITY_STALE_COLOR = "#3D8AE8" class TabLabelEventBox(Gtk.EventBox): @@ -647,7 +650,7 @@ def __init__(self, notebook, text, settings): super().__init__() self.notebook = notebook self._text = text - self._activity = False + self._activity_state = None self.box = Gtk.Box(homogeneous=Gtk.Orientation.HORIZONTAL, spacing=0, visible=True) self.label = Gtk.Label(label=text, visible=True) self.close_button = Gtk.Button( @@ -676,22 +679,39 @@ def set_activity(self, active): Returns True if the activity state actually changed, so callers can avoid redundant re-rendering on the frequent contents-changed signal. """ - active = bool(active) - if active == self._activity: + return self.set_activity_state("active" if active else None) + + def set_activity_state(self, state): + """Set the activity indicator state: None (no activity), "active" + (fresh, unseen output) or "stale" (unseen output, but quiet for a + while - see tab-activity-cooldown). + + Returns True if the state actually changed, so callers can avoid + redundant re-rendering on the frequent contents-changed signal. + """ + if state == self._activity_state: return False - self._activity = active + self._activity_state = state self._render() return True def get_activity(self): - return self._activity + return self._activity_state is not None + + def get_activity_state(self): + return self._activity_state def _render(self): - if self._activity: + if self._activity_state == "active": self.label.set_markup( f'' f"{GLib.markup_escape_text(self._text)}" ) + elif self._activity_state == "stale": + self.label.set_markup( + f'' + f"{GLib.markup_escape_text(self._text)}" + ) else: self.label.set_text(self._text) diff --git a/guake/data/org.guake.gschema.xml b/guake/data/org.guake.gschema.xml index cad5252fa..f17b32099 100644 --- a/guake/data/org.guake.gschema.xml +++ b/guake/data/org.guake.gschema.xml @@ -186,6 +186,11 @@ Activity grace period after losing focus Number of seconds during which activity is ignored on a tab right after it loses focus. + + 30.0 + Activity cooldown before fading + Number of seconds of inactivity after which a highlighted tab's indicator fades from active to stale color. + 100 Window width. diff --git a/guake/data/prefs.glade b/guake/data/prefs.glade index 6e58140d5..e6cf35b35 100644 --- a/guake/data/prefs.glade +++ b/guake/data/prefs.glade @@ -62,6 +62,11 @@ 0.5 5 + + 600 + 1 + 10 + 10000000 5000 @@ -507,6 +512,48 @@ 2 + + + True + False + 6 + + + True + False + center + Fade activity indicator to stale color after (seconds): + + + False + False + 0 + + + + + True + True + 30.0 + tab_activity_cooldown_adj + 1 + 1 + True + + + + False + True + 1 + + + + + 0 + 8 + 2 + + True diff --git a/guake/notebook.py b/guake/notebook.py index 96e199b65..e6fd6cec2 100644 --- a/guake/notebook.py +++ b/guake/notebook.py @@ -40,6 +40,7 @@ gi.require_version("Gtk", "3.0") gi.require_version("Wnck", "3.0") +from gi.repository import GLib from gi.repository import GObject from gi.repository import Gdk from gi.repository import Gtk @@ -93,6 +94,7 @@ def __init__(self, *args, **kwargs): ) # Clear the activity highlight from a tab once it becomes the current one. self._activity_last_page = None + self._activity_timer_id = None self.connect("switch-page", self.on_switch_page) # Action box @@ -450,9 +452,46 @@ def on_terminal_activity(self, terminal): page = self.get_nth_page(page_index) if time.monotonic() < getattr(page, "activity_ignore_until", 0): return + page.activity_last_seen = time.monotonic() label = self.get_tab_label(page) - if hasattr(label, "set_activity"): - label.set_activity(True) + if hasattr(label, "set_activity_state"): + label.set_activity_state("active") + self._ensure_activity_timer() + + def _ensure_activity_timer(self): + """Start the periodic tick that fades ACTIVE tabs to STALE once their + cooldown elapses. A single shared timer is used regardless of how + many tabs are currently highlighted.""" + if self._activity_timer_id is None: + self._activity_timer_id = GLib.timeout_add(1000, self._tick_activity_states) + + def _tick_activity_states(self): + """Fade any tab whose activity has gone quiet past the configured + cooldown from ACTIVE (orange) to STALE (blue). Returns False (and + clears the timer id) once no tab is ACTIVE any more, so the timer + auto-cancels instead of ticking forever in the idle case.""" + if not getattr(self, "guake", None): + self._activity_timer_id = None + return False + cooldown = self.guake.settings.general.get_double("tab-activity-cooldown") + now = time.monotonic() + any_active = False + for page in self.iter_pages(): + if page is None: + continue + label = self.get_tab_label(page) + if not hasattr(label, "get_activity_state"): + continue + if label.get_activity_state() != "active": + continue + if now - getattr(page, "activity_last_seen", now) >= cooldown: + label.set_activity_state("stale") + else: + any_active = True + if not any_active: + self._activity_timer_id = None + return False + return True def on_switch_page(self, notebook, page, page_num): """Clear the highlight from the tab being switched to, and start a short @@ -469,15 +508,15 @@ def on_switch_page(self, notebook, page, page_num): time.monotonic() + grace, ) label = self.get_tab_label(page) - if hasattr(label, "set_activity"): - label.set_activity(False) + if hasattr(label, "set_activity_state"): + label.set_activity_state(None) def clear_all_tab_activity(self): """Remove activity highlights from every tab (e.g. when the feature is disabled).""" for label in self.iter_tabs(): - if hasattr(label, "set_activity"): - label.set_activity(False) + if hasattr(label, "set_activity_state"): + label.set_activity_state(None) def terminal_attached(self, terminal): terminal.emit("focus", Gtk.DirectionType.TAB_FORWARD) diff --git a/guake/prefs.py b/guake/prefs.py index 5c3097a37..631b60e33 100644 --- a/guake/prefs.py +++ b/guake/prefs.py @@ -492,6 +492,10 @@ def on_tab_activity_focus_loss_grace_changed(self, spin): """Changes the value of tab_activity_focus_loss_grace in dconf""" self.settings.general.set_double("tab-activity-focus-loss-grace", spin.get_value()) + def on_tab_activity_cooldown_changed(self, spin): + """Changes the value of tab_activity_cooldown in dconf""" + self.settings.general.set_double("tab-activity-cooldown", spin.get_value()) + # scrolling tab def on_use_scrollbar_toggled(self, chk): @@ -1216,6 +1220,8 @@ def load_configs(self): self.get_widget("tab_activity_new_tab_grace").set_value(value) value = self.settings.general.get_double("tab-activity-focus-loss-grace") self.get_widget("tab_activity_focus_loss_grace").set_value(value) + value = self.settings.general.get_double("tab-activity-cooldown") + self.get_widget("tab_activity_cooldown").set_value(value) self._load_screen_settings() diff --git a/releasenotes/notes/tab_activity_cooldown-5cf02db0a9a035dd.yaml b/releasenotes/notes/tab_activity_cooldown-5cf02db0a9a035dd.yaml new file mode 100644 index 000000000..28bfe8acf --- /dev/null +++ b/releasenotes/notes/tab_activity_cooldown-5cf02db0a9a035dd.yaml @@ -0,0 +1,25 @@ +release_summary: > + Tab activity indicators now fade from an active color to a stale color after + a configurable cooldown period of no new output, so long-quiet tabs are + visually distinguished from tabs with fresh activity. + +features: + - | + - add a stale/cooldown color stage to tab activity indication, with a + configurable "tab-activity-cooldown" setting + +known_issues: + +upgrade: + +deprecations: + +security: + +fixes: + +translations: + +notes_for_package_maintainers: + +other: From b3b9a8486f296fd9c58d0b1428d66bf2b108e052 Mon Sep 17 00:00:00 2001 From: Rostislav Svoboda Date: Wed, 1 Jul 2026 12:38:04 +0200 Subject: [PATCH 05/14] Fix typo in error log message --- guake/customcommands.py | 2 +- .../notes/Fix_typo_in_error_log_message-3bc0374cda2dc957.yaml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/Fix_typo_in_error_log_message-3bc0374cda2dc957.yaml diff --git a/guake/customcommands.py b/guake/customcommands.py index fc0a8debb..c6219e6ba 100644 --- a/guake/customcommands.py +++ b/guake/customcommands.py @@ -48,7 +48,7 @@ def get_file_path(self): def _load_json(self, file_name): if not os.path.exists(file_name): - log.error("Custom file does not exit: %s", file_name) + log.error("Custom file does not exist: %s", file_name) return None try: with open(file_name, encoding="utf-8") as f: diff --git a/releasenotes/notes/Fix_typo_in_error_log_message-3bc0374cda2dc957.yaml b/releasenotes/notes/Fix_typo_in_error_log_message-3bc0374cda2dc957.yaml new file mode 100644 index 000000000..0528b7444 --- /dev/null +++ b/releasenotes/notes/Fix_typo_in_error_log_message-3bc0374cda2dc957.yaml @@ -0,0 +1,3 @@ +fixes: + - | + - Fix typo in error log message From 98823d9bb2c1788ca251b9bb5a7463dd89f9270a Mon Sep 17 00:00:00 2001 From: Twilight0 Date: Sun, 19 Jul 2026 11:00:45 +0300 Subject: [PATCH 06/14] fix: disable XKB cooked accelerators to restore F12 global hotkey The keybinder library's XKB modifier computation (FinallyGetModifiersForKeycode) spuriously returns Mod1/Alt as a consumed modifier for F12 at level 0 on certain systems (e.g. Cinnamon/Muffin). This causes XGrabKey to attempt grabbing Alt+F12 instead of plain F12, which fails because the X server reserves Alt+Fn keys for VT switching. Disabling cooked accelerators matches the approach used by Tilda terminal's tomboykeybinder.c, which does not use XKB at all for modifier computation. Users who need cooked accelerators can re-enable them via GSettings. sem-ver: bugfix --- guake/guake_app.py | 6 ++++++ releasenotes/notes/f12-global-hotkey-bugfix.yaml | 9 +++++++++ 2 files changed, 15 insertions(+) create mode 100644 releasenotes/notes/f12-global-hotkey-bugfix.yaml diff --git a/guake/guake_app.py b/guake/guake_app.py index aa4d671be..f81e7bcb1 100644 --- a/guake/guake_app.py +++ b/guake/guake_app.py @@ -265,6 +265,12 @@ def window_event(*args): # loading and setting up configuration stuff GSettingHandler(self) Keybinder.init() + # Disable XKB cooked accelerators to work around a keybinder + # library bug where FinallyGetModifiersForKeycode() returns + # spurious consumed modifiers for function keys (e.g. Alt for + # F12), causing XGrabKey to grab Alt+F12 which the X server + # has reserved for VT switching. + Keybinder.set_use_cooked_accelerators(False) self.hotkeys = Keybinder Keybindings(self) self.load_config() diff --git a/releasenotes/notes/f12-global-hotkey-bugfix.yaml b/releasenotes/notes/f12-global-hotkey-bugfix.yaml new file mode 100644 index 000000000..e7e12bfd8 --- /dev/null +++ b/releasenotes/notes/f12-global-hotkey-bugfix.yaml @@ -0,0 +1,9 @@ +release_summary: > + Fix F12 global hotkey not binding on certain X11 configurations + +fixes: + - | + F12 global hotkey now works on systems where XKB consumed-modifier + computation (keybinder's FinallyGetModifiersForKeycode) spuriously + returns Mod1/Alt for level 0, preventing the grab. Disabling XKB + cooked accelerators matches the approach used by Tilda terminal. From 43eb3fbca865d4d67e9ffc65ffd1e11f494e4333 Mon Sep 17 00:00:00 2001 From: Alexander Schepanovski Date: Tue, 4 Aug 2026 11:11:12 +0700 Subject: [PATCH 07/14] Run the quick-open command in the active tab dir Allows command to work for relative paths, including partial ones. sem-ver: bugfix --- guake/terminal.py | 2 +- .../notes/bugfix-quick-open-cwd-7c4e1a9b3d2f8065.yaml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/bugfix-quick-open-cwd-7c4e1a9b3d2f8065.yaml diff --git a/guake/terminal.py b/guake/terminal.py index 2e587d7c7..c4ad5c9ca 100644 --- a/guake/terminal.py +++ b/guake/terminal.py @@ -458,7 +458,7 @@ def _execute_quick_open(self, filepath, line_number): else: resolved_cmdline += " &" logging.debug("Executing it independently") - subprocess.call(resolved_cmdline, shell=True) + subprocess.call(resolved_cmdline, shell=True, cwd=self.get_current_directory()) def handleTerminalMatch(self, matched_string): value, tag = matched_string diff --git a/releasenotes/notes/bugfix-quick-open-cwd-7c4e1a9b3d2f8065.yaml b/releasenotes/notes/bugfix-quick-open-cwd-7c4e1a9b3d2f8065.yaml new file mode 100644 index 000000000..8e93fea6f --- /dev/null +++ b/releasenotes/notes/bugfix-quick-open-cwd-7c4e1a9b3d2f8065.yaml @@ -0,0 +1,4 @@ +fixes: + - | + The quick-open command now runs in the active tab directory, so relative + paths work. From 3a5a29fee32a3104d88980b0052e90197cb9396e Mon Sep 17 00:00:00 2001 From: Alexander Schepanovski Date: Mon, 3 Aug 2026 16:28:58 +0700 Subject: [PATCH 08/14] Consume Ctrl+click once Guake has handled it button_press() handled Ctrl+click but returned None, so the event kept propagating and VTE's default handler also forwarded it to the child process as a mouse report. Any mouse-aware application then acted on the same click, e.g. a terminal multiplexer that opens links itself ended up opening the very same URL a second time. Return True only when one of the Ctrl+click branches actually handled the event, so an unhandled Ctrl+click still propagates and Ctrl+drag block selection and Ctrl+click inside mouse-aware applications keep working. sem-ver: bugfix --- guake/terminal.py | 5 +++++ ...ugfix-ctrl-click-event-not-consumed-3f1c9a2b4d5e6f70.yaml | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 releasenotes/notes/bugfix-ctrl-click-event-not-consumed-3f1c9a2b4d5e6f70.yaml diff --git a/guake/terminal.py b/guake/terminal.py index c4ad5c9ca..cb7bde8d0 100644 --- a/guake/terminal.py +++ b/guake/terminal.py @@ -374,6 +374,11 @@ def button_press(self, terminal, event): self.quick_open() elif matched_string is not None and matched_string[0]: self._on_ctrl_click_matcher(matched_string) + else: + return False + # Stop the event here: otherwise VTE also forwards the click to the + # application running in the terminal, which acts on it a second time. + return True elif event.button == 3 and matched_string: self.found_link = self.handleTerminalMatch(matched_string) self.matched_value = matched_string[0] diff --git a/releasenotes/notes/bugfix-ctrl-click-event-not-consumed-3f1c9a2b4d5e6f70.yaml b/releasenotes/notes/bugfix-ctrl-click-event-not-consumed-3f1c9a2b4d5e6f70.yaml new file mode 100644 index 000000000..b34d30f65 --- /dev/null +++ b/releasenotes/notes/bugfix-ctrl-click-event-not-consumed-3f1c9a2b4d5e6f70.yaml @@ -0,0 +1,5 @@ +fixes: + - | + Ctrl+click on a link or quick-open match no longer leaks the click to the + application running in the terminal, which could act on the same click a + second time (e.g. a multiplexer opening the very same URL again). From 5b63737a1f36313cc4b28aa69de7bea9ea56aa89 Mon Sep 17 00:00:00 2001 From: anhtumai Date: Tue, 4 Aug 2026 21:28:08 +0300 Subject: [PATCH 09/14] Fix CI: install libgirepository-2.0-dev required by newer PyGObject builds and fix some pylint stylings --- .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 2 +- Pipfile | 2 +- Pipfile.lock | 1647 +++++++++++++++++++++++++------ guake/terminal.py | 2 +- scripts/bootstrap-dev-arch.sh | 1 + scripts/bootstrap-dev-debian.sh | 1 + scripts/bootstrap-dev-fedora.sh | 1 + setup.cfg | 2 +- 9 files changed, 1380 insertions(+), 280 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cafed79ba..8e71075a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,7 +51,7 @@ jobs: # for dev make dev-actions - pipenv run pip install pycairo pygobject platformdirs importlib_metadata + pipenv run pip install pycairo "pygobject<3.52" platformdirs importlib_metadata # check make check make build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 96e640b01..9ddc67c86 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -60,7 +60,7 @@ jobs: # for dev make dev-actions - pipenv run pip install pycairo pygobject + pipenv run pip install pycairo "pygobject<3.52" # check make build # prepare for deployment diff --git a/Pipfile b/Pipfile index 24ea64af1..3f52f5b90 100644 --- a/Pipfile +++ b/Pipfile @@ -79,7 +79,7 @@ nodeenv = "==1.9.1" packaging = "==24.2" pathlib2 = "==2.3.7.post1" pathspec = "==0.12.1" -pbr = "==6.1.0" +pbr = "==7.0.3" pep8 = "==1.7.1" pew = "==1.2.0" pkginfo = "==1.12.0" diff --git a/Pipfile.lock b/Pipfile.lock index e868028ef..5117038e0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "1e9f36a4f544e92a3ad868b7e14649d333257f6463fd754827d7cb756cad44e6" + "sha256": "54735286e36ac689caf1b2ee68690d2e8abf1620f54cd35208ba386c073c9203" }, "pipfile-spec": 6, "requires": { @@ -16,337 +16,1378 @@ ] }, "default": { + "alabaster": { + "hashes": [ + "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", + "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b" + ], + "index": "pypi", + "markers": "python_version >= '3.10'", + "version": "==1.0.0" + }, + "astroid": { + "hashes": [ + "sha256:187ccc0c248bfbba564826c26f070494f7bc964fd286b6d9fff4420e55de828c", + "sha256:a88c7994f914a4ea8572fac479459f4955eeccc877be3f2d959a33273b0cf40b" + ], + "index": "pypi", + "markers": "python_full_version >= '3.9.0'", + "version": "==3.3.8" + }, + "autopep8": { + "hashes": [ + "sha256:8d6c87eba648fdcfc83e29b788910b8643171c395d9c4bcf115ece035b9c9dda", + "sha256:a203fe0fcad7939987422140ab17a930f684763bf7335bdb6709991dd7ef6c2d" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.3.1" + }, + "babel": { + "hashes": [ + "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", + "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.16.0" + }, + "black": { + "hashes": [ + "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f", + "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd", + "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea", + "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981", + "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b", + "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7", + "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8", + "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175", + "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d", + "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392", + "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad", + "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f", + "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f", + "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b", + "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875", + "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3", + "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800", + "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65", + "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2", + "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812", + "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50", + "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==24.10.0" + }, + "certifi": { + "hashes": [ + "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", + "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==2024.12.14" + }, + "cffi": { + "hashes": [ + "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", + "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", + "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1", + "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", + "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", + "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", + "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", + "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", + "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", + "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc", + "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", + "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", + "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", + "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", + "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", + "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", + "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b", + "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", + "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", + "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c", + "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", + "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", + "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", + "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8", + "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1", + "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", + "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", + "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", + "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", + "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", + "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", + "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", + "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", + "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", + "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", + "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", + "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", + "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", + "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964", + "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", + "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", + "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", + "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", + "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", + "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", + "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", + "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", + "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", + "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", + "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", + "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", + "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", + "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9", + "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", + "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", + "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", + "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", + "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", + "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", + "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", + "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", + "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==1.17.1" + }, "cfgv": { "hashes": [ - "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", - "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132" + "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", + "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.4.0" + }, + "charset-normalizer": { + "hashes": [ + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==3.4.1" + }, + "click": { + "hashes": [ + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==8.1.8" + }, + "colorlog": { + "hashes": [ + "sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff", + "sha256:bfba54a1b93b94f54e1f4fe48395725a3d92fd2a4af702f6bd70946bdc0c6ac2" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==6.9.0" + }, + "coverage": { + "extras": [ + "toml" + ], + "hashes": [ + "sha256:05fca8ba6a87aabdd2d30d0b6c838b50510b56cdcfc604d40760dae7153b73d9", + "sha256:0aa9692b4fdd83a4647eeb7db46410ea1322b5ed94cd1715ef09d1d5922ba87f", + "sha256:0c807ca74d5a5e64427c8805de15b9ca140bba13572d6d74e262f46f50b13273", + "sha256:0d7a2bf79378d8fb8afaa994f91bfd8215134f8631d27eba3e0e2c13546ce994", + "sha256:0f460286cb94036455e703c66988851d970fdfd8acc2a1122ab7f4f904e4029e", + "sha256:204a8238afe787323a8b47d8be4df89772d5c1e4651b9ffa808552bdf20e1d50", + "sha256:2396e8116db77789f819d2bc8a7e200232b7a282c66e0ae2d2cd84581a89757e", + "sha256:254f1a3b1eef5f7ed23ef265eaa89c65c8c5b6b257327c149db1ca9d4a35f25e", + "sha256:26bcf5c4df41cad1b19c84af71c22cbc9ea9a547fc973f1f2cc9a290002c8b3c", + "sha256:27c6e64726b307782fa5cbe531e7647aee385a29b2107cd87ba7c0105a5d3853", + "sha256:299e91b274c5c9cdb64cbdf1b3e4a8fe538a7a86acdd08fae52301b28ba297f8", + "sha256:2bcfa46d7709b5a7ffe089075799b902020b62e7ee56ebaed2f4bdac04c508d8", + "sha256:2ccf240eb719789cedbb9fd1338055de2761088202a9a0b73032857e53f612fe", + "sha256:32ee6d8491fcfc82652a37109f69dee9a830e9379166cb73c16d8dc5c2915165", + "sha256:3f7b444c42bbc533aaae6b5a2166fd1a797cdb5eb58ee51a92bee1eb94a1e1cb", + "sha256:457574f4599d2b00f7f637a0700a6422243b3565509457b2dbd3f50703e11f59", + "sha256:489a01f94aa581dbd961f306e37d75d4ba16104bbfa2b0edb21d29b73be83609", + "sha256:4bcc276261505d82f0ad426870c3b12cb177752834a633e737ec5ee79bbdff18", + "sha256:4e0de1e902669dccbf80b0415fb6b43d27edca2fbd48c74da378923b05316098", + "sha256:4e4630c26b6084c9b3cb53b15bd488f30ceb50b73c35c5ad7871b869cb7365fd", + "sha256:4eea95ef275de7abaef630c9b2c002ffbc01918b726a39f5a4353916ec72d2f3", + "sha256:507a20fc863cae1d5720797761b42d2d87a04b3e5aeb682ef3b7332e90598f43", + "sha256:54a5f0f43950a36312155dae55c505a76cd7f2b12d26abeebbe7a0b36dbc868d", + "sha256:55b201b97286cf61f5e76063f9e2a1d8d2972fc2fcfd2c1272530172fd28c359", + "sha256:59af35558ba08b758aec4d56182b222976330ef8d2feacbb93964f576a7e7a90", + "sha256:5c912978f7fbf47ef99cec50c4401340436d200d41d714c7a4766f377c5b7b78", + "sha256:656c82b8a0ead8bba147de9a89bda95064874c91a3ed43a00e687f23cc19d53a", + "sha256:6713ba4b4ebc330f3def51df1d5d38fad60b66720948112f114968feb52d3f99", + "sha256:675cefc4c06e3b4c876b85bfb7c59c5e2218167bbd4da5075cbe3b5790a28988", + "sha256:6f93531882a5f68c28090f901b1d135de61b56331bba82028489bc51bdd818d2", + "sha256:714f942b9c15c3a7a5fe6876ce30af831c2ad4ce902410b7466b662358c852c0", + "sha256:79109c70cc0882e4d2d002fe69a24aa504dec0cc17169b3c7f41a1d341a73694", + "sha256:7bbd8c8f1b115b892e34ba66a097b915d3871db7ce0e6b9901f462ff3a975377", + "sha256:7ed2f37cfce1ce101e6dffdfd1c99e729dd2ffc291d02d3e2d0af8b53d13840d", + "sha256:7fb105327c8f8f0682e29843e2ff96af9dcbe5bab8eeb4b398c6a33a16d80a23", + "sha256:89d76815a26197c858f53c7f6a656686ec392b25991f9e409bcef020cd532312", + "sha256:9a7cfb50515f87f7ed30bc882f68812fd98bc2852957df69f3003d22a2aa0abf", + "sha256:9e1747bab246d6ff2c4f28b4d186b205adced9f7bd9dc362051cc37c4a0c7bd6", + "sha256:9e80eba8801c386f72e0712a0453431259c45c3249f0009aff537a517b52942b", + "sha256:a01ec4af7dfeb96ff0078ad9a48810bb0cc8abcb0115180c6013a6b26237626c", + "sha256:a372c89c939d57abe09e08c0578c1d212e7a678135d53aa16eec4430adc5e690", + "sha256:a3b204c11e2b2d883946fe1d97f89403aa1811df28ce0447439178cc7463448a", + "sha256:a534738b47b0de1995f85f582d983d94031dffb48ab86c95bdf88dc62212142f", + "sha256:a5e37dc41d57ceba70956fa2fc5b63c26dba863c946ace9705f8eca99daecdc4", + "sha256:aa744da1820678b475e4ba3dfd994c321c5b13381d1041fe9c608620e6676e25", + "sha256:ab32947f481f7e8c763fa2c92fd9f44eeb143e7610c4ca9ecd6a36adab4081bd", + "sha256:abb02e2f5a3187b2ac4cd46b8ced85a0858230b577ccb2c62c81482ca7d18852", + "sha256:b330368cb99ef72fcd2dc3ed260adf67b31499584dc8a20225e85bfe6f6cfed0", + "sha256:bc67deb76bc3717f22e765ab3e07ee9c7a5e26b9019ca19a3b063d9f4b874244", + "sha256:c0b1818063dc9e9d838c09e3a473c1422f517889436dd980f5d721899e66f315", + "sha256:c56e097019e72c373bae32d946ecf9858fda841e48d82df7e81c63ac25554078", + "sha256:c7827a5bc7bdb197b9e066cdf650b2887597ad124dd99777332776f7b7c7d0d0", + "sha256:ccc2b70a7ed475c68ceb548bf69cec1e27305c1c2606a5eb7c3afff56a1b3b27", + "sha256:d37a84878285b903c0fe21ac8794c6dab58150e9359f1aaebbeddd6412d53132", + "sha256:e2f0280519e42b0a17550072861e0bc8a80a0870de260f9796157d3fca2733c5", + "sha256:e4ae5ac5e0d1e4edfc9b4b57b4cbecd5bc266a6915c500f358817a8496739247", + "sha256:e67926f51821b8e9deb6426ff3164870976fe414d033ad90ea75e7ed0c2e5022", + "sha256:e78b270eadb5702938c3dbe9367f878249b5ef9a2fcc5360ac7bff694310d17b", + "sha256:ea3c8f04b3e4af80e17bab607c386a830ffc2fb88a5484e1df756478cf70d1d3", + "sha256:ec22b5e7fe7a0fa8509181c4aac1db48f3dd4d3a566131b313d1efc102892c18", + "sha256:f4f620668dbc6f5e909a0946a877310fb3d57aea8198bde792aae369ee1c23b5", + "sha256:fd34e7b3405f0cc7ab03d54a334c17a9e802897580d964bd8c2001f4b9fd488f" + ], + "markers": "python_version >= '3.9'", + "version": "==7.6.10" + }, + "cryptography": { + "hashes": [ + "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", + "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731", + "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", + "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", + "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", + "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", + "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", + "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", + "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", + "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", + "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", + "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", + "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", + "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", + "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", + "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", + "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", + "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", + "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", + "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", + "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", + "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", + "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", + "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", + "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", + "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", + "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4" + ], + "index": "pypi", + "markers": "python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1'", + "version": "==44.0.0" + }, + "cython": { + "hashes": [ + "sha256:0b1d1f6f94cc5d42a4591f6d60d616786b9cd15576b112bc92a23131fcf38020", + "sha256:0e25f6425ad4a700d7f77cd468da9161e63658837d1bc34861a9861a4ef6346d", + "sha256:0fc6fdd6fa493be7bdda22355689d5446ac944cd71286f6f44a14b0d67ee3ff5", + "sha256:104d6f2f2c827ccc5e9e42c80ef6773a6aa94752fe6bc5b24a4eab4306fb7f07", + "sha256:11996c40c32abf843ba652a6d53cb15944c88d91f91fc4e6f0028f5df8a8f8a1", + "sha256:13062ce556a1e98d2821f7a0253b50569fdc98c36efd6653a65b21e3f8bbbf5f", + "sha256:14701edb3107a5d9305a82d9d646c4f28bfecbba74b26cc1ee2f4be08f602057", + "sha256:187685e25e037320cae513b8cc4bf9dbc4465c037051aede509cbbf207524de2", + "sha256:1dd47865f4c0a224da73acf83d113f93488d17624e2457dce1753acdfb1cc40c", + "sha256:221de0b48bf387f209003508e602ce839a80463522fc6f583ad3c8d5c890d2c1", + "sha256:2252b5aa57621848e310fe7fa6f7dce5f73aa452884a183d201a8bcebfa05a00", + "sha256:2a8ea2e7e2d3bc0d8630dafe6c4a5a89485598ff8a61885b74f8ed882597efd5", + "sha256:301bde949b4f312a1c70e214b0c3bc51a3f955d466010d2f68eb042df36447b0", + "sha256:3379c6521e25aa6cd7703bb7d635eaca75c0f9c7f1b0fdd6dd15a03bfac5f68d", + "sha256:351955559b37e6c98b48aecb178894c311be9d731b297782f2b78d111f0c9015", + "sha256:3699391125ab344d8d25438074d1097d9ba0fb674d0320599316cfe7cf5f002a", + "sha256:3999fb52d3328a6a5e8c63122b0a8bd110dfcdb98dda585a3def1426b991cba7", + "sha256:3f2b062f6df67e8a56c75e500ca330cf62c85ac26dd7fd006f07ef0f83aebfa3", + "sha256:3ff8ac1f0ecd4f505db4ab051e58e4531f5d098b6ac03b91c3b902e8d10c67b3", + "sha256:421017466e9260aca86823974e26e158e6358622f27c0f4da9c682f3b6d2e624", + "sha256:4341d6a64d47112884e0bcf31e6c075268220ee4cd02223047182d4dda94d637", + "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa", + "sha256:46aec30f217bdf096175a1a639203d44ac73a36fe7fa3dd06bd012e8f39eca0f", + "sha256:473d35681d9f93ce380e6a7c8feb2d65fc6333bd7117fbc62989e404e241dbb0", + "sha256:4e9a8d92978b15a0c7ca7f98447c6c578dc8923a0941d9d172d0b077cb69c576", + "sha256:52186101d51497519e99b60d955fd5cb3bf747c67f00d742e70ab913f1e42d31", + "sha256:52205347e916dd65d2400b977df4c697390c3aae0e96275a438cc4ae85dadc08", + "sha256:525d09b3405534763fa73bd78c8e51ac8264036ce4c16d37dfd1555a7da6d3a7", + "sha256:53b6072a89049a991d07f42060f65398448365c59c9cb515c5925b9bdc9d71f8", + "sha256:598699165cfa7c6d69513ee1bffc9e1fdd63b00b624409174c388538aa217975", + "sha256:63f2c892e9f9c1698ecfee78205541623eb31cd3a1b682668be7ac12de94aa8e", + "sha256:6823aef13669a32caf18bbb036de56065c485d9f558551a9b55061acf9c4c27f", + "sha256:6fb68cef33684f8cc97987bee6ae919eee7e18ee6a3ad7ed9516b8386ef95ae6", + "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff", + "sha256:75ba1c70b6deeaffbac123856b8d35f253da13552207aa969078611c197377e4", + "sha256:780f89c95b8aec1e403005b3bf2f0a2afa060b3eba168c86830f079339adad89", + "sha256:790263b74432cb997740d73665f4d8d00b9cd1cecbdd981d93591ddf993d4f12", + "sha256:8948802e1f5677a673ea5d22a1e7e273ca5f83e7a452786ca286eebf97cee67c", + "sha256:8acdc87e9009110adbceb7569765eb0980129055cc954c62f99fe9f094c9505e", + "sha256:8b14c24f1dc4c4c9d997cca8d1b7fb01187a218aab932328247dcf5694a10102", + "sha256:989899a85f0d9a57cebb508bd1f194cb52f0e3f7e22ac259f33d148d6422375c", + "sha256:9c02361af9bfa10ff1ccf967fc75159e56b1c8093caf565739ed77a559c1f29f", + "sha256:a0583076c4152b417a3a8a5d81ec02f58c09b67d3f22d5857e64c8734ceada8c", + "sha256:a1f4cbc70f6b7f0c939522118820e708e0d490edca42d852fa8004ec16780be2", + "sha256:a690f2ff460682ea985e8d38ec541be97e0977fa0544aadc21efc116ff8d7579", + "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1", + "sha256:aedceb6090a60854b31bf9571dc55f642a3fa5b91f11b62bcef167c52cac93d8", + "sha256:af91497dc098718e634d6ec8f91b182aea6bb3690f333fc9a7777bc70abe8810", + "sha256:b4ab2b92a3e6ed552adbe9350fd2ef3aa0cc7853cf91569f9dbed0c0699bbeab", + "sha256:b8c7e514075696ca0f60c337f9e416e61d7ccbc1aa879a56c39181ed90ec3059", + "sha256:bcd29945fafd12484cf37b1d84f12f0e7a33ba3eac5836531c6bd5283a6b3a0c", + "sha256:bfa550d9ae39e827a6e7198076df763571cb53397084974a6948af558355e028", + "sha256:c3d68751668c66c7a140b6023dba5d5d507f72063407bb609d3a5b0f3b8dfbe4", + "sha256:c69d5cad51388522b98a99b4be1b77316de85b0c0523fa865e0ea58bbb622e0a", + "sha256:c8eed5c015685106db15dd103fd040948ddca9197b1dd02222711815ea782a27", + "sha256:cee29846471ce60226b18e931d8c1c66a158db94853e3e79bc2da9bd22345008", + "sha256:d02f4ebe15aac7cdacce1a628e556c1983f26d140fd2e0ac5e0a090e605a2d38", + "sha256:d566a4e09b8979be8ab9f843bac0dd216c81f5e5f45661a9b25cd162ed80508c", + "sha256:d80a7232938d523c1a12f6b1794ab5efb1ae77ad3fde79de4bb558d8ab261619", + "sha256:d89a82937ce4037f092e9848a7bbcc65bc8e9fc9aef2bb74f5c15e7d21a73080", + "sha256:da394654c6da15c1d37f0b7ec5afd325c69a15ceafee2afba14b67a5df8a82c8", + "sha256:ddd1fe25af330f4e003421636746a546474e4ccd8f239f55d2898d80983d20ed", + "sha256:e6dd395d1a704e34a9fac00b25f0036dce6654c6b898be6f872ac2bb4f2eda48", + "sha256:eeb6860b0f4bfa402de8929833fe5370fa34069c7ebacb2d543cb017f21fb891", + "sha256:f3953d2f504176f929862e5579cfc421860c33e9707f585d70d24e1096accdf7", + "sha256:f988f7f8164a6079c705c39e2d75dbe9967e3dacafe041420d9af7b9ee424162" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==3.0.11" + }, + "dill": { + "hashes": [ + "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", + "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.3.9" + }, + "distlib": { + "hashes": [ + "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", + "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403" + ], + "index": "pypi", + "version": "==0.3.9" + }, + "docutils": { + "hashes": [ + "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", + "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==0.21.2" + }, + "dulwich": { + "hashes": [ + "sha256:007d8160b511bb149d31c08548307982f6ce752a46e7088b020517de00c3bd46", + "sha256:01544915c4056d0820de8cf126b971f7c180743ff64c4435c89168e44b30df4b", + "sha256:01e484d44014fef78cdef3b3adc34564808b4677497a57a0950c90a1d6349be3", + "sha256:052715452b729544c611a107b2eef6111e527f041c1b666f8ed36c04e39c36b5", + "sha256:10c5ee20430714ea6a79dde22c1f77078848930d27021aa810204738bc175e95", + "sha256:1782854c10878b5cb8423e74b0ef4256c3667f7b0266513af028ac28dbab1f2d", + "sha256:1cbd5ecbc95e18c745965fc7b2b71209443987a99e499c7bb074234d7c6142e2", + "sha256:2220c8b7cac5794e2260a924e81b05baa7836c18ba805d5a6731071a5ff6b860", + "sha256:257abd49a768a52cf7f508daf2d30fe73f54fd32b7a674abd43817f66b0ca17b", + "sha256:2b7a3ac4baa49bd988cc0d0891a93aa26307c01f35caeed8729b7928a1f483af", + "sha256:40260034a6ecc3141a0d42360e888a73e58b9c0c9363c454cae182957fe602ac", + "sha256:5ada6a2fd400a4f51adfedd0267bfb08c61e2d9846c18ea653b0eb88a7b851d0", + "sha256:5b9806a75f4b74fa891926b1d830e21f9cead80ed6dd803ed668369b26fb8b5f", + "sha256:62027dfccee97268eadf0c54df3d72ce30e4402cf5cf06c021e474b9a9eb3536", + "sha256:637a9ac27512b8c04e6a29bf92e3f73386cd85dfe8609f523ffbc96e659bde4b", + "sha256:6bda2eca0847c30a9312a72f219af9e63feb7d2ca89f47fdaa240b0d0cdd6b84", + "sha256:6bea11b98e854ff2abec390eeac752586b83921a22091dae65470ccbb003fc1b", + "sha256:6c830d63c691b5f979964a2d6b325930b7a53f14836598352690601cd205f04b", + "sha256:71b20bd6a25658e968e813eb69164332d3a2ab6029b51d3c6af8b64f2471847a", + "sha256:74b7cf6f0d46ac777be617dad7c1b992380004de74c0e0652bed174686249f34", + "sha256:753eec461434f0ccbe0956ec825250e12230e8f1b365c8be1604386d94c2d8d0", + "sha256:7649f0c9b4760d72768805155e66579761f282fdca123e351019c85efce811eb", + "sha256:7d72ce1377eac23bd77aa3541ceb91f2d8bd68687659f8625af8301f0b6b0a63", + "sha256:8dd5df3919c648887e550e836f87b4b83f1429876adce5ead5b5977e333c874d", + "sha256:925cec97aeefda3f950e45e8d4c247e4ce6f83b6ee96e383c82f9bced626151f", + "sha256:986943e27a5c94c0be42fdcc688be1ae1a1349a3dbaa773fa7f9bdada1232b68", + "sha256:9c01db2ef6d5f5b9192c0011624701b0de328868fe0c32601368cd337e77cd1a", + "sha256:9f418779837a3249b7dfc4b3dc7266fa40687e5f0249eedfa7185560ba1ee148", + "sha256:9f5954cd491313743d7bd3623d323b72afceb83d2c2a47921f621bdd9d4c615b", + "sha256:a64e61fa6ab60db0f897f1c30f32b26b330d3a9dc264f089ee9c44f5900fb657", + "sha256:a8886b2c9750ba15193356d9e8608e031cd89a780d0afc53b3101391605b3793", + "sha256:aa0bb9afa799c0301b2760e9af99083a2b08f655c55037945b6a5e227566adc1", + "sha256:b25848041c51d09affafd2708236205cc4483bed8f7f43ecbe63b6a66b447604", + "sha256:bb258c62d7fb4cfe03b3fba09f702ebb84a924f2f004833435e32c93fe8a7f13", + "sha256:c68ab3540809bedcdd9b99e51c12adf11c2ab26554f74d899d8cf55bfa2639a6", + "sha256:ca7ed207956001e6a8a2e3f319cdc37591e53f7eb04aedafa78f96768048c53e", + "sha256:cdbcf206d4b1e5ba2affc6189948cb292cc647593876b96a0b71db44e79a05a1", + "sha256:d53935832dd182d4c1415042187093efcee988af5cd397fb1f394f5bb27f0707", + "sha256:df5a179e5d95ac0263b5e0ccd53311eac486091979dcac106c5cc9e0ee4f2aa2", + "sha256:f73668ecc29e0a20d20970489fffe2ba466e5486eae2f20104bc38bcbe611f64", + "sha256:fdbd087e9e99bc809b15864ebc79dbefe869e3038b64c953d7736f6e6b382dc7", + "sha256:fe324dc40b93e8be996c9fa9291a439bef835a92a2e4cb5c8cbdb1171c168fd6" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==0.22.7" + }, + "filelock": { + "hashes": [ + "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0", + "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.16.1" + }, + "fiximports": { + "hashes": [ + "sha256:dafb83f981b430530bef61baf516e1e84d8cb1e202ecadb7d7988a3d0fddb875", + "sha256:f0216ee55a1bca8ff2a578a9bfc39181ce4553abc4401dd9b6f7c46164e62a13" + ], + "index": "pypi", + "version": "==0.1.18" + }, + "flake8": { + "hashes": [ + "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38", + "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213" + ], + "index": "pypi", + "markers": "python_full_version >= '3.8.1'", + "version": "==7.1.1" + }, + "identify": { + "hashes": [ + "sha256:285a7d27e397652e8cafe537a6cc97dd470a970f48fb2e9d979aa38eae5513ac", + "sha256:993b0f01b97e0568c179bb9196391ff391bfb88a99099dbf5ce392b68f42d0af" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.6.4" + }, + "idna": { + "hashes": [ + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==3.10" + }, + "imagesize": { + "hashes": [ + "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", + "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.4.1" + }, + "iniconfig": { + "hashes": [ + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==2.0.0" + }, + "isort": { + "hashes": [ + "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", + "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6" + ], + "index": "pypi", + "markers": "python_full_version >= '3.8.0'", + "version": "==5.13.2" + }, + "jaraco.classes": { + "hashes": [ + "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", + "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790" + ], + "markers": "python_version >= '3.8'", + "version": "==3.4.0" + }, + "jaraco.context": { + "hashes": [ + "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", + "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4" + ], + "markers": "python_version >= '3.8'", + "version": "==6.0.1" + }, + "jaraco.functools": { + "hashes": [ + "sha256:70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", + "sha256:ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649" + ], + "markers": "python_version >= '3.8'", + "version": "==4.1.0" + }, + "jeepney": { + "hashes": [ + "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", + "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==0.8.0" + }, + "jinja2": { + "hashes": [ + "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", + "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==3.1.5" + }, + "keyring": { + "hashes": [ + "sha256:0b39998aa941431eb3d9b0d4b2460bc773b9df6fed7621c2dfb291a7e0187a66", + "sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==25.6.0" + }, + "markdown-it-py": { + "hashes": [ + "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.0.0" + }, + "markupsafe": { + "hashes": [ + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==3.0.2" + }, + "mccabe": { + "hashes": [ + "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", + "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==0.7.0" + }, + "mdurl": { + "hashes": [ + "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==0.1.2" + }, + "mock": { + "hashes": [ + "sha256:18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744", + "sha256:5e96aad5ccda4718e0a229ed94b2024df75cc2d55575ba5762d31f5767b8767d" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==5.1.0" + }, + "more-itertools": { + "hashes": [ + "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", + "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==10.5.0" + }, + "mypy-extensions": { + "hashes": [ + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" + ], + "index": "pypi", + "markers": "python_version >= '3.5'", + "version": "==1.0.0" + }, + "nh3": { + "hashes": [ + "sha256:09f037c02fc2c43b211ff1523de32801dcfb0918648d8e651c36ef890f1731ec", + "sha256:0ae9cbd713524cdb81e64663d0d6aae26f678db9f2cd9db0bf162606f1f9f20c", + "sha256:10317cd96fe4bbd4eb6b95f3920b71c902157ad44fed103fdcde43e3b8ee8be6", + "sha256:181063c581defe683bd4bb78188ac9936d208aebbc74c7f7c16b6a32ae2ebb38", + "sha256:1b9a8340a0aab991c68a5ca938d35ef4a8a3f4bf1b455da8855a40bee1fa0ace", + "sha256:231addb7643c952cd6d71f1c8702d703f8fe34afcb20becb3efb319a501a12d7", + "sha256:3eb04b9c3deb13c3a375ea39fd4a3c00d1f92e8fb2349f25f1e3e4506751774b", + "sha256:47b2946c0e13057855209daeffb45dc910bd0c55daf10190bb0b4b60e2999784", + "sha256:4fd2e9248725ebcedac3997a8d3da0d90a12a28c9179c6ba51f1658938ac30d0", + "sha256:6ed834c68452a600f517dd3e1534dbfaff1f67f98899fecf139a055a25d99150", + "sha256:76e2f603b30c02ff6456b233a83fc377dedab6a50947b04e960a6b905637b776", + "sha256:813f1c8012dd64c990514b795508abb90789334f76a561fa0fd4ca32d2275330", + "sha256:8698db4c04b140800d1a1cd3067fda399e36e1e2b8fc1fe04292a907350a3e9b", + "sha256:92f3f1c4f47a2c6f3ca7317b1d5ced05bd29556a75d3a4e2715652ae9d15c05d", + "sha256:9705c42d7ff88a0bea546c82d7fe5e59135e3d3f057e485394f491248a1f8ed5", + "sha256:ac4d27dc836a476efffc6eb661994426b8b805c951b29c9cf2ff36bc9ad58bc5", + "sha256:ce3731c8f217685d33d9268362e5b4f770914e922bba94d368ab244a59a6c397", + "sha256:d2a176fd4306b6f0f178a3f67fac91bd97a3a8d8fafb771c9b9ef675ba5c8886", + "sha256:da87573f03084edae8eb87cfe811ec338606288f81d333c07d2a9a0b9b976c0b", + "sha256:ddefa9fd6794a87e37d05827d299d4b53a3ec6f23258101907b96029bfef138a", + "sha256:e1061a4ab6681f6bdf72b110eea0c4e1379d57c9de937db3be4202f7ad6043db", + "sha256:e1f7370b4e14cc03f5ae141ef30a1caf81fa5787711f80be9081418dd9eb79d2", + "sha256:eb4254b1dac4a1ee49919a5b3f1caf9803ea8dada1816d9e8289e63d3cd0dd9a", + "sha256:f7d564871833ddbe54df3aa59053b1110729d3a800cb7628ae8f42adb3d75208" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.2.20" + }, + "nodeenv": { + "hashes": [ + "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", + "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==1.9.1" + }, + "packaging": { + "hashes": [ + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==24.2" + }, + "pathlib2": { + "hashes": [ + "sha256:5266a0fd000452f1b3467d782f079a4343c63aaa119221fbdc4e39577489ca5b", + "sha256:9fe0edad898b83c0c3e199c842b27ed216645d2e177757b2dd67384d4113c641" + ], + "index": "pypi", + "version": "==2.3.7.post1" + }, + "pathspec": { + "hashes": [ + "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", + "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.12.1" + }, + "pbr": { + "hashes": [ + "sha256:b46004ec30a5324672683ec848aed9e8fc500b0d261d40a3229c2d2bbfcedc29", + "sha256:ff223894eb1cd271a98076b13d3badff3bb36c424074d26334cd25aebeecea6b" + ], + "index": "pypi", + "markers": "python_version >= '2.6'", + "version": "==7.0.3" + }, + "pep8": { + "hashes": [ + "sha256:b22cfae5db09833bb9bd7c8463b53e1a9c9b39f12e304a8d0bba729c501827ee", + "sha256:fe249b52e20498e59e0b5c5256aa52ee99fc295b26ec9eaa85776ffdb9fe6374" + ], + "index": "pypi", + "version": "==1.7.1" + }, + "pew": { + "hashes": [ + "sha256:327c68c5de4fb724fa000ab607dc35a4202bfa36deaf05841c177117e74e1294", + "sha256:53c375deae9185c23c344b043b9d7d33a925405f2cf4140625180c5c5eefe52b" + ], + "index": "pypi", + "version": "==1.2.0" + }, + "pip": { + "hashes": [ + "sha256:71138adf1f4ca900cdb7d289c21b7494329f2332b6d85f0e1c42108c0384ed3e", + "sha256:f6ad667e89a1fe78046c8f13232b247200f5258d7828f3f7883d660878e0813f" + ], + "markers": "python_version >= '3.10'", + "version": "==26.2.1" + }, + "pkginfo": { + "hashes": [ + "sha256:8ad91a0445a036782b9366ef8b8c2c50291f83a553478ba8580c73d3215700cf", + "sha256:dcd589c9be4da8973eceffa247733c144812759aa67eaf4bbf97016a02f39088" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==1.12.0" + }, + "platformdirs": { + "hashes": [ + "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", + "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==4.3.6" + }, + "pluggy": { + "hashes": [ + "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", + "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==1.5.0" + }, + "pre-commit": { + "hashes": [ + "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616", + "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a" + ], + "index": "pypi", + "markers": "python_full_version >= '3.6.1'", + "version": "==2.17.0" + }, + "pycodestyle": { + "hashes": [ + "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3", + "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.12.1" + }, + "pycparser": { + "hashes": [ + "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", + "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.22" + }, + "pyfakefs": { + "hashes": [ + "sha256:53702780b38b24a48a9b8481c971abf1675f5abfd7d44653c2bcdd90b9751224", + "sha256:cd53790761d0fc030a9cf41fd541bfd28c1ea681b1a7c5df8834f3c9e511ac5f" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==5.7.3" + }, + "pyflakes": { + "hashes": [ + "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f", + "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.2.0" + }, + "pygments": { + "hashes": [ + "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", + "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.18.0" + }, + "pylint": { + "hashes": [ + "sha256:77f068c287d49b8683cd7c6e624243c74f92890f767f106ffa1ddf3c0a54cb7a", + "sha256:9ec054ec992cd05ad30a6df1676229739a73f8feeabf3912c995d17601052b01" + ], + "index": "pypi", + "markers": "python_full_version >= '3.9.0'", + "version": "==3.3.2" + }, + "pytest": { + "hashes": [ + "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", + "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==8.3.4" + }, + "pytest-cov": { + "hashes": [ + "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35", + "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==6.0.0" + }, + "pytest-mock": { + "hashes": [ + "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f", + "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.14.0" + }, + "pyyaml": { + "hashes": [ + "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff", + "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", + "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", + "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", + "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", + "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", + "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", + "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", + "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", + "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", + "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a", + "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", + "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", + "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", + "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", + "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", + "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", + "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a", + "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", + "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", + "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", + "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", + "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", + "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", + "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", + "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", + "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", + "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", + "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", + "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706", + "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", + "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", + "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", + "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083", + "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", + "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", + "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", + "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", + "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", + "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", + "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", + "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", + "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", + "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", + "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5", + "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d", + "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", + "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", + "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", + "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", + "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", + "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", + "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==6.0.2" + }, + "readme-renderer": { + "hashes": [ + "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", + "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==44.0" + }, + "reno": { + "extras": [ + "sphinx" + ], + "hashes": [ + "sha256:9b6a2cb768ffb7f7c74bbd76822acff70840a1219f45bcec5080dbc108df4f96", + "sha256:f992f1fdbd16215ec9de47af08131d53a2830c9e78439eb563ce8d6a7f625370" + ], + "markers": "python_version >= '3.6'", + "version": "==4.1.0" + }, + "requests": { + "hashes": [ + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.32.3" + }, + "requests-toolbelt": { + "hashes": [ + "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.0.0" + }, + "rfc3986": { + "hashes": [ + "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", + "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==2.0.0" + }, + "rich": { + "hashes": [ + "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", + "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90" + ], + "index": "pypi", + "markers": "python_full_version >= '3.8.0'", + "version": "==13.9.4" + }, + "scandir": { + "hashes": [ + "sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e", + "sha256:2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022", + "sha256:2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f", + "sha256:2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f", + "sha256:4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae", + "sha256:67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173", + "sha256:7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4", + "sha256:8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32", + "sha256:92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188", + "sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d", + "sha256:cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac" + ], + "index": "pypi", + "version": "==1.10.0" + }, + "secretstorage": { + "hashes": [ + "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", + "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99" + ], + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==3.3.3" + }, + "setuptools": { + "hashes": [ + "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73" ], "markers": "python_version >= '3.10'", - "version": "==3.5.0" + "version": "==84.0.0" }, - "cython": { + "six": { "hashes": [ - "sha256:0b1d1f6f94cc5d42a4591f6d60d616786b9cd15576b112bc92a23131fcf38020", - "sha256:0e25f6425ad4a700d7f77cd468da9161e63658837d1bc34861a9861a4ef6346d", - "sha256:0fc6fdd6fa493be7bdda22355689d5446ac944cd71286f6f44a14b0d67ee3ff5", - "sha256:104d6f2f2c827ccc5e9e42c80ef6773a6aa94752fe6bc5b24a4eab4306fb7f07", - "sha256:11996c40c32abf843ba652a6d53cb15944c88d91f91fc4e6f0028f5df8a8f8a1", - "sha256:13062ce556a1e98d2821f7a0253b50569fdc98c36efd6653a65b21e3f8bbbf5f", - "sha256:14701edb3107a5d9305a82d9d646c4f28bfecbba74b26cc1ee2f4be08f602057", - "sha256:187685e25e037320cae513b8cc4bf9dbc4465c037051aede509cbbf207524de2", - "sha256:1dd47865f4c0a224da73acf83d113f93488d17624e2457dce1753acdfb1cc40c", - "sha256:221de0b48bf387f209003508e602ce839a80463522fc6f583ad3c8d5c890d2c1", - "sha256:2252b5aa57621848e310fe7fa6f7dce5f73aa452884a183d201a8bcebfa05a00", - "sha256:2a8ea2e7e2d3bc0d8630dafe6c4a5a89485598ff8a61885b74f8ed882597efd5", - "sha256:301bde949b4f312a1c70e214b0c3bc51a3f955d466010d2f68eb042df36447b0", - "sha256:3379c6521e25aa6cd7703bb7d635eaca75c0f9c7f1b0fdd6dd15a03bfac5f68d", - "sha256:351955559b37e6c98b48aecb178894c311be9d731b297782f2b78d111f0c9015", - "sha256:3699391125ab344d8d25438074d1097d9ba0fb674d0320599316cfe7cf5f002a", - "sha256:3999fb52d3328a6a5e8c63122b0a8bd110dfcdb98dda585a3def1426b991cba7", - "sha256:3f2b062f6df67e8a56c75e500ca330cf62c85ac26dd7fd006f07ef0f83aebfa3", - "sha256:3ff8ac1f0ecd4f505db4ab051e58e4531f5d098b6ac03b91c3b902e8d10c67b3", - "sha256:421017466e9260aca86823974e26e158e6358622f27c0f4da9c682f3b6d2e624", - "sha256:4341d6a64d47112884e0bcf31e6c075268220ee4cd02223047182d4dda94d637", - "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa", - "sha256:46aec30f217bdf096175a1a639203d44ac73a36fe7fa3dd06bd012e8f39eca0f", - "sha256:473d35681d9f93ce380e6a7c8feb2d65fc6333bd7117fbc62989e404e241dbb0", - "sha256:4e9a8d92978b15a0c7ca7f98447c6c578dc8923a0941d9d172d0b077cb69c576", - "sha256:52186101d51497519e99b60d955fd5cb3bf747c67f00d742e70ab913f1e42d31", - "sha256:52205347e916dd65d2400b977df4c697390c3aae0e96275a438cc4ae85dadc08", - "sha256:525d09b3405534763fa73bd78c8e51ac8264036ce4c16d37dfd1555a7da6d3a7", - "sha256:53b6072a89049a991d07f42060f65398448365c59c9cb515c5925b9bdc9d71f8", - "sha256:598699165cfa7c6d69513ee1bffc9e1fdd63b00b624409174c388538aa217975", - "sha256:63f2c892e9f9c1698ecfee78205541623eb31cd3a1b682668be7ac12de94aa8e", - "sha256:6823aef13669a32caf18bbb036de56065c485d9f558551a9b55061acf9c4c27f", - "sha256:6fb68cef33684f8cc97987bee6ae919eee7e18ee6a3ad7ed9516b8386ef95ae6", - "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff", - "sha256:75ba1c70b6deeaffbac123856b8d35f253da13552207aa969078611c197377e4", - "sha256:780f89c95b8aec1e403005b3bf2f0a2afa060b3eba168c86830f079339adad89", - "sha256:790263b74432cb997740d73665f4d8d00b9cd1cecbdd981d93591ddf993d4f12", - "sha256:8948802e1f5677a673ea5d22a1e7e273ca5f83e7a452786ca286eebf97cee67c", - "sha256:8acdc87e9009110adbceb7569765eb0980129055cc954c62f99fe9f094c9505e", - "sha256:8b14c24f1dc4c4c9d997cca8d1b7fb01187a218aab932328247dcf5694a10102", - "sha256:989899a85f0d9a57cebb508bd1f194cb52f0e3f7e22ac259f33d148d6422375c", - "sha256:9c02361af9bfa10ff1ccf967fc75159e56b1c8093caf565739ed77a559c1f29f", - "sha256:a0583076c4152b417a3a8a5d81ec02f58c09b67d3f22d5857e64c8734ceada8c", - "sha256:a1f4cbc70f6b7f0c939522118820e708e0d490edca42d852fa8004ec16780be2", - "sha256:a690f2ff460682ea985e8d38ec541be97e0977fa0544aadc21efc116ff8d7579", - "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1", - "sha256:aedceb6090a60854b31bf9571dc55f642a3fa5b91f11b62bcef167c52cac93d8", - "sha256:af91497dc098718e634d6ec8f91b182aea6bb3690f333fc9a7777bc70abe8810", - "sha256:b4ab2b92a3e6ed552adbe9350fd2ef3aa0cc7853cf91569f9dbed0c0699bbeab", - "sha256:b8c7e514075696ca0f60c337f9e416e61d7ccbc1aa879a56c39181ed90ec3059", - "sha256:bcd29945fafd12484cf37b1d84f12f0e7a33ba3eac5836531c6bd5283a6b3a0c", - "sha256:bfa550d9ae39e827a6e7198076df763571cb53397084974a6948af558355e028", - "sha256:c3d68751668c66c7a140b6023dba5d5d507f72063407bb609d3a5b0f3b8dfbe4", - "sha256:c69d5cad51388522b98a99b4be1b77316de85b0c0523fa865e0ea58bbb622e0a", - "sha256:c8eed5c015685106db15dd103fd040948ddca9197b1dd02222711815ea782a27", - "sha256:cee29846471ce60226b18e931d8c1c66a158db94853e3e79bc2da9bd22345008", - "sha256:d02f4ebe15aac7cdacce1a628e556c1983f26d140fd2e0ac5e0a090e605a2d38", - "sha256:d566a4e09b8979be8ab9f843bac0dd216c81f5e5f45661a9b25cd162ed80508c", - "sha256:d80a7232938d523c1a12f6b1794ab5efb1ae77ad3fde79de4bb558d8ab261619", - "sha256:d89a82937ce4037f092e9848a7bbcc65bc8e9fc9aef2bb74f5c15e7d21a73080", - "sha256:da394654c6da15c1d37f0b7ec5afd325c69a15ceafee2afba14b67a5df8a82c8", - "sha256:ddd1fe25af330f4e003421636746a546474e4ccd8f239f55d2898d80983d20ed", - "sha256:e6dd395d1a704e34a9fac00b25f0036dce6654c6b898be6f872ac2bb4f2eda48", - "sha256:eeb6860b0f4bfa402de8929833fe5370fa34069c7ebacb2d543cb017f21fb891", - "sha256:f3953d2f504176f929862e5579cfc421860c33e9707f585d70d24e1096accdf7", - "sha256:f988f7f8164a6079c705c39e2d75dbe9967e3dacafe041420d9af7b9ee424162" + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.17.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", + "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" ], "index": "pypi", - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==3.0.11" + "version": "==2.2.0" }, - "distlib": { + "sphinx": { "hashes": [ - "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", - "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed" + "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", + "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927" ], - "version": "==0.4.3" + "index": "pypi", + "markers": "python_version >= '3.10'", + "version": "==8.1.3" }, - "dulwich": { + "sphinx-rtd-theme": { "hashes": [ - "sha256:04252b107a1600325f5f0301dde8b5b62f5bb51a0467e360070baddbb4edcea7", - "sha256:116ac7decb923a473540bf813c1ceb061bef07209fad5fb002d867f1907f9393", - "sha256:11b1f5a6a6075ab4f906dfb755c1d805c8c898ba4f4816b0fdb6123e113030ac", - "sha256:1c35c294acfc5a0a88d01d5db1abeba550bf6274bcc3fddbf8b365e9eea280da", - "sha256:204d14692fb1dd850ab773690f7530f4065f405e9e7dd3f85bdf92e9330ffa2d", - "sha256:21e2e9b81ab04ad83f2d4101ac515ef56ee08d06fd853c1a7ac255f20bb49963", - "sha256:27db364f2f3cf5b0dddd44d6c2ae9a20f6021e2bae8b1268fa689076f0192244", - "sha256:371394e2c6f3f9789cdc0abb965dae9bc62e79984b84f35339e9d466598c9fb0", - "sha256:405cfd53a99374ff03aacdd7a86d6a07615feca072ed69721f49ae2ebaa3eab4", - "sha256:493e2ea0f23a8e9aae8e3000a366d1fbf0ed2c13eaf8f41863f050c6392ef138", - "sha256:4940fbf7cb37870686c63dfc7682e1afdab0e55b663bb614572909b68e775d31", - "sha256:4cf80217e73a039614dde5ab2c74917833632912b788074bc7158058aafbf3e5", - "sha256:5ff9f36c95deaf7eb5d6ccde4c68adbcb932a87e03c1b479a8d94d779e7cc5d2", - "sha256:6993ad48f92dc38a43e3c1bf25efb03a62fc2cf4db86a2e904b6c7176dafc3d5", - "sha256:6d9720d591052730775dcbf450f0cd5b35162f4eeb4754337a5d763326481b2f", - "sha256:6fcbb3dec5733898be2114476ff5abaa1dbb8a6d28ffbe492b3225a5a556197e", - "sha256:6fd9911fb57ee2d6eefaf895df65e1139fbc911fa560e959b38feabe5f15003f", - "sha256:72512e2a22df6fb65ba7b66f5037046019a12343f6e9e54f42bcc4a68ab3d628", - "sha256:72ac4f3fc92d54115ba2d812263117d9577b17f4c62ae8f170c177515f62e9d3", - "sha256:794a85b8b9d4ad57d02c8cb455735419ac50c0f2e3d26d83873e34abee58cb1b", - "sha256:79728d98e0ec184856d71fd0d55abbf5ac7345b5baea9f2d1533a4de9064e13d", - "sha256:7b4a2f497718bfe1a3b21f933ee27c111b9cea560c0b2d8a6d939e1b5f297f79", - "sha256:7c187efaebb72146245ebcb872b89fdc99314fa37442119c5a5feb18af3f4b8a", - "sha256:824b7f5b22b128c1e1ad7c655e9790e2d75c7ab1ba1e40a708024193f1dc47a3", - "sha256:82e8810e57f9651a624116e3fede33276f89406cb910f517b944105e284e6755", - "sha256:8d8175dbe4feaf62bcafc8708448bfe223b4dfc71609be25c0cf2b0962abc36c", - "sha256:9139d0110580a3038048286e761e9be166ec40a2eb19218b41b75541c5d87a86", - "sha256:9e357d825b82e7fec2b83cd8e50f3c099c14c1070e1df961bfefb83943dc1582", - "sha256:ad4b6114440f9cf72315b173532ee3284f27a288b8a24bc27e45b2e54593720d", - "sha256:c60ddc8206e04e8e08208eac80130004eff0d587c82d398beeca7330cade061f", - "sha256:c639a8c9fb7e745749f2dcbd5b63a82df2fc99cfe62e2c3654ec025a42d2e51f", - "sha256:cb1f8d658f36b2ac3982715dc3e49f0d741a3e5a8c40136bebb6d8493968aa12", - "sha256:cdd15b8442b527575d733d90cfd6d3c4cbaebf989e2298b0cb57a7916c66254f", - "sha256:dd2783352917b7cb3ab12b7c3f7757210d93af6df0bd2d876a8e5b53b2feb3eb", - "sha256:dd2b66c915f1b22ca6533b48e8ee435800b25f74f419c40e1a92271666d8b297", - "sha256:e103584421b7205f022bd413a324ff26905ffa84fcc1536f5787bf554d5d390b", - "sha256:e995ad77b0685747bdb51f7a5cd7e6cb8efe73e29517b0f2c95fc2e6d10d5a90", - "sha256:eb27a9ebe9029c872abadf4f9dcb18c9f6a4b7a4afe137f79a61df1ae59dc6bf", - "sha256:f682671a2e19b7b4caa572ff3073557de049a153946305e051a4f50bb0e5e1bd", - "sha256:f887643cf1c7a04e898547bd9f0acf6654d772ebd153012433ef950315dcf776", - "sha256:fa7a089298fcbdaed493dd25c2f13574ccfc708f89a7aae8e3c25fd8393f5c81", - "sha256:fae59c5e345f5ca234c85d157f1c7d5e0086126b45b5f7cfa66ffe41d049fdd6" + "sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13", + "sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85" ], - "markers": "python_version >= '3.10'", - "version": "==1.2.6" + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.0.2" }, - "filelock": { + "sphinxcontrib-applehelp": { "hashes": [ - "sha256:10cdb3656fc44541cdf30652a93fb10ec6b05325620eb316bd26893e4201538a", - "sha256:dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767" + "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", + "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5" ], - "markers": "python_version >= '3.10'", - "version": "==3.29.4" + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.0.0" }, - "identify": { + "sphinxcontrib-devhelp": { "hashes": [ - "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", - "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842" + "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", + "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2" ], - "markers": "python_version >= '3.10'", - "version": "==2.6.19" + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.0.0" }, - "nodeenv": { + "sphinxcontrib-htmlhelp": { "hashes": [ - "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", - "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb" + "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", + "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", - "version": "==1.10.0" + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.1.0" }, - "packaging": { + "sphinxcontrib-jquery": { "hashes": [ - "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", - "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661" + "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", + "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae" ], - "markers": "python_version >= '3.8'", - "version": "==26.2" + "index": "pypi", + "markers": "python_version >= '2.7'", + "version": "==4.1" }, - "pbr": { + "sphinxcontrib-jsmath": { "hashes": [ - "sha256:b46004ec30a5324672683ec848aed9e8fc500b0d261d40a3229c2d2bbfcedc29", - "sha256:ff223894eb1cd271a98076b13d3badff3bb36c424074d26334cd25aebeecea6b" + "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" ], "index": "pypi", - "markers": "python_version >= '2.6'", - "version": "==7.0.3" + "markers": "python_version >= '3.5'", + "version": "==1.0.1" }, - "platformdirs": { + "sphinxcontrib-programoutput": { "hashes": [ - "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", - "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a" + "sha256:09e68b6411d937a80b6085f4fdeaa42e0dc5555480385938465f410589d2eed8", + "sha256:8a651bc85de69a808a064ff0e48d06c12b9347da4fe5fdb1e94914b01e1b0c36" ], - "markers": "python_version >= '3.10'", - "version": "==4.10.0" + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.18" }, - "pre-commit": { + "sphinxcontrib-qthelp": { "hashes": [ - "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", - "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b" + "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", + "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb" ], "index": "pypi", - "markers": "python_version >= '3.10'", - "version": "==4.6.0" + "markers": "python_version >= '3.9'", + "version": "==2.0.0" }, - "python-discovery": { + "sphinxcontrib-serializinghtml": { "hashes": [ - "sha256:475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500", - "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690" + "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", + "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d" ], - "markers": "python_version >= '3.8'", - "version": "==1.4.2" + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.0.0" }, - "pyyaml": { + "toml": { "hashes": [ - "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", - "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", - "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", - "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", - "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", - "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", - "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", - "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", - "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", - "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", - "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", - "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6", - "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", - "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", - "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", - "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", - "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", - "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", - "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295", - "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", - "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", - "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", - "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", - "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", - "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", - "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", - "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", - "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b", - "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", - "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", - "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", - "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", - "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369", - "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", - "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", - "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", - "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", - "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", - "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", - "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", - "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", - "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", - "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", - "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", - "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", - "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", - "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", - "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", - "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", - "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4", - "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", - "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", - "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", - "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", - "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", - "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", - "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", - "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", - "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", - "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", - "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", - "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f", - "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", - "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", - "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", - "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", - "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", - "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", - "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", - "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3", - "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", - "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", - "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0" - ], - "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==6.0.3" + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "index": "pypi", + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'", + "version": "==0.10.2" }, - "reno": { + "tomli": { "hashes": [ - "sha256:9b6a2cb768ffb7f7c74bbd76822acff70840a1219f45bcec5080dbc108df4f96", - "sha256:f992f1fdbd16215ec9de47af08131d53a2830c9e78439eb563ce8d6a7f625370" + "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", + "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", + "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", + "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", + "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", + "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", + "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", + "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", + "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", + "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", + "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", + "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", + "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", + "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", + "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", + "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", + "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", + "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", + "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", + "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", + "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", + "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", + "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", + "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", + "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", + "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", + "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", + "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", + "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", + "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", + "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", + "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7" ], "index": "pypi", - "markers": "python_version >= '3.6'", - "version": "==4.1.0" + "markers": "python_version >= '3.8'", + "version": "==2.2.1" }, - "setuptools": { + "tomlkit": { "hashes": [ - "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", - "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb" + "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", + "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79" ], - "markers": "python_version >= '3.9'", - "version": "==82.0.1" + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==0.13.2" + }, + "twine": { + "hashes": [ + "sha256:36158b09df5406e1c9c1fb8edb24fc2be387709443e7376689b938531582ee27", + "sha256:9c6025b203b51521d53e200f4a08b116dee7500a38591668c6a6033117bdc218" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==6.0.1" }, "typing": { "hashes": [ "sha256:1187fb9c82fd670d10aa07bbb6cfcfe4bdda42d6fab8d5134f04e8c4d0b71cc9", "sha256:283d868f5071ab9ad873e5e52268d611e851c870a2ba354193026f2dfb29d8b5" ], - "markers": "python_version < '3.5'", + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==3.7.4.3" }, + "typing-extensions": { + "hashes": [ + "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", + "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==4.12.2" + }, "urllib3": { "hashes": [ - "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", - "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897" + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.10'", - "version": "==2.7.0" + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.3.0" }, "virtualenv": { "hashes": [ - "sha256:55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783", - "sha256:dca3bf98275a59c652b69d68e73433e597d977c2da9198882479d1a7188009c8" + "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0", + "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa" ], - "markers": "python_version >= '3.9'", - "version": "==21.5.1" + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==20.28.0" + }, + "virtualenv-clone": { + "hashes": [ + "sha256:418ee935c36152f8f153c79824bb93eaf6f0f7984bae31d3f48f350b9183501a", + "sha256:44d5263bceed0bac3e1424d64f798095233b64def1c5689afa43dc3223caf5b0" + ], + "index": "pypi", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.5.7" }, "wheel": { "hashes": [ - "sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced", - "sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3" + "sha256:3217dcc807155e45db462d7ef2431f5ddda0d7273b700d05a67b271ceb1287ab", + "sha256:94800765601e9171bf5d58d066e640662842bcedcbab982b2c90787a2c987322" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==0.47.0" + "version": "==0.48.0" + }, + "yapf": { + "hashes": [ + "sha256:00d3aa24bfedff9420b2e0d5d9f5ab6d9d4268e72afbf59bb3fa542781d5218e", + "sha256:224faffbc39c428cb095818cf6ef5511fdab6f7430a10783fdfb292ccf2852ca" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==0.43.0" } }, "develop": { @@ -355,6 +1396,7 @@ "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b" ], + "index": "pypi", "markers": "python_version >= '3.10'", "version": "==1.0.0" }, @@ -381,6 +1423,7 @@ "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==2.16.0" }, @@ -418,6 +1461,7 @@ "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" ], + "index": "pypi", "markers": "python_version >= '3.6'", "version": "==2024.12.14" }, @@ -491,6 +1535,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==1.17.1" }, @@ -499,6 +1544,7 @@ "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==3.4.0" }, @@ -597,6 +1643,7 @@ "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" ], + "index": "pypi", "markers": "python_version >= '3.7'", "version": "==3.4.1" }, @@ -605,6 +1652,7 @@ "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" ], + "index": "pypi", "markers": "python_version >= '3.7'", "version": "==8.1.8" }, @@ -718,6 +1766,7 @@ "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4" ], + "index": "pypi", "markers": "python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1'", "version": "==44.0.0" }, @@ -726,6 +1775,7 @@ "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==0.3.9" }, @@ -734,6 +1784,7 @@ "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403" ], + "index": "pypi", "version": "==0.3.9" }, "docutils": { @@ -741,6 +1792,7 @@ "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==0.21.2" }, @@ -789,6 +1841,7 @@ "sha256:fdbd087e9e99bc809b15864ebc79dbefe869e3038b64c953d7736f6e6b382dc7", "sha256:fe324dc40b93e8be996c9fa9291a439bef835a92a2e4cb5c8cbdb1171c168fd6" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==0.22.7" }, @@ -797,6 +1850,7 @@ "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0", "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==3.16.1" }, @@ -822,6 +1876,7 @@ "sha256:285a7d27e397652e8cafe537a6cc97dd470a970f48fb2e9d979aa38eae5513ac", "sha256:993b0f01b97e0568c179bb9196391ff391bfb88a99099dbf5ce392b68f42d0af" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==2.6.4" }, @@ -830,6 +1885,7 @@ "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], + "index": "pypi", "markers": "python_version >= '3.6'", "version": "==3.10" }, @@ -838,6 +1894,7 @@ "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a" ], + "index": "pypi", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.4.1" }, @@ -846,6 +1903,7 @@ "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" ], + "index": "pypi", "markers": "python_version >= '3.7'", "version": "==2.0.0" }, @@ -854,6 +1912,7 @@ "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6" ], + "index": "pypi", "markers": "python_full_version >= '3.8.0'", "version": "==5.13.2" }, @@ -886,6 +1945,7 @@ "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755" ], + "index": "pypi", "markers": "python_version >= '3.7'", "version": "==0.8.0" }, @@ -894,6 +1954,7 @@ "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb" ], + "index": "pypi", "markers": "python_version >= '3.7'", "version": "==3.1.5" }, @@ -902,6 +1963,7 @@ "sha256:0b39998aa941431eb3d9b0d4b2460bc773b9df6fed7621c2dfb291a7e0187a66", "sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==25.6.0" }, @@ -910,6 +1972,7 @@ "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==3.0.0" }, @@ -977,6 +2040,7 @@ "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==3.0.2" }, @@ -985,6 +2049,7 @@ "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" ], + "index": "pypi", "markers": "python_version >= '3.6'", "version": "==0.7.0" }, @@ -993,6 +2058,7 @@ "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" ], + "index": "pypi", "markers": "python_version >= '3.7'", "version": "==0.1.2" }, @@ -1010,6 +2076,7 @@ "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==10.5.0" }, @@ -1018,6 +2085,7 @@ "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" ], + "index": "pypi", "markers": "python_version >= '3.5'", "version": "==1.0.0" }, @@ -1048,6 +2116,7 @@ "sha256:eb4254b1dac4a1ee49919a5b3f1caf9803ea8dada1816d9e8289e63d3cd0dd9a", "sha256:f7d564871833ddbe54df3aa59053b1110729d3a800cb7628ae8f42adb3d75208" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==0.2.20" }, @@ -1056,6 +2125,7 @@ "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9" ], + "index": "pypi", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", "version": "==1.9.1" }, @@ -1064,6 +2134,7 @@ "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==24.2" }, @@ -1073,7 +2144,6 @@ "sha256:9fe0edad898b83c0c3e199c842b27ed216645d2e177757b2dd67384d4113c641" ], "index": "pypi", - "markers": "python_version < '3.8'", "version": "==2.3.7.post1" }, "pathspec": { @@ -1081,17 +2151,18 @@ "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==0.12.1" }, "pbr": { "hashes": [ - "sha256:788183e382e3d1d7707db08978239965e8b9e4e5ed42669bf4758186734d5f24", - "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a" + "sha256:b46004ec30a5324672683ec848aed9e8fc500b0d261d40a3229c2d2bbfcedc29", + "sha256:ff223894eb1cd271a98076b13d3badff3bb36c424074d26334cd25aebeecea6b" ], "index": "pypi", "markers": "python_version >= '2.6'", - "version": "==6.1.0" + "version": "==7.0.3" }, "pep8": { "hashes": [ @@ -1111,17 +2182,18 @@ }, "pip": { "hashes": [ - "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", - "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99" + "sha256:71138adf1f4ca900cdb7d289c21b7494329f2332b6d85f0e1c42108c0384ed3e", + "sha256:f6ad667e89a1fe78046c8f13232b247200f5258d7828f3f7883d660878e0813f" ], - "markers": "python_version >= '3.8'", - "version": "==24.3.1" + "markers": "python_version >= '3.10'", + "version": "==26.2.1" }, "pkginfo": { "hashes": [ "sha256:8ad91a0445a036782b9366ef8b8c2c50291f83a553478ba8580c73d3215700cf", "sha256:dcd589c9be4da8973eceffa247733c144812759aa67eaf4bbf97016a02f39088" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==1.12.0" }, @@ -1130,6 +2202,7 @@ "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==4.3.6" }, @@ -1138,6 +2211,7 @@ "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==1.5.0" }, @@ -1155,6 +2229,7 @@ "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3", "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==2.12.1" }, @@ -1163,6 +2238,7 @@ "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==2.22" }, @@ -1189,6 +2265,7 @@ "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==2.18.0" }, @@ -1293,6 +2370,7 @@ "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==44.0" }, @@ -1312,6 +2390,7 @@ "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==2.32.3" }, @@ -1320,6 +2399,7 @@ "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06" ], + "index": "pypi", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.0.0" }, @@ -1328,6 +2408,7 @@ "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c" ], + "index": "pypi", "markers": "python_version >= '3.7'", "version": "==2.0.0" }, @@ -1336,6 +2417,7 @@ "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90" ], + "index": "pypi", "markers": "python_full_version >= '3.8.0'", "version": "==13.9.4" }, @@ -1353,7 +2435,7 @@ "sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d", "sha256:cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac" ], - "markers": "python_version < '3.5'", + "index": "pypi", "version": "==1.10.0" }, "secretstorage": { @@ -1361,22 +2443,24 @@ "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99" ], + "index": "pypi", "markers": "python_version >= '3.6'", "version": "==3.3.3" }, "setuptools": { "hashes": [ - "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6", - "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d" + "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", + "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73" ], - "markers": "python_version >= '3.9'", - "version": "==75.6.0" + "markers": "python_version >= '3.10'", + "version": "==84.0.0" }, "six": { "hashes": [ "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], + "index": "pypi", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==1.17.0" }, @@ -1385,6 +2469,7 @@ "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" ], + "index": "pypi", "version": "==2.2.0" }, "sphinx": { @@ -1392,6 +2477,7 @@ "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927" ], + "index": "pypi", "markers": "python_version >= '3.10'", "version": "==8.1.3" }, @@ -1409,6 +2495,7 @@ "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==2.0.0" }, @@ -1417,6 +2504,7 @@ "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==2.0.0" }, @@ -1425,6 +2513,7 @@ "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==2.1.0" }, @@ -1433,6 +2522,7 @@ "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae" ], + "index": "pypi", "markers": "python_version >= '2.7'", "version": "==4.1" }, @@ -1441,6 +2531,7 @@ "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" ], + "index": "pypi", "markers": "python_version >= '3.5'", "version": "==1.0.1" }, @@ -1458,6 +2549,7 @@ "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==2.0.0" }, @@ -1466,6 +2558,7 @@ "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==2.0.0" }, @@ -1522,6 +2615,7 @@ "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==0.13.2" }, @@ -1548,6 +2642,7 @@ "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], + "index": "pypi", "markers": "python_version >= '3.9'", "version": "==2.3.0" }, @@ -1556,6 +2651,7 @@ "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0", "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==20.28.0" }, @@ -1564,6 +2660,7 @@ "sha256:418ee935c36152f8f153c79824bb93eaf6f0f7984bae31d3f48f350b9183501a", "sha256:44d5263bceed0bac3e1424d64f798095233b64def1c5689afa43dc3223caf5b0" ], + "index": "pypi", "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.5.7" }, diff --git a/guake/terminal.py b/guake/terminal.py index cb7bde8d0..c34544689 100644 --- a/guake/terminal.py +++ b/guake/terminal.py @@ -379,7 +379,7 @@ def button_press(self, terminal, event): # Stop the event here: otherwise VTE also forwards the click to the # application running in the terminal, which acts on it a second time. return True - elif event.button == 3 and matched_string: + if event.button == 3 and matched_string: self.found_link = self.handleTerminalMatch(matched_string) self.matched_value = matched_string[0] diff --git a/scripts/bootstrap-dev-arch.sh b/scripts/bootstrap-dev-arch.sh index 9abe66152..6a3efc035 100755 --- a/scripts/bootstrap-dev-arch.sh +++ b/scripts/bootstrap-dev-arch.sh @@ -37,6 +37,7 @@ if [[ $RUN == "1" ]]; then echo "Install packages needed for execution" sudo pacman -S \ libwnck3 \ + gobject-introspection \ libkeybinder3 \ libnotify \ python-cairo \ diff --git a/scripts/bootstrap-dev-debian.sh b/scripts/bootstrap-dev-debian.sh index b6fa40048..8f5e8fab8 100755 --- a/scripts/bootstrap-dev-debian.sh +++ b/scripts/bootstrap-dev-debian.sh @@ -50,6 +50,7 @@ if [[ $RUN == "1" ]]; then python3-setuptools-scm \ python3-pip \ libgirepository1.0-dev \ + libgirepository-2.0-dev \ libcairo2-dev \ pkg-config fi diff --git a/scripts/bootstrap-dev-fedora.sh b/scripts/bootstrap-dev-fedora.sh index 24a593e23..b4fc7acc0 100755 --- a/scripts/bootstrap-dev-fedora.sh +++ b/scripts/bootstrap-dev-fedora.sh @@ -40,6 +40,7 @@ if [[ $RUN == "1" ]]; then python3-cairo \ python3-dbus \ python3-pip \ + glib2-devel \ keybinder3 \ libwnck fi diff --git a/setup.cfg b/setup.cfg index 0dd72b805..b223b7bc0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -26,7 +26,7 @@ packages = guake setup_requires = setuptools>=57.5.0 - setuptools_scm + setuptools_scm<9 install_requires = importlib_metadata; python_version < '3.8' typing; python_version < '3.5' From 2bb8729e47d205a641a362fd42da98fb4508cf42 Mon Sep 17 00:00:00 2001 From: David Yang Date: Wed, 19 Aug 2026 14:31:03 +0800 Subject: [PATCH 10/14] Remove defunct bountysource badge --- README.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.rst b/README.rst index daefe0a13..dff44944f 100644 --- a/README.rst +++ b/README.rst @@ -7,9 +7,6 @@ Guake 3 README .. |actions-badge| image:: https://github.com/Guake/guake/actions/workflows/ci.yml/badge.svg .. _actions-badge: https://github.com/Guake/guake/actions -.. |bountysource-badge| image:: https://img.shields.io/bountysource/team/guake/activity.svg -.. _bountysource-badge: https://www.bountysource.com/teams/guake - .. |docs-badge| image:: https://readthedocs.org/projects/guake/badge/?version=stable .. _docs-badge: https://guake.readthedocs.io/en/stable/?badge=stable From 9a62605c2026ff0eb9c3786ea0c8a8f6b4cd4c81 Mon Sep 17 00:00:00 2001 From: David Yang Date: Wed, 19 Aug 2026 14:32:29 +0800 Subject: [PATCH 11/14] Remove hanging bountysource markup --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index dff44944f..445960b1d 100644 --- a/README.rst +++ b/README.rst @@ -2,7 +2,7 @@ Guake 3 README ============== -|actions-badge|_ |bountysource-badge|_ |docs-badge|_ |translation-badge|_ +|actions-badge|_ |docs-badge|_ |translation-badge|_ .. |actions-badge| image:: https://github.com/Guake/guake/actions/workflows/ci.yml/badge.svg .. _actions-badge: https://github.com/Guake/guake/actions From 9b834a0c172d95076c2a9f61975cf891a3b8342e Mon Sep 17 00:00:00 2001 From: roqia salah Date: Thu, 16 Jul 2026 23:29:09 -0400 Subject: [PATCH 12/14] feat(prefs): add word characters preference --- guake/data/prefs.glade | 23 +++++++++++++++++-- guake/prefs.py | 13 +++++++---- ...ord-chars-preference-9fc892802ca01441.yaml | 2 ++ 3 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 releasenotes/notes/word-chars-preference-9fc892802ca01441.yaml diff --git a/guake/data/prefs.glade b/guake/data/prefs.glade index e6cf35b35..f88bc4530 100644 --- a/guake/data/prefs.glade +++ b/guake/data/prefs.glade @@ -3644,10 +3644,29 @@ For example, use <b>subl %(file_path)s:%(line_number)s</b> for Subli - + + True + False + Word _characters: + True + 0 + word_chars_entry + + + 0 + 2 + - + + True + True + + + + 1 + 2 + diff --git a/guake/prefs.py b/guake/prefs.py index 631b60e33..80aa5a49a 100644 --- a/guake/prefs.py +++ b/guake/prefs.py @@ -593,6 +593,10 @@ def on_delete_binding_changed(self, combo): val = combo.get_active_text() self.settings.general.set_string("compat-delete", ERASE_BINDINGS[val]) + def on_word_chars_changed(self, entry): + """Changes the value of word-chars in dconf""" + self.settings.general.set_string("word-chars", entry.get_text()) + def on_custom_command_file_chooser_file_changed(self, filechooser): self.settings.general.set_string("custom-command-file", filechooser.get_filename()) @@ -876,13 +880,12 @@ def update_vte_subwidgets_states(self): self.get_widget("lbl_max_tab_name_length").set_sensitive(do_use_vte_titles) def on_reset_compat_defaults_clicked(self, bnt): - """Reset default values to compat_{backspace,delete} dconf - keys. The default values are retrivied from the guake.schemas - file. - """ + """Reset default values to compatibility dconf keys.""" self.settings.general.reset("compat-backspace") self.settings.general.reset("compat-delete") + self.settings.general.reset("word-chars") self.reload_erase_combos() + self.get_widget("word_chars_entry").set_text(self.settings.general.get_string("word-chars")) def on_palette_name_changed(self, combo): """Changes the value of palette in dconf""" @@ -1335,6 +1338,8 @@ def load_configs(self): # it's a separated method, to be reused. self.reload_erase_combos() + self.get_widget("word_chars_entry").set_text(self.settings.general.get_string("word-chars")) + # custom command context-menu configuration file custom_command_file = self.settings.general.get_string("custom-command-file") if custom_command_file: diff --git a/releasenotes/notes/word-chars-preference-9fc892802ca01441.yaml b/releasenotes/notes/word-chars-preference-9fc892802ca01441.yaml new file mode 100644 index 000000000..0eb5e252c --- /dev/null +++ b/releasenotes/notes/word-chars-preference-9fc892802ca01441.yaml @@ -0,0 +1,2 @@ +features: + - Add a Preferences field for configuring word characters used during text selection. (#2304) From 59af4f72ac08775294506f9c3fe2244379ac2699 Mon Sep 17 00:00:00 2001 From: roqia salah Date: Tue, 18 Aug 2026 20:19:16 -0400 Subject: [PATCH 13/14] fix: apply word-chars changes immediately --- guake/data/prefs.glade | 2 +- guake/gsettings.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/guake/data/prefs.glade b/guake/data/prefs.glade index f88bc4530..baef948b2 100644 --- a/guake/data/prefs.glade +++ b/guake/data/prefs.glade @@ -3647,7 +3647,7 @@ For example, use <b>subl %(file_path)s:%(line_number)s</b> for Subli True False - Word _characters: + _Word characters: True 0 word_chars_entry diff --git a/guake/gsettings.py b/guake/gsettings.py index a53084bf1..80b004b15 100644 --- a/guake/gsettings.py +++ b/guake/gsettings.py @@ -85,6 +85,7 @@ def __init__(self, guake_inst): settings.general.onChangedValue("compat-backspace", self.backspace_changed) settings.general.onChangedValue("compat-delete", self.delete_changed) + settings.general.onChangedValue("word-chars", self.word_chars_changed) settings.general.onChangedValue("custom-command_file", self.custom_command_file_changed) settings.general.onChangedValue("max-tab-name-length", self.max_tab_name_length_changed) settings.general.onChangedValue("display-tab-names", self.display_tab_names_changed) @@ -178,6 +179,17 @@ def cursor_shape_changed(self, settings, key, user_data): for term in terminals: term.set_property("cursor-shape", settings.get_int(key)) + def word_chars_changed(self, settings, key, user_data): + word_chars = settings.get_string(key) + terminal = ( + self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid")) + if user_data + else None + ) + terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals() + for term in terminals: + term.set_word_char_exceptions(word_chars) + def background_image_file_changed(self, settings, key, user_data): """Called when the background image file settings has been changed""" filename = settings.get_string(key) From e0231701591228d200ab41589b5e794d04763987 Mon Sep 17 00:00:00 2001 From: Sergey Zhumatiy Date: Fri, 21 Aug 2026 14:01:00 -0700 Subject: [PATCH 14/14] Fix tab activity cooldown implementation issues --- README.rst | 2 + guake/boxes.py | 31 ++-- guake/data/org.guake.gschema.xml | 15 -- guake/data/prefs.glade | 141 ------------------ guake/notebook.py | 84 +++++------ guake/prefs.py | 20 --- ...ab_activity_cooldown-5cf02db0a9a035dd.yaml | 18 +-- ..._activity_indication-be54b262d370a96b.yaml | 15 -- 8 files changed, 64 insertions(+), 262 deletions(-) diff --git a/README.rst b/README.rst index 445960b1d..7cb5c04d5 100644 --- a/README.rst +++ b/README.rst @@ -55,6 +55,8 @@ Bugs? Information? `improving its translations in your language `_. Guake users are welcome `to support Weblate `_ in providing this service for free for OpenSource Projects. +- You may improve Guake, but first please + read `Contributing Guide `_. **Important note**: Do **NOT** use the domain guake.org, it has been registered by someone outside the team. We cannot be held responsible for the content on that web site. diff --git a/guake/boxes.py b/guake/boxes.py index c524aa9d7..1cae6b23e 100644 --- a/guake/boxes.py +++ b/guake/boxes.py @@ -1,3 +1,4 @@ +import enum import logging import time @@ -26,6 +27,14 @@ log = logging.getLogger(__name__) + +# Foreground color applied to a background tab's title when it has unseen +# activity. Chosen to stay readable on both light and dark tab bars. +TAB_ACTIVITY_COLOR = "#E8A33D" +# Foreground color applied once unseen activity has gone quiet for a while +TAB_ACTIVITY_STALE_COLOR = "#3D8AE8" + + # TODO remove calls to guake @@ -637,12 +646,9 @@ def remove_dead_child(self, child): print("I have never seen this widget!") -# Foreground color applied to a background tab's title when it has unseen -# activity. Chosen to stay readable on both light and dark tab bars. -TAB_ACTIVITY_COLOR = "#E8A33D" -# Foreground color applied once unseen activity has gone quiet for a while -# (see tab-activity-cooldown): still unread, but no longer urgent. -TAB_ACTIVITY_STALE_COLOR = "#3D8AE8" +class TabActivityState(enum.Enum): + ACTIVE = "active" + STALE = "stale" class TabLabelEventBox(Gtk.EventBox): @@ -679,12 +685,13 @@ def set_activity(self, active): Returns True if the activity state actually changed, so callers can avoid redundant re-rendering on the frequent contents-changed signal. """ - return self.set_activity_state("active" if active else None) + return self.set_activity_state(TabActivityState.ACTIVE if active else None) def set_activity_state(self, state): - """Set the activity indicator state: None (no activity), "active" - (fresh, unseen output) or "stale" (unseen output, but quiet for a - while - see tab-activity-cooldown). + """Set the activity indicator state: None (no activity), + TabActivityState.ACTIVE (fresh, unseen output) or + TabActivityState.STALE (unseen output, but quiet for a while - see + tab-activity-cooldown). Returns True if the state actually changed, so callers can avoid redundant re-rendering on the frequent contents-changed signal. @@ -702,12 +709,12 @@ def get_activity_state(self): return self._activity_state def _render(self): - if self._activity_state == "active": + if self._activity_state == TabActivityState.ACTIVE: self.label.set_markup( f'' f"{GLib.markup_escape_text(self._text)}" ) - elif self._activity_state == "stale": + elif self._activity_state == TabActivityState.STALE: self.label.set_markup( f'' f"{GLib.markup_escape_text(self._text)}" diff --git a/guake/data/org.guake.gschema.xml b/guake/data/org.guake.gschema.xml index f17b32099..5fdc555c3 100644 --- a/guake/data/org.guake.gschema.xml +++ b/guake/data/org.guake.gschema.xml @@ -176,21 +176,6 @@ Highlight tabs with activity If true, the title of a background tab is highlighted when its terminal produces output, until the tab is selected. - - 3.0 - Activity grace period for new tabs - Number of seconds during which activity is ignored on a newly created tab, to avoid highlighting it because of its initial shell prompt. - - - 1.0 - Activity grace period after losing focus - Number of seconds during which activity is ignored on a tab right after it loses focus. - - - 30.0 - Activity cooldown before fading - Number of seconds of inactivity after which a highlighted tab's indicator fades from active to stale color. - 100 Window width. diff --git a/guake/data/prefs.glade b/guake/data/prefs.glade index baef948b2..68bb74629 100644 --- a/guake/data/prefs.glade +++ b/guake/data/prefs.glade @@ -52,21 +52,6 @@ 1 10 - - 60 - 0.5 - 5 - - - 60 - 0.5 - 5 - - - 600 - 1 - 10 - 10000000 5000 @@ -428,132 +413,6 @@ 5 - - - True - False - 6 - - - True - False - center - Ignore activity on new tabs for (seconds): - - - False - False - 0 - - - - - True - True - 3.0 - tab_activity_new_tab_grace_adj - 1 - 1 - True - - - - False - True - 1 - - - - - 0 - 6 - 2 - - - - - True - False - 6 - - - True - False - center - Ignore activity after losing focus for (seconds): - - - False - False - 0 - - - - - True - True - 1.0 - tab_activity_focus_loss_grace_adj - 1 - 1 - True - - - - False - True - 1 - - - - - 0 - 7 - 2 - - - - - True - False - 6 - - - True - False - center - Fade activity indicator to stale color after (seconds): - - - False - False - 0 - - - - - True - True - 30.0 - tab_activity_cooldown_adj - 1 - 1 - True - - - - False - True - 1 - - - - - 0 - 8 - 2 - - True diff --git a/guake/notebook.py b/guake/notebook.py index e6fd6cec2..dc78ff329 100644 --- a/guake/notebook.py +++ b/guake/notebook.py @@ -20,6 +20,7 @@ from guake.about import AboutDialog from guake.boxes import RootTerminalBox +from guake.boxes import TabActivityState from guake.boxes import TabLabelEventBox from guake.boxes import TerminalBox from guake.callbacks import MenuHideCallback @@ -52,6 +53,16 @@ log = logging.getLogger(__name__) +# Number of seconds during which activity is ignored on a newly created tab, +# to avoid highlighting it because of its initial shell prompt. +TAB_ACTIVITY_NEW_TAB_GRACE = 3.0 +# Number of seconds during which activity is ignored on a tab right after it +# loses focus. +TAB_ACTIVITY_FOCUS_LOSS_GRACE = 1.0 +# Number of seconds of inactivity after which a highlighted tab's indicator +# fades from active to stale color. +TAB_ACTIVITY_COOLDOWN = 30.0 + class TerminalNotebook(Gtk.Notebook): def __init__(self, *args, **kwargs): @@ -94,7 +105,6 @@ def __init__(self, *args, **kwargs): ) # Clear the activity highlight from a tab once it becomes the current one. self._activity_last_page = None - self._activity_timer_id = None self.connect("switch-page", self.on_switch_page) # Action box @@ -352,6 +362,10 @@ def delete_page(self, page_num, kill=True, prompt=0): @save_tabs_when_changed def remove_page(self, page_num): + page = self.get_nth_page(page_num) + source_id = getattr(page, "activity_stale_source_id", None) + if source_id is not None: + GLib.source_remove(source_id) super().remove_page(page_num) # focusing the first terminal on the previous page if self.get_current_page() > -1: @@ -381,8 +395,7 @@ def new_page(self, directory=None, position=None, empty=False, open_tab_cwd=Fals # initial shell prompt (especially on session restore) does not light up # every background tab at once. if self.guake: - grace = self.guake.settings.general.get_double("tab-activity-new-tab-grace") - root_terminal_box.activity_ignore_until = time.monotonic() + grace + root_terminal_box.activity_ignore_until = time.monotonic() + TAB_ACTIVITY_NEW_TAB_GRACE page_num = self.insert_page( root_terminal_box, None, position if position is not None else -1 ) @@ -452,46 +465,34 @@ def on_terminal_activity(self, terminal): page = self.get_nth_page(page_index) if time.monotonic() < getattr(page, "activity_ignore_until", 0): return - page.activity_last_seen = time.monotonic() + page.activity_deadline = time.monotonic() + TAB_ACTIVITY_COOLDOWN label = self.get_tab_label(page) if hasattr(label, "set_activity_state"): - label.set_activity_state("active") - self._ensure_activity_timer() - - def _ensure_activity_timer(self): - """Start the periodic tick that fades ACTIVE tabs to STALE once their - cooldown elapses. A single shared timer is used regardless of how - many tabs are currently highlighted.""" - if self._activity_timer_id is None: - self._activity_timer_id = GLib.timeout_add(1000, self._tick_activity_states) - - def _tick_activity_states(self): - """Fade any tab whose activity has gone quiet past the configured - cooldown from ACTIVE (orange) to STALE (blue). Returns False (and - clears the timer id) once no tab is ACTIVE any more, so the timer - auto-cancels instead of ticking forever in the idle case.""" - if not getattr(self, "guake", None): - self._activity_timer_id = None - return False - cooldown = self.guake.settings.general.get_double("tab-activity-cooldown") - now = time.monotonic() - any_active = False - for page in self.iter_pages(): - if page is None: - continue - label = self.get_tab_label(page) - if not hasattr(label, "get_activity_state"): - continue - if label.get_activity_state() != "active": - continue - if now - getattr(page, "activity_last_seen", now) >= cooldown: - label.set_activity_state("stale") - else: - any_active = True - if not any_active: - self._activity_timer_id = None + label.set_activity_state(TabActivityState.ACTIVE) + # Only arm a timer if this page doesn't already have one pending: further + # activity just pushes activity_deadline out, the live timer picks that up + # when it wakes rather than being cancelled and re-armed on every event. + if getattr(page, "activity_stale_source_id", None) is None: + self._schedule_stale_check(page, TAB_ACTIVITY_COOLDOWN) + + def _schedule_stale_check(self, page, delay): + page.activity_stale_source_id = GLib.timeout_add( + max(0, int(delay * 1000)), self._on_activity_stale_check, page + ) + + def _on_activity_stale_check(self, page): + """Fade a tab from ACTIVE (orange) to STALE (blue) once its cooldown has + elapsed. If activity pushed the deadline further out while this was + pending, reschedule for the remaining time instead of fading early.""" + page.activity_stale_source_id = None + remaining = getattr(page, "activity_deadline", 0) - time.monotonic() + if remaining > 0: + self._schedule_stale_check(page, remaining) return False - return True + label = self.get_tab_label(page) + if hasattr(label, "set_activity_state"): + label.set_activity_state(TabActivityState.STALE) + return False def on_switch_page(self, notebook, page, page_num): """Clear the highlight from the tab being switched to, and start a short @@ -499,13 +500,12 @@ def on_switch_page(self, notebook, page, page_num): previous_page = self._activity_last_page self._activity_last_page = page if previous_page is not None and previous_page is not page and getattr(self, "guake", None): - grace = self.guake.settings.general.get_double("tab-activity-focus-loss-grace") # Never shorten an existing (e.g. longer new-tab) grace: on session # restore every tab briefly becomes current, and clobbering the # creation grace with this one would let the startup burst through. previous_page.activity_ignore_until = max( getattr(previous_page, "activity_ignore_until", 0), - time.monotonic() + grace, + time.monotonic() + TAB_ACTIVITY_FOCUS_LOSS_GRACE, ) label = self.get_tab_label(page) if hasattr(label, "set_activity_state"): diff --git a/guake/prefs.py b/guake/prefs.py index 80aa5a49a..3d092daba 100644 --- a/guake/prefs.py +++ b/guake/prefs.py @@ -484,18 +484,6 @@ def on_display_tab_activity_toggled(self, chk): """Changes the value of display_tab_activity in dconf""" self.settings.general.set_boolean("display-tab-activity", chk.get_active()) - def on_tab_activity_new_tab_grace_changed(self, spin): - """Changes the value of tab_activity_new_tab_grace in dconf""" - self.settings.general.set_double("tab-activity-new-tab-grace", spin.get_value()) - - def on_tab_activity_focus_loss_grace_changed(self, spin): - """Changes the value of tab_activity_focus_loss_grace in dconf""" - self.settings.general.set_double("tab-activity-focus-loss-grace", spin.get_value()) - - def on_tab_activity_cooldown_changed(self, spin): - """Changes the value of tab_activity_cooldown in dconf""" - self.settings.general.set_double("tab-activity-cooldown", spin.get_value()) - # scrolling tab def on_use_scrollbar_toggled(self, chk): @@ -1218,14 +1206,6 @@ def load_configs(self): value = self.settings.general.get_boolean("display-tab-activity") self.get_widget("display_tab_activity").set_active(value) - # tab activity grace periods - value = self.settings.general.get_double("tab-activity-new-tab-grace") - self.get_widget("tab_activity_new_tab_grace").set_value(value) - value = self.settings.general.get_double("tab-activity-focus-loss-grace") - self.get_widget("tab_activity_focus_loss_grace").set_value(value) - value = self.settings.general.get_double("tab-activity-cooldown") - self.get_widget("tab_activity_cooldown").set_value(value) - self._load_screen_settings() value = self.settings.general.get_boolean("quick-open-enable") diff --git a/releasenotes/notes/tab_activity_cooldown-5cf02db0a9a035dd.yaml b/releasenotes/notes/tab_activity_cooldown-5cf02db0a9a035dd.yaml index 28bfe8acf..4597d698e 100644 --- a/releasenotes/notes/tab_activity_cooldown-5cf02db0a9a035dd.yaml +++ b/releasenotes/notes/tab_activity_cooldown-5cf02db0a9a035dd.yaml @@ -5,21 +5,5 @@ release_summary: > features: - | - - add a stale/cooldown color stage to tab activity indication, with a - configurable "tab-activity-cooldown" setting + - add a stale/cooldown color stage to tab activity indication -known_issues: - -upgrade: - -deprecations: - -security: - -fixes: - -translations: - -notes_for_package_maintainers: - -other: diff --git a/releasenotes/notes/tab_activity_indication-be54b262d370a96b.yaml b/releasenotes/notes/tab_activity_indication-be54b262d370a96b.yaml index c12dcc9fe..aa19d4a5a 100644 --- a/releasenotes/notes/tab_activity_indication-be54b262d370a96b.yaml +++ b/releasenotes/notes/tab_activity_indication-be54b262d370a96b.yaml @@ -6,18 +6,3 @@ features: - | - add tabs activity indication -known_issues: - -upgrade: - -deprecations: - -security: - -fixes: - -translations: - -notes_for_package_maintainers: - -other: