diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index da42cde..da8652d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -18,9 +18,24 @@ env: jobs: lint: name: Static analysis - uses: less-action/reusables/.github/workflows/pre-commit.yaml@main - with: - python-version: "3.12" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.12 + cache: pip + check-latest: true + - name: goose cache + uses: actions/cache@v4 + with: + path: ~/.cache/goose + key: "${{ runner.os }}-goose-3.12-${{ hashFiles('.goose/**/manifest.json') }}" + restore-keys: | + ${{ runner.os }}-goose-3.12 + ${{ runner.os }}-goose + - run: pip install git-goose + - run: python3 -m goose run --select=all --delete-orphan-environments type-check: name: Type check @@ -37,11 +52,7 @@ jobs: uses: actions/cache@v4 with: path: .mypy_cache - key: >- - ${{ runner.os }} - -mypy - -3.12 - -${{ hashFiles('requirements.txt') }} + key: "${{ runner.os }}-mypy-3.12-${{ hashFiles('requirements.txt') }}" restore-keys: | ${{ runner.os }}-mypy-3.12 ${{ runner.os }}-mypy diff --git a/.goose/check-manifest/manifest.json b/.goose/check-manifest/manifest.json new file mode 100644 index 0000000..86c8693 --- /dev/null +++ b/.goose/check-manifest/manifest.json @@ -0,0 +1 @@ +{"source_dependencies":["check-manifest","setuptools-scm==8.1.0","setuptools==71.1.0","wheel==0.43.0"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:8749b703c2c10ee6508cc3285d57c4bd5b44daa3fe6a844bf755e549ea7afe40"}],"checksum":"sha256:f3088465a7c13f8bcd9ca759210e41d5d09e65b6a1200f0136c49622936a59e5"} \ No newline at end of file diff --git a/.goose/check-manifest/requirements.txt b/.goose/check-manifest/requirements.txt new file mode 100644 index 0000000..f1100ec --- /dev/null +++ b/.goose/check-manifest/requirements.txt @@ -0,0 +1,23 @@ +build==1.2.1 \ + --hash=sha256:526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d \ + --hash=sha256:75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4 +check-manifest==0.49 \ + --hash=sha256:058cd30057714c39b96ce4d83f254fc770e3145c7b1932b5940b4e3efb5521ef \ + --hash=sha256:64a640445542cf226919657c7b78d02d9c1ca5b1c25d7e66e0e1ff325060f416 +packaging==24.1 \ + --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ + --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 +pyproject-hooks==1.1.0 \ + --hash=sha256:4b37730834edbd6bd37f26ece6b44802fb1c1ee2ece0e54ddff8bfc06db86965 \ + --hash=sha256:7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2 +setuptools-scm==8.1.0 \ + --hash=sha256:42dea1b65771cba93b7a515d65a65d8246e560768a66b9106a592c8e7f26c8a7 \ + --hash=sha256:897a3226a6fd4a6eb2f068745e49733261a21f70b1bb28fce0339feb978d9af3 +wheel==0.43.0 \ + --hash=sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85 \ + --hash=sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81 + +# WARNING: The following packages were not pinned, but pip requires them to be +# pinned when the requirements file includes hashes and the requirement is not +# satisfied by a package already installed. Consider using the --allow-unsafe flag. +# setuptools diff --git a/.goose/node/manifest.json b/.goose/node/manifest.json new file mode 100644 index 0000000..fc2d5c7 --- /dev/null +++ b/.goose/node/manifest.json @@ -0,0 +1 @@ +{"source_dependencies":["prettier"],"lock_files":[{"path":"package-lock.json","checksum":"sha256:f4412caf2beed530362395e3e44258f75cc35e43e890f1e2f725f9bbda990f4c"},{"path":"package.json","checksum":"sha256:c5008cb00d6009f6d901cfe35523169a3deb91979b71fce65d6ac79fdace548b"}],"checksum":"sha256:a112173ffe8caaeb52381f7fef342a108d8d4b4e081310059c09786525de466c"} \ No newline at end of file diff --git a/.goose/node/package-lock.json b/.goose/node/package-lock.json new file mode 100644 index 0000000..b465d08 --- /dev/null +++ b/.goose/node/package-lock.json @@ -0,0 +1,26 @@ +{ + "name": "node", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "prettier": "*" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + } + } +} diff --git a/.goose/node/package.json b/.goose/node/package.json new file mode 100644 index 0000000..4cca591 --- /dev/null +++ b/.goose/node/package.json @@ -0,0 +1 @@ +{"lockfileVersion":3,"dependencies":{"prettier":"*"}} \ No newline at end of file diff --git a/.goose/python/manifest.json b/.goose/python/manifest.json new file mode 100644 index 0000000..0498e3c --- /dev/null +++ b/.goose/python/manifest.json @@ -0,0 +1 @@ +{"source_dependencies":["blacken-docs","check-jsonschema","editorconfig-checker","pre-commit-hooks","ruff"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:7afa7fcdc7615d74c49d1c8c2694e56fdf67c3f33031aa3e2cc708a131dc2165"}],"checksum":"sha256:12d32d65a454f2e9b3299a11d829a52a5b5fbafa74daea9515df2fd2140586ef"} \ No newline at end of file diff --git a/.goose/python/requirements.txt b/.goose/python/requirements.txt new file mode 100644 index 0000000..ea9eef8 --- /dev/null +++ b/.goose/python/requirements.txt @@ -0,0 +1,441 @@ +attrs==23.2.0 \ + --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ + --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 +black==24.4.2 \ + --hash=sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474 \ + --hash=sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1 \ + --hash=sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0 \ + --hash=sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8 \ + --hash=sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96 \ + --hash=sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1 \ + --hash=sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04 \ + --hash=sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021 \ + --hash=sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94 \ + --hash=sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d \ + --hash=sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c \ + --hash=sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7 \ + --hash=sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c \ + --hash=sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc \ + --hash=sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7 \ + --hash=sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d \ + --hash=sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c \ + --hash=sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741 \ + --hash=sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce \ + --hash=sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb \ + --hash=sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063 \ + --hash=sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e +blacken-docs==1.18.0 \ + --hash=sha256:47bed628679d008a8eb55d112df950582e68d0f57615223929e366348d935444 \ + --hash=sha256:64f592246784131e9f84dad1db397f44eeddc77fdf01726bab920a3f00a3815c +certifi==2024.7.4 \ + --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ + --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 +check-jsonschema==0.29.0 \ + --hash=sha256:39c4e47a8156c7ad9cc6aa1a793cebc3c44e44807a1e3e787ff0f1ae40c76f07 \ + --hash=sha256:f5b2c2770536ffc0a11b78c852bfe36eee28fba71a1ee92ce3970631ea5c46cc +click==8.1.7 \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de +editorconfig-checker==2.7.3 \ + --hash=sha256:69261f55585f0a4897b5534806bd170289d11b4825137411c1e9e5f2c1c5dbc2 +idna==3.7 \ + --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ + --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 +jsonschema==4.23.0 \ + --hash=sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4 \ + --hash=sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 +jsonschema-specifications==2023.12.1 \ + --hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \ + --hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 +packaging==24.1 \ + --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ + --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 +pathspec==0.12.1 \ + --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \ + --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 +platformdirs==4.2.2 \ + --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ + --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 +pre-commit-hooks==4.6.0 \ + --hash=sha256:a69199e6a2d45ec59c1020a81ca1549abddc2afb798276d9a0d951752d6abbfe \ + --hash=sha256:eb1f43ee67869cd41b4c59017fad4a0f9d4d61201d163f2135535aaf65035a2b +referencing==0.35.1 \ + --hash=sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c \ + --hash=sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de +regress==0.4.5 \ + --hash=sha256:028f9bf41c8da8ffc92301bbe2781c04a4ce036c31b1cd3279264d21f3496eb6 \ + --hash=sha256:04332086e7a926bb9f4b6b5a8e93b033859580ce1e30735e341d482a16e00b32 \ + --hash=sha256:050716c84f7d086e6fa0456ccabfd4dabaeead2fcad94dcb837f557bac4acd4a \ + --hash=sha256:05307f345cc619dbcee97baedb06a4f3f512544581e8492b8fba04bdd0fc305b \ + --hash=sha256:061bf3ac11a495c1bcd96b65f7e92127bdfc11a8dbcf663434b060eddc9b0553 \ + --hash=sha256:061e4d60750c9dbea6b291a8a101d3ea808c0fed68043a7cd76e3ae7fe6299ae \ + --hash=sha256:074f2134f72c881b498726ac31e388dd52078c1821c3d5c7f466066a7138b1bb \ + --hash=sha256:09a2697ee322966d2912fe048a6538000a6ad5d0ee800e58957b397376fde022 \ + --hash=sha256:0a1992f95af62892dcf0de40833b3626e9516dd5a587b4a0990796b61a3dbfc4 \ + --hash=sha256:16a355498a51b8bf544392938e0f08df8c70402f7306162b780a80dee2ecf437 \ + --hash=sha256:1912cae04a2505cfbbe7e096129d3bf26126ce1471cdb1dafd80ac2ced1c74a7 \ + --hash=sha256:1b47e21d62de88ec3f9de9ec53e32f45c29b35a26e1296f121380983316f50a6 \ + --hash=sha256:23054803327d367789d8ff619f099cb0a845cd9b674a453c77126a5c330c3e72 \ + --hash=sha256:2620fd63b5430d731373b92f25f889c38a56165558ee0c77862ab643c07cca92 \ + --hash=sha256:2a7eebff0beb2808caa763c16b4c619816b6c9cdc281b825a78d3b60e2937ac6 \ + --hash=sha256:2b845e085e71c34ac64c745bb8afd3bee794cd6793ef6cb40b0396eaa81184a8 \ + --hash=sha256:2cbd37184773985f4b5a21d5d851b19c30719eaad78a9e65beb5b2955e948d84 \ + --hash=sha256:2f7939f529fb6c6b9fb20fd7f45381e51f0d46d9b81de5fa81efe0cd0d0c1175 \ + --hash=sha256:327dc0ea7cee35452d6c79fb5e7caaea1d2163681efedac87a1c2c0c227e5a38 \ + --hash=sha256:37caf29f581b5b4c6208bd386a168d20b051d813c58d98274efc4006a876fef9 \ + --hash=sha256:38274be5184d80530c2525af65bed14b1f07468d05ee02661603c05f345c4732 \ + --hash=sha256:3dc283fd83d112307f31e37716c88a63d4f23aee356758d7e42692e6459921dc \ + --hash=sha256:43a86c803340af1042328d50cfa8ae08840687ef81bb825399dee46ba247fc1c \ + --hash=sha256:4467ff5d7a95890a6106c7040a1af021c4fadd0e095102587596baf6410e5220 \ + --hash=sha256:48a7a37f108fe93d1f6cbdb89d99dfb88ad0707c2d3837f9a7f3c1419033b138 \ + --hash=sha256:4e44b9c3addd62cbcfb1972793ebf1ea69f01dbe3e11e9050c54868bcebb8b12 \ + --hash=sha256:5708d6064ac3da3272c69fd1daf9615fec68993a538dfeb2f1f33fe863941d35 \ + --hash=sha256:579c8558c657070d3348163749acb66287d366e2e5432eb4a19864cb7360e573 \ + --hash=sha256:59bc0d5581820b965ca1c2ff9bf5b6cd802a426744fc741399cf5dcc08323253 \ + --hash=sha256:5b454412e0b9c906fa76c509c2497992da47c6054a8ced184d62029a776e0ed6 \ + --hash=sha256:5bde3b0c86e7751ad7196aafa5c713bb8c58f6747f1c909d6f223e21c2623145 \ + --hash=sha256:5e477e1fc685a6de39d07763addd797c168d241ff75b3b986d981ba9e5ac19db \ + --hash=sha256:6283465d590e72c77e60a5e1b4a6076c881ce9ae4fa7f21225bffc5dfa25a6f5 \ + --hash=sha256:63227f1c3adf22842d5ffa7382c265cf62b1d8f4d8893220db61916d349cb5a2 \ + --hash=sha256:647e13bbf9caf5890d09408e14c6323dcb2be2cd2601f8f894d508d39a58a43e \ + --hash=sha256:64b10f3e1702675494c0bcdcc91e3a64c65b4e99592a8cad36ced2b7253b318b \ + --hash=sha256:6736efd45617a7125113282e176f87f14e2164786a10a1e3388c92b7bc050a97 \ + --hash=sha256:67c92af5b04109d5c2d3ad833375df96aaffa2789ba6f97674a7c165249f8017 \ + --hash=sha256:6a9011e600f6cb5dd01521800b749068c9a0ddfc31467d8ee0a3e4a6dbc40b04 \ + --hash=sha256:6ae347c5d514b168111d3ec3243a5bf64ac8d1846d9085b41a1e160d1c03054d \ + --hash=sha256:6b2fa97786a040079c395ee490385241e36a38b41ff31dcb5ff4dc70a431ac0a \ + --hash=sha256:6e11c9c63024d0c173b71548003d115fa2eec61e332785bfd219b601ff6095e8 \ + --hash=sha256:6f05031632a832ae0ef7e44d80ec51881c35f0399cef49c7b72c4b111805401e \ + --hash=sha256:7882eb87440cf939b115a368b1fd71014b1f29d60d519bc28f3998d8232ca706 \ + --hash=sha256:795445a7abc1bd099745dd93b19bc3bd7b9c0c16531870ac584f794c098b8c11 \ + --hash=sha256:7bc5799dfb5a32e55327f743aa49354480004666d36039efcacdf6e33b485d3a \ + --hash=sha256:80c9dd961df6bee303a148a86c9a00baa260964015d14ac94b848a30f54e800e \ + --hash=sha256:831d36c5846ec9efd48cf486a51511013b25f9760bea32020765de0d5606ec9a \ + --hash=sha256:86c5c296d7689409f623ec430ac8d63f431affe06887c0089803a254dbd67e96 \ + --hash=sha256:88bc6b1a2907857f9c910065c38bba4668c3116d260c1a88dcf77caf0af73d71 \ + --hash=sha256:898d8d8685766dcdcc6dad180d37d65d7cfa96211fd3205ac4c0f6f0d51e5645 \ + --hash=sha256:8b51b737f9a7ba9272ea5871d8cf282fdba66b408fc7c4be9450a33a8ed5c9bc \ + --hash=sha256:8e300ffd18c3643007d66e6db5cbb8b22c03bb283bd2258ad17e07d36fbed060 \ + --hash=sha256:8f4a8dbaf044b36b894cdc6ab389cbf96661576819b518a0b5c397d564d46218 \ + --hash=sha256:98354e1db7d779a6bb8849a5aa9ec1029396451643613098a0ae3e49bd83d9ac \ + --hash=sha256:991a3e518824c3ea6b3d4a3c9ab05a6d2c50ec362ed450f0f3ef32c0e5ac0f22 \ + --hash=sha256:99a04916d44ee5bf72260285d30aa88c5b94f955cc10ee4cdb7a2c0acad16c72 \ + --hash=sha256:9b344913e644d2669a98ee54847990c4ccd3e42876ae97f64e7a233d4aac9b52 \ + --hash=sha256:9b616f41655baf858f1d6e534eead6250ba7cc11ca7d41802f702fd5bdcc07d9 \ + --hash=sha256:9ca42732b06532d8f8ac134c3416d94a94cdd4df0ce7ecd48ff9c5668102d252 \ + --hash=sha256:9ca57771a1d9a9f90b3523785582e80b7d0fd6a138f73e1062f81f1db3a7bc89 \ + --hash=sha256:9cb2869ffdfca5eb3984081ecfbd63313e7722008a7a21eb57a32a59bdfc1e7d \ + --hash=sha256:9dca751f308bdc559181ca2b85c8fe7aef07a0420f3a3f0f04709259da6bd251 \ + --hash=sha256:9e1c479722b7ead3ce62b437be8436504e8185134c19dac020dbc46b36956ea2 \ + --hash=sha256:9f6555f7f649306cad60de7e95a0c35a1fc940fff2b6bd1e7da7c3d850e0180b \ + --hash=sha256:9f9e298d92032fd6670f7df05f0386c4ed83ca10e46204797b700c14eadda967 \ + --hash=sha256:a204fad2193363225f96f898f403c0c54d8d3b3584123c0cf609e47524d9dc75 \ + --hash=sha256:a23957296f0e3ee69a2b86ced1a863a82b9c992b1b7c0872cb89c08c76647ce7 \ + --hash=sha256:a30abef280d1d56d4a46606cb99f57107512abbadb8f44e9b5fd554995923720 \ + --hash=sha256:a561d28d9c35662b108b9575a29f2b01981cf1ef880a433931472fdffb462f4f \ + --hash=sha256:a686829c622281edec15861bf7e6e1dbcb12049b2885b93afd645137bf9a0c4b \ + --hash=sha256:a91078ae456cd1bbe948b0ddc98bbd513fb303fa5a169d25100ca1529e9f4262 \ + --hash=sha256:abf2b2be7347bbcd998f83cde626878548e18221110eb2d02990140b6ea6e45a \ + --hash=sha256:b2ac78d40a3c1c03ef881adaf1b99237fb0875c2f7fa44e900ae2fb30ba264ba \ + --hash=sha256:b2b5c2fd25d4b2b556a9761f471f6d96b5cdf855d1a6843a24df05ecf006d645 \ + --hash=sha256:b42ac506390aea86f3698918889dd6439ca2dca902f3afdc6d70929d144666ef \ + --hash=sha256:b7c2421aa01751bccf6a83ae5448682e6c4c6864ab99a2f6d6c9fd863b2b8f43 \ + --hash=sha256:b91c7c754db0ce84bba60b36151bd9e23a28ca835f2aea4e0561a283ee5c8f8a \ + --hash=sha256:c33d3343a5d5f13359fabfe237022bd0be546c5ec373f50eed9349a6b90bf117 \ + --hash=sha256:c39ed2177f4e82c4d1e07c41bbf42203eab33165938aaa6f88b4cf266b61acf1 \ + --hash=sha256:c8197c8a473152ce198c2e755d9f7322f68b75790fe87411f39862f841f16c07 \ + --hash=sha256:cc12e7a7487bb06c82ad5c3a9b0cb9a170ae7ad3ec41c9e4cd1736ce426aa916 \ + --hash=sha256:ccea0030c7bf32c1b6d9e3a57f5ad94b61ce901b1f8b02217175e0bd654cf155 \ + --hash=sha256:d08bb3149ce41086cd7e6df5d764aa5b6eec486a405b54bc0439afce409aff84 \ + --hash=sha256:d142d2859eb0b2752b58c787611b004ee756f9ad562a88298f310f7caa001aee \ + --hash=sha256:d1e335f24e13ef2d631c47e899e0d3055853df8818b22d46f15c8630f543b548 \ + --hash=sha256:d54bac8736e6d3ada33b62eed18fb213d3866a79329de1f48f2a96191c6eb841 \ + --hash=sha256:d6c2945d112458a6bd157d7bab59079345bf6d5e8e71f222465818c5817fea0b \ + --hash=sha256:d7a65a3a722c83d7141baa9bc10968b82d0f80fc13dadf0fae6f98f4f5550fc5 \ + --hash=sha256:d9ae10d376ec580ac074b04e608855ab313a90823513603eea7afc3fb0df84c6 \ + --hash=sha256:dc83a7d79e5361b1ad574322bd2307cfb15c6b1c086a74fe933a168f712af0b2 \ + --hash=sha256:e10b669d6182c50313d741f38efcdf5e6bb8e304087b0cdc690ba545b312b59c \ + --hash=sha256:e9cc60af8b68a28c41bfdb81542b35660c8945c1e12560ba68d89369c5bf1de9 \ + --hash=sha256:ea697187956752fd8358e699fc1a88c863f729cbc1430591e11172bc74488e2b \ + --hash=sha256:ee1c9da4e391ad8ca6dc8d772862ff0cb20b0f550919dd1fe86a449974c5be94 \ + --hash=sha256:f2926d16fbf39cd26b4104854ca25fa5c33cbd04f5a97fb1b4809671053fee8f \ + --hash=sha256:f2f0892860b906d381326caff141b095c83661721678b6e8d1e00131d47ad4c8 \ + --hash=sha256:f57e077d92f9d24850444ede594ba0c4908cc1263b9118847624da2d721701a8 \ + --hash=sha256:f5fadd568f49592e5de40de9db69f950d28a0841ce1e47b50119c6f0246b2ac7 +requests==2.32.3 \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 +rpds-py==0.19.1 \ + --hash=sha256:01227f8b3e6c8961490d869aa65c99653df80d2f0a7fde8c64ebddab2b9b02fd \ + --hash=sha256:08ce9c95a0b093b7aec75676b356a27879901488abc27e9d029273d280438505 \ + --hash=sha256:0b02dd77a2de6e49078c8937aadabe933ceac04b41c5dde5eca13a69f3cf144e \ + --hash=sha256:0d4b52811dcbc1aba08fd88d475f75b4f6db0984ba12275d9bed1a04b2cae9b5 \ + --hash=sha256:13e6d4840897d4e4e6b2aa1443e3a8eca92b0402182aafc5f4ca1f5e24f9270a \ + --hash=sha256:1a129c02b42d46758c87faeea21a9f574e1c858b9f358b6dd0bbd71d17713175 \ + --hash=sha256:1a8dfa125b60ec00c7c9baef945bb04abf8ac772d8ebefd79dae2a5f316d7850 \ + --hash=sha256:1c32e41de995f39b6b315d66c27dea3ef7f7c937c06caab4c6a79a5e09e2c415 \ + --hash=sha256:1d494887d40dc4dd0d5a71e9d07324e5c09c4383d93942d391727e7a40ff810b \ + --hash=sha256:1d4af2eb520d759f48f1073ad3caef997d1bfd910dc34e41261a595d3f038a94 \ + --hash=sha256:1fb93d3486f793d54a094e2bfd9cd97031f63fcb5bc18faeb3dd4b49a1c06523 \ + --hash=sha256:24f8ae92c7fae7c28d0fae9b52829235df83f34847aa8160a47eb229d9666c7b \ + --hash=sha256:24fc5a84777cb61692d17988989690d6f34f7f95968ac81398d67c0d0994a897 \ + --hash=sha256:26ab43b6d65d25b1a333c8d1b1c2f8399385ff683a35ab5e274ba7b8bb7dc61c \ + --hash=sha256:271accf41b02687cef26367c775ab220372ee0f4925591c6796e7c148c50cab5 \ + --hash=sha256:2ddd50f18ebc05ec29a0d9271e9dbe93997536da3546677f8ca00b76d477680c \ + --hash=sha256:31dd5794837f00b46f4096aa8ccaa5972f73a938982e32ed817bb520c465e520 \ + --hash=sha256:31e450840f2f27699d014cfc8865cc747184286b26d945bcea6042bb6aa4d26e \ + --hash=sha256:32e0db3d6e4f45601b58e4ac75c6f24afbf99818c647cc2066f3e4b192dabb1f \ + --hash=sha256:346557f5b1d8fd9966059b7a748fd79ac59f5752cd0e9498d6a40e3ac1c1875f \ + --hash=sha256:34bca66e2e3eabc8a19e9afe0d3e77789733c702c7c43cd008e953d5d1463fde \ + --hash=sha256:3511f6baf8438326e351097cecd137eb45c5f019944fe0fd0ae2fea2fd26be39 \ + --hash=sha256:35af5e4d5448fa179fd7fff0bba0fba51f876cd55212f96c8bbcecc5c684ae5c \ + --hash=sha256:3837c63dd6918a24de6c526277910e3766d8c2b1627c500b155f3eecad8fad65 \ + --hash=sha256:39d67896f7235b2c886fb1ee77b1491b77049dcef6fbf0f401e7b4cbed86bbd4 \ + --hash=sha256:3b823be829407393d84ee56dc849dbe3b31b6a326f388e171555b262e8456cc1 \ + --hash=sha256:3c73254c256081704dba0a333457e2fb815364018788f9b501efe7c5e0ada401 \ + --hash=sha256:3ddab996807c6b4227967fe1587febade4e48ac47bb0e2d3e7858bc621b1cace \ + --hash=sha256:3e1dc59a5e7bc7f44bd0c048681f5e05356e479c50be4f2c1a7089103f1621d5 \ + --hash=sha256:4383beb4a29935b8fa28aca8fa84c956bf545cb0c46307b091b8d312a9150e6a \ + --hash=sha256:4cc4bc73e53af8e7a42c8fd7923bbe35babacfa7394ae9240b3430b5dcf16b2a \ + --hash=sha256:4dd02e29c8cbed21a1875330b07246b71121a1c08e29f0ee3db5b4cfe16980c4 \ + --hash=sha256:4f580ae79d0b861dfd912494ab9d477bea535bfb4756a2269130b6607a21802e \ + --hash=sha256:53dbc35808c6faa2ce3e48571f8f74ef70802218554884787b86a30947842a14 \ + --hash=sha256:56313be667a837ff1ea3508cebb1ef6681d418fa2913a0635386cf29cff35165 \ + --hash=sha256:57863d16187995c10fe9cf911b897ed443ac68189179541734502353af33e693 \ + --hash=sha256:5953391af1405f968eb5701ebbb577ebc5ced8d0041406f9052638bafe52209d \ + --hash=sha256:5beffdbe766cfe4fb04f30644d822a1080b5359df7db3a63d30fa928375b2720 \ + --hash=sha256:5e360188b72f8080fefa3adfdcf3618604cc8173651c9754f189fece068d2a45 \ + --hash=sha256:5e58b61dcbb483a442c6239c3836696b79f2cd8e7eec11e12155d3f6f2d886d1 \ + --hash=sha256:69084fd29bfeff14816666c93a466e85414fe6b7d236cfc108a9c11afa6f7301 \ + --hash=sha256:6d1d7539043b2b31307f2c6c72957a97c839a88b2629a348ebabe5aa8b626d6b \ + --hash=sha256:6d8b735c4d162dc7d86a9cf3d717f14b6c73637a1f9cd57fe7e61002d9cb1972 \ + --hash=sha256:6ea961a674172ed2235d990d7edf85d15d8dfa23ab8575e48306371c070cda67 \ + --hash=sha256:71157f9db7f6bc6599a852852f3389343bea34315b4e6f109e5cbc97c1fb2963 \ + --hash=sha256:720f3108fb1bfa32e51db58b832898372eb5891e8472a8093008010911e324c5 \ + --hash=sha256:74129d5ffc4cde992d89d345f7f7d6758320e5d44a369d74d83493429dad2de5 \ + --hash=sha256:747251e428406b05fc86fee3904ee19550c4d2d19258cef274e2151f31ae9d38 \ + --hash=sha256:75130df05aae7a7ac171b3b5b24714cffeabd054ad2ebc18870b3aa4526eba23 \ + --hash=sha256:7b3661e6d4ba63a094138032c1356d557de5b3ea6fd3cca62a195f623e381c76 \ + --hash=sha256:7d5c7e32f3ee42f77d8ff1a10384b5cdcc2d37035e2e3320ded909aa192d32c3 \ + --hash=sha256:8124101e92c56827bebef084ff106e8ea11c743256149a95b9fd860d3a4f331f \ + --hash=sha256:81db2e7282cc0487f500d4db203edc57da81acde9e35f061d69ed983228ffe3b \ + --hash=sha256:840e18c38098221ea6201f091fc5d4de6128961d2930fbbc96806fb43f69aec1 \ + --hash=sha256:89cc8921a4a5028d6dd388c399fcd2eef232e7040345af3d5b16c04b91cf3c7e \ + --hash=sha256:8b32cd4ab6db50c875001ba4f5a6b30c0f42151aa1fbf9c2e7e3674893fb1dc4 \ + --hash=sha256:8df1c283e57c9cb4d271fdc1875f4a58a143a2d1698eb0d6b7c0d7d5f49c53a1 \ + --hash=sha256:902cf4739458852fe917104365ec0efbea7d29a15e4276c96a8d33e6ed8ec137 \ + --hash=sha256:97fbb77eaeb97591efdc654b8b5f3ccc066406ccfb3175b41382f221ecc216e8 \ + --hash=sha256:9c7042488165f7251dc7894cd533a875d2875af6d3b0e09eda9c4b334627ad1c \ + --hash=sha256:9e318e6786b1e750a62f90c6f7fa8b542102bdcf97c7c4de2a48b50b61bd36ec \ + --hash=sha256:a9421b23c85f361a133aa7c5e8ec757668f70343f4ed8fdb5a4a14abd5437244 \ + --hash=sha256:aaf71f95b21f9dc708123335df22e5a2fef6307e3e6f9ed773b2e0938cc4d491 \ + --hash=sha256:afedc35fe4b9e30ab240b208bb9dc8938cb4afe9187589e8d8d085e1aacb8309 \ + --hash=sha256:b5e28e56143750808c1c79c70a16519e9bc0a68b623197b96292b21b62d6055c \ + --hash=sha256:b82c9514c6d74b89a370c4060bdb80d2299bc6857e462e4a215b4ef7aa7b090e \ + --hash=sha256:b8f78398e67a7227aefa95f876481485403eb974b29e9dc38b307bb6eb2315ea \ + --hash=sha256:bbda75f245caecff8faa7e32ee94dfaa8312a3367397975527f29654cd17a6ed \ + --hash=sha256:bca34e913d27401bda2a6f390d0614049f5a95b3b11cd8eff80fe4ec340a1208 \ + --hash=sha256:bd04d8cab16cab5b0a9ffc7d10f0779cf1120ab16c3925404428f74a0a43205a \ + --hash=sha256:c149a652aeac4902ecff2dd93c3b2681c608bd5208c793c4a99404b3e1afc87c \ + --hash=sha256:c2087dbb76a87ec2c619253e021e4fb20d1a72580feeaa6892b0b3d955175a71 \ + --hash=sha256:c34f751bf67cab69638564eee34023909380ba3e0d8ee7f6fe473079bf93f09b \ + --hash=sha256:c6d20c8896c00775e6f62d8373aba32956aa0b850d02b5ec493f486c88e12859 \ + --hash=sha256:c7af6f7b80f687b33a4cdb0a785a5d4de1fb027a44c9a049d8eb67d5bfe8a687 \ + --hash=sha256:c7b07959866a6afb019abb9564d8a55046feb7a84506c74a6f197cbcdf8a208e \ + --hash=sha256:ca0dda0c5715efe2ab35bb83f813f681ebcd2840d8b1b92bfc6fe3ab382fae4a \ + --hash=sha256:cdb7eb3cf3deb3dd9e7b8749323b5d970052711f9e1e9f36364163627f96da58 \ + --hash=sha256:ce757c7c90d35719b38fa3d4ca55654a76a40716ee299b0865f2de21c146801c \ + --hash=sha256:d1fa67ef839bad3815124f5f57e48cd50ff392f4911a9f3cf449d66fa3df62a5 \ + --hash=sha256:d2dbd8f4990d4788cb122f63bf000357533f34860d269c1a8e90ae362090ff3a \ + --hash=sha256:d4ec0046facab83012d821b33cead742a35b54575c4edfb7ed7445f63441835f \ + --hash=sha256:dbceedcf4a9329cc665452db1aaf0845b85c666e4885b92ee0cddb1dbf7e052a \ + --hash=sha256:dc733d35f861f8d78abfaf54035461e10423422999b360966bf1c443cbc42705 \ + --hash=sha256:dd635c2c4043222d80d80ca1ac4530a633102a9f2ad12252183bcf338c1b9474 \ + --hash=sha256:de1f7cd5b6b351e1afd7568bdab94934d656abe273d66cda0ceea43bbc02a0c2 \ + --hash=sha256:df7c841813f6265e636fe548a49664c77af31ddfa0085515326342a751a6ba51 \ + --hash=sha256:e0f9d268b19e8f61bf42a1da48276bcd05f7ab5560311f541d22557f8227b866 \ + --hash=sha256:e2d66eb41ffca6cc3c91d8387509d27ba73ad28371ef90255c50cb51f8953301 \ + --hash=sha256:e429fc517a1c5e2a70d576077231538a98d59a45dfc552d1ac45a132844e6dfb \ + --hash=sha256:e4d2b88efe65544a7d5121b0c3b003ebba92bfede2ea3577ce548b69c5235185 \ + --hash=sha256:e76c902d229a3aa9d5ceb813e1cbcc69bf5bda44c80d574ff1ac1fa3136dea71 \ + --hash=sha256:ef07a0a1d254eeb16455d839cef6e8c2ed127f47f014bbda64a58b5482b6c836 \ + --hash=sha256:f09529d2332264a902688031a83c19de8fda5eb5881e44233286b9c9ec91856d \ + --hash=sha256:f0a6d4a93d2a05daec7cb885157c97bbb0be4da739d6f9dfb02e101eb40921cd \ + --hash=sha256:f0cf2a0dbb5987da4bd92a7ca727eadb225581dd9681365beba9accbe5308f7d \ + --hash=sha256:f2671cb47e50a97f419a02cd1e0c339b31de017b033186358db92f4d8e2e17d8 \ + --hash=sha256:f35b34a5184d5e0cc360b61664c1c06e866aab077b5a7c538a3e20c8fcdbf90b \ + --hash=sha256:f3d73022990ab0c8b172cce57c69fd9a89c24fd473a5e79cbce92df87e3d9c48 \ + --hash=sha256:f5b8353ea1a4d7dfb59a7f45c04df66ecfd363bb5b35f33b11ea579111d4655f \ + --hash=sha256:f809a17cc78bd331e137caa25262b507225854073fd319e987bd216bed911b7c \ + --hash=sha256:f9bc4161bd3b970cd6a6fcda70583ad4afd10f2750609fb1f3ca9505050d4ef3 \ + --hash=sha256:fdf4890cda3b59170009d012fca3294c00140e7f2abe1910e6a730809d0f3f9b +ruamel-yaml==0.18.6 \ + --hash=sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636 \ + --hash=sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b +ruamel-yaml-clib==0.2.8 \ + --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \ + --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \ + --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \ + --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \ + --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \ + --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \ + --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \ + --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \ + --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \ + --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \ + --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \ + --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \ + --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \ + --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \ + --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \ + --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \ + --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \ + --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \ + --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \ + --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \ + --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \ + --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \ + --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \ + --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \ + --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \ + --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \ + --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \ + --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \ + --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \ + --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \ + --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \ + --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \ + --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \ + --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \ + --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \ + --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \ + --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \ + --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \ + --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \ + --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \ + --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \ + --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \ + --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \ + --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \ + --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \ + --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \ + --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \ + --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \ + --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \ + --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412 +ruff==0.5.5 \ + --hash=sha256:00817603822a3e42b80f7c3298c8269e09f889ee94640cd1fc7f9329788d7bf8 \ + --hash=sha256:187a60f555e9f865a2ff2c6984b9afeffa7158ba6e1eab56cb830404c942b0f3 \ + --hash=sha256:3191317d967af701f1b73a31ed5788795936e423b7acce82a2b63e26eb3e89d6 \ + --hash=sha256:3687d002f911e8a5faf977e619a034d159a8373514a587249cc00f211c67a091 \ + --hash=sha256:4ad25dd9c5faac95c8e9efb13e15803cd8bbf7f4600645a60ffe17c73f60779b \ + --hash=sha256:50f36d77f52d4c9c2f1361ccbfbd09099a1b2ea5d2b2222c586ab08885cf3445 \ + --hash=sha256:605d589ec35d1da9213a9d4d7e7a9c761d90bba78fc8790d1c5e65026c1b9eaf \ + --hash=sha256:696f18463b47a94575db635ebb4c178188645636f05e934fdf361b74edf1bb2d \ + --hash=sha256:a09b43e02f76ac0145f86a08e045e2ea452066f7ba064fd6b0cdccb486f7c3e7 \ + --hash=sha256:ac9dc814e510436e30d0ba535f435a7f3dc97f895f844f5b3f347ec8c228a523 \ + --hash=sha256:af9bdf6c389b5add40d89b201425b531e0a5cceb3cfdcc69f04d3d531c6be74f \ + --hash=sha256:cab904683bf9e2ecbbe9ff235bfe056f0eba754d0168ad5407832928d579e7ab \ + --hash=sha256:cc5516bdb4858d972fbc31d246bdb390eab8df1a26e2353be2dbc0c2d7f5421a \ + --hash=sha256:cfd7de17cef6ab559e9f5ab859f0d3296393bc78f69030967ca4d87a541b97a0 \ + --hash=sha256:d0b856cb19c60cd40198be5d8d4b556228e3dcd545b4f423d1ad812bfdca5884 \ + --hash=sha256:d40a8533ed545390ef8315b8e25c4bb85739b90bd0f3fe1280a29ae364cc55d8 \ + --hash=sha256:f70737c157d7edf749bcb952d13854e8f745cec695a01bdc6e29c29c288fc36e \ + --hash=sha256:fe26fc46fa8c6e0ae3f47ddccfbb136253c831c3289bba044befe68f467bfb16 +urllib3==2.2.2 \ + --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ + --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 1e138f4..0000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,75 +0,0 @@ -default_language_version: - python: python3.12 -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: "v4.5.0" - hooks: - - id: check-case-conflict - - id: check-merge-conflict - - id: end-of-file-fixer - - id: trailing-whitespace - - id: debug-statements - - id: detect-private-key - - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "2.7.3" - hooks: - - id: editorconfig-checker - alias: ec - args: - - -disable-indent-size - - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: "v0.1.8" - hooks: - - id: ruff - - repo: https://github.com/psf/black - rev: "23.12.0" - hooks: - - id: black - - repo: https://github.com/asottile/blacken-docs - rev: "1.16.0" - hooks: - - id: blacken-docs - additional_dependencies: ["black==23.12.0"] - - repo: https://github.com/sirosen/check-jsonschema - rev: "0.27.3" - hooks: - - id: check-github-workflows - - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.1.0" - hooks: - - id: prettier - alias: format-markdown - types: [markdown] - args: - - --parser=markdown - - --print-width=88 - - --prose-wrap=always - - # TODO: This does not work with VCS versioning. - # - repo: https://github.com/mgedmin/check-manifest - # rev: "0.49" - # hooks: - # - id: check-manifest - # args: ["--no-build-isolation"] - # additional_dependencies: - # - setuptools==71.1.0 - # - setuptools-scm==8.1.0 - # - wheel==0.43.0 - -exclude: | - (?x)( - /( - \.eggs - | \.git - | \.hg - | \.mypy_cache - | \.pytest_cache - | \.nox - | \.tox - | \.venv - | _build - | buck-out - | build - | dist - )/ - ) diff --git a/MANIFEST.in b/MANIFEST.in index 5d88bc8..228cd17 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,7 @@ exclude Makefile exclude .editorconfig recursive-exclude .github * +recursive-exclude .goose * recursive-exclude tests * recursive-include src py.typed exclude *.yaml diff --git a/README.md b/README.md index 099011f..6a8c07d 100644 --- a/README.md +++ b/README.md @@ -219,8 +219,7 @@ from immoney.currencies import Currency __currencies = CurrencyCollector() -class SpaceCurrency(Currency, abc.ABC): - ... +class SpaceCurrency(Currency, abc.ABC): ... class MoonCoinType(SpaceCurrency): @@ -260,6 +259,7 @@ Pydantic model fields. >>> from immoney.currencies import USD >>> class Model(BaseModel, frozen=True): ... money: Money +... >>> print(instance.model_dump_json(indent=2)) { "money": { @@ -291,17 +291,13 @@ Now, to run the test suite, execute the following. $ pytest ``` -Static analysis and formatting is configured with [pre-commit]. +Static analysis and formatting is configured with [goose]. -[pre-commit]: https://pre-commit.com/ +[goose]: https://github.com/antonagestam/goose ```shell -# configure hooks to run when pushing -$ pre-commit install -t pre-push -# or on every commit, if you prefer -$ pre-commit install -t pre-commit # run all checks -$ pre-commit run --all-files +$ python3 -m goose run --select=all # or just a single hook -$ pre-commit run mypy --all-files +$ python3 -m goose run ruff-format --select=all ``` diff --git a/goose.yaml b/goose.yaml new file mode 100644 index 0000000..265b71c --- /dev/null +++ b/goose.yaml @@ -0,0 +1,115 @@ +environments: + - id: python + ecosystem: + language: python + version: "3.12" + dependencies: + - ruff + - pre-commit-hooks + - editorconfig-checker + - blacken-docs + - check-jsonschema + + - id: check-manifest + ecosystem: + language: python + version: "3.12" + dependencies: + - check-manifest + - setuptools==71.1.0 + - setuptools-scm==8.1.0 + - wheel==0.43.0 + + - id: node + ecosystem: + language: node + version: "21.7.1" + dependencies: + - prettier + +hooks: + - id: check-manifest + environment: check-manifest + command: check-manifest + parameterize: false + read_only: true + args: [--no-build-isolation] + + - id: prettier + environment: node + command: prettier + types: [markdown] + args: + - --write + - --ignore-unknown + - --parser=markdown + - --print-width=88 + - --prose-wrap=always + + - id: check-case-conflict + environment: python + command: check-case-conflict + read_only: true + + - id: check-merge-conflict + environment: python + command: check-merge-conflict + read_only: true + types: [text] + + - id: python-debug-statements + environment: python + command: debug-statement-hook + read_only: true + types: [ python ] + + - id: detect-private-key + environment: python + command: detect-private-key + read_only: true + types: [ text ] + + - id: end-of-file-fixer + environment: python + command: end-of-file-fixer + types: [text] + + - id: trailing-whitespace-fixer + environment: python + command: trailing-whitespace-fixer + types: [text] + + - id: editorconfig-checker + environment: python + command: ec + args: [-disable-indent-size] + types: [text] + read_only: true + + - id: ruff-check + environment: python + command: ruff + args: [check, --force-exclude, --fix] + types: [python] + + - id: ruff-format + environment: python + command: ruff + args: [format, --force-exclude] + types: [python] + + - id: blacken-docs + environment: python + command: blacken-docs + types: [markdown, python] + + - id: check-github-workflows + environment: python + command: check-jsonschema + read_only: true + args: ["--builtin-schema", "vendor.github-workflows"] + types: [yaml] + exclude: + - codecov.yml + - goose.yaml + - dependabot.yaml diff --git a/pyproject.toml b/pyproject.toml index d826da7..726ab5d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -158,3 +158,7 @@ ban-relative-imports = "parents" # destroys some cases that are designed to tests bi-directional equality. "SIM300", ] + + +[tool.check-manifest] +ignore = ["src/immoney/_version.py"] diff --git a/setup.cfg b/setup.cfg index 287ac38..5efe53e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -39,7 +39,7 @@ show_missing = True exclude_lines = pragma: no cover # ignore non-implementations - ^\s*\.\.\. + \s*\.\.\. ^\s*if TYPE_CHECKING:$ ^\s*case no_match:$ ^\s*assert_never\( diff --git a/src/immoney/_base.py b/src/immoney/_base.py index 82b6667..dae6765 100644 --- a/src/immoney/_base.py +++ b/src/immoney/_base.py @@ -121,15 +121,13 @@ def fraction( a: int, b: int, /, - ) -> SubunitFraction[Self]: - ... + ) -> SubunitFraction[Self]: ... @overload def fraction( self, subunit_value: Fraction | Decimal | int, - ) -> SubunitFraction[Self]: - ... + ) -> SubunitFraction[Self]: ... def fraction( self, @@ -190,12 +188,10 @@ class _ValueCurrencyPair(Frozen, Generic[C_co], metaclass=InstanceCache): __slots__ = ("subunits", "currency") @overload - def __init__(self, *, subunits: int, currency: C_co) -> None: - ... + def __init__(self, *, subunits: int, currency: C_co) -> None: ... @overload - def __init__(self, value: ParsableMoneyValue, currency: C_co, /) -> None: - ... + def __init__(self, value: ParsableMoneyValue, currency: C_co, /) -> None: ... def __init__( # type: ignore[misc] self, @@ -314,16 +310,13 @@ def __neg__(self: Money[C_co]) -> Overdraft[C_co] | Money[C_co]: ) @overload - def __mul__(self, other: int) -> Self | Overdraft[C_co]: - ... + def __mul__(self, other: int) -> Self | Overdraft[C_co]: ... @overload - def __mul__(self, other: Decimal) -> SubunitFraction[C_co]: - ... + def __mul__(self, other: Decimal) -> SubunitFraction[C_co]: ... @overload - def __mul__(self, other: Fraction) -> SubunitFraction[C_co]: - ... + def __mul__(self, other: Fraction) -> SubunitFraction[C_co]: ... def __mul__( self, @@ -341,16 +334,13 @@ def __mul__( return NotImplemented @overload - def __rmul__(self, other: int) -> Self | Overdraft[C_co]: - ... + def __rmul__(self, other: int) -> Self | Overdraft[C_co]: ... @overload - def __rmul__(self, other: Decimal) -> SubunitFraction[C_co]: - ... + def __rmul__(self, other: Decimal) -> SubunitFraction[C_co]: ... @overload - def __rmul__(self, other: Fraction) -> SubunitFraction[C_co]: - ... + def __rmul__(self, other: Fraction) -> SubunitFraction[C_co]: ... def __rmul__( self, @@ -390,12 +380,10 @@ def __floordiv__(self: Money[C_co], other: object) -> tuple[Money[C_co], ...]: ) @overload - def __truediv__(self, other: int) -> SubunitFraction[C_co]: - ... + def __truediv__(self, other: int) -> SubunitFraction[C_co]: ... @overload - def __truediv__(self, other: Fraction) -> SubunitFraction[C_co]: - ... + def __truediv__(self, other: Fraction) -> SubunitFraction[C_co]: ... def __truediv__(self, other: object) -> SubunitFraction[C_co]: if not isinstance(other, int | Fraction): @@ -405,12 +393,10 @@ def __truediv__(self, other: object) -> SubunitFraction[C_co]: return SubunitFraction.from_money(self, other) @overload - def __rtruediv__(self, other: int) -> SubunitFraction[C_co]: - ... + def __rtruediv__(self, other: int) -> SubunitFraction[C_co]: ... @overload - def __rtruediv__(self, other: Fraction) -> SubunitFraction[C_co]: - ... + def __rtruediv__(self, other: Fraction) -> SubunitFraction[C_co]: ... def __rtruediv__(self, other: object) -> SubunitFraction[C_co]: if not isinstance(other, int | Fraction): @@ -568,12 +554,10 @@ def __rsub__(self, other: Money[C_co] | Overdraft[C_co]) -> Self: return self.__sub__(-other) @overload - def __mul__(self, other: int) -> Self: - ... + def __mul__(self, other: int) -> Self: ... @overload - def __mul__(self, other: Fraction) -> Self: - ... + def __mul__(self, other: Fraction) -> Self: ... def __mul__(self, other: object) -> Self: if isinstance(other, int | Fraction): @@ -584,12 +568,10 @@ def __rmul__(self, other: int | Fraction) -> Self: return self.__mul__(other) @overload - def __truediv__(self, other: int) -> Self: - ... + def __truediv__(self, other: int) -> Self: ... @overload - def __truediv__(self, other: Fraction) -> Self: - ... + def __truediv__(self, other: Fraction) -> Self: ... def __truediv__(self, other: object) -> Self: if isinstance(other, int | Fraction): @@ -597,12 +579,10 @@ def __truediv__(self, other: object) -> Self: return NotImplemented @overload - def __rtruediv__(self, other: int) -> Self: - ... + def __rtruediv__(self, other: int) -> Self: ... @overload - def __rtruediv__(self, other: Fraction) -> Self: - ... + def __rtruediv__(self, other: Fraction) -> Self: ... def __rtruediv__(self, other: object) -> Self: if isinstance(other, int | Fraction): @@ -740,12 +720,10 @@ def __le__(self: Overdraft[C_co], other: Overdraft[C_co] | Money[C_co]) -> bool: def __add__( self: Overdraft[C_co], other: Money[C_co], - ) -> Money[C_co] | Overdraft[C_co]: - ... + ) -> Money[C_co] | Overdraft[C_co]: ... @overload - def __add__(self: Overdraft[C_co], other: Overdraft[C_co]) -> Overdraft[C_co]: - ... + def __add__(self: Overdraft[C_co], other: Overdraft[C_co]) -> Overdraft[C_co]: ... def __add__(self: Overdraft[C_co], other: object) -> Money[C_co] | Overdraft[C_co]: if isinstance(other, Overdraft) and self.currency == other.currency: @@ -761,15 +739,13 @@ def __radd__( return self.__add__(other) @overload - def __sub__(self: Overdraft[C_co], other: Money[C_co]) -> Overdraft[C_co]: - ... + def __sub__(self: Overdraft[C_co], other: Money[C_co]) -> Overdraft[C_co]: ... @overload def __sub__( self: Overdraft[C_co], other: Overdraft[C_co], - ) -> Money[C_co] | Overdraft[C_co]: - ... + ) -> Money[C_co] | Overdraft[C_co]: ... def __sub__( self: Overdraft[C_co], @@ -808,16 +784,13 @@ def __pos__(self: Overdraft[C_co]) -> Overdraft[C_co]: return self @overload - def __mul__(self, other: int) -> Money[C_co] | Overdraft[C_co]: - ... + def __mul__(self, other: int) -> Money[C_co] | Overdraft[C_co]: ... @overload - def __mul__(self, other: Decimal) -> SubunitFraction[C_co]: - ... + def __mul__(self, other: Decimal) -> SubunitFraction[C_co]: ... @overload - def __mul__(self, other: Fraction) -> SubunitFraction[C_co]: - ... + def __mul__(self, other: Fraction) -> SubunitFraction[C_co]: ... def __mul__( self, @@ -832,12 +805,10 @@ def __mul__( return NotImplemented @overload - def __rmul__(self, other: int) -> Money[C_co] | Self: - ... + def __rmul__(self, other: int) -> Money[C_co] | Self: ... @overload - def __rmul__(self, other: Decimal | Fraction) -> SubunitFraction[C_co]: - ... + def __rmul__(self, other: Decimal | Fraction) -> SubunitFraction[C_co]: ... def __rmul__( self, @@ -876,12 +847,10 @@ def __floordiv__(self, other: object) -> tuple[Self | Money[C_co], ...]: ) @overload - def __truediv__(self, other: int) -> SubunitFraction[C_co]: - ... + def __truediv__(self, other: int) -> SubunitFraction[C_co]: ... @overload - def __truediv__(self, other: Fraction) -> SubunitFraction[C_co]: - ... + def __truediv__(self, other: Fraction) -> SubunitFraction[C_co]: ... def __truediv__(self, other: object) -> SubunitFraction[C_co]: if not isinstance(other, int | Fraction): @@ -891,12 +860,10 @@ def __truediv__(self, other: object) -> SubunitFraction[C_co]: return SubunitFraction.from_overdraft(self, other) @overload - def __rtruediv__(self, other: int) -> SubunitFraction[C_co]: - ... + def __rtruediv__(self, other: int) -> SubunitFraction[C_co]: ... @overload - def __rtruediv__(self, other: Fraction) -> SubunitFraction[C_co]: - ... + def __rtruediv__(self, other: Fraction) -> SubunitFraction[C_co]: ... def __rtruediv__(self, other: object) -> SubunitFraction[C_co]: if not isinstance(other, int | Fraction): diff --git a/src/immoney/_cache.py b/src/immoney/_cache.py index 3eaae33..45a7fc4 100644 --- a/src/immoney/_cache.py +++ b/src/immoney/_cache.py @@ -17,7 +17,7 @@ class InstanceCache(type): # lru_cache has a default bound, so while this does consume memory, it's a trivial # amount, and worth it. - @lru_cache # noqa: B019 + @lru_cache def __instantiate(cls, *args: object) -> object: return super().__call__(*args) diff --git a/src/immoney/_pydantic.py b/src/immoney/_pydantic.py index 6b65b17..05d65f4 100644 --- a/src/immoney/_pydantic.py +++ b/src/immoney/_pydantic.py @@ -73,27 +73,23 @@ def or_is_instance( class GenericCurrencyAdapter(Protocol[T_contra, U_co]): @staticmethod @abc.abstractmethod - def serialize(value: T_contra, *args: object) -> U_co: - ... + def serialize(value: T_contra, *args: object) -> U_co: ... @staticmethod @abc.abstractmethod - def schema(currency_schema: core_schema.CoreSchema) -> core_schema.CoreSchema: - ... + def schema(currency_schema: core_schema.CoreSchema) -> core_schema.CoreSchema: ... @staticmethod @abc.abstractmethod def validator_from_registry( registry: CurrencyRegistry[Currency], - ) -> core_schema.WithInfoValidatorFunction: - ... + ) -> core_schema.WithInfoValidatorFunction: ... @staticmethod @abc.abstractmethod def validator_from_currency( currency: Currency, - ) -> core_schema.WithInfoValidatorFunction: - ... + ) -> core_schema.WithInfoValidatorFunction: ... class MoneyAdapter(GenericCurrencyAdapter[Money[Currency], MoneyDict]): diff --git a/src/immoney/errors.py b/src/immoney/errors.py index 5b0d09e..a60ab53 100644 --- a/src/immoney/errors.py +++ b/src/immoney/errors.py @@ -1,22 +1,16 @@ -class ImmoneyError(Exception): - ... +class ImmoneyError(Exception): ... -class ParseError(ImmoneyError, ValueError): - ... +class ParseError(ImmoneyError, ValueError): ... -class InvalidOverdraftValue(ParseError): - ... +class InvalidOverdraftValue(ParseError): ... -class FrozenInstanceError(ImmoneyError, AttributeError): - ... +class FrozenInstanceError(ImmoneyError, AttributeError): ... -class InvalidSubunit(ImmoneyError, ValueError): - ... +class InvalidSubunit(ImmoneyError, ValueError): ... -class DivisionByZero(ImmoneyError, ZeroDivisionError): - ... +class DivisionByZero(ImmoneyError, ZeroDivisionError): ... diff --git a/tests/test_initial.py b/tests/test_initial.py index bf10b2d..df9f2c6 100644 --- a/tests/test_initial.py +++ b/tests/test_initial.py @@ -4,6 +4,7 @@ since then, and can be removed. Meaning that they are now duplicating other better written tests in the suite. """ + from decimal import Decimal from fractions import Fraction