From f030a440ae84dd0f5b64d3f683955f8bc46392a9 Mon Sep 17 00:00:00 2001 From: Mattijs Ugen <144798+akaIDIOT@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:26:13 +0200 Subject: [PATCH 1/7] Add pickling roundtrip for NotConfigured --- tests/test_pickling.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_pickling.py b/tests/test_pickling.py index adcdd76b..6f77b353 100644 --- a/tests/test_pickling.py +++ b/tests/test_pickling.py @@ -26,6 +26,10 @@ def test_simple(): assert reencoded._root is reencoded +def test_not_configured(): + assert pickle.loads(pickle.dumps(NotConfigured)) is NotConfigured + + def test_missing_error(): subject = Configuration({'testing': 123}, missing=Missing.ERROR) From 47306484be57eea46178adae808dcc2e33ebcd65 Mon Sep 17 00:00:00 2001 From: Mattijs Ugen <144798+akaIDIOT@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:27:30 +0200 Subject: [PATCH 2/7] Update mypy dependency to allow version 2 --- pylock.toml | 401 +++++++++++++++++++++++++++---------------------- pyproject.toml | 2 +- 2 files changed, 225 insertions(+), 178 deletions(-) diff --git a/pylock.toml b/pylock.toml index 8228218e..12e510bb 100644 --- a/pylock.toml +++ b/pylock.toml @@ -10,68 +10,6 @@ dependency-groups = ["default", "check", "test"] default-groups = ["default"] created-by = "pdm" -[[packages]] -name = "mypy" -version = "1.20.2" -requires-python = ">=3.10" -sdist = {name = "mypy-1.20.2.tar.gz", url = "https://files.pythonhosted.org/packages/04/af/e3d4b3e9ec91a0ff9aabfdb38692952acf49bbb899c2e4c29acb3a6da3ae/mypy-1.20.2.tar.gz", hashes = {sha256 = "e8222c26daaafd9e8626dec58ae36029f82585890589576f769a650dd20fd665"}} -wheels = [ - {name = "mypy-1.20.2-cp314-cp314-macosx_10_15_x86_64.whl",url = "https://files.pythonhosted.org/packages/ae/d1/b4ec96b0ecc620a4443570c6e95c867903428cfcde4206518eafdd5880c3/mypy-1.20.2-cp314-cp314-macosx_10_15_x86_64.whl",hashes = {sha256 = "419413398fe250aae057fd2fe50166b61077083c9b82754c341cf4fd73038f30"}}, - {name = "mypy-1.20.2-cp314-cp314-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/3a/63/d2c2ff4fa66bc49477d32dfa26e8a167ba803ea6a69c5efb416036909d30/mypy-1.20.2-cp314-cp314-macosx_11_0_arm64.whl",hashes = {sha256 = "e73c07f23009962885c197ccb9b41356a30cc0e5a1d0c2ea8fd8fb1362d7f924"}}, - {name = "mypy-1.20.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/2a/56/983916806bf4eddeaaa2c9230903c3669c6718552a921154e1c5182c701f/mypy-1.20.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "0c64e5973df366b747646fc98da921f9d6eba9716d57d1db94a83c026a08e0fb"}}, - {name = "mypy-1.20.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/19/65/0cd9285ab010ee8214c83d67c6b49417c40d86ce46f1aa109457b5a9b8d7/mypy-1.20.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "5a65aa591af023864fd08a97da9974e919452cfe19cb146c8a5dc692626445dc"}}, - {name = "mypy-1.20.2-cp314-cp314-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/94/97/48ff3b297cafcc94d185243a9190836fb1b01c1b0918fff64e941e973cc9/mypy-1.20.2-cp314-cp314-musllinux_1_2_x86_64.whl",hashes = {sha256 = "4fef51b01e638974a6e69885687e9bd40c8d1e09a6cd291cca0619625cf1f558"}}, - {name = "mypy-1.20.2-cp314-cp314-win_amd64.whl",url = "https://files.pythonhosted.org/packages/fd/a1/1b4233d255bdd0b38a1f284feeb1c143ca508c19184964e22f8d837ec851/mypy-1.20.2-cp314-cp314-win_amd64.whl",hashes = {sha256 = "913485a03f1bcf5d279409a9d2b9ed565c151f61c09f29991e5faa14033da4c8"}}, - {name = "mypy-1.20.2-cp314-cp314-win_arm64.whl",url = "https://files.pythonhosted.org/packages/78/c2/ce7ee2ba36aeb954ba50f18fa25d9c1188578654b97d02a66a15b6f09531/mypy-1.20.2-cp314-cp314-win_arm64.whl",hashes = {sha256 = "c3bae4f855d965b5453784300c12ffc63a548304ac7f99e55d4dc7c898673aa3"}}, - {name = "mypy-1.20.2-cp314-cp314t-macosx_10_15_x86_64.whl",url = "https://files.pythonhosted.org/packages/4e/a1/9d93a7d0b5859af0ead82b4888b46df6c8797e1bc5e1e262a08518c6d48e/mypy-1.20.2-cp314-cp314t-macosx_10_15_x86_64.whl",hashes = {sha256 = "2de3dcea53babc1c3237a19002bc3d228ce1833278f093b8d619e06e7cc79609"}}, - {name = "mypy-1.20.2-cp314-cp314t-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/00/d2/09a6a10ee1bf0008f6c144d9676f2ca6a12512151b4e0ad0ff6c4fac5337/mypy-1.20.2-cp314-cp314t-macosx_11_0_arm64.whl",hashes = {sha256 = "52b176444e2e5054dfcbcb8c75b0b719865c96247b37407184bbfca5c353f2c2"}}, - {name = "mypy-1.20.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/57/da/9594b75c3c019e805250bed3583bdf4443ff9e6ef08f97e39ae308cb06f2/mypy-1.20.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "688c3312e5dadb573a2c69c82af3a298d43ecf9e6d264e0f95df960b5f6ac19c"}}, - {name = "mypy-1.20.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/97/77/f75a65c278e6e8eba2071f7f5a90481891053ecc39878cc444634d892abe/mypy-1.20.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "29752dbbf8cc53f89f6ac096d363314333045c257c9c75cbd189ca2de0455744"}}, - {name = "mypy-1.20.2-cp314-cp314t-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/d7/46/1a4e1c66e96c1a3246ddf5403d122ac9b0a8d2b7e65730b9d6533ba7a6d3/mypy-1.20.2-cp314-cp314t-musllinux_1_2_x86_64.whl",hashes = {sha256 = "803203d2b6ea644982c644895c2f78b28d0e208bba7b27d9b921e0ec5eb207c6"}}, - {name = "mypy-1.20.2-cp314-cp314t-win_amd64.whl",url = "https://files.pythonhosted.org/packages/5a/2c/78a8851264dec38cd736ca5b8bc9380674df0dd0be7792f538916157716c/mypy-1.20.2-cp314-cp314t-win_amd64.whl",hashes = {sha256 = "9bcb8aa397ff0093c824182fd76a935a9ba7ad097fcbef80ae89bf6c1731d8ec"}}, - {name = "mypy-1.20.2-cp314-cp314t-win_arm64.whl",url = "https://files.pythonhosted.org/packages/83/01/cd7318aa03493322ce275a0e14f4f52b8896335e4e79d4fb8153a7ad2b77/mypy-1.20.2-cp314-cp314t-win_arm64.whl",hashes = {sha256 = "e061b58443f1736f8a37c48978d7ab581636d6ab03e3d4f99e3fa90463bb9382"}}, - {name = "mypy-1.20.2-cp313-cp313-macosx_10_13_x86_64.whl",url = "https://files.pythonhosted.org/packages/5b/c4/b93812d3a192c9bcf5df405bd2f30277cd0e48106a14d1023c7f6ed6e39b/mypy-1.20.2-cp313-cp313-macosx_10_13_x86_64.whl",hashes = {sha256 = "edfbfca868cdd6bd8d974a60f8a3682f5565d3f5c99b327640cedd24c4264026"}}, - {name = "mypy-1.20.2-cp313-cp313-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/f3/47/42c122501bff18eaf1e8f457f5c017933452d8acdc52918a9f59f6812955/mypy-1.20.2-cp313-cp313-macosx_11_0_arm64.whl",hashes = {sha256 = "e2877a02380adfcdbc69071a0f74d6e9dbbf593c0dc9d174e1f223ffd5281943"}}, - {name = "mypy-1.20.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/92/8f/75bbc92f41725fbd585fb17b440b1119b576105df1013622983e18640a93/mypy-1.20.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "7488448de6007cd5177c6cea0517ac33b4c0f5ee9b5e9f2be51ce75511a85517"}}, - {name = "mypy-1.20.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/a1/32/4c49da27a606167391ff0c39aa955707a00edc500572e562f7c36c08a71f/mypy-1.20.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "bb9c2fa06887e21d6a3a868762acb82aec34e2c6fd0174064f27c93ede68ad15"}}, - {name = "mypy-1.20.2-cp313-cp313-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/7f/fc/4e354a1bd70216359deb0c9c54847ee6b32ef78dfb09f5131ff99b494078/mypy-1.20.2-cp313-cp313-musllinux_1_2_x86_64.whl",hashes = {sha256 = "9d56a78b646f2e3daa865bc70cd5ec5a46c50045801ca8ff17a0c43abc97e3ee"}}, - {name = "mypy-1.20.2-cp313-cp313-win_amd64.whl",url = "https://files.pythonhosted.org/packages/62/b2/c0f2056e9eb8f08c62cafd9715e4584b89132bdc832fcf85d27d07b5f3e5/mypy-1.20.2-cp313-cp313-win_amd64.whl",hashes = {sha256 = "2a4102b03bb7481d9a91a6da8d174740c9c8c4401024684b9ca3b7cc5e49852f"}}, - {name = "mypy-1.20.2-cp313-cp313-win_arm64.whl",url = "https://files.pythonhosted.org/packages/e5/14/065e333721f05de8ef683d0aa804c23026bcc287446b61cac657b902ccac/mypy-1.20.2-cp313-cp313-win_arm64.whl",hashes = {sha256 = "a95a9248b0c6fd933a442c03c3b113c3b61320086b88e2c444676d3fd1ca3330"}}, - {name = "mypy-1.20.2-cp312-cp312-macosx_10_13_x86_64.whl",url = "https://files.pythonhosted.org/packages/71/4e/7560e4528db9e9b147e4c0f22660466bf30a0a1fe3d63d1b9d3b0fd354ee/mypy-1.20.2-cp312-cp312-macosx_10_13_x86_64.whl",hashes = {sha256 = "4dbfcf869f6b0517f70cf0030ba6ea1d6645e132337a7d5204a18d8d5636c02b"}}, - {name = "mypy-1.20.2-cp312-cp312-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/32/d9/34a5efed8124f5a9234f55ac6a4ced4201e2c5b81e1109c49ad23190ec8c/mypy-1.20.2-cp312-cp312-macosx_11_0_arm64.whl",hashes = {sha256 = "4b6481b228d072315b053210b01ac320e1be243dc17f9e5887ef167f23f5fae4"}}, - {name = "mypy-1.20.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/d1/14/eb377acf78c03c92d566a1510cda8137348215b5335085ef662ab82ecd3a/mypy-1.20.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "34397cdced6b90b836e38182076049fdb41424322e0b0728c946b0939ebdf9f6"}}, - {name = "mypy-1.20.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/b9/94/7e4634a32b641aa1c112422eed1bbece61ee16205f674190e8b536f884de/mypy-1.20.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "a5da6976f20cae27059ea8d0c86e7cef3de720e04c4bb9ee18e3690fdb792066"}}, - {name = "mypy-1.20.2-cp312-cp312-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/7a/f3/f7e62395cb7f434541b4491a01149a4439e28ace4c0c632bbf5431e92d1f/mypy-1.20.2-cp312-cp312-musllinux_1_2_x86_64.whl",hashes = {sha256 = "56908d7e08318d39f85b1f0c6cfd47b0cac1a130da677630dac0de3e0623e102"}}, - {name = "mypy-1.20.2-cp312-cp312-win_amd64.whl",url = "https://files.pythonhosted.org/packages/3e/0d/47e3c3a0ec2a876e35aeac365df3cac7776c36bbd4ed18cc521e1b9d255b/mypy-1.20.2-cp312-cp312-win_amd64.whl",hashes = {sha256 = "d52ad8d78522da1d308789df651ee5379088e77c76cb1994858d40a426b343b9"}}, - {name = "mypy-1.20.2-cp312-cp312-win_arm64.whl",url = "https://files.pythonhosted.org/packages/d6/b2/6c852d72e0ea8b01f49da817fb52539993cde327e7d010e0103dc12d0dac/mypy-1.20.2-cp312-cp312-win_arm64.whl",hashes = {sha256 = "785b08db19c9f214dc37d65f7c165d19a30fcecb48abfa30f31b01b5acaabb58"}}, - {name = "mypy-1.20.2-cp311-cp311-macosx_10_9_x86_64.whl",url = "https://files.pythonhosted.org/packages/1f/4d/9ebeae211caccbdaddde7ed5e31dfcf57faac66be9b11deb1dc6526c8078/mypy-1.20.2-cp311-cp311-macosx_10_9_x86_64.whl",hashes = {sha256 = "4077797a273e56e8843d001e9dfe4ba10e33323d6ade647ff260e5cd97d9758c"}}, - {name = "mypy-1.20.2-cp311-cp311-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/95/d7/93473d34b61f04fac1aecc01368485c89c5c4af7a4b9a0cab5d77d04b63f/mypy-1.20.2-cp311-cp311-macosx_11_0_arm64.whl",hashes = {sha256 = "cdecf62abcc4292500d7858aeae87a1f8f1150f4c4dd08fb0b336ee79b2a6df3"}}, - {name = "mypy-1.20.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/e2/30/3dd903e8bafb7b5f7bf87fcd58f8382086dea2aa19f0a7b357f21f63071b/mypy-1.20.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "c566c3a88b6ece59b3d70f65bedef17304f48eb52ff040a6a18214e1917b3254"}}, - {name = "mypy-1.20.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/07/05/c61a140aba4c729ac7bc99ae26fc627c78a6e08f5b9dd319244ea71a3d7e/mypy-1.20.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "0deb80d062b2479f2c87ae568f89845afc71d11bc41b04179e58165fd9f31e98"}}, - {name = "mypy-1.20.2-cp311-cp311-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/fd/87/da78243742ffa8a36d98c3010f0d829f93d5da4e6786f1a1a6f2ad616502/mypy-1.20.2-cp311-cp311-musllinux_1_2_x86_64.whl",hashes = {sha256 = "bba9ad231e92a3e424b3e56b65aa17704993425bba97e302c832f9466bb85bac"}}, - {name = "mypy-1.20.2-cp311-cp311-win_amd64.whl",url = "https://files.pythonhosted.org/packages/37/52/10a1ddf91b40f843943a3c6db51e2df59c9e237f29d355e95eaab427461f/mypy-1.20.2-cp311-cp311-win_amd64.whl",hashes = {sha256 = "baf593f2765fa3a6b1ef95807dbaa3d25b594f6a52adcc506a6b9cb115e1be67"}}, - {name = "mypy-1.20.2-cp311-cp311-win_arm64.whl",url = "https://files.pythonhosted.org/packages/20/02/f9a4415b664c53bd34d6709be59da303abcae986dc4ac847b402edb6fa1e/mypy-1.20.2-cp311-cp311-win_arm64.whl",hashes = {sha256 = "20175a1c0f49863946ec20b7f63255768058ac4f07d2b9ded6a6b46cfb5a9100"}}, - {name = "mypy-1.20.2-cp310-cp310-macosx_10_9_x86_64.whl",url = "https://files.pythonhosted.org/packages/76/97/ce2502df2cecf2ef997b6c6527c4a223b92feb9e7b790cdc8dcd683f3a8a/mypy-1.20.2-cp310-cp310-macosx_10_9_x86_64.whl",hashes = {sha256 = "cf5a4db6dca263010e2c7bff081c89383c72d187ba2cf4c44759aac970e2f0c4"}}, - {name = "mypy-1.20.2-cp310-cp310-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/c9/34/417ee60b822cc80c0f3dc9f495ad7fd8dbb8d8b2cf4baf22d4046d25d01d/mypy-1.20.2-cp310-cp310-macosx_11_0_arm64.whl",hashes = {sha256 = "7b0e817b518bff7facd7f85ea05b643ad8bdcce684cf29784987b0a7c8e1f997"}}, - {name = "mypy-1.20.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/4a/85/e20951978702df58379d0bcc2e8f7ccdca4e78cd7dc66dd3ddbf9b29d517/mypy-1.20.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "97d7b9a485b40f8ca425460e89bf1da2814625b2da627c0dcc6aa46c92631d14"}}, - {name = "mypy-1.20.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/63/a5/5441a13259ec516c56fd5de0fd96a69a9590ae6c5e5d3e5174aa84b97973/mypy-1.20.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "1e1c12f6d2db3d78b909b5f77513c11eb7f2dd2782b96a3ab6dffc7d44575c99"}}, - {name = "mypy-1.20.2-cp310-cp310-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/3b/51/b89c69157c5e1f19fd125a65d991166a26906e7902f026f00feebbcfa2b9/mypy-1.20.2-cp310-cp310-musllinux_1_2_x86_64.whl",hashes = {sha256 = "89dce27e142d25ffbc154c1819383b69f2e9234dc4ed4766f42e0e8cb264ab5c"}}, - {name = "mypy-1.20.2-cp310-cp310-win_amd64.whl",url = "https://files.pythonhosted.org/packages/e9/44/6b0eeecfe96d7cce1d71c66b8e03cb304aa70ec11f1955dc1d6b46aca3c3/mypy-1.20.2-cp310-cp310-win_amd64.whl",hashes = {sha256 = "f376e37f9bf2a946872fc5fd1199c99310748e3c26c7a26683f13f8bdb756cbd"}}, - {name = "mypy-1.20.2-cp310-cp310-win_arm64.whl",url = "https://files.pythonhosted.org/packages/3c/36/6593dc88545d75fb96416184be5392da5e2a8e8c2802a8597913e16ae25c/mypy-1.20.2-cp310-cp310-win_arm64.whl",hashes = {sha256 = "6e2b469efd811707bc530fd1effef0f5d6eebcb7fe376affae69025da4b979a2"}}, - {name = "mypy-1.20.2-py3-none-any.whl",url = "https://files.pythonhosted.org/packages/28/9a/f23c163e25b11074188251b0b5a0342625fc1cdb6af604757174fa9acc9b/mypy-1.20.2-py3-none-any.whl",hashes = {sha256 = "a94c5a76ab46c5e6257c7972b6c8cff0574201ca7dc05647e33e795d78680563"}}, -] -marker = "\"check\" in dependency_groups" - -[packages.tool.pdm] -dependencies = [ - "typing-extensions>=4.6.0; python_version < \"3.15\"", - "typing-extensions>=4.14.0; python_version >= \"3.15\"", - "mypy-extensions>=1.0.0", - "pathspec>=1.0.0", - "tomli>=1.1.0; python_version < \"3.11\"", - "librt>=0.8.0; platform_python_implementation != \"PyPy\"", -] - [[packages]] name = "pyyaml" version = "6.0.3" @@ -142,11 +80,11 @@ dependencies = [] [[packages]] name = "tomlkit" -version = "0.15.0" +version = "0.15.1" requires-python = ">=3.9" -sdist = {name = "tomlkit-0.15.0.tar.gz", url = "https://files.pythonhosted.org/packages/51/db/03eaf4331631ef6b27d6e3c9b68c54dc6f0d63d87201fed600cc409307fd/tomlkit-0.15.0.tar.gz", hashes = {sha256 = "7d1a9ecba3086638211b13814ea79c90dd54dd11993564376f3aa92271f5c7a3"}} +sdist = {name = "tomlkit-0.15.1.tar.gz", url = "https://files.pythonhosted.org/packages/94/96/e07752635b98536177fa1f37671c8f3cdde2e724c6bcf6034b2cfb571565/tomlkit-0.15.1.tar.gz", hashes = {sha256 = "e25bbf38843005246210a12982776f27f99cb9be67160e14434d0c0d21ee1e97"}} wheels = [ - {name = "tomlkit-0.15.0-py3-none-any.whl",url = "https://files.pythonhosted.org/packages/6a/43/8bd850ee71a191bf072e31302c73a66be413fecdd98fdcd111ecbcce13ca/tomlkit-0.15.0-py3-none-any.whl",hashes = {sha256 = "4dbc8f0fc024412b57ced8757ac7461305126a648ff8c2c807fcb8e133a78738"}}, + {name = "tomlkit-0.15.1-py3-none-any.whl",url = "https://files.pythonhosted.org/packages/13/bc/8c13eb66537dce1d2bd3a57132902f38d0e7f5bb46fa9f4daed9fe9d76ee/tomlkit-0.15.1-py3-none-any.whl",hashes = {sha256 = "177a05aece5a8ca5266fd3c448abb47b8d352f09d477d3ca8332db4d89b24304"}}, ] marker = "\"default\" in dependency_groups" @@ -155,106 +93,170 @@ dependencies = [] [[packages]] name = "coverage" -version = "7.15.1" +version = "7.15.2" requires-python = ">=3.10" -sdist = {name = "coverage-7.15.1.tar.gz", url = "https://files.pythonhosted.org/packages/4a/83/6051c2a2feab48ae5bd27c84ef047191d2d4a3172f689e38eaa48ed17db1/coverage-7.15.1.tar.gz", hashes = {sha256 = "165e9949eaf222ef1f018635d0d7f368a23bfe0212af558534c40d8c04686d67"}} +sdist = {name = "coverage-7.15.2.tar.gz", url = "https://files.pythonhosted.org/packages/76/d0/55fe630f4cf94e3fcba868240fad8c8cdd1f764e2a932f8926347e6ec4cd/coverage-7.15.2.tar.gz", hashes = {sha256 = "3df60dc267f0a2ca23cb7a9ab1109c62b9335ffbf519fcfe167157c28c09b81d"}} wheels = [ - {name = "coverage-7.15.1-cp314-cp314-macosx_10_15_x86_64.whl",url = "https://files.pythonhosted.org/packages/f0/46/81961952e7aebfb38ad0ae4264e8954cc607a7af9e7ac111f9fa986595cc/coverage-7.15.1-cp314-cp314-macosx_10_15_x86_64.whl",hashes = {sha256 = "a886af95f59edf67d5770fd3564d53f4a8af93f25f8c1d60d27e00d7f5674ee8"}}, - {name = "coverage-7.15.1-cp314-cp314-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/13/d2/ee14d715889f216baf47301d9f469e08fff6995552aaf67e897b282865f6/coverage-7.15.1-cp314-cp314-macosx_11_0_arm64.whl",hashes = {sha256 = "985657ebd707941de90d488d1cbb5efac20bdf81f7b91eba771624ccda4d36f4"}}, - {name = "coverage-7.15.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/f3/38/f830bc6e6c2c5f23f43847125e6c650d378872f7eeba8d49f1d42193e8a9/coverage-7.15.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "5bbe2a06e0a5e1404d9ffbdb49b819bbd6a3bb198ebea4c8dfe7ad9f1e1c2e81"}}, - {name = "coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/e1/53/0d3dd963631259d794c898735d5436e68d6a8d40749c419a07ff7c171469/coverage-7.15.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "bde0fe24083d0b7b3dbafa7a09f0796410af1afa2523f28f5f208d8340a4aaca"}}, - {name = "coverage-7.15.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/b1/fd/aabed228557565c958259251b89bab8c5669b31291fa63b3e2154ebb017a/coverage-7.15.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "f89f7453d6d46db14cf233e2cd8edcd78de2b9c49d4f1dc109590b4e5dbfbb74"}}, - {name = "coverage-7.15.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/bc/aa/1cc888e5d3623e603c4e5399653cb25728bb2b40d7519188a3e293d24620/coverage-7.15.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "cc3656c9ecc27b36bd0907455b77f83c0069ca9ad4a66dec892b76c696eb6047"}}, - {name = "coverage-7.15.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/5f/61/fc16d5f5e53098dae41efa21e8ccc611a9b4fe922750dd03dc56db552182/coverage-7.15.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "24d8e85a2a45e44883b488c2659f51fa761dad5353fdb319b672a93facbd2ca9"}}, - {name = "coverage-7.15.1-cp314-cp314-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/a1/f3/52384668c3de4519ca770bf1975a89e4d6eb5aa2faf0da0577a14008cba4/coverage-7.15.1-cp314-cp314-musllinux_1_2_aarch64.whl",hashes = {sha256 = "68931b5fe746ed4fdaa8892989cab9e6c35781eeb3b0ab2ded893d561e1b3652"}}, - {name = "coverage-7.15.1-cp314-cp314-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/ce/68/54b807e7c1868178e902fd8360b5d4e559394462f97285c50edf1c4608db/coverage-7.15.1-cp314-cp314-musllinux_1_2_i686.whl",hashes = {sha256 = "1ce6947e2a95534ecaa5a15e73c21e550514c980d80eda204d064d789a95f6a4"}}, - {name = "coverage-7.15.1-cp314-cp314-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/7b/48/dde8adf0338e3ace738757dccf1ce817e5fdcadfae77e1b48a77e5a3b265/coverage-7.15.1-cp314-cp314-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "841befdbc89b9c82435fc25b0f4f41858b6238693e45af758bec4cfc1968171c"}}, - {name = "coverage-7.15.1-cp314-cp314-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/07/f2/179dd88cf60a0aeeee16a970ffe250dccea8b80ed4beab4c5d3f6c41ad4b/coverage-7.15.1-cp314-cp314-musllinux_1_2_riscv64.whl",hashes = {sha256 = "5d3de58b837375e7f4c0e1a088ccab5f655efb2fd7427b729df02c862a559633"}}, - {name = "coverage-7.15.1-cp314-cp314-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/2c/37/8a593d69ab521beb6a105a2017cac4ba94425ee0a8349e29c3c0b522d24f/coverage-7.15.1-cp314-cp314-musllinux_1_2_x86_64.whl",hashes = {sha256 = "b1801963f9f44ae0c0f6d737bc7aeb2bbcde7d1fe7e3b43cddc1961af42d3b41"}}, - {name = "coverage-7.15.1-cp314-cp314-win32.whl",url = "https://files.pythonhosted.org/packages/6d/34/bc9b3bced66f2cdad4bf5e57ae51c54ea226e8aaaebfc9370a9a11877bf3/coverage-7.15.1-cp314-cp314-win32.whl",hashes = {sha256 = "8c7953c4128ef53b6ffb5f90d87c87d4ce26731df294760bb2314eb0e069e44b"}}, - {name = "coverage-7.15.1-cp314-cp314-win_amd64.whl",url = "https://files.pythonhosted.org/packages/4c/f3/4d20337bed61915d14349e62b88d5e4144d5a9872b64adbe90e9906db6db/coverage-7.15.1-cp314-cp314-win_amd64.whl",hashes = {sha256 = "6f0bab60a582d415f0fb535ccff13ba334a47a1538f98913330a525d23bd535a"}}, - {name = "coverage-7.15.1-cp314-cp314-win_arm64.whl",url = "https://files.pythonhosted.org/packages/7b/df/bbfeae4948f3ded516f92b32f2d57952427fc5ecfc0924487bb6ee6a5f38/coverage-7.15.1-cp314-cp314-win_arm64.whl",hashes = {sha256 = "0f410ee8f0ac4ec7db71bc0b7632a8b9994e1cad2755bd1566c17e6a162caa74"}}, - {name = "coverage-7.15.1-cp314-cp314t-macosx_10_15_x86_64.whl",url = "https://files.pythonhosted.org/packages/35/65/0b431856064e387d1f5cf474625e4a0465e907024d42f35de6af19ced0be/coverage-7.15.1-cp314-cp314t-macosx_10_15_x86_64.whl",hashes = {sha256 = "fc868bab88e049d41fcd41766810d790a8b960053be2a45e060f5ce0d31d258b"}}, - {name = "coverage-7.15.1-cp314-cp314t-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/a6/96/50eac9bd49df8a3df5f3d38746d1bf332299dffb554486c94ebd55c9dc49/coverage-7.15.1-cp314-cp314t-macosx_11_0_arm64.whl",hashes = {sha256 = "206d4ec6028f2773b40932d09f074539d6bcdd8f6b318d40cb04bdbd68ed0b49"}}, - {name = "coverage-7.15.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/e0/5b/6ba1c4a27e10b8816fd2622b98162c83d3bdf1185097360373611bf96364/coverage-7.15.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "620482ef1c9f4e61f962e159325fe77dea59d16e39d9c9470d069053b244d864"}}, - {name = "coverage-7.15.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/e4/59/fe03ade97a3ca2d890e98c572cf48a99fda9adba85757c34b823f41efe1e/coverage-7.15.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "d385fc9b054e309ad3cecdc77b586d2af0c98aeec2fdb3773544586f366e817c"}}, - {name = "coverage-7.15.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/16/e0/55c4b1217a572a43e13b39e1eb78d0da29fb23679003bd0cdf22c50b1978/coverage-7.15.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "f1198bca9c0dd7c188aae1f185b0c0b5fc4f0a2b6909000858c29550320bdb07"}}, - {name = "coverage-7.15.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/b1/e2/ee47944f76afc03909119b036fe9e0da8cbd274a5141287de79791a0fb6d/coverage-7.15.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "5d0297e6a070eadb49df7cddd0ab6f420b8b689dd8904c7dd815a323168fa57e"}}, - {name = "coverage-7.15.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/cb/8a/6b4d9779c7b2e21c3d12c3425e3261aa7411399319e27aa402dfec4db5d0/coverage-7.15.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "916fcf2214f56960e409561b37fc32a160a42b6e85483d0652d7b70fa55d707e"}}, - {name = "coverage-7.15.1-cp314-cp314t-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/c4/1e/db5c7fa0c8ba5ece390a1e1a3f30db71d440240a80589df28e66a7503c40/coverage-7.15.1-cp314-cp314t-musllinux_1_2_aarch64.whl",hashes = {sha256 = "f837bae572c7869ffaa502e604c87e182543012831cf87aae4586ad090ac6dcf"}}, - {name = "coverage-7.15.1-cp314-cp314t-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/83/53/fe5176682b00709b13fab36addd26883139d0dea430816fea412e69255e2/coverage-7.15.1-cp314-cp314t-musllinux_1_2_i686.whl",hashes = {sha256 = "3ea65e3ee6c7c32349fd00559927a9e577bdd72386087eeed1c42b62dfce9b82"}}, - {name = "coverage-7.15.1-cp314-cp314t-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/f9/e7/16f15127be93fbc70c667df5ec5dce934fc76c9b0888d84969a5d5341e2c/coverage-7.15.1-cp314-cp314t-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "345034976f46a1c54bd17f4e43eb30bb92cb7082fcddff03250cff136cc4eb82"}}, - {name = "coverage-7.15.1-cp314-cp314t-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/cd/73/e5119111f6f065376395a525f7ce6e9174d83f3db6d217ea0211a61cca4d/coverage-7.15.1-cp314-cp314t-musllinux_1_2_riscv64.whl",hashes = {sha256 = "4f051a64eb8f8addb4661c2b41d6eea5b7ebc68ad4b2baea8d9bc54e1956e5f7"}}, - {name = "coverage-7.15.1-cp314-cp314t-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/d7/9c/6d0a81182df18a73b081e7a8630f0e2a52b12dfd7898c6ab839551a454d2/coverage-7.15.1-cp314-cp314t-musllinux_1_2_x86_64.whl",hashes = {sha256 = "a7625770f7720b49bb30d194ad2f8d50fab3c5177874af3d2399676f95f9c594"}}, - {name = "coverage-7.15.1-cp314-cp314t-win32.whl",url = "https://files.pythonhosted.org/packages/d9/a2/bac0cbd4450638f1be2041a464b1766c8cc94abf705a2df6f1c8d4be870d/coverage-7.15.1-cp314-cp314t-win32.whl",hashes = {sha256 = "81e503d130a472ad1bd38199ecd35116b40d92bcd31e27a2cacde035381f2070"}}, - {name = "coverage-7.15.1-cp314-cp314t-win_amd64.whl",url = "https://files.pythonhosted.org/packages/f0/b2/d83c5403155172a43ba47c08641bad3f89822d8405102423a41339d2c857/coverage-7.15.1-cp314-cp314t-win_amd64.whl",hashes = {sha256 = "724e878b213b302ad46e9f2fc872d386613f20ebfc492a211482d917ea76c14f"}}, - {name = "coverage-7.15.1-cp314-cp314t-win_arm64.whl",url = "https://files.pythonhosted.org/packages/cc/41/442b74cad832cc77712080585455482e7cc4f4a9a13192f65731dcd18231/coverage-7.15.1-cp314-cp314t-win_arm64.whl",hashes = {sha256 = "ce2f05c14d077f406fefc4fa5e4f093ad0e0787549f6582535d6e28766f0361b"}}, - {name = "coverage-7.15.1-cp313-cp313-macosx_10_13_x86_64.whl",url = "https://files.pythonhosted.org/packages/ca/1e/6fa289d7993a2a39f1b283ddb58c4bfec80f7800be654b8ba8a9f6a07c63/coverage-7.15.1-cp313-cp313-macosx_10_13_x86_64.whl",hashes = {sha256 = "71ac4ca1658ca99160fd58cc6967110e989c34b04627f24ed6ec9f70fb24571a"}}, - {name = "coverage-7.15.1-cp313-cp313-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/6f/e1/0db4902a0588234a70ab0218073c0b20fbc5c740aa35f91d360160a2ebc9/coverage-7.15.1-cp313-cp313-macosx_11_0_arm64.whl",hashes = {sha256 = "26a40cbf2b13bd94af53ee02a424cb3bb96a9edfac0d00834bd068512a62714b"}}, - {name = "coverage-7.15.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/b4/cb/3719783865092dac5e08df842730305ee9ab1973ae7ddb6fbdf27d401f30/coverage-7.15.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "f4c5a5eff4ad4f9f7088fd3fc7a66d98d06566ee294b3b053309fb0a3b45be1e"}}, - {name = "coverage-7.15.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/1c/5e/caf3abbdbb22629626160ffc9c017eb995b7cb11c0be46b974834cef1792/coverage-7.15.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "962aa56c1c9b016d681265880eb6acc9966029d2c4c559319cc43a1abbb9b59a"}}, - {name = "coverage-7.15.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/d6/f1/d60f375bfe095fef944f0f19427aefdbf9bdd5a9571c41a4bf6e2f5fdb81/coverage-7.15.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "1678eb2dc57a8ce67601b029582ef6d41e9e6ca22692aaeccd4107e40f27386c"}}, - {name = "coverage-7.15.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/d7/17/8b0cbc90d02dc5adad4d9034c1824ec3fa567771b4c39d9c1e3f9b1431b8/coverage-7.15.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "1174900a43f6f8c425fee10d7dbddc308adefcdc78aaced32357f5ab750a0e90"}}, - {name = "coverage-7.15.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/92/29/c5e69f5fb75c322e9a3e4ef64d02eebfc3d66efceccc8514ff80a3c13a56/coverage-7.15.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "98847557a6859cadf693792ce89f440cb89692993f60dc6d3a7e35f3d340216f"}}, - {name = "coverage-7.15.1-cp313-cp313-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/64/57/21144252fdd0c01d707d48fbcea13a80b0b7c42ced3f299f885ab8978c3a/coverage-7.15.1-cp313-cp313-musllinux_1_2_aarch64.whl",hashes = {sha256 = "8697b2edb57143546a24389efc11e1b000cd5800fc20d84f04edb601e4a7cfb8"}}, - {name = "coverage-7.15.1-cp313-cp313-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/59/2a/499a28a322b0ce6768328e6c5bb2e2ad00ac068a7c7adb2ecd8533c8c5d9/coverage-7.15.1-cp313-cp313-musllinux_1_2_i686.whl",hashes = {sha256 = "6827ac0519be3fe91bf96b4060eb00d1d24f82649b29862cd75a3cfca248b02a"}}, - {name = "coverage-7.15.1-cp313-cp313-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/2c/6f/928a95da5da8b60f2b00e1482c7787b3316188e6d2d227fb8e124ada43a1/coverage-7.15.1-cp313-cp313-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "2de8ecbbc77c7e4d22572779920ed8979c69168675e96be3a548c996568c6c31"}}, - {name = "coverage-7.15.1-cp313-cp313-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/16/10/889adbc1b8c9f866ed51e18a98bcafc0259fb9d29b81f50a719407c64ea8/coverage-7.15.1-cp313-cp313-musllinux_1_2_riscv64.whl",hashes = {sha256 = "2b25f0f0fa5260df9d7bb55d47c8bdc23fa3382c1a18f7c9cae122e6c320b1ad"}}, - {name = "coverage-7.15.1-cp313-cp313-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/1a/30/a5e1871e5d93416511f8e359d1ccebfe0cbb050a1bbf7dd20228533ec0cf/coverage-7.15.1-cp313-cp313-musllinux_1_2_x86_64.whl",hashes = {sha256 = "4a2effcbd93ae340a58db718fe4181d967f84d352c4cefeaab4ff82ce813901a"}}, - {name = "coverage-7.15.1-cp313-cp313-win32.whl",url = "https://files.pythonhosted.org/packages/2d/26/c36fbffd549dadbdd1a75827528fb00a4c46aa3187b007b750b1e2cebbf2/coverage-7.15.1-cp313-cp313-win32.whl",hashes = {sha256 = "895e65c96aef0cecea250f6e35e9a32f11375514e1a0cb5210e0fda128c04e8e"}}, - {name = "coverage-7.15.1-cp313-cp313-win_amd64.whl",url = "https://files.pythonhosted.org/packages/16/fc/becbb9d2c4206d242b9b1e1e8e24a42f7926c0200dd3c788b9fab4bb96d5/coverage-7.15.1-cp313-cp313-win_amd64.whl",hashes = {sha256 = "f6d0a28b63a0d75f9ed5118105d1154fc3aa40a8605a30d5d87e3d043ad90fe7"}}, - {name = "coverage-7.15.1-cp313-cp313-win_arm64.whl",url = "https://files.pythonhosted.org/packages/d3/30/1cfc641461369b6858799fca61c0a8b5edc490c519bf7c636ffa6bbf556f/coverage-7.15.1-cp313-cp313-win_arm64.whl",hashes = {sha256 = "b4ee9818e8bae3544379ad2c09b851c4fb886aaa8860d57a1c1316ddcb16db49"}}, - {name = "coverage-7.15.1-cp312-cp312-macosx_10_13_x86_64.whl",url = "https://files.pythonhosted.org/packages/d9/76/32c1826309beaf4604c54accef108fdd611e5e5e93f2f5192f050cd5f6bd/coverage-7.15.1-cp312-cp312-macosx_10_13_x86_64.whl",hashes = {sha256 = "d9476292594309db922cc841dd13b303b3c388f4c25d279884f7e2341c681f80"}}, - {name = "coverage-7.15.1-cp312-cp312-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/db/5c/b88ce0d68fa550c7f3b58617fbf363bce64df5bf8295a01b627e4696e022/coverage-7.15.1-cp312-cp312-macosx_11_0_arm64.whl",hashes = {sha256 = "0c579056b0de461b3a62318b63d0b6ce90aed7f8158d3f00da094df82f29d189"}}, - {name = "coverage-7.15.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/0e/fe/8509fd2a66fc4e0a829f76a0f0b1dc3cc163368352435b5f243168658077/coverage-7.15.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "23214bdbe226f2b0e9c66a7d6a1d59d4a88045dcf86e702cf0fe0d0935e3d615"}}, - {name = "coverage-7.15.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/e5/81/c7009ed7ea9765adb2b9d095054d748266fae5f07ac6c5f925f33715fcde/coverage-7.15.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "df164be93b46b4825cc39339440a05edc54c4d1d865ba4a60fd43d151a2a1cd3"}}, - {name = "coverage-7.15.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/21/52/dc8ee03968a5ba86e2da5aa48ddc9e3747bd65d63825fdce2d96acb9c5ff/coverage-7.15.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "a524fca1a6f08927d9dc2d4c873cfb7bd7202c247f08b14bdc02424071b8b304"}}, - {name = "coverage-7.15.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/b8/27/95d7623908da8937deb53d48efcdbf423907a47540e63c62fa21372c652b/coverage-7.15.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "d70f3542cd38de85a9e257dcb1ac4c1ab4b6d7d2c2a645809207556628755d1c"}}, - {name = "coverage-7.15.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/f1/3b/730d761928de97d585465680b568ae69622fb40716babadeabffe75cb51b/coverage-7.15.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "d78aa537237212c4313aabe5e964b66acc86350ed19ebc56a3e202df33b6077b"}}, - {name = "coverage-7.15.1-cp312-cp312-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/f1/fc/6b9277acff1f9484b6c12857af5774689d1a6a95e13265f7405329d2f5da/coverage-7.15.1-cp312-cp312-musllinux_1_2_aarch64.whl",hashes = {sha256 = "a318112bb4f79d9d04766196d5a3388caa825908a6a9b052aa87de3d9aea7c61"}}, - {name = "coverage-7.15.1-cp312-cp312-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/3d/f2/c704f86129594ba34e25a64695d2068c71d51c2b98907184d716c94f4aec/coverage-7.15.1-cp312-cp312-musllinux_1_2_i686.whl",hashes = {sha256 = "e55d24cada901963eed5bc89fa562aa033f0d84b9d3de4ecf363737c13aed11e"}}, - {name = "coverage-7.15.1-cp312-cp312-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/f6/29/80fee8af47de4a6dce71ccf2938491f444687a756af258a56d8469b8f1b0/coverage-7.15.1-cp312-cp312-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "3c78f0cea7275342cf2adc2ad5fdd0aafa106ad91e66d573568f2fcf62c41df5"}}, - {name = "coverage-7.15.1-cp312-cp312-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/20/21/a1e7d7ed1b48a8adf8fd5154d9e83fcc5ad8e6ff20ae00e44865057dce8d/coverage-7.15.1-cp312-cp312-musllinux_1_2_riscv64.whl",hashes = {sha256 = "86bd37eabe39977216f630a7fc1b698e7f5e81a191c7186013245c6c3d313f9d"}}, - {name = "coverage-7.15.1-cp312-cp312-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/a7/8c/a4bc26e6ee207d412f3678f04d74be1550e83140563ca0e4997510579712/coverage-7.15.1-cp312-cp312-musllinux_1_2_x86_64.whl",hashes = {sha256 = "c6db15c217693bdc3ca0b84de1ba9afafe1c14c26a8a29d77f4ed0de2b6132e2"}}, - {name = "coverage-7.15.1-cp312-cp312-win32.whl",url = "https://files.pythonhosted.org/packages/11/9d/8ad0266ecfada6353cf6627a1a02294cf55a907521b6ee0bd7b770cfd659/coverage-7.15.1-cp312-cp312-win32.whl",hashes = {sha256 = "359f3fbe09a51500c51966596ee4ee4070b356552c70b3b2420eb200d68e0f76"}}, - {name = "coverage-7.15.1-cp312-cp312-win_amd64.whl",url = "https://files.pythonhosted.org/packages/81/6d/24224929e06c6e05a93f738bc5f9e8e6ab658f8f1d9b823e7b85430e28b8/coverage-7.15.1-cp312-cp312-win_amd64.whl",hashes = {sha256 = "fa75dc099c126e941a9c0baa8ebd2cbc78bd778687534fe410baf754f6d9e374"}}, - {name = "coverage-7.15.1-cp312-cp312-win_arm64.whl",url = "https://files.pythonhosted.org/packages/35/23/f81441dd01de88e53c97842e706907b307d9078918c3f4998b11e9ac7250/coverage-7.15.1-cp312-cp312-win_arm64.whl",hashes = {sha256 = "26f89cf6d0634375f454fa71057945ad18edb0f1607a90fecf22c57dc3dc289a"}}, - {name = "coverage-7.15.1-cp311-cp311-macosx_10_9_x86_64.whl",url = "https://files.pythonhosted.org/packages/67/ee/5095e07a0986930174fc153fd0bb115f7f2724f5344cc672e016d4f23a4e/coverage-7.15.1-cp311-cp311-macosx_10_9_x86_64.whl",hashes = {sha256 = "6506330b4a8dcf53b95bd84d8d0e817107cdb3fc1438e835029cdf0bc6612eb0"}}, - {name = "coverage-7.15.1-cp311-cp311-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/43/7a/7e2598ce98433a214020a61c0755d5961f9f26df0c630dc73e06b86d3416/coverage-7.15.1-cp311-cp311-macosx_11_0_arm64.whl",hashes = {sha256 = "f8a51a8ec382c39d939cba0ab07ae949077ae4e842343bd4eed22d432358cea9"}}, - {name = "coverage-7.15.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/8b/4f/67dac6a69139b490a239d91b6d5ef127982ffb89159769241656ab879ee5/coverage-7.15.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "18ea20e3922d7f8ca9e0ef1084408d08c4ad62d5e531cb9c1f6896a99297ebea"}}, - {name = "coverage-7.15.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/05/37/5e439725a96de592309725550c8df639c359c209dcb4b152ed46032d4c0d/coverage-7.15.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "aab9902a64b8390e3b56e539fddae1d79a267807fe5cb0c18d7d2f544ce867e2"}}, - {name = "coverage-7.15.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/0f/1c/671ba9e15f9651a99962fb588a1fe4fb267cae4bb85f9bb4ac4413c6f7ef/coverage-7.15.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "8cc316264317b07a9e90d7f2b4188a15e36e9b54e651081b791b0515fa612a29"}}, - {name = "coverage-7.15.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/d6/3c/88305322b4d015b4536b7174b8f9b87f850f01af9d89008cdbf984b65ff2/coverage-7.15.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "d4e47e7eea81a8ccf060a07627654151d929da62c7b715738387c200905cec89"}}, - {name = "coverage-7.15.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/8d/20/d02e42333a57f266ded61ed4fb3821da1f2dc143734aaa3dcc9c117204c5/coverage-7.15.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "c6829d9a3b55ad2b73ef5fda8302e5be03683789e88b1a079dcf4a773229c21d"}}, - {name = "coverage-7.15.1-cp311-cp311-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/f3/d0/94ebc010926a191d83e83b1f1236f8bd0d14d0eb98b5c324aa4be2589a8e/coverage-7.15.1-cp311-cp311-musllinux_1_2_aarch64.whl",hashes = {sha256 = "764e045811f9c8cda436641f3f088283351d331a519b5807f19041cd0a68da1c"}}, - {name = "coverage-7.15.1-cp311-cp311-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/2e/a6/2c8553191da0c2da2c43ff294fb9bab57a5b0fae03560304a82a8b5addc3/coverage-7.15.1-cp311-cp311-musllinux_1_2_i686.whl",hashes = {sha256 = "09b3b088aa24489c4082bcc35fcc8224281ab94a653dfb6d3f0c8165b0d628ab"}}, - {name = "coverage-7.15.1-cp311-cp311-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/17/99/20f47986d8360fa1a31d9858dd2ba0be009d44ecfa8d02120b1eb93c028b/coverage-7.15.1-cp311-cp311-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "7911b02f57053adf8164ae63edb1c26574d24dfccabadc5268cf69310a69a358"}}, - {name = "coverage-7.15.1-cp311-cp311-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/17/36/fb61983b5259f78fa5e62ee74e91fe4de4c556fcbc9a3b9c9021c2f8b57b/coverage-7.15.1-cp311-cp311-musllinux_1_2_riscv64.whl",hashes = {sha256 = "664e279ed40599b8ed16f4db18d92a7e212c73129672bec8f5d96d4da48d2404"}}, - {name = "coverage-7.15.1-cp311-cp311-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/6c/2e/d109d8d2d6c726ba2e78125297073918a2a91464f0ea777e5398fa3cf75c/coverage-7.15.1-cp311-cp311-musllinux_1_2_x86_64.whl",hashes = {sha256 = "34fe7cf79d5f1f87f2e8ce7dc1c32950841f50e10d0120f263856acfad66de34"}}, - {name = "coverage-7.15.1-cp311-cp311-win32.whl",url = "https://files.pythonhosted.org/packages/bc/a0/5b3219cbb46135e14673427f2bf5890c4da4e6f655243692f3448aa3f42c/coverage-7.15.1-cp311-cp311-win32.whl",hashes = {sha256 = "5e2d2536d2f57a354aa382ed303ac0e2e5c9522a508c05b998d26181b94163a7"}}, - {name = "coverage-7.15.1-cp311-cp311-win_amd64.whl",url = "https://files.pythonhosted.org/packages/5b/80/24e13ade0b6df8090e2492f9c55044bf1423f7ef28c76fc1af8c827a61cb/coverage-7.15.1-cp311-cp311-win_amd64.whl",hashes = {sha256 = "c337da8fca7ea93ab43f3868cfcde6cf6dad32c3906b273cfbad5d7390bc423b"}}, - {name = "coverage-7.15.1-cp311-cp311-win_arm64.whl",url = "https://files.pythonhosted.org/packages/2d/9e/34659930ae380491af48e2f5f5f9a2e99cd9fb7de3d30f27be5ac5425137/coverage-7.15.1-cp311-cp311-win_arm64.whl",hashes = {sha256 = "db3403fdb7a94d5eb73e099befad8104d2a7d110a0f0d99df0de61c5d1fa756c"}}, - {name = "coverage-7.15.1-cp310-cp310-macosx_10_9_x86_64.whl",url = "https://files.pythonhosted.org/packages/ef/76/eef242d6bb95fb737fefd9bbf3a318897e4e82cf543b53a61c2a6e8588eb/coverage-7.15.1-cp310-cp310-macosx_10_9_x86_64.whl",hashes = {sha256 = "05d87c2a43373ad6b976d0a99ad58c48633633bcdeb896dc645a006472cc4a71"}}, - {name = "coverage-7.15.1-cp310-cp310-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/89/73/41cd50da59d513a30fd3a34b5516b962ac17514defdb6705948446a5c0b1/coverage-7.15.1-cp310-cp310-macosx_11_0_arm64.whl",hashes = {sha256 = "2afce82f2cf8f4c9002746a42755e1dc61baff33d9f7ab5569b4c9101f8f4d1d"}}, - {name = "coverage-7.15.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/22/9d/6df6ac6677719a087c839208186525b7b1f3653c50196c43246482ada65e/coverage-7.15.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "0a545ef5384d787d0fcac6c349afc2c5f99dcc39e13ed3c191b2c06305f64c04"}}, - {name = "coverage-7.15.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/9f/f5/86f92c429fbf942986d01c3bb7b0b6c3ad06b09f7fa745023877413dde83/coverage-7.15.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "afaa144b8f5b3bc69fe0ce50d401c46b01ab264782553bfd05a3f98804524ecb"}}, - {name = "coverage-7.15.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/47/c6/99d0f1c1dd1583aaf8c1deca447e44426be54a76027a8c55e29970f22b15/coverage-7.15.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "e1b6099490e5f88569c46b18605f556c3b30acc9a0a219cf7ef8fab8f7161ec4"}}, - {name = "coverage-7.15.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/b2/c3/5d30740ec96f5fd8a659e46b6ee9224197f87aa66ce4a20e93dcf46221ac/coverage-7.15.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "bb5f6c2cf1ffd0bf2bd925c7cdcae9b4f208e9696d453ed51eb1f5fa0cc5b45b"}}, - {name = "coverage-7.15.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/71/e5/3afb2950673ca6cd22bc9ad6a9d6058c853bef8fe27a6d1df3adc274fd88/coverage-7.15.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "81572011fc1fc271317da35da593944daef7bfd507085e35751abbe702b74f69"}}, - {name = "coverage-7.15.1-cp310-cp310-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/ca/53/25ab3c0a7cf517ed4d30cd4dd82331e005d4b57fec8c19c0ffd94fb50baa/coverage-7.15.1-cp310-cp310-musllinux_1_2_aarch64.whl",hashes = {sha256 = "8f765d13c08497687d0780cca66115c6aa4ba6703ad43b61e94fab9db689e3a3"}}, - {name = "coverage-7.15.1-cp310-cp310-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/ad/2a/8afb5f994e26e919e5dca5164f1c7b6b7ce6090aab1aac32b1ae1782f047/coverage-7.15.1-cp310-cp310-musllinux_1_2_i686.whl",hashes = {sha256 = "771caba880fee96493d18dfc465c318e08ab74e3bc2a3e4089e52514be6a6e54"}}, - {name = "coverage-7.15.1-cp310-cp310-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/d4/62/b6616e15288c9a7b628f7745e832fd8af2c03ec1f7dc11da25947f5ab16f/coverage-7.15.1-cp310-cp310-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "433a73200848e80f27712fc113b6ff5311f29b479a7d3bd4b1106138a77f9674"}}, - {name = "coverage-7.15.1-cp310-cp310-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/9e/21/5d80d65e4df3018dedb23a44f276f20ce26e429ffd76df03de03bcf9a767/coverage-7.15.1-cp310-cp310-musllinux_1_2_riscv64.whl",hashes = {sha256 = "5d6fa45079db9fbeba0a69e3d91189f05301d6ac918162a53179d32fc9ed4910"}}, - {name = "coverage-7.15.1-cp310-cp310-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/53/4b/04a22708691561c44d77e1d5a60857b351310fdfbf253533780bb31c8b6f/coverage-7.15.1-cp310-cp310-musllinux_1_2_x86_64.whl",hashes = {sha256 = "00b6703c6640075cdce5124e9335dfdf9167272475301828acfdd09c0e5ee731"}}, - {name = "coverage-7.15.1-cp310-cp310-win32.whl",url = "https://files.pythonhosted.org/packages/82/c9/a5c1e8954e657559de478acc1ef73e9393d3fc9b4a2ab4427501d765aca2/coverage-7.15.1-cp310-cp310-win32.whl",hashes = {sha256 = "3ad9a0eac4728327fd870d52f74d2e631d176c5f178eaea2d9983ab5b9755a55"}}, - {name = "coverage-7.15.1-cp310-cp310-win_amd64.whl",url = "https://files.pythonhosted.org/packages/54/49/5f6566e14611a58e93a926f3a8a7b22e4e0702ebb4c467ac38f452c7f4cf/coverage-7.15.1-cp310-cp310-win_amd64.whl",hashes = {sha256 = "eb5fa75dc3d30e3a1b75da97973479b20ffa9b0641ff56d6e94b5f3e210daa54"}}, - {name = "coverage-7.15.1-py3-none-any.whl",url = "https://files.pythonhosted.org/packages/34/98/07a67cf1a26e795d617ed5c540c042b0ac87b72f810c30c07f076cf334f3/coverage-7.15.1-py3-none-any.whl",hashes = {sha256 = "717d01e6e00bed56ad13306f19e0dd2f4f645ee8159d2c72c72301d6cfc7090c"}}, + {name = "coverage-7.15.2-cp314-cp314-macosx_10_15_x86_64.whl",url = "https://files.pythonhosted.org/packages/81/5f/aed265fd7a3551a394f36dfe41868aee709b7f95db4052205b4ad1563ac3/coverage-7.15.2-cp314-cp314-macosx_10_15_x86_64.whl",hashes = {sha256 = "40f633c5c5fc783732f6312280122e859538fa24461235597c13d803ea9a108a"}}, + {name = "coverage-7.15.2-cp314-cp314-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/6b/2c/222ba12a545189017120f8eddfc1a0bd4616b47d5d4a8d99421edb2fe4c6/coverage-7.15.2-cp314-cp314-macosx_11_0_arm64.whl",hashes = {sha256 = "075560438765b7a2ef43bf7aa7758661b53d889df47f062a31bda6c1ade553a2"}}, + {name = "coverage-7.15.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/aa/38/304b5877ab46e6c290b4292cfcf3fe28245f0e5597cad7f6acc91fc7e0a4/coverage-7.15.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "25fd15dd40a0a2c51a500d664ca29053c09c3259d998407bf982b6e114696138"}}, + {name = "coverage-7.15.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/6c/58/821b533b8db9e44cf1d8a97bd525149ced40dde1d0093da02cb78e715244/coverage-7.15.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "b9a6367e4aff723e8ee8190836836124284e8fcd4265e307c844010cfa074f3f"}}, + {name = "coverage-7.15.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/f1/f2/7aa06604c389d32ea7f0a6a988359a7eafc3cd3f8e7bc2e88cd2fdf0b877/coverage-7.15.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "9854ca62c152874b2060772503535be2e8f53f70b8aaa7686b094888d872f984"}}, + {name = "coverage-7.15.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/a2/4f/1ef342339c7916d0096bc5888cc0f653882cc7bc8f897d5cb89143287c9b/coverage-7.15.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "913b6c56e110da40e035bbd168353bf7aaa2544a5eaccea5d98a4629aac156c7"}}, + {name = "coverage-7.15.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/fe/f4/7ed055d7a9c5ec13b161773a115a5ccc6b0081d568c31fad830806306cc7/coverage-7.15.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "aaccad4129d735a8a4d526f26929894c9a4e8ef7034566f210b176749d6906e3"}}, + {name = "coverage-7.15.2-cp314-cp314-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/14/79/ea82cca18c242a3a38b6c017da39726aa62dcb64aa635abf79b92009975c/coverage-7.15.2-cp314-cp314-musllinux_1_2_aarch64.whl",hashes = {sha256 = "a164b50081fc7357331c4024ef4d17b78ba325f8380d05f5a69599a7e05257ee"}}, + {name = "coverage-7.15.2-cp314-cp314-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/a4/ba/a136db3c0d9562b00e10b72540dbf3a33cd3bc5b95060c9308e247494623/coverage-7.15.2-cp314-cp314-musllinux_1_2_i686.whl",hashes = {sha256 = "bfd341ccf78128e72c094bc70cc25b3ef309c33c7c2c66ba3ed4309549e02de1"}}, + {name = "coverage-7.15.2-cp314-cp314-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/17/17/ea334246b16b7d059953fad6fdefa11e33c68efbd3fe37b1098120a1fac2/coverage-7.15.2-cp314-cp314-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "1473b3ba8e7ee0f076117b1a72c23f579a2b9e2bb742f48a8d86ea27ca93f91a"}}, + {name = "coverage-7.15.2-cp314-cp314-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/ed/c3/074fb66d46d607855f710876b117cbda562c5ab08363528e78820449f937/coverage-7.15.2-cp314-cp314-musllinux_1_2_riscv64.whl",hashes = {sha256 = "17c432b5f73ad52ef46fb06019f6fa7c66ce381961cf0f7dfd1d3a4bd3a98145"}}, + {name = "coverage-7.15.2-cp314-cp314-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/e1/c1/f620850ada9b36435921c9a3a8057013422b1d964eb4bf37fe138724d192/coverage-7.15.2-cp314-cp314-musllinux_1_2_x86_64.whl",hashes = {sha256 = "77f0ef5011df53a4bd1b35211ab122287f8d9b8d7aa1c4553e5c2deb24b1d446"}}, + {name = "coverage-7.15.2-cp314-cp314-win32.whl",url = "https://files.pythonhosted.org/packages/cc/31/a729ca3689404493af82ef8e6ff70bd88bdda8da89aeef6ca9b387aeb2b4/coverage-7.15.2-cp314-cp314-win32.whl",hashes = {sha256 = "f653e5d7248c1191ec988a85c72edeab46c3ff44f90639a4ed4874ec0be90243"}}, + {name = "coverage-7.15.2-cp314-cp314-win_amd64.whl",url = "https://files.pythonhosted.org/packages/c6/83/5d809dc808fb1698c671f3e372259bb9158e64b7ea526fc6ab7de64de9fe/coverage-7.15.2-cp314-cp314-win_amd64.whl",hashes = {sha256 = "9911f31aad8906abe337c271343485cf20df5e70df5d2f57f9f136e7b55f26bc"}}, + {name = "coverage-7.15.2-cp314-cp314-win_arm64.whl",url = "https://files.pythonhosted.org/packages/16/4e/35e488548e952795829e129995c4174df33bf432b591d1aa42c8d9e4e7ad/coverage-7.15.2-cp314-cp314-win_arm64.whl",hashes = {sha256 = "e38def96ad59853824c97953fdcd2c320a84ba3ce99b417db78af8bb6c3db635"}}, + {name = "coverage-7.15.2-cp314-cp314t-macosx_10_15_x86_64.whl",url = "https://files.pythonhosted.org/packages/ed/49/dd2c86cd6374038f6e415fb5bfb86db5218553209c081384a020369dee79/coverage-7.15.2-cp314-cp314t-macosx_10_15_x86_64.whl",hashes = {sha256 = "835ec4e20b45f0a7f63ed78f94065aca00de033403df8377bfe8b9c6abc0a7be"}}, + {name = "coverage-7.15.2-cp314-cp314t-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/d3/74/173ff17a1c0808e5a438f549f6f145d5ac7528f2791310b63523e3200ac7/coverage-7.15.2-cp314-cp314t-macosx_11_0_arm64.whl",hashes = {sha256 = "7466cc7ab6dc0db871d264bf99e8779f0917ee63d40730af0552f71535a6e072"}}, + {name = "coverage-7.15.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/84/f8/b8cba872162356fb44ac79c10309d987206a4461e32072fc29228dad7331/coverage-7.15.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "e370c12133095ff18432de8c044962be85a5a96d90c6fcbce8e17e76236d2328"}}, + {name = "coverage-7.15.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/ee/67/a807a7586d0b8cae485308ddd55756f0806c92f8e0b411bacbf23c48edf3/coverage-7.15.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "fe41909c9515c3bfdb5f02c4d1f857dba322d9a9a1178069b91eea77889df63a"}}, + {name = "coverage-7.15.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/ce/67/cd78771dc985f7e4ebdcc82b1a96d9a932af9e806f01f2f91a89f4c72e80/coverage-7.15.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "6aa28cfb6488e5453b5b762d65f73aa586380f6693a04d58078ce228a29b06c0"}}, + {name = "coverage-7.15.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/18/3e/10134cf81275188c58568f324fc74aedff32c63ca4d5bbc513a91944a6f0/coverage-7.15.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "bcc0aae933921d03096f53b0b03eeb702129fd406dee59f08d2efacc68681fa5"}}, + {name = "coverage-7.15.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/75/4a/771b77de446cba985dc414bbc5844bd21604da05dbc044286df8318a48a7/coverage-7.15.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "7c63387e21ab21f512c69c9756a8c7dadd322c7275edb064064433c9a09c3743"}}, + {name = "coverage-7.15.2-cp314-cp314t-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/5f/b5/70a7011da15f4071943361183aefa27847f3e3aec4fd335f1cb3d3a622b1/coverage-7.15.2-cp314-cp314t-musllinux_1_2_aarch64.whl",hashes = {sha256 = "0e55510bc98ae943cece9e667a6c0fe94c6a92913720dea34243657a17993d0c"}}, + {name = "coverage-7.15.2-cp314-cp314t-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/b4/0d/f9547e804ce7ad49646ffeffac26699510efbe6c0f751b66fdc960c4e825/coverage-7.15.2-cp314-cp314t-musllinux_1_2_i686.whl",hashes = {sha256 = "2ff08701be2d1556fc78b326c80a3e8042da09352ecb3819105f8e386c8a3071"}}, + {name = "coverage-7.15.2-cp314-cp314t-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/ac/59/f576a396659c0efd351f5c1544f67c3560e89c7761cabf7f65e412beeda5/coverage-7.15.2-cp314-cp314t-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "38c9518b7103826c403a461544e3c2e77151e8676d06eaed85911a97e962584a"}}, + {name = "coverage-7.15.2-cp314-cp314t-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/7c/5d/c2e4fce3579c0cb635024293f1a32bbe26df101b3e3a69f22243d1352b6c/coverage-7.15.2-cp314-cp314t-musllinux_1_2_riscv64.whl",hashes = {sha256 = "dee88b1ed88587abd8c0269a1fc1f4cc77f7750d1dfde2869e2a123af420e67d"}}, + {name = "coverage-7.15.2-cp314-cp314t-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/bb/dd/956287d69436b66094bc4b57ac2da71e43bfd2a5524e958900b9f582fcf8/coverage-7.15.2-cp314-cp314t-musllinux_1_2_x86_64.whl",hashes = {sha256 = "2fbeeeecea279727f8ac16c8e1133ddfeee793e985c86ae343d6a5ce744eef8c"}}, + {name = "coverage-7.15.2-cp314-cp314t-win32.whl",url = "https://files.pythonhosted.org/packages/2c/5a/6f979530c2734c575de77cf58f5f28d51f7123a94b5030fd9156fe5f363c/coverage-7.15.2-cp314-cp314t-win32.whl",hashes = {sha256 = "cb0fddaa6884be6aae36ced9544b5e90f7d5f03845a2853bf47a14953a4e8688"}}, + {name = "coverage-7.15.2-cp314-cp314t-win_amd64.whl",url = "https://files.pythonhosted.org/packages/54/7e/27f6b2a74d484742f4017553e710b01e396b23d809df3e95ca0bb9a2824b/coverage-7.15.2-cp314-cp314t-win_amd64.whl",hashes = {sha256 = "77f091ea3a9cc611cd29f433565476bc1936c084ac8eee00ea0e7e70c27e4199"}}, + {name = "coverage-7.15.2-cp314-cp314t-win_arm64.whl",url = "https://files.pythonhosted.org/packages/b1/48/284863423aa474240f6842bd00d680da22f4e6ea2e466618ef7c9c9e69a9/coverage-7.15.2-cp314-cp314t-win_arm64.whl",hashes = {sha256 = "6fc448c377d6eeb00a47c673494bd9bae29280ca53987e1869e67ebedfe20658"}}, + {name = "coverage-7.15.2-cp313-cp313-macosx_10_13_x86_64.whl",url = "https://files.pythonhosted.org/packages/fc/d5/f8c838e6b7282976f7c918884b792df7a0c42c5bba5d99c60ad2d221d56d/coverage-7.15.2-cp313-cp313-macosx_10_13_x86_64.whl",hashes = {sha256 = "1121caa19159a38b5463eaae4b1e1fde81e525b15ecc5e000cd5b1a108f743a8"}}, + {name = "coverage-7.15.2-cp313-cp313-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/bf/37/97c926376364f66298cc44893b89cdf17b8bc406376497c4061ae4b8a8ff/coverage-7.15.2-cp313-cp313-macosx_11_0_arm64.whl",hashes = {sha256 = "a300c6934e0989c327b9e8a1e110329da4641149f872bbe9f70168be66da76c1"}}, + {name = "coverage-7.15.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/b7/30/a36050a6e83c2135ee0776f452ca3948224befc6d7f26acecc082d0c106a/coverage-7.15.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "2617f8799d268fabdeef42a7e89ac3a23e1deee9025427db2df970f99a89a578"}}, + {name = "coverage-7.15.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/31/d3/06b5f1daf95f0f15ab05bd75f26ba5f3c8b33d0bb72f3aaa3cf41d1bad3a/coverage-7.15.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "7dc2950a2992cd676d35c20ae63522836deeb034f08874699d14068710af3dc1"}}, + {name = "coverage-7.15.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/81/1c/9afb3f8de2b8d36960391c48559a2e3ff96594b58099f115921549ea8d0d/coverage-7.15.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "9e36686f7a442185db2400b3df171aac520869faf9deb59df687d28659eda2a6"}}, + {name = "coverage-7.15.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/64/d8/b989f96061a5e32d82fddd1b1b9ff48a7c8f8ae7606f0e80fd9de54b1e33/coverage-7.15.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "7d29ca7bd67af6e12e74632d65f026eabc1364da5c254494cd914446a28a3ef7"}}, + {name = "coverage-7.15.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/b8/fa/f99771f5110457c7b511c1935ca49ddf288218eaa84322e028b9334146ae/coverage-7.15.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "db9c8438057e5b0f6a22a0af99c0c1d26b57fbbdbd1be5861ddb8f897fcc3a2d"}}, + {name = "coverage-7.15.2-cp313-cp313-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/f6/96/c098a6044d119c751ceede7be91035fa8310170ec24a6523aff72f0a5793/coverage-7.15.2-cp313-cp313-musllinux_1_2_aarch64.whl",hashes = {sha256 = "63022c4c8dec1d0342f05c3ede99842fe3d007689acc45e86f123a1746e4a026"}}, + {name = "coverage-7.15.2-cp313-cp313-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/b2/a2/1457b3a7a50c8d77500103b97a046db863e2f59a1cf6d2f814595f349885/coverage-7.15.2-cp313-cp313-musllinux_1_2_i686.whl",hashes = {sha256 = "6c0be82b4d4aa5b2704e08518e2252f3e3d110164bcca826816801052e48a7aa"}}, + {name = "coverage-7.15.2-cp313-cp313-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/6c/0e/76958874c471ecfcdde0d2b2747bb2c61bdbf34a40636f4ce9db9923e643/coverage-7.15.2-cp313-cp313-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "4510fb9cdf6bb02dfa6af0be4a534b8102d086e22e4a33f8836df663da3d660d"}}, + {name = "coverage-7.15.2-cp313-cp313-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/7c/7c/3d7c4e3bf58baa40327dc7edc2272b17cf02299366d52763db1b0ca1556a/coverage-7.15.2-cp313-cp313-musllinux_1_2_riscv64.whl",hashes = {sha256 = "42ec3d989421b174a2ab607c1539f24127ad362757b7f1c0c0d7a2993f7eb37b"}}, + {name = "coverage-7.15.2-cp313-cp313-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/c8/b8/1cecffed9ce14fb25be9ba42d37b6bb61485c9a3ddd43cd3dde36b6087d8/coverage-7.15.2-cp313-cp313-musllinux_1_2_x86_64.whl",hashes = {sha256 = "e8f91bce78e32343af184c3b7fa28fcf5a9e2641f4b6623d392038f804939188"}}, + {name = "coverage-7.15.2-cp313-cp313-win32.whl",url = "https://files.pythonhosted.org/packages/6c/2c/42984561bc7f4c045dca67516a0c50ee5ef8d84352dbeb5559dc86c4823e/coverage-7.15.2-cp313-cp313-win32.whl",hashes = {sha256 = "434e68d531858205895eb0d74b73d20b84260de426387d53c422a5acda2cf050"}}, + {name = "coverage-7.15.2-cp313-cp313-win_amd64.whl",url = "https://files.pythonhosted.org/packages/41/9f/39c7c9245efc583beddf89a87683574e663ed93637f3afb6cd7b88405676/coverage-7.15.2-cp313-cp313-win_amd64.whl",hashes = {sha256 = "26c3b04a6377fd7c09800921fa934e3a17c0020439cd59df73e73ae1d4b6a78c"}}, + {name = "coverage-7.15.2-cp313-cp313-win_arm64.whl",url = "https://files.pythonhosted.org/packages/c7/de/3a2883cf8a213659280ef4b403059e17a9acaeb7fc7fd4105e1226ff2e6d/coverage-7.15.2-cp313-cp313-win_arm64.whl",hashes = {sha256 = "3ed010aa1b69cda8e827aabfca9866216c980e2dca82ab9a78c5f83689964c8b"}}, + {name = "coverage-7.15.2-cp312-cp312-macosx_10_13_x86_64.whl",url = "https://files.pythonhosted.org/packages/6a/50/eb5bf42e531611a9f8d272556b1ed4de503f84a91413584094487cf69f8f/coverage-7.15.2-cp312-cp312-macosx_10_13_x86_64.whl",hashes = {sha256 = "1adac78e5abc7c5438f7a209c9ca69d06542f0bf481d728b6989ea80b813fdf9"}}, + {name = "coverage-7.15.2-cp312-cp312-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/06/d1/da99af464c335d4e023a6efcd7ec30f63b88a43c93745154ab74ffb31cea/coverage-7.15.2-cp312-cp312-macosx_11_0_arm64.whl",hashes = {sha256 = "b868acc62aa5de3be7a9d05c2333bf8359ca987e43f9cb30ff8fbda6a024ab73"}}, + {name = "coverage-7.15.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/5b/8a/13c42723d61ca447eafa18732e8141dd6a63f2732e1c7e1502c182dd88d7/coverage-7.15.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "6f6966fc30e6f06ca8f98fb0ce51eda6b111b3ee8d066a8b1ec9e77fa06ab55d"}}, + {name = "coverage-7.15.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/d7/29/99021303f98fbdcb63504b4d07bea4cc025b9b2dd907c4f07c85d50a0dab/coverage-7.15.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "68af907f595ab01a78f794932ff3bdf929c316d3000810d38dbc247129e26f8b"}}, + {name = "coverage-7.15.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/f9/a8/fd503715ed6ca9c5d742923aa5209257340b367a867b2ced0c7d4ba8a0b9/coverage-7.15.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "afa29e2eff3d5729267e2cb2fd4ce9d61c952932fb2694e34ccb5d9540c6a296"}}, + {name = "coverage-7.15.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/da/40/3f4b8fb409810036ebc2857d36adc0498c6e957b5df0290c5036b2e143f1/coverage-7.15.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "bbf44513ceb1589e31948e20eafbde9deaface90e1a1afa5f5f77b4423d17ce6"}}, + {name = "coverage-7.15.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/0b/8a/9bdffbef47db77cce3d6b02a28f7e919b19f0106c4b080c2c2246040f885/coverage-7.15.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "9deddf09eecb717b7f980414b43d90a5b22ff3967d2949ab29cb0aa83d9e9098"}}, + {name = "coverage-7.15.2-cp312-cp312-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/1b/1e/9031efde019d31a06646261fce6dfc5c3c74e951e27a71e5c9a424563178/coverage-7.15.2-cp312-cp312-musllinux_1_2_aarch64.whl",hashes = {sha256 = "ae901f7e55ba405c84ee1cab3d3e962e4e871e4a2bcb9c90911adbd69b42ac5a"}}, + {name = "coverage-7.15.2-cp312-cp312-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/56/db/787acde872389fc84a9ef9d8cd1ccc658e391ab4cb5b28092a714426a394/coverage-7.15.2-cp312-cp312-musllinux_1_2_i686.whl",hashes = {sha256 = "a0f47002c6eeb7c280228467a4cb0cc15ca2103a8421b986b2d3ec04a0f9bd8b"}}, + {name = "coverage-7.15.2-cp312-cp312-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/2f/9b/6f57bc4b93c842eef1695f8cdaf2318e35e7ba54f5ba80d84be213ab7858/coverage-7.15.2-cp312-cp312-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "1cd7a5beb7af3e864a13b1f0fb26efd3695da43ef0daf71e586adfffaf34d5b2"}}, + {name = "coverage-7.15.2-cp312-cp312-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/88/26/b3186a21b2acc83e451118978905c81c7072c3333707804db09a78c096a2/coverage-7.15.2-cp312-cp312-musllinux_1_2_riscv64.whl",hashes = {sha256 = "97a5c5457a9fb1d6c4e06cfb5dc835871fbfb6a6a51addc9e925bdeff5ef7440"}}, + {name = "coverage-7.15.2-cp312-cp312-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/20/c2/c9f3376b2e717ea69ed7a6e9a5fcab968fb0b290db6cf4bd9a1fc7541b75/coverage-7.15.2-cp312-cp312-musllinux_1_2_x86_64.whl",hashes = {sha256 = "0901cfe6c13bcd2302da4f83e884555d2a22bda6e4c476f09ef204ba20ca536e"}}, + {name = "coverage-7.15.2-cp312-cp312-win32.whl",url = "https://files.pythonhosted.org/packages/f0/e1/dfc15401f4a8aaeb486e1ba3e9e3c40522a6e38bd0ecf0b3f29cb8082957/coverage-7.15.2-cp312-cp312-win32.whl",hashes = {sha256 = "b171bdd71cb7ff792bf32e376173b0ace7e7963e7e57c58dfc42063a6a7174cd"}}, + {name = "coverage-7.15.2-cp312-cp312-win_amd64.whl",url = "https://files.pythonhosted.org/packages/91/40/81b6d809d320cd366ec5bdf8176575e897dcb8efe7fb4b489ef9e93e4d13/coverage-7.15.2-cp312-cp312-win_amd64.whl",hashes = {sha256 = "582edc45c2040543fef83341be23c43024a3ab3ae0c2d8bc498a06282905ad40"}}, + {name = "coverage-7.15.2-cp312-cp312-win_arm64.whl",url = "https://files.pythonhosted.org/packages/ef/28/9f14ec438149f7de557f45518f09b4a7917b795cc37083aa7db482693f8c/coverage-7.15.2-cp312-cp312-win_arm64.whl",hashes = {sha256 = "a638db90c61cd219aeee65e83a24fdaa57269a741ae0cf773309208ac862cee3"}}, + {name = "coverage-7.15.2-cp311-cp311-macosx_10_9_x86_64.whl",url = "https://files.pythonhosted.org/packages/7d/3a/54536704f507d4573bf9161c4d0dd3dd59b6d85e48c664e901b6844d8e33/coverage-7.15.2-cp311-cp311-macosx_10_9_x86_64.whl",hashes = {sha256 = "2f1ec6f304b156669cfde653b4e9a953f5de87e247ea02ac599bce0ab2744036"}}, + {name = "coverage-7.15.2-cp311-cp311-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/b6/d9/8ba925d29743e3577b21e4d8c11a702b76bc93c41e7fdfd1177af63d4b8d/coverage-7.15.2-cp311-cp311-macosx_11_0_arm64.whl",hashes = {sha256 = "4d3361879d736f469f45723c11ea1a5bbdaf1f6928f0e632c940378b5aa9b660"}}, + {name = "coverage-7.15.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/09/54/a855f3aa0187f2b431ade4e4791b77b56282cfb5d201c83ec26a31b5b36a/coverage-7.15.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "c6a98d698f9e2c8008d0370ec7fc452ebfcc530002ae2d0061170d768b992589"}}, + {name = "coverage-7.15.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/8e/d3/13ac97b4370640ba3452fc8559b06cc2f479ce3ba4a0b632a73e44c38a7d/coverage-7.15.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "d50dd325e18ec25bfcc10cd7f99b04df1ab9ec76b0918c260e60817ad0643dee"}}, + {name = "coverage-7.15.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/88/83/5eca144942d8d0659d3f55176517f4a59cdc65eefd17146a0770935a3ebd/coverage-7.15.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "67d7602480a47bdf5b675635403625553ebaa70d5a62a657c035149fd401cea0"}}, + {name = "coverage-7.15.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/4e/ba/d3db2e01a50fc88cdb4c0f19542bcf6f61489e34dc9aa3538413e2459a38/coverage-7.15.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "cee0f89f4767a6057c8fbf168f8135f18be651300496086bd873e3189fed0487"}}, + {name = "coverage-7.15.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/78/b3/aba83416e9177df28e5186d856c19158c59fc0e7e814aaa61a4a2354ad1b/coverage-7.15.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "a29ec5305a7335aacee2d799e3422e91e1c8a12474986e2b3b07e315c91be82f"}}, + {name = "coverage-7.15.2-cp311-cp311-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/6a/a5/4b00ecac0194431ab451b0f6710f8e2517d04cef60f821b14dec4637d575/coverage-7.15.2-cp311-cp311-musllinux_1_2_aarch64.whl",hashes = {sha256 = "48ccc6395958eda89093ecdc35644c86f23a8b23a7f4d44958812b721aad67c1"}}, + {name = "coverage-7.15.2-cp311-cp311-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/75/b6/cfa209b4313ee7f1b34da47efcd789ea51c024ad35af390e00f5a3c10a2e/coverage-7.15.2-cp311-cp311-musllinux_1_2_i686.whl",hashes = {sha256 = "81f382c5a94b434ec1f6da607edb904c76d7212e618cd4d1bc9f97bed4120ef5"}}, + {name = "coverage-7.15.2-cp311-cp311-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/36/67/e8cac5a6954038c98d7fe7eb9802afe7ab3ecb637bb7cc00e69b4148b56d/coverage-7.15.2-cp311-cp311-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "bbc808daf4f5cd567af8075ecc72d21c6dfef9a254709a621a84c217c935ebc0"}}, + {name = "coverage-7.15.2-cp311-cp311-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/2c/92/395cca9f330a86c3fe3471d73e2c102116c4c58fdc619dbbc125c6e93a54/coverage-7.15.2-cp311-cp311-musllinux_1_2_riscv64.whl",hashes = {sha256 = "a4c46b247b5d4b78f613bd89fea926d32b25c6cc61a50bd1e99ba310348f3dad"}}, + {name = "coverage-7.15.2-cp311-cp311-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/51/60/3e91b20295439652424f426b7086ec5bf4fbe3f604c73eda22b986c4fd6b/coverage-7.15.2-cp311-cp311-musllinux_1_2_x86_64.whl",hashes = {sha256 = "094dd37f3ef7b2da8b068b583d1f4c40f91c65197e16c52a71962d5d537fc5db"}}, + {name = "coverage-7.15.2-cp311-cp311-win32.whl",url = "https://files.pythonhosted.org/packages/a5/eb/8c07839005e5e3c6b3877d3a6e2a80ce766589f31dd2b6882b78d59a7b8c/coverage-7.15.2-cp311-cp311-win32.whl",hashes = {sha256 = "a63b9e190711134d581c4d703df5df09851b1acf99792c7aacbbe9f41f0283c9"}}, + {name = "coverage-7.15.2-cp311-cp311-win_amd64.whl",url = "https://files.pythonhosted.org/packages/2e/98/59d83c257cd59f0fbaf9d9ddb26b744a576760dfd1ae16e516408894a02b/coverage-7.15.2-cp311-cp311-win_amd64.whl",hashes = {sha256 = "8bb9f4b4279187560796a4cdaca3b0a93dd97e48ee667df005f4ed9a97403688"}}, + {name = "coverage-7.15.2-cp311-cp311-win_arm64.whl",url = "https://files.pythonhosted.org/packages/ea/09/2d285c8bef5c4f695d120c1c96dc11715638aa8e134069f210bb6a62a9fe/coverage-7.15.2-cp311-cp311-win_arm64.whl",hashes = {sha256 = "8c726b232659cbd2ae57ade46509eb068c9bd7a06df9fcbff6fe484870006934"}}, + {name = "coverage-7.15.2-cp310-cp310-macosx_10_9_x86_64.whl",url = "https://files.pythonhosted.org/packages/10/03/060ce69008ac97bbc01b1411b3e55b61f6f015659400b46749b662107831/coverage-7.15.2-cp310-cp310-macosx_10_9_x86_64.whl",hashes = {sha256 = "9b5bd92ff1ec22e535eab0de75fa6db021992791f461a2aceb7822c625a1187d"}}, + {name = "coverage-7.15.2-cp310-cp310-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/fc/a3/d936e8b53edd9684100a6aefaf3fcabaa54728fe33324436c8d279c047aa/coverage-7.15.2-cp310-cp310-macosx_11_0_arm64.whl",hashes = {sha256 = "44826758cfe73fcd0e6af5deb4ba6d5417cc1d13df3acb35c93484a11160f846"}}, + {name = "coverage-7.15.2-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",url = "https://files.pythonhosted.org/packages/ae/a3/ca234b06aec7ee28226f11d39a696b4481fe5eddfce8e03bf39979bb8ffb/coverage-7.15.2-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl",hashes = {sha256 = "09f5c6ec5901f667bd97dd140b5b9a2586b10efec66f46fb1e6d8135f8b95bdf"}}, + {name = "coverage-7.15.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",url = "https://files.pythonhosted.org/packages/2b/89/dda79527bb7573ba91828b2fb91b3105d87378d6a2749ca0c0924ce0addd/coverage-7.15.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl",hashes = {sha256 = "1d16e3a7104ea84f03e614611b3edbf6fb6892554b3ab0fe7fbb3f2b2ef04376"}}, + {name = "coverage-7.15.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/67/c6/c33755a34572f81f49a8c0cdf6b622f35ccb3238b136e1909daf0cdd4319/coverage-7.15.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "d46e62cb35d91e6e2589fda6d28074426b0e276422b5d2ebef2c6b11dc60dbfd"}}, + {name = "coverage-7.15.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",url = "https://files.pythonhosted.org/packages/b9/6f/dc341741b375be53a5baeee5b4bf0f0e525d38caed428f7932d23bb7bcb1/coverage-7.15.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl",hashes = {sha256 = "dfd3db045e95960ae3683059571e597fda7cc610106a8916f77c5839048c1deb"}}, + {name = "coverage-7.15.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",url = "https://files.pythonhosted.org/packages/e9/8d/966a18a5b195cb4e77b14c53f5f3dce22b5da05e6de7fafd1e08f2d2067a/coverage-7.15.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl",hashes = {sha256 = "affd532502d34c0472d0cdb181325c89f1d2c44992fef0c17e88e7b1576259a1"}}, + {name = "coverage-7.15.2-cp310-cp310-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/c5/8b/8b2e367496ab48484d48e79984fec76cdc1b7cb5d3a00ee799a5602e3ec9/coverage-7.15.2-cp310-cp310-musllinux_1_2_aarch64.whl",hashes = {sha256 = "d17d7512151fedfcc64c1821a8977fc9be0dbf495754669afcab7b57abc98ae9"}}, + {name = "coverage-7.15.2-cp310-cp310-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/63/92/1199318a200eb6c8c6ce0192c892c8710ac791abbe0f35099294620bbfda/coverage-7.15.2-cp310-cp310-musllinux_1_2_i686.whl",hashes = {sha256 = "e26ff680768b8095e8874aabe0e9d3a47a2a9f176a8340d05f8604c56457c23a"}}, + {name = "coverage-7.15.2-cp310-cp310-musllinux_1_2_ppc64le.whl",url = "https://files.pythonhosted.org/packages/56/da/be284a55c5619bda891a89c27dfd59324a2c6a14d755cf6aac6960ceebeb/coverage-7.15.2-cp310-cp310-musllinux_1_2_ppc64le.whl",hashes = {sha256 = "7e8f27131dc7cd53de2c137dd207b3720919320b3c20d499dc30aa9ee6173287"}}, + {name = "coverage-7.15.2-cp310-cp310-musllinux_1_2_riscv64.whl",url = "https://files.pythonhosted.org/packages/d4/53/ee112da833ddd77b73c6d781a98029b45b584b136615b4900ed0569f887e/coverage-7.15.2-cp310-cp310-musllinux_1_2_riscv64.whl",hashes = {sha256 = "728a33676d4c3f0db977990a4bd421dcaa3be3e53b5b6273036fff6666008e89"}}, + {name = "coverage-7.15.2-cp310-cp310-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/82/6a/802cfc802e9113494c80bf3f284cd4d72faeb1f24e244f61046af364f2ca/coverage-7.15.2-cp310-cp310-musllinux_1_2_x86_64.whl",hashes = {sha256 = "29c052f7c83ccfcc5c577eaae025d2e4a9bb80daf03c0ac31c996e83b000ce88"}}, + {name = "coverage-7.15.2-cp310-cp310-win32.whl",url = "https://files.pythonhosted.org/packages/2c/65/529808e91d651147edae408fd9e894abc3b8cad7f3e594bbc36719a3e13a/coverage-7.15.2-cp310-cp310-win32.whl",hashes = {sha256 = "1268ac8fb9ddcd783d3948dbabaf80a5d53bfdaa0575e873e2139a692f797443"}}, + {name = "coverage-7.15.2-cp310-cp310-win_amd64.whl",url = "https://files.pythonhosted.org/packages/68/0f/0e1829d7001130876dfbc0b4e1c737ea7c155b809e3e4a98a0aa268e2369/coverage-7.15.2-cp310-cp310-win_amd64.whl",hashes = {sha256 = "9f4432898c4bf2fba0435bbe35dd4437d7264565e5a88a21f5b49d8662a6b629"}}, + {name = "coverage-7.15.2-py3-none-any.whl",url = "https://files.pythonhosted.org/packages/ec/82/32e3bd191d498e64f6f911ad55d14006a0861e54869d2d32452326399e65/coverage-7.15.2-py3-none-any.whl",hashes = {sha256 = "eb6bcae8d1a9d305351ecb108232441d11c5cfe9de840a04388ba5d2db8d735c"}}, ] marker = "\"test\" in dependency_groups" [packages.tool.pdm] dependencies = [] +[[packages]] +name = "mypy" +version = "2.3.0" +requires-python = ">=3.10" +sdist = {name = "mypy-2.3.0.tar.gz", url = "https://files.pythonhosted.org/packages/12/af/4e516a05d3ca2eb9283e9ec45b2c02225c1514dd6da49fd3c9eaa6639370/mypy-2.3.0.tar.gz", hashes = {sha256 = "465965d41cd9a2726694e983e8ce7113259327bec798115d1e1dfa2a52fb666e"}} +wheels = [ + {name = "mypy-2.3.0-cp314-cp314-macosx_10_15_x86_64.whl",url = "https://files.pythonhosted.org/packages/a4/58/fa0ae047da911f540284009b4f44b96fe09d83c076d7c103e9d645f46303/mypy-2.3.0-cp314-cp314-macosx_10_15_x86_64.whl",hashes = {sha256 = "ea317b060ce83e26050f8f9e4d7d6bf44ed7597c8ff9990bccffbb9d1d8522db"}}, + {name = "mypy-2.3.0-cp314-cp314-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/15/14/2ba1d61452d7c2a7fe12741e8d374e52b183476b07aa7f9e2a0d02b0720a/mypy-2.3.0-cp314-cp314-macosx_11_0_arm64.whl",hashes = {sha256 = "094af99f92638aa92852326188b85a89e50f4a472f44827c03362228482f0762"}}, + {name = "mypy-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/ed/5a/483fb9e5ffbbb1a28dccc7b0a13d141b17ac769b6c9f488c0a0c63698962/mypy-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "de121747278144fc9ae7caa2e978cf5df12aebc82933182f5b3b86081a30baef"}}, + {name = "mypy-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/ae/77/70d7a10732063beb74ad713682cf871e88f5c5fa39bfc8beff8a524bf9cb/mypy-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "37fa4de896a84e2dc9200d91e614c22563b43d1a266789d4bbac7b22ebe6192b"}}, + {name = "mypy-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/56/72/766218ac783be4fdfcd699b90037b63017348a3e86fb2c1fbfb18302637d/mypy-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl",hashes = {sha256 = "f1b3a98dfd21058bc759bb3337d5d1f61d0fdf9f3cf9c00f4291790fb5427bff"}}, + {name = "mypy-2.3.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl",url = "https://files.pythonhosted.org/packages/38/4e/8a9db7411ecb8ec0cb1fd05dba432f28bafffcd38b4e887714a4a0506689/mypy-2.3.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl",hashes = {sha256 = "944c665d984157cb96a679dfb7a4a81dd1d36b24b9c284b699514e6e626b82d4"}}, + {name = "mypy-2.3.0-cp314-cp314-win_amd64.whl",url = "https://files.pythonhosted.org/packages/65/4c/c3f8bfd6ed0e5e38b5a244403b27f821d433443df5a15a278417c10a3a3c/mypy-2.3.0-cp314-cp314-win_amd64.whl",hashes = {sha256 = "4359424140d985192c778c1ce2c114a10c1ca58a381ed79cfa70d37df94b299f"}}, + {name = "mypy-2.3.0-cp314-cp314-win_arm64.whl",url = "https://files.pythonhosted.org/packages/3c/00/89a32eaf5ccf174bc4f90db0eaea5d70636c01b8d49f384bdab2e8834390/mypy-2.3.0-cp314-cp314-win_arm64.whl",hashes = {sha256 = "3dd0bed92c4bdec57c42505b96416fb9e6a5aa7be84d2809bcd5f2ecec2860d7"}}, + {name = "mypy-2.3.0-cp314-cp314t-macosx_10_15_x86_64.whl",url = "https://files.pythonhosted.org/packages/31/56/104f93d69aa9f339b6b9d3b0a7faa699b8b466c942cf3ae86cc2a2ec0915/mypy-2.3.0-cp314-cp314t-macosx_10_15_x86_64.whl",hashes = {sha256 = "691fdc37132b1ae628d834f672e74de83462d9fb4aff621835767fb43a8dd373"}}, + {name = "mypy-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/d2/03/f1d2123313f55efafdd27706960f43a771c62f1b68426c76043f3ab9ebf3/mypy-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl",hashes = {sha256 = "aec15d465d477558fd842757b487849007311cf3897849cdda0e3162ac0ac556"}}, + {name = "mypy-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/e5/5d/d5f9200399b445e81726c4f23becee33f233aee81c72680b1ef3a258b641/mypy-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "b352b7e49f5e6576009e8df730e1ff4f915cb565b851b396d2ffe2f5a6f5da88"}}, + {name = "mypy-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/cd/ce/69977c555f08faa3190cfde44189b89dbd56861b1ab97aa18fc5f3a2e4a3/mypy-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "1c6c6bf687b17f90dbfcad95b960d32eaa0154c00da45f03ab50bf8952e047fe"}}, + {name = "mypy-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/bc/92/6648b6caa3ab9e00f9ac0c2a78307805f873dd48139b24a6f6f7c3667bbf/mypy-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl",hashes = {sha256 = "f4ed18f111bfe2d599bca7468e7f9251042c1c2118f762c8de2766a56d773c60"}}, + {name = "mypy-2.3.0-cp314-cp314t-win_amd64.whl",url = "https://files.pythonhosted.org/packages/7c/ab/0dc91d80f3f016634c68d451f294a97320fe903a9b6f90b9e57b3f7f1717/mypy-2.3.0-cp314-cp314t-win_amd64.whl",hashes = {sha256 = "0b025a93cffb9781d231f232be07a17912f35f10a313c24f301c81e842870654"}}, + {name = "mypy-2.3.0-cp314-cp314t-win_arm64.whl",url = "https://files.pythonhosted.org/packages/85/b5/4c964d02634ba81f4d1c84838e5c5b18ab06d13ed568960f5d6318495ccc/mypy-2.3.0-cp314-cp314t-win_arm64.whl",hashes = {sha256 = "adebc76aab4f3495a88b41d48aa4aff0c03f2822501da76625afcca5975f19e5"}}, + {name = "mypy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl",url = "https://files.pythonhosted.org/packages/6e/ae/f7d056eb0294586a572d0d0d89580ec633c064db520f11d37d5a2fb833bd/mypy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl",hashes = {sha256 = "91ad22a52ae2c7e621c2f67c94d5a17f66b3209a4cff5cf8a573579835c69e97"}}, + {name = "mypy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/32/d5/db3e7af01e7844d21662c6ddc1f7825ec7cb4053f0391ac02faf3638396f/mypy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl",hashes = {sha256 = "99ac767cc5d3b64c8d0ae226ead10c96694f94e4e7da1668642225dcd4e75aac"}}, + {name = "mypy-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/d9/fb/43c031f0190513d1ec248ed037eceb742ddd2a4d74bbf406658a28173837/mypy-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "de6d2c484742a4d7b0ed6d07b143375624d3b899c5749c7b3c947f56261f48a6"}}, + {name = "mypy-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/ec/c3/f8b2ffc60883084da91be51af58e88a7ffd4ff9795acb7d902ff88d31eb1/mypy-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "7da939dd335cfd2ad788bdfd081c9f4e47634ab995e5a45eb15fd1e5bc052f8b"}}, + {name = "mypy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/83/2e/16b917fc7adcf03f1aadddfc93aab804ffb234b1ab09c0ffd6d92a5d34a2/mypy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl",hashes = {sha256 = "7247eb2824f996722a949530183394921ca71deb9680052a338cf53cff7925c2"}}, + {name = "mypy-2.3.0-cp313-cp313-win_amd64.whl",url = "https://files.pythonhosted.org/packages/c0/88/aaa65a93c73d0cdae7e42f8adb302bf6885bb281302084f99d0290a35347/mypy-2.3.0-cp313-cp313-win_amd64.whl",hashes = {sha256 = "75b0984bb3cbd76bb5c9291a8671f7ae66ca3b51c7584c358fc2e923259f0757"}}, + {name = "mypy-2.3.0-cp313-cp313-win_arm64.whl",url = "https://files.pythonhosted.org/packages/35/19/b40de63f1a80e63bc2d40f0679a6a8dbd34e95176c8122119bdf406aa552/mypy-2.3.0-cp313-cp313-win_arm64.whl",hashes = {sha256 = "d78fcf900b59cb7e82cb7e3a235e31b462d9333d92285bd1e4952d355b8ffba1"}}, + {name = "mypy-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl",url = "https://files.pythonhosted.org/packages/dc/94/0e7e592619e2133596a47cdd642534b0456545c218430bd3b9d8fefdd1b1/mypy-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl",hashes = {sha256 = "2d53fc67b9d28a43c6199077f49fea0f05839e36cf6158500331c9549225e5a5"}}, + {name = "mypy-2.3.0-cp312-cp312-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/f6/d2/1e1731df090a857df2807177a4626863e5ac0f0256513c35780efe53986f/mypy-2.3.0-cp312-cp312-macosx_11_0_arm64.whl",hashes = {sha256 = "fbc00cee7bdbb9291979ddc9d08034a29dfcda4932628c9bbc28c1edd589df0c"}}, + {name = "mypy-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/44/95/cab921f4a806e171f34113e6181dd23c55358ccf6a80741269ef594a410e/mypy-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "04e617030eca5221909c8b7d8d7fd1c637948199aa2100b2ad9813feb07e1491"}}, + {name = "mypy-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/66/80/e6d008bb19fe446e3662d85e0e2717bf9f2d611a2164fb29d6e067dbf46c/mypy-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "56c184d2c20ca6b6378d58d1960270a767f41f5e44acbbd27f05effef4f4e1d7"}}, + {name = "mypy-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/db/83/94397c9293608a364aa03e8084fb34ede4ae976a260384b9b52929308135/mypy-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl",hashes = {sha256 = "3961a4a34b05f7c74b0f05aa51fbfe99a2d1e126038df40318d15c8f558b7ef3"}}, + {name = "mypy-2.3.0-cp312-cp312-win_amd64.whl",url = "https://files.pythonhosted.org/packages/cf/96/d8b37d819adec6cfccfb1fd3afc1735d94717ddeafb45536db9c6943e09b/mypy-2.3.0-cp312-cp312-win_amd64.whl",hashes = {sha256 = "b1942b9314d4c784b8ea1dbab4972603290e5dd5630f06675f13aec97526bc4c"}}, + {name = "mypy-2.3.0-cp312-cp312-win_arm64.whl",url = "https://files.pythonhosted.org/packages/2b/cd/cd9f725b19b19e5b530a154cf9bcf9e94279c5d55b3c34fb42b3aa48ea1b/mypy-2.3.0-cp312-cp312-win_arm64.whl",hashes = {sha256 = "be51653d7669d7d7955d613b8d0bb57d5b652eaf71a873ddf65ac87254dd2595"}}, + {name = "mypy-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl",url = "https://files.pythonhosted.org/packages/e6/b9/d75b3082b05f1b3028828aeb18e74ae5ab0a0936051bbf1f32f59f654747/mypy-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl",hashes = {sha256 = "3419d00717afbc5265b50dd14b1278f29ea4884dd398ab67873489ac093fd329"}}, + {name = "mypy-2.3.0-cp311-cp311-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/a9/50/79a65c6ea6e115bc73296038a4543b2d5c91f07912b918a2c616a2514bba/mypy-2.3.0-cp311-cp311-macosx_11_0_arm64.whl",hashes = {sha256 = "cfca8ee88544090f86b6dcce05ec55d66eb48a762412ac2507810ba4bd793b6f"}}, + {name = "mypy-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/90/48/e11ed7716c26953ca321f726e452e374dbf81a6f2b8b212ec02af29b6b8f/mypy-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "75cbb4b9ef04a0c84a957f07abc4504fbf64b8dcc145675101f2d3a78a4b1d6a"}}, + {name = "mypy-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/06/72/6807565b1c4861ef66f7fdd98b51c61556356eab80235717b46c53bb8627/mypy-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "982e3d53dd23d0a4cef67dd66791fdbede0cf38f9eb617bf47663554c51e1e36"}}, + {name = "mypy-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/00/80/1ea14c5d80e589e415973db3e47c78c2219a305b808b2b506395342c1d79/mypy-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl",hashes = {sha256 = "85c5385b93012ffa3b31479ab579aef5415f4f3a32c6cf1ae07a984d2a0ff461"}}, + {name = "mypy-2.3.0-cp311-cp311-win_amd64.whl",url = "https://files.pythonhosted.org/packages/37/28/8223157404a3d51920078459c37f80fbdc590e1d8ea049dc5ce48643022a/mypy-2.3.0-cp311-cp311-win_amd64.whl",hashes = {sha256 = "13b1b16e2fa39f3b2e33fb1c468abc7a69369fa2e886b4b87b5afc81472325cd"}}, + {name = "mypy-2.3.0-cp311-cp311-win_arm64.whl",url = "https://files.pythonhosted.org/packages/6f/cc/ea27e5959c5f258585a756b252031f3b313583d81b5064b2bebc41d3706b/mypy-2.3.0-cp311-cp311-win_arm64.whl",hashes = {sha256 = "b5cd2f027a972a4a5f2278a11fac9747f5f81a53a30b714d74950b6807e55568"}}, + {name = "mypy-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl",url = "https://files.pythonhosted.org/packages/a9/09/f2f5f45dae0c9a0891e4751a73312730e009395102e5d72a22a976cca41f/mypy-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl",hashes = {sha256 = "1fa8d916ac3b705af733c4c1e6c9ebe38fd0d52beb15b105c3e8355b55e6ecdc"}}, + {name = "mypy-2.3.0-cp310-cp310-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/56/b9/345367effd3a6877275a94d481614bfca983f45e028c6290e2cc54603811/mypy-2.3.0-cp310-cp310-macosx_11_0_arm64.whl",hashes = {sha256 = "28e1e2af8cd8fff551fd30f2fe4b03fb76764ac8b1ba6c6a1bd00ad32b412db3"}}, + {name = "mypy-2.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",url = "https://files.pythonhosted.org/packages/99/6c/a10b7a7b9f0a755fb94e27ae834d4cea9ad6c5221f9325eef8f182641feb/mypy-2.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl",hashes = {sha256 = "3e77244df3843048c3f927182916730e40c124cbaa43905c1fb86cb382aa0805"}}, + {name = "mypy-2.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",url = "https://files.pythonhosted.org/packages/d9/bd/a26a602acb1bbf849fa4bdac4bc657ee2f11c0c2a764a2cc87a5304e865c/mypy-2.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",hashes = {sha256 = "9559ab18a9c9957dfa3004ab57cd4bac5f26a724329a9584e583367f0c2e1117"}}, + {name = "mypy-2.3.0-cp310-cp310-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/7f/14/124f462bef69bcbc90b9358088460b6091954a3e004852fcd9948db617a5/mypy-2.3.0-cp310-cp310-musllinux_1_2_x86_64.whl",hashes = {sha256 = "09abd66d8685e73f8f7d17b847c3e104d9a7b164a8706ea87d6c96a3d45816d5"}}, + {name = "mypy-2.3.0-cp310-cp310-win_amd64.whl",url = "https://files.pythonhosted.org/packages/db/a4/8bdca6a8ac8d856d82ed049144af2721245a135c2e8001d3890c93975852/mypy-2.3.0-cp310-cp310-win_amd64.whl",hashes = {sha256 = "5e91adad1ca81742ac7ef9893959911df867752206b37135185e88dfb3c89494"}}, + {name = "mypy-2.3.0-cp310-cp310-win_arm64.whl",url = "https://files.pythonhosted.org/packages/83/41/490eea348e60ba50decec20bc750605444149a5d7a8cc560042f90ba2c75/mypy-2.3.0-cp310-cp310-win_arm64.whl",hashes = {sha256 = "6f99ec626e3c3a2f7c0b22c5b90ddb5dabb1c18729c971e9bdaca1f1766d2cee"}}, + {name = "mypy-2.3.0-py3-none-any.whl",url = "https://files.pythonhosted.org/packages/2c/fa/fdc54fe583ba3cafbcedfb70eeeaf03849f75b1827a07096c7bd996f582d/mypy-2.3.0-py3-none-any.whl",hashes = {sha256 = "6b1cdb579446b60432432b2b2403a6201b4b475a004d7f488511c9ba177c9e88"}}, +] +marker = "\"check\" in dependency_groups" + +[packages.tool.pdm] +dependencies = [ + "typing-extensions>=4.6.0; python_version < \"3.15\"", + "typing-extensions>=4.14.0; python_version >= \"3.15\"", + "mypy-extensions>=1.0.0", + "pathspec>=1.0.0", + "tomli>=1.1.0; python_version < \"3.11\"", + "librt>=0.13.0; platform_python_implementation != \"PyPy\"", + "ast-serialize<1.0.0,>=0.6.0", +] + [[packages]] name = "pytest" version = "9.1.1" @@ -294,27 +296,27 @@ dependencies = [ [[packages]] name = "ruff" -version = "0.15.21" +version = "0.15.22" requires-python = ">=3.7" -sdist = {name = "ruff-0.15.21.tar.gz", url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hashes = {sha256 = "d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500"}} +sdist = {name = "ruff-0.15.22.tar.gz", url = "https://files.pythonhosted.org/packages/3a/06/ae069393fc66e8ff33036d4b368003833bf6e88ccf182e17e7a2f1c754fd/ruff-0.15.22.tar.gz", hashes = {sha256 = "3f15175b1fb580126f58285a5dae6b2ea89000136d980c64499211f116b54809"}} wheels = [ - {name = "ruff-0.15.21-py3-none-linux_armv6l.whl",url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl",hashes = {sha256 = "63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d"}}, - {name = "ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl",url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl",hashes = {sha256 = "0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd"}}, - {name = "ruff-0.15.21-py3-none-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl",hashes = {sha256 = "e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646"}}, - {name = "ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",hashes = {sha256 = "01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be"}}, - {name = "ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",hashes = {sha256 = "2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd"}}, - {name = "ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl",url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl",hashes = {sha256 = "5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41"}}, - {name = "ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",hashes = {sha256 = "16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86"}}, - {name = "ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl",url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl",hashes = {sha256 = "3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67"}}, - {name = "ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",hashes = {sha256 = "bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8"}}, - {name = "ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl",url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl",hashes = {sha256 = "00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075"}}, - {name = "ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl",hashes = {sha256 = "262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341"}}, - {name = "ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl",url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl",hashes = {sha256 = "659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d"}}, - {name = "ruff-0.15.21-py3-none-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl",hashes = {sha256 = "9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233"}}, - {name = "ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl",hashes = {sha256 = "e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f"}}, - {name = "ruff-0.15.21-py3-none-win32.whl",url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl",hashes = {sha256 = "01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd"}}, - {name = "ruff-0.15.21-py3-none-win_amd64.whl",url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl",hashes = {sha256 = "d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3"}}, - {name = "ruff-0.15.21-py3-none-win_arm64.whl",url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl",hashes = {sha256 = "6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8"}}, + {name = "ruff-0.15.22-py3-none-linux_armv6l.whl",url = "https://files.pythonhosted.org/packages/23/18/ee54b7ae1e121be7a28ea6da4b67564ebb0530e183a54415ab7e3bcd2c4e/ruff-0.15.22-py3-none-linux_armv6l.whl",hashes = {sha256 = "44423e73493737f5e7c5b41d475483898ff37afcdae38bc3da5085e29af1c2d8"}}, + {name = "ruff-0.15.22-py3-none-macosx_10_12_x86_64.whl",url = "https://files.pythonhosted.org/packages/2f/d2/2520cb14761ddbeaf57642a76942fc36adcbdbe53b4532241995f6fc485c/ruff-0.15.22-py3-none-macosx_10_12_x86_64.whl",hashes = {sha256 = "b82c6482946e9eda7ff2e091d25b8bad3f718684e1916d41bd56873cee05b697"}}, + {name = "ruff-0.15.22-py3-none-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/c9/10/74e53572aa758dfaa678c2a2646b5c5515d884b7ca56be4d2ce03ca4b560/ruff-0.15.22-py3-none-macosx_11_0_arm64.whl",hashes = {sha256 = "11c1c715af53a09f714e011106bffc419751ec8232fcb5da42173284ea3fec6f"}}, + {name = "ruff-0.15.22-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",url = "https://files.pythonhosted.org/packages/1e/cc/44eaaf0844e028182f2d0a8f2190d0f359159aed0a9e5ab861d892f1ae2a/ruff-0.15.22-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",hashes = {sha256 = "742a29cf29bddb7c8327895d6a10e0e6c5b38a96dd407af9b5d0857f809c0576"}}, + {name = "ruff-0.15.22-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",url = "https://files.pythonhosted.org/packages/9f/21/8edf559014d2b0f82beea19cfb713993ad802ccda16868769979c6090a84/ruff-0.15.22-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",hashes = {sha256 = "72af58b951b0ae395935ae79763dc349bc0eb706319d28f7a33ad2cfb3cfc178"}}, + {name = "ruff-0.15.22-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl",url = "https://files.pythonhosted.org/packages/bf/1e/3a13abd392a3b50b62e5938a831f9ab6e588358cacad5c18545b716d2182/ruff-0.15.22-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl",hashes = {sha256 = "62d425005c1835eb24e2ee4161cb90e8db263415f4a71c8c72c33abaa6c0c224"}}, + {name = "ruff-0.15.22-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",url = "https://files.pythonhosted.org/packages/bf/3e/422d3d95bcf04dd78e1aeac22184d4f9a8fb2c01865d39d44618484a0317/ruff-0.15.22-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",hashes = {sha256 = "e8b9b3f8779a4f08c969defc3c8c35abffaa757e601ed5ae66d6d1db6519969a"}}, + {name = "ruff-0.15.22-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl",url = "https://files.pythonhosted.org/packages/1e/91/5d065a0e0a02bf4813f5119ad278462eed081d2b832eb7c021ade0ec9e65/ruff-0.15.22-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl",hashes = {sha256 = "1e0dd1b2e4d3d585f897a0d137cbf4eaf6223bef4e8ce34d6bb12556c5f9249e"}}, + {name = "ruff-0.15.22-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",url = "https://files.pythonhosted.org/packages/f6/f9/a0d4871d12fae702eb1f41b686caf05f1f8b124dc6db6f784f53d74918fa/ruff-0.15.22-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",hashes = {sha256 = "365523eb91d9224e1bcb03b022fbf0facb8f9e23792a2c53d9d4b3924bdbdebb"}}, + {name = "ruff-0.15.22-py3-none-manylinux_2_31_riscv64.whl",url = "https://files.pythonhosted.org/packages/18/80/c843a5176cddbceb0b7e8dd41cf9993490796c1c469348d384f5a5c13c56/ruff-0.15.22-py3-none-manylinux_2_31_riscv64.whl",hashes = {sha256 = "fabfd168afdf29fee5be98b831efa9683c94d7c5a3b58b9ce5a2e38444589a74"}}, + {name = "ruff-0.15.22-py3-none-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/d4/00/8485de0ae92239438a36cfc51350db9b9e85c9ebdfaea91b18e422706662/ruff-0.15.22-py3-none-musllinux_1_2_aarch64.whl",hashes = {sha256 = "225dbf095a87f1d9f90f5fd7924d2613ee452a75a4308c63a8f50f761787aa7c"}}, + {name = "ruff-0.15.22-py3-none-musllinux_1_2_armv7l.whl",url = "https://files.pythonhosted.org/packages/fa/91/24977ec2ec72eaf15e4394ace2959fdff2dd1e14f03e005e838023407169/ruff-0.15.22-py3-none-musllinux_1_2_armv7l.whl",hashes = {sha256 = "1877d63b9d24ed278744f1523fd11b85540566d54641f97c566d7d9dc5ca5296"}}, + {name = "ruff-0.15.22-py3-none-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/9c/47/9b51216951974df1f263ac19da550d34252e0ed7218c25f10c5ef9ed7517/ruff-0.15.22-py3-none-musllinux_1_2_i686.whl",hashes = {sha256 = "a1606c510bd7215680d32efab38965f7cdec3ef69f5170a3f4791404ffdd5262"}}, + {name = "ruff-0.15.22-py3-none-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/c2/47/20e9d4a3b8016778acea5fc32bb50d35d207500a17ddb529ffa6996feef8/ruff-0.15.22-py3-none-musllinux_1_2_x86_64.whl",hashes = {sha256 = "630479b18625f5ffc373f77603a22a9f8ac0acd7ff0501178b5db28ec71e9c64"}}, + {name = "ruff-0.15.22-py3-none-win32.whl",url = "https://files.pythonhosted.org/packages/4d/76/3f72d8fc38c1cb77b38c56a70da9d0c17700cc1cc50f9649c9d3c8f5ba71/ruff-0.15.22-py3-none-win32.whl",hashes = {sha256 = "e5ba0e4a13fd14abbed2a77b517a3911290c6c6c59ef67784328d1668fab76cf"}}, + {name = "ruff-0.15.22-py3-none-win_amd64.whl",url = "https://files.pythonhosted.org/packages/cb/46/4965251734c2b6fcdca1b1b187d20bcac3af0ee5b083b89c910bb961ce3a/ruff-0.15.22-py3-none-win_amd64.whl",hashes = {sha256 = "9be63ba1eb936acd2d1342fb8337c356353706fce233b2a15a09a97037e6acde"}}, + {name = "ruff-0.15.22-py3-none-win_arm64.whl",url = "https://files.pythonhosted.org/packages/57/c9/e69b1ff4c8b69093ef08b8919ab767af0569666865b39c30a8795d88d3c6/ruff-0.15.22-py3-none-win_arm64.whl",hashes = {sha256 = "e1168075b72158510839f250027659cdd78476f40507dd517892304c41318661"}}, ] marker = "\"check\" in dependency_groups" @@ -347,6 +349,51 @@ marker = "\"check\" in dependency_groups" [packages.tool.pdm] dependencies = [] +[[packages]] +name = "ast-serialize" +version = "0.6.0" +requires-python = ">=3.7" +sdist = {name = "ast_serialize-0.6.0.tar.gz", url = "https://files.pythonhosted.org/packages/58/ad/0d70a3a2d6e01968d985415259e8ec7ad3f777903f9b1c1f3c8c44642c60/ast_serialize-0.6.0.tar.gz", hashes = {sha256 = "aadd3ffcf4858c9726bf3515f7b199c7eadbe504f96028e4a87172c0da65a8fe"}} +wheels = [ + {name = "ast_serialize-0.6.0-cp314-cp314t-macosx_10_12_x86_64.whl",url = "https://files.pythonhosted.org/packages/3f/12/3e5f575f156555547c250a8b0d1347517a3a20fc7f4492e9703a69d4f45e/ast_serialize-0.6.0-cp314-cp314t-macosx_10_12_x86_64.whl",hashes = {sha256 = "a7520b672827885bafeae7501f684d14d47d17e5f45256f9df547686cca52264"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/a2/a4/921a9e27951627983b0f368859ea00f8330a551dc0bf4c2fdcb11855a98b/ast_serialize-0.6.0-cp314-cp314t-macosx_11_0_arm64.whl",hashes = {sha256 = "a14191beec7e0c078d2fc1f6edc0aee88bcd4db9f18e1bc9f8052b559c22dddc"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",url = "https://files.pythonhosted.org/packages/00/69/950cf404de7b8782cf95e5c1237e25e2aa46177b287f39f9eeddf481fd6f/ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",hashes = {sha256 = "32ef62ec34cf6be20ad77d4799556638fbdf187f3ae10698dfb20ef9f2c89516"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",url = "https://files.pythonhosted.org/packages/4c/a8/46f8f6a6479d9d2273980957bb091a506c55f5b95d3c029ee58518a78407/ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",hashes = {sha256 = "13b7769970a39983b0adf2f38917b1cd3b8946f76df045756c3d741bc689f089"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",url = "https://files.pythonhosted.org/packages/b7/b9/9ac415bda0a40e49eab8fea3b2741c19c98bb84d57d62c4cfc6230eb67be/ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",hashes = {sha256 = "6f7a408601bb3edaefb3bc67a4c01f5235e3253653b6a5729a2ee2382b35341c"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl",url = "https://files.pythonhosted.org/packages/e5/06/8807115d441444879f7561b5eede5ac18fc80392f11826d61ccf31f503b1/ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl",hashes = {sha256 = "8670bfa51208a2c0c8d138928e40e998fab158f9200d53bb80c088b5b8eda7b8"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",url = "https://files.pythonhosted.org/packages/3e/c0/c2ba82ef9618650357d9421a1fdb27ffec862a7f57e8e2de82a3ccd11e12/ast_serialize-0.6.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",hashes = {sha256 = "a4826809eb8597a8cd59fd924b6d7c285b8969a1e0007e2cb652cab62376270f"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-manylinux_2_31_riscv64.whl",url = "https://files.pythonhosted.org/packages/0f/a7/fa31d52dd4102cede29fb9634e98d214129b2783b4f95528c6dc6a8f6587/ast_serialize-0.6.0-cp314-cp314t-manylinux_2_31_riscv64.whl",hashes = {sha256 = "577a6c189068686869f5f1ddc38363f3ae1808a4753b577266f9202071a7bb66"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl",url = "https://files.pythonhosted.org/packages/b1/20/ddf742b5ad3c4bafd3466f2265037cfd99bc1b9a5ee46a5d58c90d523242/ast_serialize-0.6.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl",hashes = {sha256 = "085de7f62dc9cc247eb01e965a362707d1d90b1d89a82c5bf78301a60a3c417b"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/24/cb/9f6f217cce8b3b632c5568b478d195a35e79dce4dbe309438cb89ba6ea4f/ast_serialize-0.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl",hashes = {sha256 = "9f8a8b78b13173de6a9ec22111d9be674874cd5bdccda04f14ae5ebc2bef403a"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-musllinux_1_2_armv7l.whl",url = "https://files.pythonhosted.org/packages/2d/f8/9d16d4f0107a183924425cc0e7618d8bf76f96b45afa9ff19f924ed1ad57/ast_serialize-0.6.0-cp314-cp314t-musllinux_1_2_armv7l.whl",hashes = {sha256 = "f2ff3baffc3a29c1f15bc9098aa0c09763410262d5e6cef42116f7356c184554"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/80/dd/bbc1c38756350dddf7e24acae1c9482ef42051c267417e019aecc1ed4075/ast_serialize-0.6.0-cp314-cp314t-musllinux_1_2_i686.whl",hashes = {sha256 = "0067b25fce104eaae5b88383de9ab803faeb671831e14ca698b771b356e2600f"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/42/7e/9daffefcf5b97e6bb4c3e0b3c024c1aee9722f23d3cf7cd2ff80d6fb4a40/ast_serialize-0.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl",hashes = {sha256 = "c617417f9cbb0cb144f6283c3cbe0d2e0f01beaf9f608f662b21191058a626ec"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-win32.whl",url = "https://files.pythonhosted.org/packages/e5/1f/f9baaab81a677ea0af7d2458cac2f94ebcc85958f8a3c15ba9d9e5dab653/ast_serialize-0.6.0-cp314-cp314t-win32.whl",hashes = {sha256 = "5337cb256dcea3df9288205213d1601581536526b8f4da44b6974f1180f3252a"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-win_amd64.whl",url = "https://files.pythonhosted.org/packages/9e/1f/41b535866519512d8cf6669cb2cff7823b7672bb6279c0333b4ff89d7d9f/ast_serialize-0.6.0-cp314-cp314t-win_amd64.whl",hashes = {sha256 = "2d947e45cafc4b09bd7528917fa84c517654a43de173c79785574b7b3068ac24"}}, + {name = "ast_serialize-0.6.0-cp314-cp314t-win_arm64.whl",url = "https://files.pythonhosted.org/packages/50/64/e472fe3e3a2d33d874b987e8518aedf24562919e3b6161a4fa1797e89c0f/ast_serialize-0.6.0-cp314-cp314t-win_arm64.whl",hashes = {sha256 = "6e15ec740436e1a0d62de848641abe5f3a2f89a7f94907d534795ac91bbacf14"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl",url = "https://files.pythonhosted.org/packages/52/19/ac8348ae8711c9b5ae834634f635780cab62a0f5e6f988882e048b89c2ae/ast_serialize-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl",hashes = {sha256 = "093cb8bb91b720d8523580498d031791bb1bbaa048599c3d21085d380e11a596"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-macosx_11_0_arm64.whl",url = "https://files.pythonhosted.org/packages/c1/f6/ec7ec652c51db77c2f61d8573338e13e4704303265ccc658cb4031d9f354/ast_serialize-0.6.0-cp39-abi3-macosx_11_0_arm64.whl",hashes = {sha256 = "e61580a69faf47e3689795367ed211f2a10fd741478cc0f36a0f128793360aad"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",url = "https://files.pythonhosted.org/packages/6f/02/613a7534a41d0122f37d1e0c64aa8ac78bfb831f8c92f6db057a311abb3c/ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",hashes = {sha256 = "305802f2ce2a7c4e87835078ea85c58b586ddda8095b92fe2ead9364ae19c80a"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",url = "https://files.pythonhosted.org/packages/4d/21/087957bba486242afc52f49b2d9e21c9dad00289356cf9efe67084015a9d/ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",hashes = {sha256 = "c7b8b8f0c42f752ea00b2b7d7c090b3f80d9c1c5c75cadf16423790a0cc74081"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",url = "https://files.pythonhosted.org/packages/82/04/78128bbb170071c2c72a210a181f1c00e11cc1cec60a8beef747b07f9201/ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",hashes = {sha256 = "cd5b91b9e6f2356ace3a556963b0cd783b395fbbb0bb17b4defc283415466e77"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",url = "https://files.pythonhosted.org/packages/64/64/62fb99d6faf199b4c3e5b08a07136e9a0d7664bb249c6de3670e5b63e9b6/ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",hashes = {sha256 = "4d6ef91590258ada18909b9caea344dac4de2013906b035473cd674a43f4b790"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",url = "https://files.pythonhosted.org/packages/ca/87/b4d6c38e0ccd5e85dc54cecdf933a152c60b28fe5d993a6d8a72fa6d5896/ast_serialize-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",hashes = {sha256 = "dcbed41e9386059fc0261d602445ede0976c2ecec2939688bcbcb9ed0b6f28b7"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-manylinux_2_31_riscv64.whl",url = "https://files.pythonhosted.org/packages/0e/4b/3676ca2191f39bafb75f93f99b2f429ec464586158fece2165f3572805dc/ast_serialize-0.6.0-cp39-abi3-manylinux_2_31_riscv64.whl",hashes = {sha256 = "cdc4e6f930b9090c2f92c9036ad12ffb8e6e44d4a5ba06f1458a05d60f203f7b"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl",url = "https://files.pythonhosted.org/packages/f3/58/494ef8c4b4acb2f4a265ac934caf45f792a08fe27d6b853de35ad991941a/ast_serialize-0.6.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl",hashes = {sha256 = "897ac47b5637be41c0c07061c8a912fafa967ef1dc73fa115e4bfa70882a093b"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-musllinux_1_2_aarch64.whl",url = "https://files.pythonhosted.org/packages/b1/f2/13736d920ab3d49bbee80ef1a277dd7b7aaf3b3545efd9d2a8114fe05525/ast_serialize-0.6.0-cp39-abi3-musllinux_1_2_aarch64.whl",hashes = {sha256 = "c4af9a1386166e40ed01464991806f89038a2d89782576c7774876fa77034e32"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-musllinux_1_2_armv7l.whl",url = "https://files.pythonhosted.org/packages/a8/5a/e046f3899e2acba4677d7427b76431443a1aa1a0e583dfb05b55b69d55cf/ast_serialize-0.6.0-cp39-abi3-musllinux_1_2_armv7l.whl",hashes = {sha256 = "c901adbd750029b9ac4ad3d6aa56853e0ad4875119fbf52b7b8298afc223828b"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-musllinux_1_2_i686.whl",url = "https://files.pythonhosted.org/packages/cc/c7/e42aaca7bb2d22a7c06d5a8c7930086c5a334e93d716e6fa5e6647a4515f/ast_serialize-0.6.0-cp39-abi3-musllinux_1_2_i686.whl",hashes = {sha256 = "3ae22a366b752ab4496191525b78b097b5b72d531752e3c1dd7e383a8f2c8a1a"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-musllinux_1_2_x86_64.whl",url = "https://files.pythonhosted.org/packages/95/93/5524a3dc6c3f593de3228ed9cbef73afa047625b7000ec21b7f58e6eb4d4/ast_serialize-0.6.0-cp39-abi3-musllinux_1_2_x86_64.whl",hashes = {sha256 = "4ed29121da8b3fdc291002801a1de0f76248fa07dce89157a5f277842cf6126e"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-pyemscripten_2026_0_wasm32.whl",url = "https://files.pythonhosted.org/packages/4f/c0/36a6ffb4d653cf621427b4c4928671f53ad800c453474de2b82564a44ad9/ast_serialize-0.6.0-cp39-abi3-pyemscripten_2026_0_wasm32.whl",hashes = {sha256 = "b1dac4e09d341c1300ba69cdcbe62867b32a8c75d90db9bf4d083bec3b039f0b"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-win32.whl",url = "https://files.pythonhosted.org/packages/09/c7/7d5ad8b49e1278e1c2a1e0274bd7850560b3f09313aa00c13bc8d5544792/ast_serialize-0.6.0-cp39-abi3-win32.whl",hashes = {sha256 = "82c312a7844d2fdeb4d5c48bd3d215bf940dafd4704e1a9bcf252a99010a99b1"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-win_amd64.whl",url = "https://files.pythonhosted.org/packages/47/ae/6710c14ecb276031cf10249f6adf5a59e2d3fdb3b5183bd59f70524067ee/ast_serialize-0.6.0-cp39-abi3-win_amd64.whl",hashes = {sha256 = "113b58346f9ceb664352032770caca817d4a3c86f611c6088e6ef65ddaa70f0e"}}, + {name = "ast_serialize-0.6.0-cp39-abi3-win_arm64.whl",url = "https://files.pythonhosted.org/packages/66/40/c53deb2cd0c9b0fb636d24d9f40924cf2e65028e6b20b10cd5c1eeb2c730/ast_serialize-0.6.0-cp39-abi3-win_arm64.whl",hashes = {sha256 = "ccd132fe8db56f61fe743b1f644d01b8d65b83248a8da506f3132bda86d6ed5e"}}, +] +marker = "\"check\" in dependency_groups" + +[packages.tool.pdm] +dependencies = [] + [[packages]] name = "pluggy" version = "1.6.0" @@ -628,7 +675,7 @@ marker = "\"test\" in dependency_groups" dependencies = [] [tool.pdm] -hashes = {sha256 = "24193fd3e53b96f8e588fc6fc5d92831184e56f726147294fbc26a2b53ba92de"} +hashes = {sha256 = "84bb8a9b1c809227e3051f501aa2ea8a09d588205a7c1204a4ddc2fb23b57550"} strategy = ["inherit_metadata", "static_urls"] [[tool.pdm.targets]] diff --git a/pyproject.toml b/pyproject.toml index 7a84abff..d4fee76d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ homepage = "https://github.com/NetherlandsForensicInstitute/confidence/" [dependency-groups] check = [ - "mypy<2", + "mypy", "ruff", # dependency-specific typing information "types-pyyaml", From 4fb1cf4b97a95c96450e232bbbab9e2527bc6a38 Mon Sep 17 00:00:00 2001 From: Mattijs Ugen <144798+akaIDIOT@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:28:17 +0200 Subject: [PATCH 3/7] Implement NotConfigured as a class to help mypy understand the intention --- confidence/models.py | 46 +++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/confidence/models.py b/confidence/models.py index c612dbe5..104b3101 100644 --- a/confidence/models.py +++ b/confidence/models.py @@ -2,7 +2,7 @@ from collections.abc import Callable, Iterable, Iterator, Mapping, MutableMapping, Sequence from enum import Enum from itertools import chain -from typing import Any +from typing import Any, Self from confidence.exceptions import ConfiguredReferenceError, NotConfiguredError from confidence.utils import Conflict, merge_into, split_keys @@ -302,23 +302,33 @@ def __setstate__(self, state: dict[str, Any]) -> None: self._missing = {Missing.SILENT: NotConfigured, Missing.ERROR: NoDefault}[self._missing] -# define NotConfigured as a class first (using type() to keep the type checker happy) -NotConfigured = type( - 'NotConfigured', - (Configuration,), - { - '__bool__': lambda self: False, - '__repr__': lambda self: '(not configured)', - '__str__': lambda self: '(not configured)', - '__doc__': 'Sentinel value to signal there is no value for a requested key.', - '__hash__': lambda self: hash((type(self), None)), - }, -) -# overwrite the NotConfigured type as an instance of itself, serving as a sentinel value that some requested key was -# not configured, while still acting like a Configuration object -NotConfigured = NotConfigured() -# NotConfigured._missing refers to the NotConfigured *type* at this point, overwrite it with the sentinel value -NotConfigured._missing = NotConfigured # type: ignore +class _NotConfigured(Configuration): + _instance: Self | None = None + + def __new__(cls) -> Self: + if cls._instance is None: + cls._instance = super().__new__(cls) + + return cls._instance + + def __init__(self) -> None: + super().__init__(missing=self) + + def __bool__(self) -> bool: + return False + + def __str__(self) -> str: + return '(not configured)' + + def __repr__(self) -> str: + return '(not configured)' + + def __hash__(self) -> int: + return hash((self.__class__, None)) + + +# set NotConfigured as the singleton signalling instance of _NotConfigured +NotConfigured = _NotConfigured() # collect the names of all defined members of a Configuration instance to be used to warn for configured keys that From 98e1af0481bc5289e2a190ae4fd1cfb9112d3429 Mon Sep 17 00:00:00 2001 From: Mattijs Ugen <144798+akaIDIOT@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:32:27 +0200 Subject: [PATCH 4/7] Replace typing.Self with typing_extensions.Self for compatibility --- confidence/models.py | 4 +++- pylock.toml | 28 ++++++++++++++-------------- pyproject.toml | 3 ++- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/confidence/models.py b/confidence/models.py index 104b3101..717b9d1f 100644 --- a/confidence/models.py +++ b/confidence/models.py @@ -2,7 +2,9 @@ from collections.abc import Callable, Iterable, Iterator, Mapping, MutableMapping, Sequence from enum import Enum from itertools import chain -from typing import Any, Self +from typing import Any + +from typing_extensions import Self from confidence.exceptions import ConfiguredReferenceError, NotConfiguredError from confidence.utils import Conflict, merge_into, split_keys diff --git a/pylock.toml b/pylock.toml index 12e510bb..c297e83d 100644 --- a/pylock.toml +++ b/pylock.toml @@ -91,6 +91,19 @@ marker = "\"default\" in dependency_groups" [packages.tool.pdm] dependencies = [] +[[packages]] +name = "typing-extensions" +version = "4.16.0" +requires-python = ">=3.9" +sdist = {name = "typing_extensions-4.16.0.tar.gz", url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hashes = {sha256 = "dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"}} +wheels = [ + {name = "typing_extensions-4.16.0-py3-none-any.whl",url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl",hashes = {sha256 = "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"}}, +] +marker = "\"default\" in dependency_groups or \"check\" in dependency_groups or \"test\" in dependency_groups" + +[packages.tool.pdm] +dependencies = [] + [[packages]] name = "coverage" version = "7.15.2" @@ -465,19 +478,6 @@ marker = "\"check\" in dependency_groups and python_version < \"3.11\" or \"test [packages.tool.pdm] dependencies = [] -[[packages]] -name = "typing-extensions" -version = "4.16.0" -requires-python = ">=3.9" -sdist = {name = "typing_extensions-4.16.0.tar.gz", url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hashes = {sha256 = "dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"}} -wheels = [ - {name = "typing_extensions-4.16.0-py3-none-any.whl",url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl",hashes = {sha256 = "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"}}, -] -marker = "\"check\" in dependency_groups or \"test\" in dependency_groups" - -[packages.tool.pdm] -dependencies = [] - [[packages]] name = "colorama" version = "0.4.6" @@ -675,7 +675,7 @@ marker = "\"test\" in dependency_groups" dependencies = [] [tool.pdm] -hashes = {sha256 = "84bb8a9b1c809227e3051f501aa2ea8a09d588205a7c1204a4ddc2fb23b57550"} +hashes = {sha256 = "be913ee93f0345d0f8fe1c205394d50f1a95118c76bc88cfbafbeced7b40c8ce"} strategy = ["inherit_metadata", "static_urls"] [[tool.pdm.targets]] diff --git a/pyproject.toml b/pyproject.toml index d4fee76d..96c2067b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,8 +12,9 @@ authors = [ {name = "Netherlands Forensic Institute", email = "netherlandsforensicinstitute@users.noreply.github.com"}, ] dependencies = [ - "tomlkit>=0.13.3", "pyyaml>=6.0", + "tomlkit>=0.13.3", + "typing-extensions>=4.16.0", ] requires-python = ">=3.10" license = "Apache-2.0" From c161527f4fcb14970fb2fbb651ee2b96bd0a81cf Mon Sep 17 00:00:00 2001 From: Mattijs Ugen <144798+akaIDIOT@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:38:03 +0200 Subject: [PATCH 5/7] Use typing_extensions.sentinel to create NoDefault sentinel value --- confidence/io.py | 6 +++--- confidence/models.py | 35 +++++++++++++++-------------------- tests/test_dict.py | 4 ++-- tests/test_precedence.py | 6 +++--- 4 files changed, 23 insertions(+), 28 deletions(-) diff --git a/confidence/io.py b/confidence/io.py index bc82fcb2..2b0f231a 100644 --- a/confidence/io.py +++ b/confidence/io.py @@ -11,7 +11,7 @@ from typing import Any, TextIO from confidence.formats import YAML, Format -from confidence.models import Configuration, Missing, NoDefault, NotConfigured +from confidence.models import NO_DEFAULT, Configuration, Missing, NotConfigured LOG = logging.getLogger(__name__) @@ -275,7 +275,7 @@ def load(*fps: TextIO, format: Format = YAML, missing: Any = Missing.SILENT) -> def loadf( *fnames: str | PathLike, format: Format = YAML, - default: Any = NoDefault, + default: Any = NO_DEFAULT, missing: Any = Missing.SILENT, ) -> Configuration: """ @@ -294,7 +294,7 @@ def readf(fpath: Path) -> Mapping[str, Any]: try: return format.loadf(fpath) except FileNotFoundError: - if default is NoDefault: + if default is NO_DEFAULT: # no explicit default provided, continue original error raise else: diff --git a/confidence/models.py b/confidence/models.py index 717b9d1f..83626b47 100644 --- a/confidence/models.py +++ b/confidence/models.py @@ -4,7 +4,7 @@ from itertools import chain from typing import Any -from typing_extensions import Self +from typing_extensions import Self, sentinel from confidence.exceptions import ConfiguredReferenceError, NotConfiguredError from confidence.utils import Conflict, merge_into, split_keys @@ -17,15 +17,10 @@ class Missing(Enum): # define a sentinel value to indicate there is no default value specified (None would be a valid default value) # as this is used as an argument default to indicate that an error should be raised when a value is not found, make -# sure that the repr-value of NoDefault shows up as '(raise)' in documentation -NoDefault = type( - 'NoDefault', - (object,), - { - '__repr__': lambda self: '(raise)', - '__str__': lambda self: '(raise)', - }, -)() # create instance of that new type to assign to NoDefault +# sure that the repr-value of NO_DEFAULT shows up as '(raise)' in documentation +NO_DEFAULT = sentinel('NO_DEFAULT', repr='(raise)') +# retain old name for backwards compatibility +NoDefault = NO_DEFAULT def unwrap(source: Any) -> Any: @@ -99,7 +94,7 @@ def __init__(self, *sources: Mapping[str, Any], missing: Any = Missing.SILENT): if isinstance(self._missing, Missing): self._missing = { Missing.SILENT: NotConfigured, - Missing.ERROR: NoDefault, + Missing.ERROR: NO_DEFAULT, }[missing] self._source: MutableMapping[str, Any] = {} @@ -132,7 +127,7 @@ def _resolve(self, value: str) -> Any: if path in references: raise ConfiguredReferenceError(f'cannot resolve recursive reference {path}', key=path) - reference = self._root.get(path, default=NoDefault, resolve_references=False) + reference = self._root.get(path, default=NO_DEFAULT, resolve_references=False) if match.span(0) != (0, len(value)): # matched a reference inside of another value (template) @@ -170,7 +165,7 @@ def get( :param path: the configuration key to fetch a value for, steps separated by a dot (``.``) :param default: a value to return if no value is found for the - supplied path (defaults to ``None``, use ``NoDefault`` to trigger a + supplied path (defaults to ``None``, use ``NO_DEFAULT`` to trigger a ``KeyError`` for a non-existing) :param as_type: an optional callable to apply to the value found for the supplied path (possibly raising exceptions of its own if the @@ -179,7 +174,7 @@ def get( :returns: the value associated with the supplied configuration key, if available, or a supplied default value if the key was not found :raises NotConfiguredError: when no value was found for *path* and - *default* was ``NoDefault`` + *default* was ``NO_DEFAULT`` :raises ConfiguredReferenceError: when a reference could not be resolved """ value = self._source @@ -211,7 +206,7 @@ def get( # also a KeyError, but this one should bubble to caller raise except KeyError as e: - if default is not NoDefault: + if default is not NO_DEFAULT: return default else: missing_key = '.'.join(steps_taken) @@ -254,9 +249,9 @@ def __len__(self) -> int: return len(self._source) def __getitem__(self, item: str) -> Any: - # emulate the way dict would handle this: explicitly pass NoDefault to trigger a KeyError when item is not + # emulate the way dict would handle this: explicitly pass NO_DEFAULT to trigger a KeyError when item is not # available - return self.get(item, default=NoDefault) + return self.get(item, default=NO_DEFAULT) def __iter__(self) -> Iterator[str]: return iter(self._source) @@ -291,7 +286,7 @@ def __getstate__(self) -> dict[str, Any]: # their corresponding Missing instances for pickling (but leave them as-is otherwise) if state['_missing'] is NotConfigured: state['_missing'] = Missing.SILENT - elif state['_missing'] is NoDefault: + elif state['_missing'] is NO_DEFAULT: state['_missing'] = Missing.ERROR return state @@ -301,7 +296,7 @@ def __setstate__(self, state: dict[str, Any]) -> None: if isinstance(self._missing, Missing): # reverse the Missing encoding done in __getstate__ - self._missing = {Missing.SILENT: NotConfigured, Missing.ERROR: NoDefault}[self._missing] + self._missing = {Missing.SILENT: NotConfigured, Missing.ERROR: NO_DEFAULT}[self._missing] class _NotConfigured(Configuration): @@ -329,7 +324,7 @@ def __hash__(self) -> int: return hash((self.__class__, None)) -# set NotConfigured as the singleton signalling instance of _NotConfigured +# set NotConfigured as the singleton instance of _NotConfigured NotConfigured = _NotConfigured() diff --git a/tests/test_dict.py b/tests/test_dict.py index 46c22e95..95c21cff 100644 --- a/tests/test_dict.py +++ b/tests/test_dict.py @@ -3,7 +3,7 @@ import pytest from confidence import Configuration, loadf -from confidence.models import NoDefault +from confidence.models import NO_DEFAULT def test_empty(): @@ -46,7 +46,7 @@ def test_as_type(): def test_no_default_doc_friendly(): - assert 'raise' in repr(NoDefault) + assert 'raise' in repr(NO_DEFAULT) def test_key_types_from_file(test_files): diff --git a/tests/test_precedence.py b/tests/test_precedence.py index 0e5f2b30..74b09a0e 100644 --- a/tests/test_precedence.py +++ b/tests/test_precedence.py @@ -1,7 +1,7 @@ import pytest from confidence import Configuration, Missing, NotConfigured, merge -from confidence.models import NoDefault +from confidence.models import NO_DEFAULT def test_multiple_sources(): @@ -85,8 +85,8 @@ def test_merge_settings(): assert merge(source, source)._missing is NotConfigured assert merge(source, source, missing=Missing.SILENT)._missing is NotConfigured assert merge(silent, source)._missing is (silent | source)._missing is NotConfigured - assert merge(silent, error, value, missing=Missing.ERROR)._missing is NoDefault - assert merge(error, source)._missing is (error | source)._missing is NoDefault + assert merge(silent, error, value, missing=Missing.ERROR)._missing is NO_DEFAULT + assert merge(error, source)._missing is (error | source)._missing is NO_DEFAULT assert merge(value, source)._missing == (value | source)._missing == 5 with pytest.raises(ValueError): From c383cb9731de6476b37818743e48cbeaddc146d4 Mon Sep 17 00:00:00 2001 From: Mattijs Ugen <144798+akaIDIOT@users.noreply.github.com> Date: Sun, 19 Jul 2026 16:59:00 +0200 Subject: [PATCH 6/7] Align __all__ between modules --- confidence/formats.py | 13 ++++++++----- confidence/models.py | 13 +++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/confidence/formats.py b/confidence/formats.py index ab6332c5..7566f795 100644 --- a/confidence/formats.py +++ b/confidence/formats.py @@ -1,6 +1,7 @@ import json import typing from abc import ABC, abstractmethod +from collections.abc import Sequence from dataclasses import dataclass, replace from os import PathLike from pathlib import Path @@ -111,9 +112,11 @@ def dumps(self, value: typing.Any) -> str: YAML: Format = _YAMLFormat(suffix='.yaml', encoding='utf-8') -__all__ = ( - 'Format', - 'JSON', - 'TOML', - 'YAML', +__all__: Sequence[str] = sorted( + { + 'Format', + 'JSON', + 'TOML', + 'YAML', + } ) diff --git a/confidence/models.py b/confidence/models.py index 83626b47..31b39411 100644 --- a/confidence/models.py +++ b/confidence/models.py @@ -415,3 +415,16 @@ def _repr_value(value: Any) -> str: case _: # fall back to builtin repr return repr(value) + + +__all__: Sequence[str] = sorted( + { + 'Configuration', + 'ConfigurationSequence', + 'Missing', + 'NO_DEFAULT', + 'NotConfigured', + 'merge', + 'unwrap', + } +) From b6ba4c00063c6ae2d605ba3fcc6c20e320f54b5b Mon Sep 17 00:00:00 2001 From: Mattijs Ugen <144798+akaIDIOT@users.noreply.github.com> Date: Sun, 19 Jul 2026 17:22:57 +0200 Subject: [PATCH 7/7] Rename NotConfigured to NOT_CONFIGURED --- CHANGES.md | 2 +- README.md | 2 +- confidence/__init__.py | 3 +- confidence/io.py | 28 ++++++------ confidence/models.py | 16 ++++--- tests/test_init.py | 4 +- tests/test_io.py | 92 ++++++++++++++++++++-------------------- tests/test_namespace.py | 14 +++--- tests/test_pickling.py | 6 +-- tests/test_precedence.py | 16 +++---- tests/test_references.py | 4 +- 11 files changed, 95 insertions(+), 92 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 936f1157..c06c631d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,7 +4,7 @@ Changes development (main) ------------------ -- +- Rename the 'empty' fallback value to `NOT_CONFIGURED` (old name `NotConfigured` is retained for backwards compatibility). 0.18 (2026-07-13) ----------------- diff --git a/README.md b/README.md index 784a0703..1c08305c 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ function(**configuration.foo) value = configuration.foo.bar # they're even safe when values might be missing value = configuration.foo.whoopsie -if value is NotConfigured: +if value is NOT_CONFIGURED: value = 42 # or, similar value = configuration.foo.whoopsie or 42 diff --git a/confidence/__init__.py b/confidence/__init__.py index dd98e380..de910388 100644 --- a/confidence/__init__.py +++ b/confidence/__init__.py @@ -4,7 +4,7 @@ from confidence.exceptions import ConfigurationError, ConfiguredReferenceError, MergeConflictError, NotConfiguredError from confidence.formats import JSON, TOML, YAML, Format from confidence.io import DEFAULT_LOAD_ORDER, Locality, dump, dumpf, dumps, load, load_name, loaders, loadf, loads -from confidence.models import Configuration, Missing, NotConfigured, merge, unwrap +from confidence.models import NOT_CONFIGURED, Configuration, Missing, NotConfigured, merge, unwrap __all__: Sequence[str] = sorted( @@ -18,6 +18,7 @@ 'Locality', 'MergeConflictError', 'Missing', + 'NOT_CONFIGURED', 'NotConfigured', 'NotConfiguredError', 'TOML', diff --git a/confidence/io.py b/confidence/io.py index 2b0f231a..f10a1b6d 100644 --- a/confidence/io.py +++ b/confidence/io.py @@ -11,7 +11,7 @@ from typing import Any, TextIO from confidence.formats import YAML, Format -from confidence.models import NO_DEFAULT, Configuration, Missing, NotConfigured +from confidence.models import NO_DEFAULT, NOT_CONFIGURED, Configuration, Missing LOG = logging.getLogger(__name__) @@ -33,11 +33,11 @@ def read_xdg_config_dirs(name: str, format: Format = YAML) -> Configuration: # PATH-like env vars operate in decreasing precedence, reverse this path set to mimic the end result config_dirs = reversed(config_dirs.split(pathsep)) - # load a file from all config dirs, default to NotConfigured + # load a file from all config dirs, default to NOT_CONFIGURED return loadf( *(Path(config_dir) / f'{name}{format.suffix}' for config_dir in config_dirs), format=format, - default=NotConfigured, + default=NOT_CONFIGURED, ) @@ -49,7 +49,7 @@ def read_xdg_config_home(name: str, format: Format = YAML) -> Configuration: :param name: application or configuration set name :param format: configuration (file) format to use - :returns: a `Configuration` instance, possibly `NotConfigured` + :returns: a `Configuration` instance, possibly `NOT_CONFIGURED` """ # find optional value of ${XDG_CONFIG_HOME} # XDG spec: "If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used." @@ -58,7 +58,7 @@ def read_xdg_config_home(name: str, format: Format = YAML) -> Configuration: config_home = environ.get('XDG_CONFIG_HOME') config_home = Path(config_home) if config_home else Path(f'{home}/.config') # expand to full path to configuration file in XDG config path - return loadf(config_home / f'{name}{format.suffix}', format=format, default=NotConfigured) + return loadf(config_home / f'{name}{format.suffix}', format=format, default=NOT_CONFIGURED) def read_envvars(name: str, format: Format = YAML) -> Configuration: @@ -78,7 +78,7 @@ def read_envvars(name: str, format: Format = YAML) -> Configuration: :param name: environment variable prefix to look for (without the ``_``) :param format: configuration (file) format to use - :returns: a `Configuration` instance, possibly `NotConfigured` + :returns: a `Configuration` instance, possibly `NOT_CONFIGURED` """ prefix = f'{name}_' prefix_len = len(prefix) @@ -90,7 +90,7 @@ def read_envvars(name: str, format: Format = YAML) -> Configuration: if var.lower().startswith(prefix) and var.lower() != envvar_file } if not values: - return NotConfigured + return NOT_CONFIGURED def dotted(name: str) -> str: # replace 'regular' underscores (those between alphanumeric characters) with dots first @@ -113,7 +113,7 @@ def read_envvar_file(name: str, format: Format = YAML) -> Configuration: :param name: environment variable prefix to look for (without the ``_CONFIG_FILE``) :param format: configuration (file) format to use - :returns: a `Configuration`, possibly `NotConfigured` + :returns: a `Configuration`, possibly `NOT_CONFIGURED` """ envvar_file = environ.get(f'{name}_config_file'.upper()) if envvar_file: @@ -121,7 +121,7 @@ def read_envvar_file(name: str, format: Format = YAML) -> Configuration: return loadf(envvar_file, format=format) else: # envvar not set, return an empty source - return NotConfigured + return NOT_CONFIGURED def read_envvar_dir(envvar: str, name: str, format: Format = YAML) -> Configuration: @@ -129,21 +129,21 @@ def read_envvar_dir(envvar: str, name: str, format: Format = YAML) -> Configurat Read values from a file located in a directory specified by a particular environment file. ``read_envvar_dir('HOME', 'example', format=YAML)`` would look for a file at ``/home/user/example.yaml``. When the environment - variable isn't set or the file does not exist, `NotConfigured` will be + variable isn't set or the file does not exist, `NOT_CONFIGURED` will be returned. :param envvar: the environment variable to interpret as a directory :param name: application or configuration set name :param format: configuration (file) format to use - :returns: a `Configuration`, possibly `NotConfigured` + :returns: a `Configuration`, possibly `NOT_CONFIGURED` """ config_dir = environ.get(envvar) if not config_dir: - return NotConfigured + return NOT_CONFIGURED # envvar is set, construct full file path, expanding user to allow the envvar containing a value like ~/config config_path = Path(config_dir).expanduser() / f'{name}{format.suffix}' - return loadf(config_path, format=format, default=NotConfigured) + return loadf(config_path, format=format, default=NOT_CONFIGURED) class Locality(IntEnum): @@ -363,7 +363,7 @@ def generate_sources() -> Iterable[Mapping[str, Any]]: yield source(name, format) else: source = _format_source(source, name, format) - yield loadf(source, format=format, default=NotConfigured) + yield loadf(source, format=format, default=NOT_CONFIGURED) return Configuration(*generate_sources(), missing=missing) diff --git a/confidence/models.py b/confidence/models.py index 31b39411..43203268 100644 --- a/confidence/models.py +++ b/confidence/models.py @@ -11,7 +11,7 @@ class Missing(Enum): - SILENT = 'silent' #: return `NotConfigured` for unconfigured keys, avoiding errors + SILENT = 'silent' #: return `NOT_CONFIGURED` for unconfigured keys, avoiding errors ERROR = 'error' #: raise an `AttributeError` for unconfigured keys @@ -93,7 +93,7 @@ def __init__(self, *sources: Mapping[str, Any], missing: Any = Missing.SILENT): if isinstance(self._missing, Missing): self._missing = { - Missing.SILENT: NotConfigured, + Missing.SILENT: NOT_CONFIGURED, Missing.ERROR: NO_DEFAULT, }[missing] @@ -284,7 +284,7 @@ def __getstate__(self) -> dict[str, Any]: # NB: both 'magic missing values' are required to be the same specific instances at runtime, encode them as # their corresponding Missing instances for pickling (but leave them as-is otherwise) - if state['_missing'] is NotConfigured: + if state['_missing'] is NOT_CONFIGURED: state['_missing'] = Missing.SILENT elif state['_missing'] is NO_DEFAULT: state['_missing'] = Missing.ERROR @@ -296,7 +296,7 @@ def __setstate__(self, state: dict[str, Any]) -> None: if isinstance(self._missing, Missing): # reverse the Missing encoding done in __getstate__ - self._missing = {Missing.SILENT: NotConfigured, Missing.ERROR: NO_DEFAULT}[self._missing] + self._missing = {Missing.SILENT: NOT_CONFIGURED, Missing.ERROR: NO_DEFAULT}[self._missing] class _NotConfigured(Configuration): @@ -324,8 +324,10 @@ def __hash__(self) -> int: return hash((self.__class__, None)) -# set NotConfigured as the singleton instance of _NotConfigured -NotConfigured = _NotConfigured() +# set NOT_CONFIGURED as the singleton instance of _NotConfigured +NOT_CONFIGURED = _NotConfigured() +# retain old name for backwards compatibility +NotConfigured = NOT_CONFIGURED # collect the names of all defined members of a Configuration instance to be used to warn for configured keys that @@ -423,7 +425,7 @@ def _repr_value(value: Any) -> str: 'ConfigurationSequence', 'Missing', 'NO_DEFAULT', - 'NotConfigured', + 'NOT_CONFIGURED', 'merge', 'unwrap', } diff --git a/tests/test_init.py b/tests/test_init.py index 5faed820..2ab5ac5a 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -1,11 +1,11 @@ -from confidence import Configuration, NotConfigured, dumps, loads +from confidence import NOT_CONFIGURED, Configuration, dumps, loads from confidence.models import ConfigurationSequence def test_constructor_defaults(): subject = Configuration() - assert subject._missing == NotConfigured + assert subject._missing == NOT_CONFIGURED assert len(subject) == len(subject._source) == 0 assert list(subject) == [] diff --git a/tests/test_io.py b/tests/test_io.py index e445261d..8de5db95 100644 --- a/tests/test_io.py +++ b/tests/test_io.py @@ -10,9 +10,9 @@ from confidence import ( DEFAULT_LOAD_ORDER, + NOT_CONFIGURED, Configuration, Locality, - NotConfigured, load, load_name, loaders, @@ -83,7 +83,7 @@ def _assert_values(conf): assert conf.key == 'value' assert isinstance(conf.some, Configuration) assert conf.some.thing is False - assert conf.does_not.exist is NotConfigured + assert conf.does_not.exist is NOT_CONFIGURED def test_load_defaults(test_files): @@ -239,7 +239,7 @@ def test_load_name_order(tilde_home_user): with ( patch('confidence.io.environ', env), - patch('confidence.io.loadf', return_value=NotConfigured) as mocked_loadf, + patch('confidence.io.loadf', return_value=NOT_CONFIGURED) as mocked_loadf, ): subject = load_name('foo', 'bar') assert len(subject) == 1 @@ -247,28 +247,28 @@ def test_load_name_order(tilde_home_user): mocked_loadf.assert_has_calls( [ - call(Path('/etc/xdg/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/etc/xdg/bar.yaml'), format=YAML, default=NotConfigured), - call(Path('/etc/foo/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/etc/bar/bar.yaml'), format=YAML, default=NotConfigured), - call(Path('/etc/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/etc/bar.yaml'), format=YAML, default=NotConfigured), - call(Path('/Library/Preferences/foo/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/Library/Preferences/bar/bar.yaml'), format=YAML, default=NotConfigured), - call(Path('/Library/Preferences/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/Library/Preferences/bar.yaml'), format=YAML, default=NotConfigured), - call(Path('/home/user/.config/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/home/user/.config/bar.yaml'), format=YAML, default=NotConfigured), + call(Path('/etc/xdg/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/etc/xdg/bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/etc/foo/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/etc/bar/bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/etc/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/etc/bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/Library/Preferences/foo/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/Library/Preferences/bar/bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/Library/Preferences/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/Library/Preferences/bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/home/user/.config/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/home/user/.config/bar.yaml'), format=YAML, default=NOT_CONFIGURED), # loadf is usually the one to expand ~ to /home/user here, but we've mocked it, so the value being passed # will still contain the ~ - call(Path('~/Library/Preferences/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('~/Library/Preferences/bar.yaml'), format=YAML, default=NotConfigured), - call(Path('C:/Users/user/AppData/Local/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('C:/Users/user/AppData/Local/bar.yaml'), format=YAML, default=NotConfigured), - call(Path('~/.foo.yaml'), format=YAML, default=NotConfigured), - call(Path('~/.bar.yaml'), format=YAML, default=NotConfigured), - call(Path('./foo.yaml'), format=YAML, default=NotConfigured), - call(Path('./bar.yaml'), format=YAML, default=NotConfigured), + call(Path('~/Library/Preferences/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('~/Library/Preferences/bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('C:/Users/user/AppData/Local/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('C:/Users/user/AppData/Local/bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('~/.foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('~/.bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('./foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('./bar.yaml'), format=YAML, default=NOT_CONFIGURED), ], any_order=False, ) @@ -281,14 +281,14 @@ def test_load_name_xdg_config_dirs(): with ( patch('confidence.io.environ', env), - patch('confidence.io.loadf', return_value=NotConfigured) as mocked_loadf, + patch('confidence.io.loadf', return_value=NOT_CONFIGURED) as mocked_loadf, ): assert len(load_name('foo', 'bar', load_order=(read_xdg_config_dirs,))) == 0 mocked_loadf.assert_has_calls( [ - call(Path('/etc/not-xdg/foo.yaml'), Path('/etc/xdg-desktop/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/etc/not-xdg/bar.yaml'), Path('/etc/xdg-desktop/bar.yaml'), format=YAML, default=NotConfigured), + call(Path('/etc/not-xdg/foo.yaml'), Path('/etc/xdg-desktop/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/etc/not-xdg/bar.yaml'), Path('/etc/xdg-desktop/bar.yaml'), format=YAML, default=NOT_CONFIGURED), ], any_order=False, ) @@ -296,15 +296,15 @@ def test_load_name_xdg_config_dirs(): def test_load_name_xdg_config_dirs_fallback(): with ( - patch('confidence.io.loadf', return_value=NotConfigured) as mocked_loadf, + patch('confidence.io.loadf', return_value=NOT_CONFIGURED) as mocked_loadf, patch('confidence.io.environ', {}), ): assert len(load_name('foo', 'bar', load_order=(read_xdg_config_dirs,))) == 0 mocked_loadf.assert_has_calls( [ - call(Path('/etc/xdg/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/etc/xdg/bar.yaml'), format=YAML, default=NotConfigured), + call(Path('/etc/xdg/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/etc/xdg/bar.yaml'), format=YAML, default=NOT_CONFIGURED), ], any_order=False, ) @@ -315,14 +315,14 @@ def test_load_name_xdg_config_home(tilde_home_user): with ( patch('confidence.io.environ', env), - patch('confidence.io.loadf', return_value=NotConfigured) as mocked_loadf, + patch('confidence.io.loadf', return_value=NOT_CONFIGURED) as mocked_loadf, ): assert len(load_name('foo', 'bar', load_order=(read_xdg_config_home,))) == 0 mocked_loadf.assert_has_calls( [ - call(Path('/home/user/.not-config/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/home/user/.not-config/bar.yaml'), format=YAML, default=NotConfigured), + call(Path('/home/user/.not-config/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/home/user/.not-config/bar.yaml'), format=YAML, default=NOT_CONFIGURED), ], any_order=False, ) @@ -333,14 +333,14 @@ def test_load_name_xdg_config_home_fallback(tilde_home_user): with ( patch('confidence.io.environ', env), - patch('confidence.io.loadf', return_value=NotConfigured) as mocked_loadf, + patch('confidence.io.loadf', return_value=NOT_CONFIGURED) as mocked_loadf, ): assert len(load_name('foo', 'bar', load_order=(read_xdg_config_home,))) == 0 mocked_loadf.assert_has_calls( [ - call(Path('/home/user/.config/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('/home/user/.config/bar.yaml'), format=YAML, default=NotConfigured), + call(Path('/home/user/.config/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('/home/user/.config/bar.yaml'), format=YAML, default=NOT_CONFIGURED), ], any_order=False, ) @@ -399,9 +399,9 @@ def test_load_name_overlapping_envvars(test_files): assert subject.key == 'bar' assert subject.ns.key == 'value' - assert subject.foo.config.file is NotConfigured - assert subject.bar.config.file is NotConfigured - assert subject.config.file is NotConfigured + assert subject.foo.config.file is NOT_CONFIGURED + assert subject.bar.config.file is NOT_CONFIGURED + assert subject.config.file is NOT_CONFIGURED assert len(subject.semi.overlapping) == 2 assert subject.semi.overlapping.foo is True assert subject.semi.overlapping.bar is False @@ -416,16 +416,16 @@ def test_load_name_envvar_dir(tilde_home_user): with ( patch('confidence.io.environ', env), - patch('confidence.io.loadf', return_value=NotConfigured) as mocked_loadf, + patch('confidence.io.loadf', return_value=NOT_CONFIGURED) as mocked_loadf, ): assert len(load_name('foo', 'bar', load_order=load_order)) == 0 mocked_loadf.assert_has_calls( [ - call(Path('C:/ProgramData/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('C:/ProgramData/bar.yaml'), format=YAML, default=NotConfigured), - call(Path('D:/Users/user/AppData/Roaming/foo.yaml'), format=YAML, default=NotConfigured), - call(Path('D:/Users/user/AppData/Roaming/bar.yaml'), format=YAML, default=NotConfigured), + call(Path('C:/ProgramData/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('C:/ProgramData/bar.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('D:/Users/user/AppData/Roaming/foo.yaml'), format=YAML, default=NOT_CONFIGURED), + call(Path('D:/Users/user/AppData/Roaming/bar.yaml'), format=YAML, default=NOT_CONFIGURED), ], any_order=False, ) @@ -445,7 +445,7 @@ def test_load_name_deprecated_extension(): def test_load_name_deprecated_extension_template(test_files): with ( pytest.warns(DeprecationWarning, match='using "{extension}" in string template'), - patch('confidence.io.loadf', return_value=NotConfigured) as mocked_loadf, + patch('confidence.io.loadf', return_value=NOT_CONFIGURED) as mocked_loadf, ): load_name( 'app', @@ -459,8 +459,8 @@ def test_load_name_deprecated_extension_template(test_files): # should resolve to the same thing twice, while issuing a Deprecation warning mocked_loadf.assert_has_calls( [ - call(test_files / 'app.toml', format=TOML, default=NotConfigured), - call(test_files / 'app.toml', format=TOML, default=NotConfigured), + call(test_files / 'app.toml', format=TOML, default=NOT_CONFIGURED), + call(test_files / 'app.toml', format=TOML, default=NOT_CONFIGURED), ] ) diff --git a/tests/test_namespace.py b/tests/test_namespace.py index 36270a85..da9ebda7 100644 --- a/tests/test_namespace.py +++ b/tests/test_namespace.py @@ -3,13 +3,13 @@ import pytest -from confidence import Configuration, Missing, NotConfigured +from confidence import NOT_CONFIGURED, Configuration, Missing def test_empty(): def run_test(subject): - assert subject.key is NotConfigured - assert subject.deeper.key is NotConfigured + assert subject.key is NOT_CONFIGURED + assert subject.deeper.key is NOT_CONFIGURED assert '(keys=[])' in repr(subject) run_test(Configuration()) @@ -44,11 +44,11 @@ def test_not_configured(): subject = Configuration({'key': 'value'}, missing=Missing.SILENT) assert subject.key == 'value' - assert subject.does_nope_exist is NotConfigured - assert subject.does.nope.exist is NotConfigured + assert subject.does_nope_exist is NOT_CONFIGURED + assert subject.does.nope.exist is NOT_CONFIGURED assert subject.does_nope_exist is subject.does.nope.exist - assert not NotConfigured - assert bool(NotConfigured) is False + assert not NOT_CONFIGURED + assert bool(NOT_CONFIGURED) is False assert (subject.does_not_exist or 'default') == 'default' assert 'not configured' in str(subject.does_nope.exist) assert str(subject.does_nope_exist) == repr(subject.does.nope.exist) diff --git a/tests/test_pickling.py b/tests/test_pickling.py index 6f77b353..766f1735 100644 --- a/tests/test_pickling.py +++ b/tests/test_pickling.py @@ -2,7 +2,7 @@ import pytest -from confidence.models import Configuration, Missing, NotConfigured +from confidence.models import NOT_CONFIGURED, Configuration, Missing def test_empty(): @@ -22,12 +22,12 @@ def test_simple(): assert subject.testing == reencoded.testing == 123 assert subject.get('testing') == reencoded.get('testing') == 123 - assert subject.not_there is reencoded.not_there is NotConfigured + assert subject.not_there is reencoded.not_there is NOT_CONFIGURED assert reencoded._root is reencoded def test_not_configured(): - assert pickle.loads(pickle.dumps(NotConfigured)) is NotConfigured + assert pickle.loads(pickle.dumps(NOT_CONFIGURED)) is NOT_CONFIGURED def test_missing_error(): diff --git a/tests/test_precedence.py b/tests/test_precedence.py index 74b09a0e..e6cbef61 100644 --- a/tests/test_precedence.py +++ b/tests/test_precedence.py @@ -1,6 +1,6 @@ import pytest -from confidence import Configuration, Missing, NotConfigured, merge +from confidence import NOT_CONFIGURED, Configuration, Missing, merge from confidence.models import NO_DEFAULT @@ -82,9 +82,9 @@ def test_merge_settings(): error = Configuration(source, missing=Missing.ERROR) value = Configuration(source, missing=5) - assert merge(source, source)._missing is NotConfigured - assert merge(source, source, missing=Missing.SILENT)._missing is NotConfigured - assert merge(silent, source)._missing is (silent | source)._missing is NotConfigured + assert merge(source, source)._missing is NOT_CONFIGURED + assert merge(source, source, missing=Missing.SILENT)._missing is NOT_CONFIGURED + assert merge(silent, source)._missing is (silent | source)._missing is NOT_CONFIGURED assert merge(silent, error, value, missing=Missing.ERROR)._missing is NO_DEFAULT assert merge(error, source)._missing is (error | source)._missing is NO_DEFAULT assert merge(value, source)._missing == (value | source)._missing == 5 @@ -104,10 +104,10 @@ def test_merge_direction(): assert (Configuration(a) | b).key == 'b' assert (a | Configuration(b)).key == 'b' # NotConfigured should support the operator, but never contribute content - assert NotConfigured | a == a - assert a | NotConfigured == a - assert NotConfigured | b == b - assert b | NotConfigured == b + assert NOT_CONFIGURED | a == a + assert a | NOT_CONFIGURED == a + assert NOT_CONFIGURED | b == b + assert b | NOT_CONFIGURED == b with pytest.raises(TypeError): assert not Configuration(a) | 5 diff --git a/tests/test_references.py b/tests/test_references.py index 671b69fb..7103ab27 100644 --- a/tests/test_references.py +++ b/tests/test_references.py @@ -1,6 +1,6 @@ import pytest -from confidence import Configuration, ConfigurationError, ConfiguredReferenceError, NotConfigured, loadf +from confidence import NOT_CONFIGURED, Configuration, ConfigurationError, ConfiguredReferenceError, loadf def test_reference_syntax(): @@ -19,7 +19,7 @@ def test_reference_syntax(): } ) - assert config.reference is NotConfigured + assert config.reference is NOT_CONFIGURED assert '$' in config.key1 assert '$' in config.key2 assert '$' in config.key3