diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index 424e1249..5bf1561d 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -24,10 +24,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 + - name: Set up Python 3.14 uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: '3.14' #---------------------------------------------- # ----- install & configure poetry ----- diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index ad8cfdb1..00000000 --- a/poetry.lock +++ /dev/null @@ -1,1616 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. - -[[package]] -name = "annotated-types" -version = "0.7.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, -] - -[[package]] -name = "asttokens" -version = "2.4.1" -description = "Annotate AST trees with source code positions" -optional = false -python-versions = "*" -files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, -] - -[package.dependencies] -six = ">=1.12.0" - -[package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] - -[[package]] -name = "backports-tarfile" -version = "1.2.0" -description = "Backport of CPython tarfile module" -optional = false -python-versions = ">=3.8" -files = [ - {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, - {file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["jaraco.test", "pytest (!=8.0.*)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)"] - -[[package]] -name = "beet" -version = "0.112.0" -description = "The Minecraft pack development kit" -optional = false -python-versions = "<4.0,>=3.10" -files = [ - {file = "beet-0.112.0-py3-none-any.whl", hash = "sha256:3768c0f619ae8df1444067a0b869ea93b38d667dfb6b895e237e081971e94e36"}, - {file = "beet-0.112.0.tar.gz", hash = "sha256:9732467adf7f33bc99077f58209dd41bd6e6fa18e13f3ae900f0be5994fcc86f"}, -] - -[package.dependencies] -click = ">=8.1.7,<9.0.0" -click-help-colors = ">=0.9.2,<0.10.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -Jinja2 = ">=3.1.2,<4.0.0" -nbtlib = ">=1.12.1,<2.0.0" -pathspec = ">=0.11.2,<0.12.0" -pydantic = ">=2.5.2,<3.0.0" -PyYAML = ">=6.0.1,<7.0.0" -toml = ">=0.10.2,<0.11.0" -typing-extensions = ">=4.8.0,<5.0.0" - -[package.extras] -image = ["Pillow"] - -[[package]] -name = "black" -version = "22.12.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "bolt" -version = "0.49.1" -description = "Supercharge Minecraft commands with Python" -optional = false -python-versions = "<4.0,>=3.10" -files = [ - {file = "bolt-0.49.1-py3-none-any.whl", hash = "sha256:912496abb4ed2593db1e44ec6655685d63d0003ee7218a2740ce91ad8ad9e36e"}, - {file = "bolt-0.49.1.tar.gz", hash = "sha256:40cd165e6eb438161cc8cd91fbebc90672169ee7114a3a79d3351e127a08dec7"}, -] - -[package.dependencies] -beet = ">=0.108.0" -mecha = ">=0.95.0" - -[[package]] -name = "bolt-control-flow" -version = "0.3.0" -description = "Utilities and helpers for overriding control flow behaviour in Bolt" -optional = false -python-versions = ">=3.10,<4.0" -files = [ - {file = "bolt_control_flow-0.3.0-py3-none-any.whl", hash = "sha256:de2a6a0b9cd3a4f21466c07d22277ef07995484a2f7caded137ace4a4b5944f7"}, - {file = "bolt_control_flow-0.3.0.tar.gz", hash = "sha256:570fdac25e590d238ae02d5d286855cbece6880da20a9214ce90a7f32b6664a3"}, -] - -[package.dependencies] -beet = ">=0.97.0" -bolt = ">=0.41.1" -mecha = ">=0.83.0" - -[[package]] -name = "bolt-expressions" -version = "0.17.0" -description = "Provides pandas-like expressions capabilities to the bolt extension of mecha" -optional = false -python-versions = "<4.0,>=3.10" -files = [ - {file = "bolt_expressions-0.17.0-py3-none-any.whl", hash = "sha256:367e1976418404866b07a809bdff9c06608314f9f6895eaf3dcd2fe00f69750f"}, - {file = "bolt_expressions-0.17.0.tar.gz", hash = "sha256:f9895d9c493822780c794d5c68cf80c5fd3de0671ab8e5e0865654165349ee42"}, -] - -[package.dependencies] -beet = ">=0.55.0" -bolt = ">=0.38" -bolt-control-flow = ">=0.2.0" -frozendict = ">=2.4.0,<3.0.0" -mecha = ">=0.59.2" -nbtlib = "1.12.1" - -[[package]] -name = "certifi" -version = "2024.8.30" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, -] - -[[package]] -name = "cffi" -version = "1.17.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, - {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, - {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, - {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, - {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, - {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, - {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, - {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, - {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, - {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, - {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, - {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, - {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, - {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, - {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, - {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "click-help-colors" -version = "0.9.4" -description = "Colorization of help messages in Click" -optional = false -python-versions = "*" -files = [ - {file = "click-help-colors-0.9.4.tar.gz", hash = "sha256:f4cabe52cf550299b8888f4f2ee4c5f359ac27e33bcfe4d61db47785a5cc936c"}, - {file = "click_help_colors-0.9.4-py3-none-any.whl", hash = "sha256:b33c5803eeaeb084393b1ab5899dc5476c7196b87a18713045afe76f840b42db"}, -] - -[package.dependencies] -click = ">=7.0,<9" - -[package.extras] -dev = ["mypy", "pytest"] - -[[package]] -name = "click-log" -version = "0.4.0" -description = "Logging integration for Click" -optional = false -python-versions = "*" -files = [ - {file = "click-log-0.4.0.tar.gz", hash = "sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975"}, - {file = "click_log-0.4.0-py2.py3-none-any.whl", hash = "sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756"}, -] - -[package.dependencies] -click = "*" - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "cryptography" -version = "43.0.1" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = ">=3.7" -files = [ - {file = "cryptography-43.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d"}, - {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062"}, - {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962"}, - {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277"}, - {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a"}, - {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042"}, - {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494"}, - {file = "cryptography-43.0.1-cp37-abi3-win32.whl", hash = "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2"}, - {file = "cryptography-43.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d"}, - {file = "cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d"}, - {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806"}, - {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85"}, - {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c"}, - {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1"}, - {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa"}, - {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4"}, - {file = "cryptography-43.0.1-cp39-abi3-win32.whl", hash = "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47"}, - {file = "cryptography-43.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb"}, - {file = "cryptography-43.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034"}, - {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d"}, - {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289"}, - {file = "cryptography-43.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84"}, - {file = "cryptography-43.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365"}, - {file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96"}, - {file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172"}, - {file = "cryptography-43.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2"}, - {file = "cryptography-43.0.1.tar.gz", hash = "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d"}, -] - -[package.dependencies] -cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] -nox = ["nox"] -pep8test = ["check-sdist", "click", "mypy", "ruff"] -sdist = ["build"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.1)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] -test-randomorder = ["pytest-randomly"] - -[[package]] -name = "devtools" -version = "0.9.0" -description = "Python's missing debug print command, and more." -optional = false -python-versions = ">=3.7" -files = [ - {file = "devtools-0.9.0-py3-none-any.whl", hash = "sha256:689cf4e7c75024237c42093ba19f4fa9cf15980269f02463aeab4d97d4b0a215"}, - {file = "devtools-0.9.0.tar.gz", hash = "sha256:86ede6e0273e023db766344d14098228785b48a80f31716f28e8b9453d52fa1e"}, -] - -[package.dependencies] -asttokens = ">=2.0.0,<3.0.0" -executing = ">=0.8.0,<1.0.0" - -[package.extras] -pygments = ["pygments (>=2.2.0)"] - -[[package]] -name = "docutils" -version = "0.21.2" -description = "Docutils -- Python Documentation Utilities" -optional = false -python-versions = ">=3.9" -files = [ - {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, - {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, -] - -[[package]] -name = "dotty-dict" -version = "1.3.1" -description = "Dictionary wrapper for quick access to deeply nested keys." -optional = false -python-versions = ">=3.5,<4.0" -files = [ - {file = "dotty_dict-1.3.1-py3-none-any.whl", hash = "sha256:5022d234d9922f13aa711b4950372a06a6d64cb6d6db9ba43d0ba133ebfce31f"}, - {file = "dotty_dict-1.3.1.tar.gz", hash = "sha256:4b016e03b8ae265539757a53eba24b9bfda506fb94fbce0bee843c6f05541a15"}, -] - -[[package]] -name = "executing" -version = "0.10.0" -description = "Get the currently executing AST node of a frame, and other information" -optional = false -python-versions = "*" -files = [ - {file = "executing-0.10.0-py2.py3-none-any.whl", hash = "sha256:9c745f80cda11eb22b62cbecf21156491a794eb56ab06f9d286a44e62822b24e"}, - {file = "executing-0.10.0.tar.gz", hash = "sha256:d1cd87c2e371e9966261410c5b3769d6df2f9e4a79a83eebd2662dd3388f9833"}, -] - -[[package]] -name = "frozendict" -version = "2.4.4" -description = "A simple immutable dictionary" -optional = false -python-versions = ">=3.6" -files = [ - {file = "frozendict-2.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4a59578d47b3949437519b5c39a016a6116b9e787bb19289e333faae81462e59"}, - {file = "frozendict-2.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12a342e439aef28ccec533f0253ea53d75fe9102bd6ea928ff530e76eac38906"}, - {file = "frozendict-2.4.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f79c26dff10ce11dad3b3627c89bb2e87b9dd5958c2b24325f16a23019b8b94"}, - {file = "frozendict-2.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2bd009cf4fc47972838a91e9b83654dc9a095dc4f2bb3a37c3f3124c8a364543"}, - {file = "frozendict-2.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:87ebcde21565a14fe039672c25550060d6f6d88cf1f339beac094c3b10004eb0"}, - {file = "frozendict-2.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:fefeb700bc7eb8b4c2dc48704e4221860d254c8989fb53488540bc44e44a1ac2"}, - {file = "frozendict-2.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:4297d694eb600efa429769125a6f910ec02b85606f22f178bafbee309e7d3ec7"}, - {file = "frozendict-2.4.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:812ab17522ba13637826e65454115a914c2da538356e85f43ecea069813e4b33"}, - {file = "frozendict-2.4.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fee9420475bb6ff357000092aa9990c2f6182b2bab15764330f4ad7de2eae49"}, - {file = "frozendict-2.4.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3148062675536724502c6344d7c485dd4667fdf7980ca9bd05e338ccc0c4471e"}, - {file = "frozendict-2.4.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:78c94991944dd33c5376f720228e5b252ee67faf3bac50ef381adc9e51e90d9d"}, - {file = "frozendict-2.4.4-cp36-cp36m-win_amd64.whl", hash = "sha256:1697793b5f62b416c0fc1d94638ec91ed3aa4ab277f6affa3a95216ecb3af170"}, - {file = "frozendict-2.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:199a4d32194f3afed6258de7e317054155bc9519252b568d9cfffde7e4d834e5"}, - {file = "frozendict-2.4.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85375ec6e979e6373bffb4f54576a68bf7497c350861d20686ccae38aab69c0a"}, - {file = "frozendict-2.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2d8536e068d6bf281f23fa835ac07747fb0f8851879dd189e9709f9567408b4d"}, - {file = "frozendict-2.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:259528ba6b56fa051bc996f1c4d8b57e30d6dd3bc2f27441891b04babc4b5e73"}, - {file = "frozendict-2.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:07c3a5dee8bbb84cba770e273cdbf2c87c8e035903af8f781292d72583416801"}, - {file = "frozendict-2.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6874fec816b37b6eb5795b00e0574cba261bf59723e2de607a195d5edaff0786"}, - {file = "frozendict-2.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8f92425686323a950337da4b75b4c17a3327b831df8c881df24038d560640d4"}, - {file = "frozendict-2.4.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d58d9a8d9e49662c6dafbea5e641f97decdb3d6ccd76e55e79818415362ba25"}, - {file = "frozendict-2.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:93a7b19afb429cbf99d56faf436b45ef2fa8fe9aca89c49eb1610c3bd85f1760"}, - {file = "frozendict-2.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2b70b431e3a72d410a2cdf1497b3aba2f553635e0c0f657ce311d841bf8273b6"}, - {file = "frozendict-2.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:e1b941132d79ce72d562a13341d38fc217bc1ee24d8c35a20d754e79ff99e038"}, - {file = "frozendict-2.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc2228874eacae390e63fd4f2bb513b3144066a977dc192163c9f6c7f6de6474"}, - {file = "frozendict-2.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63aa49f1919af7d45fb8fd5dec4c0859bc09f46880bd6297c79bb2db2969b63d"}, - {file = "frozendict-2.4.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6bf9260018d653f3cab9bd147bd8592bf98a5c6e338be0491ced3c196c034a3"}, - {file = "frozendict-2.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6eb716e6a6d693c03b1d53280a1947716129f5ef9bcdd061db5c17dea44b80fe"}, - {file = "frozendict-2.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d13b4310db337f4d2103867c5a05090b22bc4d50ca842093779ef541ea9c9eea"}, - {file = "frozendict-2.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:b3b967d5065872e27b06f785a80c0ed0a45d1f7c9b85223da05358e734d858ca"}, - {file = "frozendict-2.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:4ae8d05c8d0b6134bfb6bfb369d5fa0c4df21eabb5ca7f645af95fdc6689678e"}, - {file = "frozendict-2.4.4-py311-none-any.whl", hash = "sha256:705efca8d74d3facbb6ace80ab3afdd28eb8a237bfb4063ed89996b024bc443d"}, - {file = "frozendict-2.4.4-py312-none-any.whl", hash = "sha256:d9647563e76adb05b7cde2172403123380871360a114f546b4ae1704510801e5"}, - {file = "frozendict-2.4.4.tar.gz", hash = "sha256:3f7c031b26e4ee6a3f786ceb5e3abf1181c4ade92dce1f847da26ea2c96008c7"}, -] - -[[package]] -name = "gitdb" -version = "4.0.11" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, - {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "github-action-utils" -version = "1.1.0" -description = "Collection of python functions that can be used to run GitHub Action Workflow Commands" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "github-action-utils-1.1.0.tar.gz", hash = "sha256:8aa40d90b89d814004160bb7e90b42cc07b55f41f66e4a4a32766d26c9ca3d61"}, - {file = "github_action_utils-1.1.0-py2.py3-none-any.whl", hash = "sha256:bc84bac22e8a25ebe86370b08ff2c174960e468e899ffd313cb09d19629acefb"}, -] - -[[package]] -name = "gitpython" -version = "3.1.43" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, - {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[package.extras] -doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] -test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] - -[[package]] -name = "idna" -version = "3.8" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, - {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, -] - -[[package]] -name = "importlib-metadata" -version = "8.4.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, - {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] - -[[package]] -name = "invoke" -version = "2.2.0" -description = "Pythonic task execution" -optional = false -python-versions = ">=3.6" -files = [ - {file = "invoke-2.2.0-py3-none-any.whl", hash = "sha256:6ea924cc53d4f78e3d98bc436b08069a03077e6f85ad1ddaa8a116d7dad15820"}, - {file = "invoke-2.2.0.tar.gz", hash = "sha256:ee6cbb101af1a859c7fe84f2a264c059020b0cb7fe3535f9424300ab568f6bd5"}, -] - -[[package]] -name = "isort" -version = "5.13.2" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, - {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, -] - -[package.extras] -colors = ["colorama (>=0.4.6)"] - -[[package]] -name = "jaraco-classes" -version = "3.4.0" -description = "Utility functions for Python class constructs" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"}, - {file = "jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd"}, -] - -[package.dependencies] -more-itertools = "*" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] - -[[package]] -name = "jaraco-context" -version = "6.0.1" -description = "Useful decorators and context managers" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jaraco.context-6.0.1-py3-none-any.whl", hash = "sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4"}, - {file = "jaraco_context-6.0.1.tar.gz", hash = "sha256:9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3"}, -] - -[package.dependencies] -"backports.tarfile" = {version = "*", markers = "python_version < \"3.12\""} - -[package.extras] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -test = ["portend", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] - -[[package]] -name = "jaraco-functools" -version = "4.0.2" -description = "Functools like those found in stdlib" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jaraco.functools-4.0.2-py3-none-any.whl", hash = "sha256:c9d16a3ed4ccb5a889ad8e0b7a343401ee5b2a71cee6ed192d3f68bc351e94e3"}, - {file = "jaraco_functools-4.0.2.tar.gz", hash = "sha256:3460c74cd0d32bf82b9576bbb3527c4364d5b27a21f5158a62aed6c4b42e23f5"}, -] - -[package.dependencies] -more-itertools = "*" - -[package.extras] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -test = ["jaraco.classes", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] - -[[package]] -name = "jeepney" -version = "0.8.0" -description = "Low-level, pure Python DBus protocol wrapper." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, - {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, -] - -[package.extras] -test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] -trio = ["async_generator", "trio"] - -[[package]] -name = "jinja2" -version = "3.1.4" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "keyring" -version = "25.3.0" -description = "Store and access your passwords safely." -optional = false -python-versions = ">=3.8" -files = [ - {file = "keyring-25.3.0-py3-none-any.whl", hash = "sha256:8d963da00ccdf06e356acd9bf3b743208878751032d8599c6cc89eb51310ffae"}, - {file = "keyring-25.3.0.tar.gz", hash = "sha256:8d85a1ea5d6db8515b59e1c5d1d1678b03cf7fc8b8dcfb1651e8c4a524eb42ef"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""} -"jaraco.classes" = "*" -"jaraco.context" = "*" -"jaraco.functools" = "*" -jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} -pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} -SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} - -[package.extras] -completion = ["shtab (>=1.1.0)"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -test = ["pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "2.1.5" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mecha" -version = "0.95.2" -description = "A powerful Minecraft command library" -optional = false -python-versions = "<4.0,>=3.10" -files = [ - {file = "mecha-0.95.2-py3-none-any.whl", hash = "sha256:8abbbc6eee9871d622bf9c90cd6c3217b8325966d546bb0ca229d1eb7b963eff"}, - {file = "mecha-0.95.2.tar.gz", hash = "sha256:06ee6f80f9dc091617fdeef7c03ffbbf482d5ec07cceab6e9f31a72a4e8a1ed8"}, -] - -[package.dependencies] -beet = ">=0.108.0" -tokenstream = ">=1.7.0,<2.0.0" - -[[package]] -name = "more-itertools" -version = "10.5.0" -description = "More routines for operating on iterables, beyond itertools" -optional = false -python-versions = ">=3.8" -files = [ - {file = "more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6"}, - {file = "more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef"}, -] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nbtlib" -version = "1.12.1" -description = "A python package to read and edit nbt data" -optional = false -python-versions = ">=3.8,<4.0" -files = [ - {file = "nbtlib-1.12.1-py3-none-any.whl", hash = "sha256:55e6811aa4e4bfe9000cbe026f1fe540ebc231c8a3f3558d7819c6c7274001c6"}, - {file = "nbtlib-1.12.1.tar.gz", hash = "sha256:1642e34ace7131718c21354562a183757613f3554445e6fcf8effb155b6591f5"}, -] - -[package.dependencies] -numpy = "*" - -[[package]] -name = "nh3" -version = "0.2.18" -description = "Python bindings to the ammonia HTML sanitization library." -optional = false -python-versions = "*" -files = [ - {file = "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86"}, - {file = "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6955369e4d9f48f41e3f238a9e60f9410645db7e07435e62c6a9ea6135a4907f"}, - {file = "nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe"}, - {file = "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a"}, - {file = "nh3-0.2.18-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:c8b3a1cebcba9b3669ed1a84cc65bf005728d2f0bc1ed2a6594a992e817f3a50"}, - {file = "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204"}, - {file = "nh3-0.2.18-cp37-abi3-win32.whl", hash = "sha256:a7f1b5b2c15866f2db413a3649a8fe4fd7b428ae58be2c0f6bca5eefd53ca2be"}, - {file = "nh3-0.2.18-cp37-abi3-win_amd64.whl", hash = "sha256:8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844"}, - {file = "nh3-0.2.18.tar.gz", hash = "sha256:94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4"}, -] - -[[package]] -name = "numpy" -version = "2.1.1" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.10" -files = [ - {file = "numpy-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab"}, - {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7"}, - {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6"}, - {file = "numpy-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0"}, - {file = "numpy-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647"}, - {file = "numpy-2.1.1-cp310-cp310-win32.whl", hash = "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728"}, - {file = "numpy-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95"}, - {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca"}, - {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf"}, - {file = "numpy-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e"}, - {file = "numpy-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2"}, - {file = "numpy-2.1.1-cp311-cp311-win32.whl", hash = "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d"}, - {file = "numpy-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521"}, - {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"}, - {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201"}, - {file = "numpy-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a"}, - {file = "numpy-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313"}, - {file = "numpy-2.1.1-cp312-cp312-win32.whl", hash = "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed"}, - {file = "numpy-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0"}, - {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb"}, - {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df"}, - {file = "numpy-2.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78"}, - {file = "numpy-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556"}, - {file = "numpy-2.1.1-cp313-cp313-win32.whl", hash = "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b"}, - {file = "numpy-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468"}, - {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef"}, - {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f"}, - {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c"}, - {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39"}, - {file = "numpy-2.1.1.tar.gz", hash = "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd"}, -] - -[[package]] -name = "packaging" -version = "24.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, -] - -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, -] - -[[package]] -name = "pkginfo" -version = "1.11.1" -description = "Query metadata from sdists / bdists / installed packages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pkginfo-1.11.1-py3-none-any.whl", hash = "sha256:bfa76a714fdfc18a045fcd684dbfc3816b603d9d075febef17cb6582bea29573"}, - {file = "pkginfo-1.11.1.tar.gz", hash = "sha256:2e0dca1cf4c8e39644eed32408ea9966ee15e0d324c62ba899a393b3c6b467aa"}, -] - -[package.extras] -testing = ["pytest", "pytest-cov", "wheel"] - -[[package]] -name = "platformdirs" -version = "4.3.2" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.3.2-py3-none-any.whl", hash = "sha256:eb1c8582560b34ed4ba105009a4badf7f6f85768b30126f351328507b2beb617"}, - {file = "platformdirs-4.3.2.tar.gz", hash = "sha256:9e5e27a08aa095dd127b9f2e764d74254f482fef22b0970773bfba79d091ab8c"}, -] - -[package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.11.2)"] - -[[package]] -name = "pycparser" -version = "2.22" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, - {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, -] - -[[package]] -name = "pydantic" -version = "2.9.0" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic-2.9.0-py3-none-any.whl", hash = "sha256:f66a7073abd93214a20c5f7b32d56843137a7a2e70d02111f3be287035c45370"}, - {file = "pydantic-2.9.0.tar.gz", hash = "sha256:c7a8a9fdf7d100afa49647eae340e2d23efa382466a8d177efcd1381e9be5598"}, -] - -[package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.23.2" -typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, -] -tzdata = {version = "*", markers = "python_version >= \"3.9\""} - -[package.extras] -email = ["email-validator (>=2.0.0)"] - -[[package]] -name = "pydantic-core" -version = "2.23.2" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic_core-2.23.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7d0324a35ab436c9d768753cbc3c47a865a2cbc0757066cb864747baa61f6ece"}, - {file = "pydantic_core-2.23.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:276ae78153a94b664e700ac362587c73b84399bd1145e135287513442e7dfbc7"}, - {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:964c7aa318da542cdcc60d4a648377ffe1a2ef0eb1e996026c7f74507b720a78"}, - {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1cf842265a3a820ebc6388b963ead065f5ce8f2068ac4e1c713ef77a67b71f7c"}, - {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae90b9e50fe1bd115b24785e962b51130340408156d34d67b5f8f3fa6540938e"}, - {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ae65fdfb8a841556b52935dfd4c3f79132dc5253b12c0061b96415208f4d622"}, - {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c8aa40f6ca803f95b1c1c5aeaee6237b9e879e4dfb46ad713229a63651a95fb"}, - {file = "pydantic_core-2.23.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c53100c8ee5a1e102766abde2158077d8c374bee0639201f11d3032e3555dfbc"}, - {file = "pydantic_core-2.23.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d6b9dd6aa03c812017411734e496c44fef29b43dba1e3dd1fa7361bbacfc1354"}, - {file = "pydantic_core-2.23.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b18cf68255a476b927910c6873d9ed00da692bb293c5b10b282bd48a0afe3ae2"}, - {file = "pydantic_core-2.23.2-cp310-none-win32.whl", hash = "sha256:e460475719721d59cd54a350c1f71c797c763212c836bf48585478c5514d2854"}, - {file = "pydantic_core-2.23.2-cp310-none-win_amd64.whl", hash = "sha256:5f3cf3721eaf8741cffaf092487f1ca80831202ce91672776b02b875580e174a"}, - {file = "pydantic_core-2.23.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7ce8e26b86a91e305858e018afc7a6e932f17428b1eaa60154bd1f7ee888b5f8"}, - {file = "pydantic_core-2.23.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e9b24cca4037a561422bf5dc52b38d390fb61f7bfff64053ce1b72f6938e6b2"}, - {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:753294d42fb072aa1775bfe1a2ba1012427376718fa4c72de52005a3d2a22178"}, - {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:257d6a410a0d8aeb50b4283dea39bb79b14303e0fab0f2b9d617701331ed1515"}, - {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8319e0bd6a7b45ad76166cc3d5d6a36c97d0c82a196f478c3ee5346566eebfd"}, - {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a05c0240f6c711eb381ac392de987ee974fa9336071fb697768dfdb151345ce"}, - {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d5b0ff3218858859910295df6953d7bafac3a48d5cd18f4e3ed9999efd2245f"}, - {file = "pydantic_core-2.23.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:96ef39add33ff58cd4c112cbac076726b96b98bb8f1e7f7595288dcfb2f10b57"}, - {file = "pydantic_core-2.23.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0102e49ac7d2df3379ef8d658d3bc59d3d769b0bdb17da189b75efa861fc07b4"}, - {file = "pydantic_core-2.23.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a6612c2a844043e4d10a8324c54cdff0042c558eef30bd705770793d70b224aa"}, - {file = "pydantic_core-2.23.2-cp311-none-win32.whl", hash = "sha256:caffda619099cfd4f63d48462f6aadbecee3ad9603b4b88b60cb821c1b258576"}, - {file = "pydantic_core-2.23.2-cp311-none-win_amd64.whl", hash = "sha256:6f80fba4af0cb1d2344869d56430e304a51396b70d46b91a55ed4959993c0589"}, - {file = "pydantic_core-2.23.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c83c64d05ffbbe12d4e8498ab72bdb05bcc1026340a4a597dc647a13c1605ec"}, - {file = "pydantic_core-2.23.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6294907eaaccf71c076abdd1c7954e272efa39bb043161b4b8aa1cd76a16ce43"}, - {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a801c5e1e13272e0909c520708122496647d1279d252c9e6e07dac216accc41"}, - {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc0c316fba3ce72ac3ab7902a888b9dc4979162d320823679da270c2d9ad0cad"}, - {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b06c5d4e8701ac2ba99a2ef835e4e1b187d41095a9c619c5b185c9068ed2a49"}, - {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82764c0bd697159fe9947ad59b6db6d7329e88505c8f98990eb07e84cc0a5d81"}, - {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b1a195efd347ede8bcf723e932300292eb13a9d2a3c1f84eb8f37cbbc905b7f"}, - {file = "pydantic_core-2.23.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7efb12e5071ad8d5b547487bdad489fbd4a5a35a0fc36a1941517a6ad7f23e0"}, - {file = "pydantic_core-2.23.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5dd0ec5f514ed40e49bf961d49cf1bc2c72e9b50f29a163b2cc9030c6742aa73"}, - {file = "pydantic_core-2.23.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:820f6ee5c06bc868335e3b6e42d7ef41f50dfb3ea32fbd523ab679d10d8741c0"}, - {file = "pydantic_core-2.23.2-cp312-none-win32.whl", hash = "sha256:3713dc093d5048bfaedbba7a8dbc53e74c44a140d45ede020dc347dda18daf3f"}, - {file = "pydantic_core-2.23.2-cp312-none-win_amd64.whl", hash = "sha256:e1895e949f8849bc2757c0dbac28422a04be031204df46a56ab34bcf98507342"}, - {file = "pydantic_core-2.23.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:da43cbe593e3c87d07108d0ebd73771dc414488f1f91ed2e204b0370b94b37ac"}, - {file = "pydantic_core-2.23.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:64d094ea1aa97c6ded4748d40886076a931a8bf6f61b6e43e4a1041769c39dd2"}, - {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:084414ffe9a85a52940b49631321d636dadf3576c30259607b75516d131fecd0"}, - {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:043ef8469f72609c4c3a5e06a07a1f713d53df4d53112c6d49207c0bd3c3bd9b"}, - {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3649bd3ae6a8ebea7dc381afb7f3c6db237fc7cebd05c8ac36ca8a4187b03b30"}, - {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6db09153d8438425e98cdc9a289c5fade04a5d2128faff8f227c459da21b9703"}, - {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5668b3173bb0b2e65020b60d83f5910a7224027232c9f5dc05a71a1deac9f960"}, - {file = "pydantic_core-2.23.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c7b81beaf7c7ebde978377dc53679c6cba0e946426fc7ade54251dfe24a7604"}, - {file = "pydantic_core-2.23.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:ae579143826c6f05a361d9546446c432a165ecf1c0b720bbfd81152645cb897d"}, - {file = "pydantic_core-2.23.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:19f1352fe4b248cae22a89268720fc74e83f008057a652894f08fa931e77dced"}, - {file = "pydantic_core-2.23.2-cp313-none-win32.whl", hash = "sha256:e1a79ad49f346aa1a2921f31e8dbbab4d64484823e813a002679eaa46cba39e1"}, - {file = "pydantic_core-2.23.2-cp313-none-win_amd64.whl", hash = "sha256:582871902e1902b3c8e9b2c347f32a792a07094110c1bca6c2ea89b90150caac"}, - {file = "pydantic_core-2.23.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:743e5811b0c377eb830150d675b0847a74a44d4ad5ab8845923d5b3a756d8100"}, - {file = "pydantic_core-2.23.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6650a7bbe17a2717167e3e23c186849bae5cef35d38949549f1c116031b2b3aa"}, - {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56e6a12ec8d7679f41b3750ffa426d22b44ef97be226a9bab00a03365f217b2b"}, - {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810ca06cca91de9107718dc83d9ac4d2e86efd6c02cba49a190abcaf33fb0472"}, - {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:785e7f517ebb9890813d31cb5d328fa5eda825bb205065cde760b3150e4de1f7"}, - {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ef71ec876fcc4d3bbf2ae81961959e8d62f8d74a83d116668409c224012e3af"}, - {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d50ac34835c6a4a0d456b5db559b82047403c4317b3bc73b3455fefdbdc54b0a"}, - {file = "pydantic_core-2.23.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16b25a4a120a2bb7dab51b81e3d9f3cde4f9a4456566c403ed29ac81bf49744f"}, - {file = "pydantic_core-2.23.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:41ae8537ad371ec018e3c5da0eb3f3e40ee1011eb9be1da7f965357c4623c501"}, - {file = "pydantic_core-2.23.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07049ec9306ec64e955b2e7c40c8d77dd78ea89adb97a2013d0b6e055c5ee4c5"}, - {file = "pydantic_core-2.23.2-cp38-none-win32.whl", hash = "sha256:086c5db95157dc84c63ff9d96ebb8856f47ce113c86b61065a066f8efbe80acf"}, - {file = "pydantic_core-2.23.2-cp38-none-win_amd64.whl", hash = "sha256:67b6655311b00581914aba481729971b88bb8bc7996206590700a3ac85e457b8"}, - {file = "pydantic_core-2.23.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:358331e21a897151e54d58e08d0219acf98ebb14c567267a87e971f3d2a3be59"}, - {file = "pydantic_core-2.23.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c4d9f15ffe68bcd3898b0ad7233af01b15c57d91cd1667f8d868e0eacbfe3f87"}, - {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0123655fedacf035ab10c23450163c2f65a4174f2bb034b188240a6cf06bb123"}, - {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e6e3ccebdbd6e53474b0bb7ab8b88e83c0cfe91484b25e058e581348ee5a01a5"}, - {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc535cb898ef88333cf317777ecdfe0faac1c2a3187ef7eb061b6f7ecf7e6bae"}, - {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aab9e522efff3993a9e98ab14263d4e20211e62da088298089a03056980a3e69"}, - {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05b366fb8fe3d8683b11ac35fa08947d7b92be78ec64e3277d03bd7f9b7cda79"}, - {file = "pydantic_core-2.23.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7568f682c06f10f30ef643a1e8eec4afeecdafde5c4af1b574c6df079e96f96c"}, - {file = "pydantic_core-2.23.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cdd02a08205dc90238669f082747612cb3c82bd2c717adc60f9b9ecadb540f80"}, - {file = "pydantic_core-2.23.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a2ab4f410f4b886de53b6bddf5dd6f337915a29dd9f22f20f3099659536b2f6"}, - {file = "pydantic_core-2.23.2-cp39-none-win32.whl", hash = "sha256:0448b81c3dfcde439551bb04a9f41d7627f676b12701865c8a2574bcea034437"}, - {file = "pydantic_core-2.23.2-cp39-none-win_amd64.whl", hash = "sha256:4cebb9794f67266d65e7e4cbe5dcf063e29fc7b81c79dc9475bd476d9534150e"}, - {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e758d271ed0286d146cf7c04c539a5169a888dd0b57026be621547e756af55bc"}, - {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f477d26183e94eaafc60b983ab25af2a809a1b48ce4debb57b343f671b7a90b6"}, - {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da3131ef2b940b99106f29dfbc30d9505643f766704e14c5d5e504e6a480c35e"}, - {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329a721253c7e4cbd7aad4a377745fbcc0607f9d72a3cc2102dd40519be75ed2"}, - {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7706e15cdbf42f8fab1e6425247dfa98f4a6f8c63746c995d6a2017f78e619ae"}, - {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e64ffaf8f6e17ca15eb48344d86a7a741454526f3a3fa56bc493ad9d7ec63936"}, - {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dd59638025160056687d598b054b64a79183f8065eae0d3f5ca523cde9943940"}, - {file = "pydantic_core-2.23.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:12625e69b1199e94b0ae1c9a95d000484ce9f0182f9965a26572f054b1537e44"}, - {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5d813fd871b3d5c3005157622ee102e8908ad6011ec915a18bd8fde673c4360e"}, - {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1eb37f7d6a8001c0f86dc8ff2ee8d08291a536d76e49e78cda8587bb54d8b329"}, - {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce7eaf9a98680b4312b7cebcdd9352531c43db00fca586115845df388f3c465"}, - {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f087879f1ffde024dd2788a30d55acd67959dcf6c431e9d3682d1c491a0eb474"}, - {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ce883906810b4c3bd90e0ada1f9e808d9ecf1c5f0b60c6b8831d6100bcc7dd6"}, - {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a8031074a397a5925d06b590121f8339d34a5a74cfe6970f8a1124eb8b83f4ac"}, - {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:23af245b8f2f4ee9e2c99cb3f93d0e22fb5c16df3f2f643f5a8da5caff12a653"}, - {file = "pydantic_core-2.23.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c57e493a0faea1e4c38f860d6862ba6832723396c884fbf938ff5e9b224200e2"}, - {file = "pydantic_core-2.23.2.tar.gz", hash = "sha256:95d6bf449a1ac81de562d65d180af5d8c19672793c81877a2eda8fde5d08f2fd"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pygments" -version = "2.18.0" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "python-gitlab" -version = "3.15.0" -description = "Interact with GitLab API" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "python-gitlab-3.15.0.tar.gz", hash = "sha256:c9e65eb7612a9fbb8abf0339972eca7fd7a73d4da66c9b446ffe528930aff534"}, - {file = "python_gitlab-3.15.0-py3-none-any.whl", hash = "sha256:8f8d1c0d387f642eb1ac7bf5e8e0cd8b3dd49c6f34170cee3c7deb7d384611f3"}, -] - -[package.dependencies] -requests = ">=2.25.0" -requests-toolbelt = ">=0.10.1" - -[package.extras] -autocompletion = ["argcomplete (>=1.10.0,<3)"] -yaml = ["PyYaml (>=5.2)"] - -[[package]] -name = "python-semantic-release" -version = "7.34.6" -description = "Automatic Semantic Versioning for Python projects" -optional = false -python-versions = "*" -files = [ - {file = "python-semantic-release-7.34.6.tar.gz", hash = "sha256:e9b8fb788024ae9510a924136d573588415a16eeca31cc5240f2754a80a2e831"}, - {file = "python_semantic_release-7.34.6-py3-none-any.whl", hash = "sha256:7e3969ba4663d9b2087b02bf3ac140e202551377bf045c34e09bfe19753e19ab"}, -] - -[package.dependencies] -click = ">=7,<9" -click-log = ">=0.3,<1" -dotty-dict = ">=1.3.0,<2" -gitpython = ">=3.0.8,<4" -invoke = ">=1.4.1,<3" -packaging = "*" -python-gitlab = ">=2,<4" -requests = ">=2.25,<3" -semver = ">=2.10,<3" -tomlkit = ">=0.10,<1.0" -twine = ">=3,<4" -wheel = "*" - -[package.extras] -dev = ["black", "isort", "tox"] -docs = ["Jinja2 (==3.0.3)", "Sphinx (==1.8.6)"] -mypy = ["mypy", "types-requests"] -test = ["coverage (>=5,<6)", "mock (==1.3.0)", "pytest (>=7,<8)", "pytest-mock (>=2,<3)", "pytest-xdist (>=1,<2)", "responses (==0.13.3)"] - -[[package]] -name = "pywin32-ctypes" -version = "0.2.3" -description = "A (partial) reimplementation of pywin32 using ctypes/cffi" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"}, - {file = "pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, -] - -[[package]] -name = "readme-renderer" -version = "44.0" -description = "readme_renderer is a library for rendering readme descriptions for Warehouse" -optional = false -python-versions = ">=3.9" -files = [ - {file = "readme_renderer-44.0-py3-none-any.whl", hash = "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151"}, - {file = "readme_renderer-44.0.tar.gz", hash = "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1"}, -] - -[package.dependencies] -docutils = ">=0.21.2" -nh3 = ">=0.2.14" -Pygments = ">=2.5.1" - -[package.extras] -md = ["cmarkgfm (>=0.8.0)"] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -description = "A utility belt for advanced users of python-requests" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, - {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, -] - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" - -[[package]] -name = "rfc3986" -version = "2.0.0" -description = "Validating URI References per RFC 3986" -optional = false -python-versions = ">=3.7" -files = [ - {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, - {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, -] - -[package.extras] -idna2008 = ["idna"] - -[[package]] -name = "rich" -version = "13.9.2" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, - {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "secretstorage" -version = "3.3.3" -description = "Python bindings to FreeDesktop.org Secret Service API" -optional = false -python-versions = ">=3.6" -files = [ - {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, - {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, -] - -[package.dependencies] -cryptography = ">=2.0" -jeepney = ">=0.6" - -[[package]] -name = "semver" -version = "2.13.0" -description = "Python helper for Semantic Versioning (http://semver.org/)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, - {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, -] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "smmap" -version = "5.0.1" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.7" -files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, -] - -[[package]] -name = "tokenstream" -version = "1.7.0" -description = "A versatile token stream for handwritten parsers" -optional = false -python-versions = ">=3.10,<4.0" -files = [ - {file = "tokenstream-1.7.0-py3-none-any.whl", hash = "sha256:fdbb20e8a99b07e94ce88016e5f243a1582630a7459bd2e7a1c786f33543fcf9"}, - {file = "tokenstream-1.7.0.tar.gz", hash = "sha256:9f98387c7e74d224f7cca874ce77bb775ece6cb585e9ba18441960e2b35fae61"}, -] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.13.2" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, - {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, -] - -[[package]] -name = "tqdm" -version = "4.66.5" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, - {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "twine" -version = "3.8.0" -description = "Collection of utilities for publishing packages on PyPI" -optional = false -python-versions = ">=3.6" -files = [ - {file = "twine-3.8.0-py3-none-any.whl", hash = "sha256:d0550fca9dc19f3d5e8eadfce0c227294df0a2a951251a4385797c8a6198b7c8"}, - {file = "twine-3.8.0.tar.gz", hash = "sha256:8efa52658e0ae770686a13b675569328f1fba9837e5de1867bfe5f46a9aefe19"}, -] - -[package.dependencies] -colorama = ">=0.4.3" -importlib-metadata = ">=3.6" -keyring = ">=15.1" -pkginfo = ">=1.8.1" -readme-renderer = ">=21.0" -requests = ">=2.20" -requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0" -rfc3986 = ">=1.4.0" -tqdm = ">=4.14" -urllib3 = ">=1.26.0" - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[[package]] -name = "tzdata" -version = "2024.1" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, - {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, -] - -[[package]] -name = "urllib3" -version = "2.2.2" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "wheel" -version = "0.44.0" -description = "A built-package format for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, - {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, -] - -[package.extras] -test = ["pytest (>=6.0.0)", "setuptools (>=65)"] - -[[package]] -name = "zipp" -version = "3.20.1" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.20.1-py3-none-any.whl", hash = "sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064"}, - {file = "zipp-3.20.1.tar.gz", hash = "sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.10" -content-hash = "29b0fbf3ba128b335f487c84bbf095e774583860c9585af3d14ce48932e4eb6a" diff --git a/pyproject.toml b/pyproject.toml index e8132557..9bb5b044 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,44 +1,50 @@ -[tool.poetry] +[project] name = "smithed-libraries" version = "0.16.4" description = "All of the Smithed Libraries" -authors = ["Smithed Council "] -license = "MIT" +authors = [{ name = "Smithed Council", email = "team@smithed.dev" }] +requires-python = ">=3.14,<4" readme = "README.md" +license = "MIT" +classifiers = [ + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.14", +] +dependencies = [ + "mecha>=0.103.0,<0.104", + "bolt>=0.50.0,<0.51", + "bolt-expressions>=0.17.0,<0.18", + "beet>=0.115.0", + "pydantic>=2.5.2,<3", + "rich>=13.9.2,<14", +] -[tool.poetry.dependencies] -python = "^3.10" -mecha = "^0.95.0" -bolt = "^0.49.0" -bolt-expressions = "^0.17.0" -beet = ">=0.108.5" -pydantic = "^2.5.2" -rich = "^13.9.2" +[dependency-groups] +dev = [ + "devtools>=0.9.0,<0.10", + "python-semantic-release>=7.32.2,<8", + "requests>=2.28.1,<3", + "github-action-utils>=1.1.0,<2", + "ruff>=0.15.10", + "pytest>=9.0.3", + "pytest-insta>=0.4.1", +] -[tool.poetry.group.dev.dependencies] -black = "^22.8.0" -isort = "^5.10.1" -devtools = "^0.9.0" -python-semantic-release = "^7.32.2" -requests = "^2.28.1" -github-action-utils = "^1.1.0" +[tool.uv] +default-groups = "all" [tool.semantic_release] branch = "main" version_variable = ["smithed_libraries/__init__.py:__version__"] -version_toml = "pyproject.toml:tool.poetry.version" +version_toml = "pyproject.toml:project.version" major_on_zero = false -build_command = "poetry build" - -[tool.isort] -profile = "black" +build_command = "uv build" [tool.pyright] typeCheckingMode = "strict" -[tool.poe.tasks] -format = {shell = "isort smithed_libraries & black smithed_libraries"} - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" +[tool.pytest.ini_options] +filterwarnings = [ + "ignore:GitWildMatchPattern:DeprecationWarning", + "ignore:Pydantic serializer warnings:UserWarning" +] \ No newline at end of file diff --git a/smithed_libraries/common.yaml b/smithed_libraries/common.yaml index e0989dcb..8d0dea21 100644 --- a/smithed_libraries/common.yaml +++ b/smithed_libraries/common.yaml @@ -37,9 +37,9 @@ meta: # ex: smithed.actionbar/impl/reset -> smithed.actionbar/impl/v1.2.3/reset # here, we need to specify `{{ ctx.project_id }}` refactor: - match: "{{ project_id }}:*" # which files to look at - find: "{{ project_id }}:impl/" # which paths to look for - replace: "{{ project_id }}:v{{ version }}/" # what to replace path w/ + match: "{{ ctx.project_id }}:*" # which files to look at + find: "{{ ctx.project_id }}:impl/" # which paths to look for + replace: "{{ ctx.project_id }}:v{{ version }}/" # what to replace path w/ # configures how APIs get generated and version checked # this occurs **after** refactoring! @@ -47,7 +47,7 @@ meta: # - function tag: "{{ namespace }}:{{ tag_path }}/{{ path_to_file }}" # - version check: "{{ namespace }}:{{ version_check_path }}/{{ path_to_file}}" api: - match: "{{ project_id }}:v{{ version }}" # match only implemented apis - implementation_prefix: "{{ project_id }}:v{{ version }}/" # which files match the internal path + match: "{{ ctx.project_id }}:v{{ version }}" # match only implemented apis + implementation_prefix: "{{ ctx.project_id }}:v{{ version }}/" # which files match the internal path version_check_path: "v{{ version }}/_version_check" # base path for version_checks tag_path: "" # base path for API tags diff --git a/smithed_libraries/packs/damage/beet.yaml b/smithed_libraries/packs/damage/beet.yaml index 7c643c17..15212819 100644 --- a/smithed_libraries/packs/damage/beet.yaml +++ b/smithed_libraries/packs/damage/beet.yaml @@ -4,6 +4,7 @@ id: smithed.damage name: Smithed Damage version: "0.2.0" description: Native Damage Library for Smithed +minecraft: "1.20" data_pack: name: Smithed Damage diff --git a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/armor.mcfunction b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/armor.mcfunction index 6c767456..bbeb75b7 100644 --- a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/armor.mcfunction +++ b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/armor.mcfunction @@ -17,8 +17,8 @@ # adapted from TCC # get values (x100) -execute store result score #10armor smithed.damage run attribute @s minecraft:generic.armor get 10 -execute store result score #10toughness smithed.damage run attribute @s minecraft:generic.armor_toughness get 10 +raw execute store result score #10armor smithed.damage run attribute @s minecraft:generic.armor get 10 +raw execute store result score #10toughness smithed.damage run attribute @s minecraft:generic.armor_toughness get 10 scoreboard players operation #damage smithed.damage = @s smithed.damage #!dbg score "#10armor", "smithed.damage" diff --git a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/explosion.mcfunction b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/explosion.mcfunction index 60950bc0..25b421fc 100644 --- a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/explosion.mcfunction +++ b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/explosion.mcfunction @@ -17,8 +17,8 @@ # adapted from TCC # get values (x100) -execute store result score #10armor smithed.damage run attribute @s minecraft:generic.armor get 10 -execute store result score #10toughness smithed.damage run attribute @s minecraft:generic.armor_toughness get 10 +raw execute store result score #10armor smithed.damage run attribute @s minecraft:generic.armor get 10 +raw execute store result score #10toughness smithed.damage run attribute @s minecraft:generic.armor_toughness get 10 scoreboard players operation #damage smithed.damage = @s smithed.damage #!dbg score "#10armor", "smithed.damage" diff --git a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/projectile.mcfunction b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/projectile.mcfunction index e39229ef..2e2a36cf 100644 --- a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/projectile.mcfunction +++ b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/apply/projectile.mcfunction @@ -17,8 +17,8 @@ # adapted from TCC # get values (x100) -execute store result score #10armor smithed.damage run attribute @s minecraft:generic.armor get 10 -execute store result score #10toughness smithed.damage run attribute @s minecraft:generic.armor_toughness get 10 +raw execute store result score #10armor smithed.damage run attribute @s minecraft:generic.armor get 10 +raw execute store result score #10toughness smithed.damage run attribute @s minecraft:generic.armor_toughness get 10 scoreboard players operation #damage smithed.damage = @s smithed.damage #!dbg score "#10armor", "smithed.damage" diff --git a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/attributes/remove.mcfunction b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/attributes/remove.mcfunction index 2aadbad8..36b2d804 100644 --- a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/attributes/remove.mcfunction +++ b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/attributes/remove.mcfunction @@ -1,12 +1,12 @@ tag @s remove smithed.damage.applied_damage -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa30 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa31 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa32 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa33 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa34 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa35 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa36 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa37 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa38 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa39 -attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa3a +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa30 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa31 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa32 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa33 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa34 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa35 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa36 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa37 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa38 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa39 +raw attribute @s generic.max_health modifier remove 8b138417-eccd-429b-a080-4beb98b7aa3a diff --git a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/health/calculate_modifier.mcfunction b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/health/calculate_modifier.mcfunction index e6675d06..d48aa57f 100644 --- a/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/health/calculate_modifier.mcfunction +++ b/smithed_libraries/packs/damage/data/smithed.damage/functions/impl/entity/health/calculate_modifier.mcfunction @@ -1,4 +1,4 @@ -execute store result score $maximumHealth smithed.damage run attribute @s generic.max_health get +raw execute store result score $maximumHealth smithed.damage run attribute @s generic.max_health get execute store result score $currentHealth smithed.damage run data get entity @s Health scoreboard players operation @s smithed.damage += $maximumHealth smithed.damage scoreboard players operation @s smithed.damage -= $currentHealth smithed.damage diff --git a/smithed_libraries/packs/wiki/assets/smithed.wiki/font/technical/spaces.json b/smithed_libraries/packs/wiki/assets/smithed.wiki/font/technical/spaces.json new file mode 100644 index 00000000..b405b28f --- /dev/null +++ b/smithed_libraries/packs/wiki/assets/smithed.wiki/font/technical/spaces.json @@ -0,0 +1,26 @@ +{ + "providers": [ + { + "type": "space", + "advances": { + "0": 0, + "1": 4, + "2": 8, + "3": 12, + "4": 16, + "5": 20, + "6": 24, + "7": 28, + "8": 32, + "9": 36, + "A": 40, + "B": 44, + "C": 48, + "D": 52, + "E": 56, + "F": 60, + "G": 64 + } + } + ] +} diff --git a/smithed_libraries/packs/wiki/assets/smithed.wiki/items/wiki.json b/smithed_libraries/packs/wiki/assets/smithed.wiki/items/wiki.json new file mode 100644 index 00000000..5542d4be --- /dev/null +++ b/smithed_libraries/packs/wiki/assets/smithed.wiki/items/wiki.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "smithed.wiki:item/wiki" + } +} \ No newline at end of file diff --git a/smithed_libraries/packs/wiki/assets/smithed.wiki/lang/en_us.json b/smithed_libraries/packs/wiki/assets/smithed.wiki/lang/en_us.json new file mode 100644 index 00000000..1ccd9655 --- /dev/null +++ b/smithed_libraries/packs/wiki/assets/smithed.wiki/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "item.smithed.wiki.example": "Example Wiki" +} \ No newline at end of file diff --git a/smithed_libraries/packs/wiki/assets/smithed.wiki/models/item/wiki.json b/smithed_libraries/packs/wiki/assets/smithed.wiki/models/item/wiki.json new file mode 100644 index 00000000..0979093b --- /dev/null +++ b/smithed_libraries/packs/wiki/assets/smithed.wiki/models/item/wiki.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "smithed.wiki:item/wiki" + } +} diff --git a/smithed_libraries/packs/wiki/assets/smithed.wiki/textures/item/wiki.png b/smithed_libraries/packs/wiki/assets/smithed.wiki/textures/item/wiki.png new file mode 100644 index 00000000..95de2898 Binary files /dev/null and b/smithed_libraries/packs/wiki/assets/smithed.wiki/textures/item/wiki.png differ diff --git a/smithed_libraries/packs/wiki/assets/smithed.wiki/textures/wiki/placeholder.png b/smithed_libraries/packs/wiki/assets/smithed.wiki/textures/wiki/placeholder.png new file mode 100644 index 00000000..f49419cc Binary files /dev/null and b/smithed_libraries/packs/wiki/assets/smithed.wiki/textures/wiki/placeholder.png differ diff --git a/smithed_libraries/packs/wiki/beet.yaml b/smithed_libraries/packs/wiki/beet.yaml new file mode 100644 index 00000000..62893da2 --- /dev/null +++ b/smithed_libraries/packs/wiki/beet.yaml @@ -0,0 +1,34 @@ +extend: "@smithed_libraries/common.yaml" + +id: smithed.wiki +name: Smithed Wiki +version: "0.1.0" +description: Native Library for Smithed +author: TheNuclearNexus +minecraft: "26.1" + +data_pack: + name: Smithed Wiki + load: . + zipped: true + pack_format: 101 + +resource_pack: + name: Smithed Wiki RP + load: . + zipped: true + pack_format: 84 + +require: + - smithed_libraries.plugins.wiki + - bolt + + +output: dist + +meta: + depends_on: # used for metadata + custom-block: "0.10.0" + minecraft_version: "26.1" + smithed.wiki: + implementation_folder: impl/wiki diff --git a/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/book/example.json b/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/book/example.json new file mode 100644 index 00000000..4da69c3d --- /dev/null +++ b/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/book/example.json @@ -0,0 +1,24 @@ +{ + "components": { + "minecraft:item_model": "smithed.wiki:wiki", + "minecraft:item_name": { "translate": "item.smithed.wiki.example" }, + "minecraft:rarity": "uncommon" + }, + "sections": [ + { + "type": "smithed.wiki:title", + "title": "Example", + "description": "An example wiki book", + "icon": "" + }, + { + "type": "smithed.wiki:toc", + "title": "The table of contents", + "sections": [2] + }, + { + "type": "smithed.wiki:reference", + "path": "smithed.wiki:category" + } + ] +} diff --git a/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/section/article.json b/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/section/article.json new file mode 100644 index 00000000..4abf2833 --- /dev/null +++ b/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/section/article.json @@ -0,0 +1,5 @@ +{ + "type": "smithed.wiki:article", + "title": "An article", + "content": "The contents of an article" +} \ No newline at end of file diff --git a/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/section/category.json b/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/section/category.json new file mode 100644 index 00000000..75a7de74 --- /dev/null +++ b/smithed_libraries/packs/wiki/data/smithed.wiki/wiki/section/category.json @@ -0,0 +1,8 @@ +{ + "type": "smithed.wiki:category", + "title": "A category", + "description": "An example category", + "sections": [ + { "type": "smithed.wiki:reference", "path": "smithed.wiki:article" } + ] +} diff --git a/smithed_libraries/plugins/crafter.py b/smithed_libraries/plugins/crafter.py index 15882681..4a5b32a9 100644 --- a/smithed_libraries/plugins/crafter.py +++ b/smithed_libraries/plugins/crafter.py @@ -42,7 +42,7 @@ def generate_tag_args(ctx: Context): ctx.data.functions[ - f"smithed.crafter:v{ctx.project_version}/block/table/crafting/input/query_tags" + f"smithed.crafter:impl/block/table/crafting/input/query_tags" ].append(mc.serialize(mc.parse("\n".join(commands), multiline=True))) @@ -83,5 +83,5 @@ def generate_advanced_remove_tool(ctx: Context): commands.append(command) ctx.data.functions[ - f"smithed.crafter:v{ctx.project_version}/block/table/crafting/output/clear_input/delete_tool/vanilla" + f"smithed.crafter:impl/block/table/crafting/output/clear_input/delete_tool/vanilla" ].append(mc.serialize(mc.parse("\n".join(commands), multiline=True))) \ No newline at end of file diff --git a/smithed_libraries/plugins/versioning/models.py b/smithed_libraries/plugins/versioning/models.py index 485eb707..f97294be 100644 --- a/smithed_libraries/plugins/versioning/models.py +++ b/smithed_libraries/plugins/versioning/models.py @@ -1,8 +1,16 @@ from typing import Any, ClassVar, Literal -from beet import Context, ListOption, PathSpecOption +from beet import Context, ListOption from beet.contrib.rename_files import RenderRenameOption, TextRenameOption -from pydantic.v1 import BaseModel, Field, validator +from pydantic import ( + BaseModel, + ConfigDict, + Field, + RootModel, + ValidationInfo, + field_validator, + model_validator, +) from .types import JsonDict, JsonType @@ -11,11 +19,9 @@ class ContextualModel(BaseModel): ctx: ClassVar[Context] -class Version(ContextualModel): +class Version(ContextualModel, RootModel[dict[str, int]]): """Provides methods and fields for the version for ease of use""" - __root__: dict[str, int] - @classmethod def from_parts(cls, names: list[str]): numbers = [int(num) for num in cls.ctx.project_version.split(".")] @@ -26,9 +32,10 @@ def from_parts(cls, names: list[str]): f"The schema: {names!r} does not match the version {cls.ctx.project_version!r}" ) - return cls(__root__=combined) + return cls(combined) - @validator("__root__") + @field_validator("root") + @classmethod def ensure_version_parts(cls, value: dict[str, int]): for name, number in value.items(): if number < 0: @@ -37,37 +44,49 @@ def ensure_version_parts(cls, value: dict[str, int]): return value def named_parts(self): - return list(self.__root__.items()) + return list(self.root.items()) def __str__(self): - return ".".join(str(value) for value in self.__root__.values()) + return ".".join(str(value) for value in self.root.values()) -class VersioningOptions(ContextualModel, extra="forbid"): +class VersioningOptions(ContextualModel): """The `versioning` config of `beet.yaml`""" + model_config = ConfigDict(extra="forbid") + class LanternLoadOptions(ContextualModel): step: Literal["pre_load", "load", "post_load"] = "load" tag_path: str = "load" function_path: str = "impl/load" class ApiOptions(ContextualModel): - match: PathSpecOption = "{{ project_id }}:v{{ version }}/*" # type: ignore - implementation_prefix: str = "{{ project_id }}:v{{ version }}/" + match: str = "{{ ctx.project_id }}:v{{ version }}/*" # type: ignore + implementation_prefix: str = "{{ ctx.project_id }}:v{{ version }}/" version_check_path: str = "v{{ version }}/calls" tag_path: str = "" - scoreholder: str = "#{{ project_id }}" + scoreholder: str = Field("#{{ ctx.project_id }}", validate_default=True) schema_: list[str] = Field(["major", "minor", "patch"], alias="schema") - scheduled_paths: ListOption[str] = ListOption(__root__=["impl/tick"]) - version: Version = None # type: ignore - refactor: TextRenameOption | RenderRenameOption = { - "match": "{{ project_id }}:*", - "find": "{{ project_id }}:impl/", - "replace": "{{ project_id }}:impl/v{{ version }}/", - } # type: ignore - lantern_load: LanternLoadOptions = LanternLoadOptions() - api: ApiOptions = ApiOptions() + scheduled_paths: ListOption[str] = Field( + ListOption(["impl/tick"]), validate_default=True + ) + + version: Version | None = Field(default=None, validate_default=True) + + refactor: TextRenameOption | RenderRenameOption = Field( + { + "match": "{{ ctx.project_id }}:*", + "find": "{{ ctx.project_id }}:impl/", + "replace": "{{ ctx.project_id }}:impl/v{{ version }}/", + }, + validate_default=True, + ) + + lantern_load: LanternLoadOptions = Field( + default_factory=LanternLoadOptions, validate_default=True + ) + api: ApiOptions = Field(default_factory=ApiOptions, validate_default=True) @property def namespace(self): @@ -77,9 +96,14 @@ def namespace(self): def render(cls, value: str, values: dict[str, Any]): return cls.ctx.template.render_string(value, **values) - @validator("version", pre=True, always=True) - def init_version(cls, value: Any, values: dict[str, Any]): - return value or Version.from_parts(values["schema_"]) + @field_validator("version", mode="before") + @classmethod + def init_version(cls, value: Any, info: ValidationInfo): + if value: + return value + # Access previously validated fields via info.data + schema = info.data.get("schema_", ["major", "minor", "patch"]) + return Version.from_parts(schema) @classmethod def render_value(cls, val: JsonType, all_values: JsonDict) -> JsonType: @@ -88,26 +112,32 @@ def render_value(cls, val: JsonType, all_values: JsonDict) -> JsonType: return cls.render(value, all_values) case list(vals): - return [cls.render_value(val, all_values) for val in vals] + return [cls.render_value(v, all_values) for v in vals] case dict(vals): - return { - key: cls.render_value(val, all_values) for key, val in vals.items() - } + return {key: cls.render_value(v, all_values) for key, v in vals.items()} - case _ as val: - return val + case _ as v: + return v - @validator("*", pre=True, always=True) - def render_all(cls, value: JsonType, values: JsonDict): + @field_validator( + "*", + mode="before", + ) + @classmethod + def render_all(cls, value: Any, info: ValidationInfo) -> Any: """This validator handles the rendering of all structures inside In Pydantic V2, we would likely try to generalize this behavior in `beet`. For now, we have to match every key-value in our values dict to figure out - if the string or string within needs to be rendered. + if the string or string within needs to be rendered. """ + # In V2, previously validated data is accessed via info.data + rendered = cls.render_value(value, all_values={**info.data, "ctx": cls.ctx}) + return rendered + + - return cls.render_value(value, all_values=values) class Versioning: diff --git a/smithed_libraries/plugins/versioning/plugin.py b/smithed_libraries/plugins/versioning/plugin.py index ce095984..ec3e94ca 100644 --- a/smithed_libraries/plugins/versioning/plugin.py +++ b/smithed_libraries/plugins/versioning/plugin.py @@ -1,25 +1,23 @@ +import logging + from beet import Context from beet.contrib.find_replace import find_replace from beet.contrib.rename_files import rename_files +from beet.contrib.autosave import Autosave from .api import generate_api from .load import generate_load from .models import ContextualModel, Versioning - - def inject_version(ctx: Context): opts = ctx.inject(Versioning).opts - substitution = opts.refactor.dict() + substitution = opts.refactor.model_dump() del substitution["match"] - - # dynamic renames - ctx.require( - find_replace(data_pack={"match": opts.refactor.match}, substitute=substitution) - ) - ctx.require(rename_files(data_pack={"match": opts.refactor.match} | substitution)) - + + autosave = ctx.inject(Autosave) + autosave.output_handlers.insert(0, rename_files(data_pack={"match": opts.refactor.match} | substitution)) + autosave.output_handlers.insert(0, find_replace(data_pack={"match": opts.refactor.match}, substitute=substitution)) def beet_default(ctx: Context): """This plugins generates all the versioning requirements that LL needs diff --git a/smithed_libraries/plugins/wiki/README.md b/smithed_libraries/plugins/wiki/README.md new file mode 100644 index 00000000..ff8a93a6 --- /dev/null +++ b/smithed_libraries/plugins/wiki/README.md @@ -0,0 +1,30 @@ +# smithed.wiki +The main plugin for generating Smithed Wiki books. The datapack & resourcepack in `smithed_libraries/packs/wiki` serve as boot-strapping and basic resources. + +## Structure +- `__init__.py` - The Beet plugin entry point +- `models.py` - The Pydantic models for validating the books and sections +- `plugin.py` - The main logic for building a wiki book +- `resources.py` - The Beet resources for loading the files from a datapack + +## Building +### Pre-requisites +- [uv](https://docs.astral.sh/uv/getting-started/installation/) + +### Steps +Clone the repository and checkout the `feat/wiki` branch +```sh +git clone https://github.com/Smithed-MC/Libraries -b feat/wiki +``` +Move into the repo +```sh +cd Libraries +``` +Install the dependencies +```sh +uv sync +``` +Build the libraries +```sh +uv run beet -s "data_pack.zipped = False" -s "resource_pack.zipped = False" +``` diff --git a/smithed_libraries/plugins/wiki/__init__.py b/smithed_libraries/plugins/wiki/__init__.py new file mode 100644 index 00000000..f3959413 --- /dev/null +++ b/smithed_libraries/plugins/wiki/__init__.py @@ -0,0 +1,38 @@ +import json + +from beet import Context + +from .models import AnySectionModel, SectionModel, BookModel +from .plugin import WikiBuilder +from .resources import WikiBook, WikiSection + + + +def beet_default(ctx: Context): + """ + Main entry point for the Smithed Wiki library. + --- + ctx - The Beet context object used to manipulate the project. + """ + + # Add our resources to the context so that they will be automatically loaded + ctx.data.extend_namespace.append(WikiBook) + ctx.data.extend_namespace.append(WikiSection) + + # Inject the WikiBuilder to configure it and add necessary hooks + ctx.inject(WikiBuilder) + + yield + + # Rebuild all models to properly update the necessary unions + for model in SectionModel._section_registry: + model.model_rebuild() + + # Create a JSON schema for the important models so that the IDE can lint the files correctly. + (ctx.cache["smithed.wiki"].directory / "book.json").write_text( + json.dumps(BookModel.model_json_schema()) + ) + + (ctx.cache["smithed.wiki"].directory / "section.json").write_text( + json.dumps(AnySectionModel.model_json_schema()) + ) diff --git a/smithed_libraries/plugins/wiki/advances.json b/smithed_libraries/plugins/wiki/advances.json new file mode 100644 index 00000000..05923cc3 --- /dev/null +++ b/smithed_libraries/plugins/wiki/advances.json @@ -0,0 +1,2618 @@ +{ + "\u0000": { + "unicode": 9 + }, + "\u0001": { + "unicode": 9 + }, + "\u0002": { + "unicode": 9 + }, + "\u0003": { + "unicode": 9 + }, + "\u0004": { + "unicode": 9 + }, + "\u0005": { + "unicode": 9 + }, + "\u0006": { + "unicode": 9 + }, + "\u0007": { + "unicode": 9 + }, + "\b": { + "unicode": 9 + }, + "\t": { + "unicode": 9 + }, + "\n": { + "unicode": 9 + }, + "\u000b": { + "unicode": 9 + }, + "\f": { + "unicode": 9 + }, + "\r": { + "unicode": 9 + }, + "\u000e": { + "unicode": 9 + }, + "\u000f": { + "unicode": 9 + }, + "\u0010": { + "unicode": 9 + }, + "\u0011": { + "unicode": 9 + }, + "\u0012": { + "unicode": 9 + }, + "\u0013": { + "unicode": 9 + }, + "\u0014": { + "unicode": 9 + }, + "\u0015": { + "unicode": 9 + }, + "\u0016": { + "unicode": 9 + }, + "\u0017": { + "unicode": 9 + }, + "\u0018": { + "unicode": 9 + }, + "\u0019": { + "unicode": 9 + }, + "\u001a": { + "unicode": 9 + }, + "\u001b": { + "unicode": 9 + }, + "\u001c": { + "unicode": 9 + }, + "\u001d": { + "unicode": 9 + }, + "\u001e": { + "unicode": 9 + }, + "\u001f": { + "unicode": 9 + }, + " ": { + "unicode": 4 + }, + "!": 2, + "\"": 4, + "#": 6, + "$": 6, + "%": 6, + "&": 6, + "'": 2, + "(": 4, + ")": 4, + "*": 4, + "+": 6, + ",": 2, + "-": 6, + ".": 2, + "/": 6, + "0": 6, + "1": 6, + "2": 6, + "3": 6, + "4": 6, + "5": 6, + "6": 6, + "7": 6, + "8": 6, + "9": 6, + ":": 2, + ";": 2, + "<": 5, + "=": 6, + ">": 5, + "?": 6, + "@": 7, + "A": 6, + "B": 6, + "C": 6, + "D": 6, + "E": 6, + "F": 6, + "G": 6, + "H": 6, + "I": 4, + "J": 6, + "K": 6, + "L": 6, + "M": 6, + "N": 6, + "O": 6, + "P": 6, + "Q": 6, + "R": 6, + "S": 6, + "T": 6, + "U": 6, + "V": 6, + "W": 6, + "X": 6, + "Y": 6, + "Z": 6, + "[": 4, + "\\": 6, + "]": 4, + "^": 6, + "_": 6, + "`": 3, + "a": 6, + "b": 6, + "c": 6, + "d": 6, + "e": 6, + "f": 5, + "g": 6, + "h": 6, + "i": 2, + "j": 6, + "k": 5, + "l": 3, + "m": 6, + "n": 6, + "o": 6, + "p": 6, + "q": 6, + "r": 6, + "s": 6, + "t": 4, + "u": 6, + "v": 6, + "w": 6, + "x": 6, + "y": 6, + "z": 6, + "{": 4, + "|": 2, + "}": 4, + "~": 7, + "\u007f": { + "unicode": 9 + }, + "\u0080": { + "unicode": 9 + }, + "\u0081": { + "unicode": 9 + }, + "\u0082": { + "unicode": 9 + }, + "\u0083": { + "unicode": 9 + }, + "\u0084": { + "unicode": 9 + }, + "\u0085": { + "unicode": 9 + }, + "\u0086": { + "unicode": 9 + }, + "\u0087": { + "unicode": 9 + }, + "\u0088": { + "unicode": 9 + }, + "\u0089": { + "unicode": 9 + }, + "\u008a": { + "unicode": 9 + }, + "\u008b": { + "unicode": 9 + }, + "\u008c": { + "unicode": 9 + }, + "\u008d": { + "unicode": 9 + }, + "\u008e": { + "unicode": 9 + }, + "\u008f": { + "unicode": 9 + }, + "\u0090": { + "unicode": 9 + }, + "\u0091": { + "unicode": 9 + }, + "\u0092": { + "unicode": 9 + }, + "\u0093": { + "unicode": 9 + }, + "\u0094": { + "unicode": 9 + }, + "\u0095": { + "unicode": 9 + }, + "\u0096": { + "unicode": 9 + }, + "\u0097": { + "unicode": 9 + }, + "\u0098": { + "unicode": 9 + }, + "\u0099": { + "unicode": 9 + }, + "\u009a": { + "unicode": 9 + }, + "\u009b": { + "unicode": 9 + }, + "\u009c": { + "unicode": 9 + }, + "\u009d": { + "unicode": 9 + }, + "\u009e": { + "unicode": 9 + }, + "\u009f": { + "unicode": 9 + }, + "\u00a0": { + "unicode": 9 + }, + "\u00a1": 2, + "\u00a2": 6, + "\u00a3": 6, + "\u00a4": 8, + "\u00a5": 6, + "\u00a6": 2, + "\u00a7": 6, + "\u00a8": 4, + "\u00a9": 8, + "\u00aa": 5, + "\u00ab": 7, + "\u00ac": 6, + "\u00ad": 4, + "\u00ae": 8, + "\u00af": 6, + "\u00b0": 5, + "\u00b1": 6, + "\u00b2": 5, + "\u00b3": 5, + "\u00b4": 3, + "\u00b5": 6, + "\u00b6": 7, + "\u00b7": 2, + "\u00b8": { + "unicode": 2 + }, + "\u00b9": 4, + "\u00ba": 5, + "\u00bb": 7, + "\u00bc": 8, + "\u00bd": 8, + "\u00be": 8, + "\u00bf": 6, + "\u00c0": 6, + "\u00c1": 6, + "\u00c2": 6, + "\u00c3": 6, + "\u00c4": 6, + "\u00c5": 6, + "\u00c6": 10, + "\u00c7": 6, + "\u00c8": 6, + "\u00c9": 6, + "\u00ca": 6, + "\u00cb": 6, + "\u00cc": 4, + "\u00cd": 4, + "\u00ce": 4, + "\u00cf": 4, + "\u00d0": 7, + "\u00d1": 6, + "\u00d2": 6, + "\u00d3": 6, + "\u00d4": 6, + "\u00d5": 6, + "\u00d6": 6, + "\u00d7": 6, + "\u00d8": 6, + "\u00d9": 6, + "\u00da": 6, + "\u00db": 6, + "\u00dc": 6, + "\u00dd": 6, + "\u00de": 6, + "\u00df": 6, + "\u00e0": 6, + "\u00e1": 6, + "\u00e2": 6, + "\u00e3": 6, + "\u00e4": 6, + "\u00e5": 6, + "\u00e6": 10, + "\u00e7": 6, + "\u00e8": 6, + "\u00e9": 6, + "\u00ea": 6, + "\u00eb": 6, + "\u00ec": 3, + "\u00ed": 3, + "\u00ee": 4, + "\u00ef": 4, + "\u00f0": 6, + "\u00f1": 6, + "\u00f2": 6, + "\u00f3": 6, + "\u00f4": 6, + "\u00f5": 6, + "\u00f6": 6, + "\u00f7": 6, + "\u00f8": 6, + "\u00f9": 6, + "\u00fa": 6, + "\u00fb": 6, + "\u00fc": 6, + "\u00fd": 6, + "\u00fe": 6, + "\u00ff": 6, + "\u0192": 6, + "\u2591": 8, + "\u2592": 9, + "\u2593": 9, + "\u2502": 6, + "\u2524": 6, + "\u2561": 6, + "\u2562": 8, + "\u2556": 8, + "\u2555": 6, + "\u2563": 8, + "\u2551": 8, + "\u2557": 8, + "\u255d": 8, + "\u255c": 8, + "\u255b": 6, + "\u2510": 6, + "\u2514": 9, + "\u2534": 9, + "\u252c": 9, + "\u251c": 9, + "\u2500": 9, + "\u253c": 9, + "\u255e": 9, + "\u255f": 9, + "\u255a": 9, + "\u2554": 9, + "\u2569": 9, + "\u2566": 9, + "\u2560": 9, + "\u2550": 9, + "\u256c": 9, + "\u2567": 9, + "\u2568": 9, + "\u2564": 9, + "\u2565": 9, + "\u2559": 9, + "\u2558": 9, + "\u2552": 9, + "\u2553": 9, + "\u256b": 9, + "\u256a": 9, + "\u2518": 6, + "\u250c": 9, + "\u2588": 9, + "\u2584": 9, + "\u258c": 5, + "\u2590": 9, + "\u2580": 9, + "\u2205": 8, + "\u2208": 6, + "\u2261": 7, + "\u2265": 6, + "\u2264": 6, + "\u2320": 8, + "\u2321": 5, + "\u2248": 7, + "\u2219": 6, + "\u221a": 7, + "\u207f": 5, + "\u25a0": 6, + "\u0100": 6, + "\u0101": 6, + "\u0102": 6, + "\u0103": 6, + "\u0104": 6, + "\u0105": 6, + "\u0106": 6, + "\u0107": 6, + "\u0108": 6, + "\u0109": 6, + "\u010a": 6, + "\u010b": 6, + "\u010c": 6, + "\u010d": 6, + "\u010e": 6, + "\u010f": 8, + "\u0110": 7, + "\u0111": 7, + "\u0112": 6, + "\u0113": 6, + "\u0114": 6, + "\u0115": 6, + "\u0116": 6, + "\u0117": 6, + "\u0118": 6, + "\u0119": 6, + "\u011a": 6, + "\u011b": 6, + "\u011c": 6, + "\u011d": 6, + "\u1e20": 6, + "\u1e21": 6, + "\u011e": 6, + "\u011f": 6, + "\u0120": 6, + "\u0121": 6, + "\u0122": 6, + "\u0123": 6, + "\u0124": 6, + "\u0125": 6, + "\u0126": 8, + "\u0127": 7, + "\u0128": 5, + "\u0129": 5, + "\u012a": 4, + "\u012b": 4, + "\u012c": 5, + "\u012d": 5, + "\u012e": 4, + "\u012f": 3, + "\u0130": 4, + "\u0131": 2, + "\u0134": 6, + "\u0135": 6, + "\u0136": 6, + "\u0137": 5, + "\u0139": 6, + "\u013a": 3, + "\u013b": 6, + "\u013c": 3, + "\u013d": 6, + "\u013e": 4, + "\u013f": 6, + "\u0140": 4, + "\u0141": 7, + "\u0142": 5, + "\u0143": 6, + "\u0144": 6, + "\u0145": 6, + "\u0146": 6, + "\u0147": 6, + "\u0148": 6, + "\u014a": 6, + "\u014b": 6, + "\u014c": 6, + "\u014d": 6, + "\u014e": 6, + "\u014f": 6, + "\u0150": 6, + "\u0151": 6, + "\u0152": 10, + "\u0153": 10, + "\u0154": 6, + "\u0155": 6, + "\u0156": 6, + "\u0157": 6, + "\u0158": 6, + "\u0159": 6, + "\u015a": 6, + "\u015b": 6, + "\u015c": 6, + "\u015d": 6, + "\u015e": 6, + "\u015f": 6, + "\u0160": 6, + "\u0161": 6, + "\u0162": 6, + "\u0163": 4, + "\u0164": 6, + "\u0165": 5, + "\u0166": 6, + "\u0167": 4, + "\u0168": 6, + "\u0169": 6, + "\u016a": 6, + "\u016b": 6, + "\u016c": 6, + "\u016d": 6, + "\u016e": 6, + "\u016f": 6, + "\u0170": 6, + "\u0171": 6, + "\u0172": 6, + "\u0173": 6, + "\u0174": 6, + "\u0175": 6, + "\u0176": 6, + "\u0177": 6, + "\u0178": 6, + "\u0179": 6, + "\u017a": 6, + "\u017b": 6, + "\u017c": 6, + "\u017d": 6, + "\u017e": 6, + "\u01fc": 10, + "\u01fd": 10, + "\u01fe": 6, + "\u01ff": 6, + "\u0218": 6, + "\u0219": 6, + "\u021a": 6, + "\u021b": 4, + "\u0386": 8, + "\u0388": 8, + "\u0389": 8, + "\u038a": 6, + "\u038c": 8, + "\u038e": 8, + "\u038f": 8, + "\u0390": 6, + "\u03aa": 4, + "\u03ab": 6, + "\u03ac": 6, + "\u03ad": 6, + "\u03ae": 6, + "\u03af": 3, + "\u03b0": 6, + "\u03ca": 4, + "\u03cb": 6, + "\u03cc": 6, + "\u03cd": 6, + "\u03ce": 8, + "\u0400": 6, + "\u0401": 6, + "\u0403": 6, + "\u0407": 4, + "\u040c": 6, + "\u040d": 6, + "\u040e": 6, + "\u0419": 6, + "\u0439": 6, + "\u0450": 6, + "\u0451": 6, + "\u0452": 7, + "\u0453": 5, + "\u0457": 4, + "\u045b": 7, + "\u045c": 5, + "\u045d": 6, + "\u045e": 6, + "\u045f": 6, + "\u0490": 6, + "\u0491": 6, + "\u1e02": 6, + "\u1e03": 6, + "\u1e0a": 6, + "\u1e0b": 6, + "\u1e1e": 6, + "\u1e1f": 5, + "\u1e22": 6, + "\u1e23": 6, + "\u1e30": 6, + "\u1e31": 5, + "\u1e40": 6, + "\u1e41": 6, + "\u1e56": 6, + "\u1e57": 6, + "\u1e60": 6, + "\u1e61": 6, + "\u1e6a": 6, + "\u1e6b": 4, + "\u1e80": 6, + "\u1e81": 6, + "\u1e82": 6, + "\u1e83": 6, + "\u1e84": 6, + "\u1e85": 6, + "\u1ef2": 6, + "\u1ef3": 6, + "\u0149": 8, + "\u01e7": 6, + "\u01eb": 6, + "\u040f": 6, + "\u1e0d": 6, + "\u1e25": 6, + "\u1e5b": 6, + "\u1e6d": 4, + "\u1e92": 6, + "\u1eca": 4, + "\u1ecb": 2, + "\u1ecc": 6, + "\u1ecd": 6, + "\u1ee4": 6, + "\u1ee5": 6, + "\u2116": 10, + "\u0207": 6, + "\u0194": 6, + "\u0263": 6, + "\u0283": 6, + "\u2047": 10, + "\u01f1": 10, + "\u01f2": 10, + "\u01f3": 10, + "\u01c4": 10, + "\u01c5": 10, + "\u01c6": 10, + "\u01c7": 10, + "\u01c8": 10, + "\u01ca": 10, + "\u01cb": 10, + "\u01cc": 10, + "\u2139": 10, + "\u1d6b": 10, + "\ua732": 10, + "\ua733": 10, + "\ua734": 10, + "\ua735": 10, + "\ua736": 10, + "\ua737": 10, + "\ua738": 10, + "\ua73a": 10, + "\ua73c": 10, + "\ua73d": 9, + "\ua74e": 10, + "\ua74f": 10, + "\ua760": 6, + "\ua761": 6, + "\ufb04": 10, + "\ufb06": 10, + "\u16a1": 5, + "\u16b5": 5, + "\u01a0": 8, + "\u01a1": 8, + "\u01af": 8, + "\u01b0": 8, + "\u1eae": 6, + "\u1eaf": 6, + "\u1ea4": 6, + "\u1ea5": 6, + "\u1ebe": 6, + "\u1ebf": 6, + "\u1ed1": 6, + "\u1eda": 8, + "\u1edb": 8, + "\u1ee8": 8, + "\u1ee9": 8, + "\u1eb0": 6, + "\u1eb1": 6, + "\u1ea6": 6, + "\u1ea7": 6, + "\u1ec0": 6, + "\u1ec1": 6, + "\u1ed3": 6, + "\u1edc": 8, + "\u1edd": 8, + "\u1eea": 8, + "\u1eeb": 8, + "\u1ea2": 6, + "\u1ea3": 6, + "\u1eb2": 6, + "\u1eb3": 6, + "\u1ea8": 6, + "\u1ea9": 6, + "\u1eba": 6, + "\u1ebb": 6, + "\u1ed5": 6, + "\u1ede": 8, + "\u1ec2": 6, + "\u1ec3": 6, + "\u1ec8": 4, + "\u1ec9": 4, + "\u1ece": 6, + "\u1ecf": 6, + "\u1ed4": 6, + "\u1edf": 8, + "\u1ee6": 6, + "\u1ee7": 6, + "\u1eec": 8, + "\u1eed": 8, + "\u1ef6": 6, + "\u1ef7": 6, + "\u1ea0": 6, + "\u1ea1": 6, + "\u1eb6": 6, + "\u1eb7": 6, + "\u1eac": 6, + "\u1ead": 6, + "\u1eb8": 6, + "\u1eb9": 6, + "\u1ec6": 6, + "\u1ec7": 6, + "\u1ed8": 6, + "\u1ed9": 6, + "\u1ee2": 8, + "\u1ee3": 8, + "\u1ef0": 8, + "\u1ef1": 8, + "\u1ef4": 6, + "\u1ef5": 6, + "\u1ed0": 6, + "\u0195": 9, + "\u1eaa": 6, + "\u1eab": 6, + "\u1ed6": 6, + "\u1ed7": 6, + "\u1eef": 8, + "\u261e": 10, + "\u261c": 10, + "\u262e": 10, + "\u1eb4": 6, + "\u1eb5": 6, + "\u1ebc": 6, + "\u1ebd": 6, + "\u1ec4": 6, + "\u1ec5": 6, + "\u1ed2": 6, + "\u1ee0": 8, + "\u1ee1": 8, + "\u1eee": 8, + "\u1ef8": 6, + "\u1ef9": 6, + "\u0498": 6, + "\u0499": 6, + "\u04a0": 7, + "\u04a1": 6, + "\u04aa": 6, + "\u04ab": 6, + "\u01f6": 9, + "\u26a0": 10, + "\u24ea": 10, + "\u2460": 10, + "\u2461": 10, + "\u2462": 10, + "\u2463": 10, + "\u2464": 10, + "\u2465": 10, + "\u2466": 10, + "\u2467": 10, + "\u2468": 10, + "\u2469": 10, + "\u246a": 10, + "\u246b": 10, + "\u246c": 10, + "\u246d": 10, + "\u246e": 10, + "\u246f": 10, + "\u2470": 10, + "\u2471": 10, + "\u2472": 10, + "\u2473": 10, + "\u24b6": 10, + "\u24b7": 10, + "\u24b8": 10, + "\u24b9": 10, + "\u24ba": 10, + "\u24bb": 10, + "\u24bc": 10, + "\u24bd": 10, + "\u24be": 10, + "\u24bf": 10, + "\u24c0": 10, + "\u24c1": 10, + "\u24c2": 10, + "\u24c3": 10, + "\u24c4": 10, + "\u24c5": 10, + "\u24c6": 10, + "\u24c7": 10, + "\u24c8": 10, + "\u24c9": 10, + "\u24ca": 10, + "\u24cb": 10, + "\u24cc": 10, + "\u24cd": 10, + "\u24ce": 10, + "\u24cf": 10, + "\u24d0": 10, + "\u24d1": 10, + "\u24d2": 10, + "\u24d3": 10, + "\u24d4": 10, + "\u24d5": 10, + "\u24d6": 10, + "\u24d7": 10, + "\u24d8": 10, + "\u24d9": 10, + "\u24da": 10, + "\u24db": 10, + "\u24dc": 10, + "\u24dd": 10, + "\u24de": 10, + "\u24df": 10, + "\u24e0": 10, + "\u24e1": 10, + "\u24e2": 10, + "\u24e3": 10, + "\u24e4": 10, + "\u24e5": 10, + "\u24e6": 10, + "\u24e7": 10, + "\u24e8": 10, + "\u24e9": 10, + "\u0327": 3, + "\u0282": 6, + "\u0290": 7, + "\u0276": 10, + "\u01cd": 6, + "\u01ce": 6, + "\u01de": 6, + "\u01df": 6, + "\u01fa": 6, + "\u01fb": 6, + "\u0202": 6, + "\u0203": 6, + "\u0226": 6, + "\u0227": 6, + "\u01e0": 6, + "\u01e1": 6, + "\u1e00": 6, + "\u1e01": 6, + "\u0200": 6, + "\u0201": 6, + "\u1e06": 6, + "\u1e07": 6, + "\u1e04": 6, + "\u1e05": 6, + "\u1d6c": 8, + "\u1e08": 6, + "\u1e09": 6, + "\u1e10": 6, + "\u1e11": 6, + "\u1e12": 6, + "\u1e13": 6, + "\u1e0e": 6, + "\u1e0f": 6, + "\u1e0c": 6, + "\u1d6d": 8, + "\u1e14": 6, + "\u1e15": 6, + "\u1e16": 6, + "\u1e17": 6, + "\u1e18": 6, + "\u1e19": 6, + "\u1e1c": 6, + "\u1e1d": 6, + "\u0228": 6, + "\u0229": 6, + "\u1e1a": 6, + "\u1e1b": 6, + "\u0204": 6, + "\u0205": 6, + "\u0206": 6, + "\u1d6e": 6, + "\u01f4": 6, + "\u01f5": 6, + "\u01e6": 6, + "\u1e26": 6, + "\u1e27": 6, + "\u1e28": 6, + "\u1e29": 6, + "\u1e2a": 6, + "\u1e2b": 6, + "\u021e": 6, + "\u021f": 6, + "\u1e24": 6, + "\u1e96": 6, + "\u1e2e": 4, + "\u1e2f": 4, + "\u020a": 5, + "\u020b": 5, + "\u01cf": 4, + "\u01d0": 4, + "\u0208": 6, + "\u0209": 6, + "\u1e2c": 5, + "\u1e2d": 5, + "\u01f0": 6, + "\u0237": 6, + "\u01e8": 6, + "\u01e9": 5, + "\u1e32": 6, + "\u1e33": 5, + "\u1e34": 6, + "\u1e35": 5, + "\u1e3a": 6, + "\u1e3b": 4, + "\u1e3c": 6, + "\u1e3d": 4, + "\u1e36": 6, + "\u1e37": 3, + "\u1e38": 6, + "\u1e39": 4, + "\u2c62": 8, + "\u1e3e": 6, + "\u1e3f": 6, + "\u1e42": 6, + "\u1e43": 6, + "\u1d6f": 8, + "\u1e44": 6, + "\u1e45": 6, + "\u1e46": 6, + "\u1e47": 6, + "\u1e4a": 6, + "\u1e4b": 6, + "\u01f8": 6, + "\u01f9": 6, + "\u1e48": 6, + "\u1e49": 6, + "\u1d70": 8, + "\u01ec": 6, + "\u01ed": 6, + "\u022c": 6, + "\u022d": 6, + "\u1e4c": 6, + "\u1e4d": 6, + "\u1e4e": 6, + "\u1e4f": 6, + "\u1e50": 6, + "\u1e51": 6, + "\u1e52": 6, + "\u1e53": 6, + "\u020e": 6, + "\u020f": 6, + "\u022a": 6, + "\u022b": 6, + "\u01d1": 6, + "\u01d2": 6, + "\u022e": 6, + "\u022f": 6, + "\u0230": 6, + "\u0231": 6, + "\u020c": 6, + "\u020d": 6, + "\u01ea": 6, + "\u1e54": 6, + "\u1e55": 6, + "\u1d71": 8, + "\u0212": 6, + "\u0213": 6, + "\u1e58": 6, + "\u1e59": 6, + "\u1e5c": 6, + "\u1e5d": 6, + "\u1e5e": 6, + "\u1e5f": 6, + "\u0210": 6, + "\u0211": 6, + "\u1e5a": 6, + "\u1d73": 8, + "\u1d72": 8, + "\u1e64": 6, + "\u1e65": 6, + "\u1e66": 6, + "\u1e67": 6, + "\u1e62": 6, + "\u1e63": 6, + "\u1e68": 6, + "\u1e69": 6, + "\u1d74": 8, + "\u1e70": 6, + "\u1e71": 4, + "\u1e6e": 6, + "\u1e6f": 4, + "\u1e6c": 6, + "\u1e97": 4, + "\u1d75": 6, + "\u1e72": 6, + "\u1e73": 6, + "\u1e76": 6, + "\u1e77": 6, + "\u1e78": 6, + "\u1e79": 6, + "\u1e7a": 6, + "\u1e7b": 6, + "\u01d3": 6, + "\u01d4": 6, + "\u01d5": 6, + "\u01d6": 6, + "\u01d7": 6, + "\u01d8": 6, + "\u01d9": 6, + "\u01da": 6, + "\u01db": 6, + "\u01dc": 6, + "\u1e74": 6, + "\u1e75": 6, + "\u0214": 6, + "\u0215": 6, + "\u0216": 6, + "\u1e7e": 6, + "\u1e7f": 6, + "\u1e7c": 6, + "\u1e7d": 6, + "\u1e86": 6, + "\u1e87": 6, + "\u1e88": 6, + "\u1e89": 6, + "\u1e98": 6, + "\u1e8c": 6, + "\u1e8d": 6, + "\u1e8a": 6, + "\u1e8b": 6, + "\u0232": 6, + "\u0233": 6, + "\u1e8e": 6, + "\u1e8f": 6, + "\u1e99": 6, + "\u1e94": 6, + "\u1e95": 6, + "\u1e90": 6, + "\u1e91": 6, + "\u1e93": 6, + "\u1d76": 6, + "\u01ee": 6, + "\u01ef": 6, + "\u1e9b": 4, + "\ua73e": 6, + "\ua73f": 6, + "\u01e2": 10, + "\u01e3": 10, + "\u1d7a": 9, + "\u1efb": 7, + "\u1d02": 10, + "\u1d14": 10, + "\uab63": 10, + "\u0238": 10, + "\u02a3": 10, + "\u02a5": 10, + "\u02a4": 10, + "\u02a9": 10, + "\u02aa": 8, + "\u02ab": 8, + "\u0239": 10, + "\u02a8": 9, + "\u02a6": 9, + "\u02a7": 8, + "\uab50": 6, + "\uab51": 6, + "\u20a7": 10, + "\u1efa": 8, + "\ufb2e": 6, + "\ufb2f": 6, + "\u0180": 7, + "\u0182": 6, + "\u0183": 6, + "\u0187": 7, + "\u0188": 7, + "\u018a": 8, + "\u018b": 6, + "\u018c": 6, + "\u0193": 7, + "\u01e4": 7, + "\u01e5": 7, + "\u0197": 4, + "\u0196": 4, + "\u0269": 3, + "\u0198": 6, + "\u0199": 5, + "\u019d": 7, + "\u01a4": 8, + "\u01a5": 6, + "\u027d": 6, + "\u01a6": 6, + "\u01ac": 7, + "\u01ad": 4, + "\u01ab": 4, + "\u01ae": 6, + "\u0217": 6, + "\u01b1": 6, + "\u019c": 6, + "\u01b3": 7, + "\u01b4": 8, + "\u01b5": 6, + "\u01b6": 6, + "\u01a2": 8, + "\u01a3": 8, + "\u0222": 6, + "\u0223": 6, + "\u02ad": 6, + "\u02ae": 7, + "\u02af": 8, + "\ufb14": 10, + "\ufb15": 10, + "\ufb17": 10, + "\ufb16": 10, + "\ufb13": 10, + "\u04d0": 6, + "\u04d1": 6, + "\u04d2": 6, + "\u04d3": 6, + "\u04f6": 6, + "\u04f7": 5, + "\u0494": 6, + "\u0495": 5, + "\u04d6": 6, + "\u04d7": 6, + "\u04bc": 8, + "\u04bd": 8, + "\u04be": 8, + "\u04bf": 8, + "\u04da": 6, + "\u04db": 6, + "\u04dc": 8, + "\u04dd": 6, + "\u04c1": 8, + "\u04c2": 6, + "\u04de": 6, + "\u04df": 6, + "\u04e2": 6, + "\u04e3": 6, + "\u04e4": 6, + "\u04e5": 6, + "\u04e6": 6, + "\u04e7": 6, + "\u04ea": 6, + "\u04eb": 6, + "\u04f0": 6, + "\u04f1": 6, + "\u04ee": 6, + "\u04ef": 6, + "\u04f2": 6, + "\u04f3": 6, + "\u04f4": 6, + "\u04f5": 6, + "\u04f8": 8, + "\u04f9": 7, + "\u04ec": 6, + "\u04ed": 6, + "\u0476": 7, + "\u0477": 7, + "\u04d4": 10, + "\u04fa": 7, + "\u0502": 9, + "\ua682": 6, + "\ua680": 7, + "\ua688": 7, + "\u052a": 10, + "\u052c": 7, + "\ua684": 10, + "\u0504": 8, + "\u0510": 6, + "\u04e0": 6, + "\u0506": 7, + "\u048a": 7, + "\u04c3": 6, + "\u049e": 7, + "\u049c": 6, + "\u051e": 6, + "\u051a": 6, + "\u04c5": 7, + "\u052e": 7, + "\u0512": 6, + "\u0520": 9, + "\u0508": 9, + "\u0514": 9, + "\u04cd": 7, + "\u04c9": 7, + "\u0528": 7, + "\u04c7": 6, + "\u04a4": 7, + "\u0522": 9, + "\u050a": 9, + "\u04a8": 7, + "\u0524": 7, + "\u04a6": 9, + "\u048e": 6, + "\u0516": 9, + "\u050c": 6, + "\ua690": 6, + "\u04ac": 6, + "\ua68a": 7, + "\ua68c": 6, + "\u050e": 7, + "\u04b2": 7, + "\u04fc": 6, + "\u04fe": 6, + "\u0526": 7, + "\ua694": 6, + "\u04b4": 8, + "\ua68e": 7, + "\u04b6": 7, + "\u04cb": 6, + "\u04b8": 6, + "\ua692": 7, + "\ua696": 9, + "\ua686": 6, + "\u048c": 7, + "\u0518": 10, + "\u051c": 6, + "\u04d5": 10, + "\u04fb": 6, + "\u0503": 9, + "\ua683": 6, + "\ua681": 7, + "\ua689": 7, + "\u052b": 10, + "\u052d": 7, + "\ua685": 9, + "\u0505": 8, + "\u0511": 6, + "\u04e1": 6, + "\u0507": 7, + "\u048b": 7, + "\u04c4": 5, + "\u049f": 6, + "\u049d": 6, + "\u051f": 6, + "\u051b": 6, + "\u04c6": 7, + "\u052f": 7, + "\u0513": 6, + "\u0521": 9, + "\u0509": 9, + "\u0515": 9, + "\u04ce": 7, + "\u04ca": 7, + "\u0529": 7, + "\u04c8": 6, + "\u04a5": 7, + "\u0523": 9, + "\u050b": 9, + "\u04a9": 7, + "\u0525": 7, + "\u04a7": 9, + "\u048f": 6, + "\u0517": 9, + "\u050d": 6, + "\ua691": 6, + "\u04ad": 6, + "\ua68b": 7, + "\ua68d": 6, + "\u050f": 7, + "\u04b3": 7, + "\u04fd": 6, + "\u04ff": 6, + "\u0527": 7, + "\ua695": 6, + "\u04b5": 7, + "\ua68f": 6, + "\u04b7": 7, + "\u04cc": 6, + "\u04b9": 6, + "\ua693": 7, + "\ua697": 7, + "\ua687": 6, + "\u048d": 7, + "\u0519": 10, + "\u051d": 6, + "\u1f08": 9, + "\u1f00": 6, + "\u1f09": 9, + "\u1f01": 6, + "\u1f0a": 10, + "\u1f02": 6, + "\u1f0b": 10, + "\u1f03": 6, + "\u1f0c": 10, + "\u1f04": 6, + "\u1f0d": 10, + "\u1f05": 7, + "\u1f0e": 9, + "\u1f06": 6, + "\u1f0f": 9, + "\u1f07": 6, + "\u1fba": 9, + "\u1f70": 6, + "\u1fb8": 6, + "\u1fb0": 6, + "\u1fb9": 6, + "\u1fb1": 6, + "\u1fbb": 9, + "\u1f71": 6, + "\u1f88": 9, + "\u1f80": 6, + "\u1f89": 9, + "\u1f81": 6, + "\u1f8a": 10, + "\u1f82": 6, + "\u1f8b": 10, + "\u1f83": 6, + "\u1f8c": 10, + "\u1f84": 6, + "\u1f8d": 10, + "\u1f85": 6, + "\u1f8e": 9, + "\u1f86": 6, + "\u1f8f": 9, + "\u1f87": 6, + "\u1fbc": 6, + "\u1fb4": 6, + "\u1fb6": 6, + "\u1fb7": 6, + "\u1fb2": 6, + "\u1fb3": 6, + "\u1f18": 9, + "\u1f10": 6, + "\u1f19": 9, + "\u1f11": 6, + "\u1f1a": 10, + "\u1f12": 6, + "\u1f1b": 10, + "\u1f13": 6, + "\u1f1c": 10, + "\u1f14": 6, + "\u1f1d": 10, + "\u1f15": 6, + "\u1fc8": 9, + "\u1fc9": 9, + "\u1f72": 6, + "\u1f73": 6, + "\u1f28": 9, + "\u1f20": 6, + "\u1fca": 9, + "\u1f74": 6, + "\u1f29": 9, + "\u1f21": 6, + "\u1f2a": 10, + "\u1f22": 6, + "\u1f2b": 10, + "\u1f23": 6, + "\u1f2c": 10, + "\u1f24": 6, + "\u1f2d": 10, + "\u1f25": 6, + "\u1f2e": 9, + "\u1f26": 6, + "\u1f2f": 9, + "\u1f27": 6, + "\u1f98": 9, + "\u1f90": 6, + "\u1f99": 9, + "\u1f91": 6, + "\u1f9a": 10, + "\u1f92": 6, + "\u1f9b": 10, + "\u1f93": 6, + "\u1f9c": 10, + "\u1f94": 6, + "\u1f9d": 10, + "\u1f95": 6, + "\u1f9e": 9, + "\u1f96": 6, + "\u1f9f": 9, + "\u1f97": 6, + "\u1fcb": 9, + "\u1f75": 6, + "\u1fcc": 6, + "\u1fc3": 6, + "\u1fc2": 6, + "\u1fc4": 6, + "\u1fc6": 6, + "\u1fc7": 6, + "\u1fda": 7, + "\u1f76": 4, + "\u1fdb": 7, + "\u1f77": 3, + "\u1f38": 7, + "\u1f30": 4, + "\u1f39": 10, + "\u1f31": 3, + "\u1f3a": 9, + "\u1f32": 6, + "\u1f3b": 8, + "\u1f33": 6, + "\u1f3c": 9, + "\u1f34": 6, + "\u1f3d": 8, + "\u1f35": 6, + "\u1f3e": 7, + "\u1f36": 5, + "\u1f3f": 7, + "\u1f37": 5, + "\u1fd8": 5, + "\u1fd0": 5, + "\u1fd9": 4, + "\u1fd1": 4, + "\u1fd2": 4, + "\u1fd3": 4, + "\u1fd6": 5, + "\u1fd7": 5, + "\u1ff8": 9, + "\u1f78": 6, + "\u1ff9": 9, + "\u1f79": 6, + "\u1f48": 9, + "\u1f40": 6, + "\u1f49": 9, + "\u1f41": 6, + "\u1f4a": 10, + "\u1f42": 6, + "\u1f4b": 10, + "\u1f43": 6, + "\u1f4c": 10, + "\u1f44": 6, + "\u1f4d": 10, + "\u1f45": 6, + "\u1fec": 9, + "\u1fe4": 6, + "\u1fe5": 6, + "\u1fea": 9, + "\u1f7a": 6, + "\u1feb": 9, + "\u1f7b": 6, + "\u1f59": 9, + "\u1f51": 6, + "\u1f5b": 10, + "\u1f53": 6, + "\u1f5d": 10, + "\u1f55": 6, + "\u1f5f": 9, + "\u1f57": 6, + "\u1fe8": 6, + "\u1fe0": 6, + "\u1fe9": 6, + "\u1fe1": 6, + "\u03d3": 10, + "\u03d4": 7, + "\u1fe2": 6, + "\u1fe3": 6, + "\u1fe7": 6, + "\u1f50": 6, + "\u1f52": 6, + "\u1f54": 6, + "\u1fe6": 6, + "\u1f56": 6, + "\u1ffa": 9, + "\u1f7c": 8, + "\u1ffb": 9, + "\u1f7d": 8, + "\u1f68": 9, + "\u1f60": 8, + "\u1f69": 9, + "\u1f61": 8, + "\u1f6a": 10, + "\u1f62": 8, + "\u1f6b": 10, + "\u1f63": 8, + "\u1f6c": 10, + "\u1f64": 8, + "\u1f6d": 10, + "\u1f65": 8, + "\u1f6e": 9, + "\u1f66": 8, + "\u1f6f": 10, + "\u1f67": 8, + "\u1fa8": 9, + "\u1fa0": 8, + "\u1fa9": 9, + "\u1fa1": 8, + "\u1faa": 10, + "\u1fa2": 8, + "\u1fab": 10, + "\u1fa3": 8, + "\u1fac": 10, + "\u1fa4": 8, + "\u1fad": 10, + "\u1fa5": 8, + "\u1fae": 9, + "\u1fa6": 8, + "\u1faf": 10, + "\u1fa7": 8, + "\u1ffc": 6, + "\u1ff3": 8, + "\u1ff2": 8, + "\u1ff4": 8, + "\u1ff6": 8, + "\u1ff7": 8, + "\u262f": 10, + "\u2610": 10, + "\u2611": 10, + "\u2612": 10, + "\u018d": 6, + "\u01ba": 6, + "\u2c7e": 6, + "\u023f": 6, + "\u2c7f": 6, + "\u0240": 6, + "\u1d80": 6, + "\ua7c4": 6, + "\ua794": 6, + "\u1d81": 7, + "\u1d82": 5, + "\u1d83": 7, + "\ua795": 7, + "\u1d84": 6, + "\u1d85": 3, + "\u1d86": 7, + "\u1d87": 7, + "\u1d88": 6, + "\u1d89": 6, + "\u1d8a": 6, + "\u1d8b": 6, + "\u1d8c": 6, + "\u1d8d": 7, + "\ua7c6": 7, + "\u1d8e": 7, + "\u1d8f": 7, + "\u1d90": 7, + "\u1d92": 7, + "\u1d93": 7, + "\u1d94": 6, + "\u1d95": 7, + "\u1d96": 3, + "\u1d97": 7, + "\u1d98": 6, + "\u1d99": 7, + "\u1d9a": 6, + "\u1e9a": 6, + "\u2152": 10, + "\u2158": 10, + "\u20a8": 10, + "\u20af": 10, + "\u2030": 8, + "\u20b4": 8, + "\u2260": 6, + "\u04bb": 6, + "\u0391": 6, + "\u0392": 6, + "\u0393": 6, + "\u0394": 6, + "\u0395": 6, + "\u0396": 6, + "\u0397": 6, + "\u0398": 6, + "\u0399": 4, + "\u039a": 6, + "\u039b": 6, + "\u039c": 6, + "\u039d": 6, + "\u039e": 6, + "\u039f": 6, + "\u03a0": 6, + "\u03a1": 6, + "\u03a3": 6, + "\u03a4": 6, + "\u03a5": 6, + "\u03a6": 6, + "\u03a7": 6, + "\u03a8": 6, + "\u03a9": 6, + "\u03b1": 6, + "\u03b2": 6, + "\u03b3": 6, + "\u03b4": 6, + "\u03b5": 6, + "\u03b6": 6, + "\u03b7": 6, + "\u03b8": 6, + "\u03b9": 3, + "\u03ba": 5, + "\u03bb": 6, + "\u03bc": 6, + "\u03bd": 6, + "\u03be": 6, + "\u03bf": 6, + "\u03c0": 6, + "\u03c1": 6, + "\u03c2": 6, + "\u03c3": 7, + "\u03c4": 6, + "\u03c5": 6, + "\u03c6": 6, + "\u03c7": 6, + "\u03c8": 6, + "\u03c9": 8, + "\u0402": 8, + "\u0405": 6, + "\u0406": 4, + "\u0408": 6, + "\u0409": 8, + "\u040a": 7, + "\u040b": 7, + "\u0410": 6, + "\u0411": 6, + "\u0412": 6, + "\u0413": 6, + "\u0414": 7, + "\u0415": 6, + "\u0416": 8, + "\u0417": 6, + "\u0418": 6, + "\u041a": 6, + "\u041b": 6, + "\u041c": 6, + "\u041d": 6, + "\u041e": 6, + "\u041f": 6, + "\u0420": 6, + "\u0421": 6, + "\u0422": 6, + "\u0423": 6, + "\u0424": 8, + "\u0425": 6, + "\u0426": 7, + "\u0427": 6, + "\u0428": 8, + "\u0429": 9, + "\u042a": 7, + "\u042b": 8, + "\u042c": 6, + "\u042d": 6, + "\u042e": 8, + "\u042f": 6, + "\u0430": 6, + "\u0431": 6, + "\u0432": 6, + "\u0433": 5, + "\u0434": 7, + "\u0435": 6, + "\u0436": 6, + "\u0437": 6, + "\u0438": 6, + "\u043a": 5, + "\u043b": 6, + "\u043c": 6, + "\u043d": 6, + "\u043e": 6, + "\u043f": 6, + "\u0440": 6, + "\u0441": 6, + "\u0442": 6, + "\u0443": 6, + "\u0444": 6, + "\u0445": 6, + "\u0446": 6, + "\u0447": 6, + "\u0448": 6, + "\u0449": 7, + "\u044a": 7, + "\u044b": 7, + "\u044c": 6, + "\u044d": 6, + "\u044e": 8, + "\u044f": 6, + "\u0454": 6, + "\u0455": 6, + "\u0456": 2, + "\u0458": 6, + "\u0459": 8, + "\u045a": 7, + "\u2013": 7, + "\u2014": 9, + "\u2018": 3, + "\u2019": 3, + "\u201c": 5, + "\u201d": 5, + "\u201e": 5, + "\u2026": 8, + "\u204a": 5, + "\u2190": 8, + "\u2191": 6, + "\u2192": 8, + "\u2193": 6, + "\u21c4": 8, + "\uff0b": 6, + "\u018f": 6, + "\u0259": 6, + "\u025b": 6, + "\u026a": 4, + "\u04ae": 6, + "\u04af": 6, + "\u04e8": 6, + "\u04e9": 6, + "\u02bb": 2, + "\u02cc": 2, + "\u037e": 2, + "\u0138": 5, + "\u1e9e": 6, + "\u20bd": 7, + "\u20ac": 7, + "\u0462": 7, + "\u0463": 7, + "\u0474": 7, + "\u0475": 7, + "\u04c0": 4, + "\u0472": 6, + "\u0473": 6, + "\u2070": 5, + "\u2074": 5, + "\u2075": 5, + "\u2076": 5, + "\u2077": 5, + "\u2078": 5, + "\u2079": 5, + "\u207a": 4, + "\u207b": 4, + "\u207c": 4, + "\u207d": 3, + "\u207e": 3, + "\u2071": 2, + "\u2122": 9, + "\u0294": 6, + "\u0295": 6, + "\u29c8": 8, + "\u2694": 8, + "\u2620": 8, + "\u049a": 7, + "\u049b": 6, + "\u0492": 7, + "\u0493": 6, + "\u04b0": 6, + "\u04b1": 6, + "\u04d8": 6, + "\u04d9": 6, + "\u0496": 9, + "\u0497": 7, + "\u04a2": 7, + "\u04a3": 7, + "\u04ba": 6, + "\u05d0": 6, + "\u05d1": 6, + "\u05d2": 5, + "\u05d3": 6, + "\u05d4": 6, + "\u05d5": 2, + "\u05d6": 4, + "\u05d7": 6, + "\u05d8": 6, + "\u05d9": 2, + "\u05db": 6, + "\u05dc": 6, + "\u05de": 6, + "\u05dd": 6, + "\u05e0": 4, + "\u05df": 2, + "\u05e1": 6, + "\u05e2": 6, + "\u05e4": 6, + "\u05e3": 6, + "\u05e6": 6, + "\u05e5": 6, + "\u05e7": 6, + "\u05e8": 6, + "\u0387": 2, + "\u2010": 4, + "\u201a": 3, + "\u2020": 6, + "\u2021": 6, + "\u2022": 3, + "\u2031": 9, + "\u2032": 3, + "\u2033": 5, + "\u2034": 7, + "\u2035": 3, + "\u2036": 5, + "\u2037": 7, + "\u2039": 4, + "\u203a": 4, + "\u203b": 8, + "\u203c": 4, + "\u203d": 6, + "\u2042": 8, + "\u2048": 8, + "\u2049": 8, + "\u204b": 7, + "\u204e": 4, + "\u204f": 2, + "\u2051": 4, + "\u2052": 4, + "\u2057": 9, + "\u2117": 8, + "\u2212": 6, + "\u2213": 6, + "\u221e": 8, + "\u2600": 9, + "\u2601": 9, + "\u2608": 8, + "\u0404": 6, + "\u2632": 6, + "\u2635": 6, + "\u263d": 9, + "\u2640": 4, + "\u2642": 6, + "\u26a5": 6, + "\u2660": 6, + "\u2663": 6, + "\u2665": 6, + "\u2666": 6, + "\u2669": 4, + "\u266a": 6, + "\u266b": 8, + "\u266c": 8, + "\u266d": 4, + "\u266e": 4, + "\u266f": 6, + "\u2680": 8, + "\u2681": 8, + "\u2682": 8, + "\u2683": 8, + "\u2684": 8, + "\u2685": 8, + "\u02ac": 6, + "\u26a1": 6, + "\u26cf": 9, + "\u2714": 7, + "\u2744": 8, + "\u274c": 7, + "\u2764": 8, + "\u2b50": 8, + "\u2e18": 6, + "\u2e2e": 6, + "\u2e35": 2, + "\u2e38": 6, + "\u2e41": 2, + "\u2e4b": 6, + "\u295d": 6, + "\u1614": 6, + "\u0190": 6, + "\u07c8": 6, + "\u03db": 6, + "\u3125": 6, + "\u2c6f": 6, + "\u15fa": 6, + "\u0186": 6, + "\u15e1": 6, + "\u018e": 6, + "\u2132": 6, + "\u2141": 6, + "\ua7b0": 6, + "\ua780": 6, + "\u0500": 6, + "\ua779": 6, + "\u1d1a": 6, + "\u27d8": 6, + "\u2229": 6, + "\u0245": 6, + "\u2144": 6, + "\u0250": 6, + "\u0254": 6, + "\u01dd": 6, + "\u025f": 5, + "\u1d77": 6, + "\u0265": 6, + "\u1d09": 2, + "\u027e": 6, + "\u029e": 5, + "\ua781": 3, + "\u026f": 6, + "\u0279": 6, + "\u0287": 4, + "\u028c": 6, + "\u028d": 6, + "\u028e": 6, + "\u0531": 6, + "\u0532": 6, + "\u0533": 7, + "\u0534": 7, + "\u0536": 6, + "\u0537": 6, + "\u0539": 7, + "\u053a": 7, + "\u053b": 6, + "\u053c": 5, + "\u053d": 7, + "\u053e": 6, + "\u053f": 6, + "\u0540": 6, + "\u0541": 6, + "\u0542": 7, + "\u0543": 6, + "\u0544": 7, + "\u0545": 6, + "\u0546": 6, + "\u0547": 6, + "\u0548": 6, + "\u0549": 6, + "\u054b": 6, + "\u054c": 7, + "\u054d": 6, + "\u054e": 6, + "\u054f": 6, + "\u0550": 6, + "\u0551": 6, + "\u0552": 5, + "\u0553": 6, + "\u0554": 6, + "\u0555": 6, + "\u0556": 6, + "\u0559": 3, + "\u0561": 6, + "\u0562": 6, + "\u0563": 7, + "\u0564": 7, + "\u0565": 6, + "\u0566": 7, + "\u0567": 5, + "\u0568": 6, + "\u0569": 6, + "\u056a": 7, + "\u056b": 6, + "\u056c": 3, + "\u056d": 7, + "\u056e": 6, + "\u056f": 6, + "\u0570": 6, + "\u0571": 6, + "\u0572": 7, + "\u0573": 6, + "\u0574": 7, + "\u0575": 6, + "\u0576": 7, + "\u0577": 6, + "\u0578": 6, + "\u0579": 6, + "\u057a": 6, + "\u057b": 6, + "\u057c": 6, + "\u057d": 6, + "\u057e": 7, + "\u057f": 8, + "\u0580": 6, + "\u0581": 6, + "\u0582": 5, + "\u0583": 8, + "\u0584": 7, + "\u0585": 6, + "\u0586": 6, + "\u0587": 7, + "\u05e9": 6, + "\u05ea": 6, + "\u0538": 6, + "\u055a": 3, + "\u055b": 3, + "\u055c": 4, + "\u055d": 3, + "\u055e": 4, + "\u055f": 6, + "\u0560": 6, + "\u0588": 7, + "\u058f": 6, + "\u017f": 4, + "\u01b7": 6, + "\u0292": 6, + "\u01f7": 6, + "\u01bf": 6, + "\u021c": 6, + "\u021d": 6, + "\u0224": 6, + "\u0225": 6, + "\u02d9": 2, + "\ua75a": 6, + "\ua75b": 5, + "\u2011": 4, + "\u214b": 6, + "\u23cf": 6, + "\u23e9": 7, + "\u23ea": 7, + "\u23ed": 8, + "\u23ee": 8, + "\u23ef": 7, + "\u23f4": 4, + "\u23f5": 4, + "\u23f6": 6, + "\u23f7": 6, + "\u23f8": 4, + "\u23f9": 6, + "\u23fa": 6, + "\u23fb": 8, + "\u23fc": 8, + "\u23fd": 2, + "\u2b58": 8, + "\u25b2": 6, + "\u25b6": 7, + "\u25bc": 6, + "\u25c0": 7, + "\u25cf": 5, + "\u25e6": 4, + "\u25d8": 4, + "\u2693": 8, + "\u26e8": 8, + "\u0132": 6, + "\u0133": 5, + "\u01c9": 8, + "\ua728": 8, + "\ua729": 7, + "\ua739": 9, + "\ua73b": 9, + "\ufb00": 8, + "\ufb01": 6, + "\ufb02": 7, + "\ufb03": 9, + "\ufb05": 6, + "\ufffd": 8, + "\u0535": 6, + "\u054a": 6, + "\u16a0": 5, + "\u16a2": 6, + "\u16a3": 6, + "\u16a4": 6, + "\u16a5": 6, + "\u16a6": 5, + "\u16a7": 5, + "\u16a8": 4, + "\u16a9": 5, + "\u16aa": 5, + "\u16ab": 5, + "\u16ac": 6, + "\u16ad": 4, + "\u16ae": 4, + "\u16af": 6, + "\u16b0": 6, + "\u16b1": 5, + "\u16b2": 4, + "\u16b3": 5, + "\u16b4": 5, + "\u16b6": 6, + "\u16b7": 6, + "\u16b8": 6, + "\u16b9": 5, + "\u16ba": 6, + "\u16bb": 6, + "\u16bc": 6, + "\u16bd": 4, + "\u16be": 6, + "\u16bf": 4, + "\u16c0": 6, + "\u16c1": 2, + "\u16c2": 4, + "\u16c3": 7, + "\u16c4": 6, + "\u16c5": 6, + "\u16c6": 4, + "\u16c7": 6, + "\u16c8": 5, + "\u16c9": 6, + "\u16ca": 4, + "\u16cb": 6, + "\u16cc": 2, + "\u16cd": 4, + "\u16ce": 6, + "\u16cf": 6, + "\u16d0": 4, + "\u16d1": 5, + "\u16d2": 5, + "\u16d3": 4, + "\u16d4": 5, + "\u16d5": 5, + "\u16d6": 6, + "\u16d7": 6, + "\u16d8": 6, + "\u16d9": 4, + "\u16da": 4, + "\u16db": 5, + "\u16dc": 6, + "\u16dd": 6, + "\u16de": 6, + "\u16df": 7, + "\u16e0": 8, + "\u16e1": 6, + "\u16e2": 8, + "\u16e3": 6, + "\u16e4": 6, + "\u16e5": 6, + "\u16e6": 6, + "\u16e7": 2, + "\u16e8": 6, + "\u16e9": 5, + "\u16ea": 8, + "\u16eb": 3, + "\u16ec": 2, + "\u16ed": 6, + "\u16ee": 6, + "\u16ef": 6, + "\u16f0": 6, + "\u16f1": 6, + "\u16f2": 6, + "\u16f3": 8, + "\u16f4": 5, + "\u16f5": 3, + "\u16f6": 6, + "\u16f7": 6, + "\u16f8": 6, + "\u263a": 6, + "\u263b": 8, + "\u2639": 6, + "\u05da": 6, + "\u05f3": 3, + "\u05f4": 5, + "\u05f0": 4, + "\u05f1": 4, + "\u05f2": 4, + "\u05be": 6, + "\u05c3": 2, + "\u05c6": 4, + "\u1d00": 6, + "\u0299": 6, + "\u1d04": 6, + "\u1d05": 6, + "\u1d07": 6, + "\ua730": 6, + "\u0262": 6, + "\u029c": 6, + "\u1d0a": 6, + "\u1d0b": 6, + "\u029f": 6, + "\u1d0d": 6, + "\u0274": 6, + "\u1d0f": 6, + "\u1d18": 6, + "\ua7af": 6, + "\u0280": 6, + "\ua731": 6, + "\u1d1b": 6, + "\u1d1c": 6, + "\u1d20": 6, + "\u1d21": 6, + "\u028f": 6, + "\u1d22": 6, + "\u0271": 6, + "\u0273": 7, + "\u0272": 7, + "\u0288": 4, + "\u0256": 7, + "\u0261": 6, + "\u02a1": 6, + "\u0255": 6, + "\u0291": 6, + "\u0278": 6, + "\u029d": 6, + "\u02a2": 6, + "\u027b": 7, + "\u0281": 6, + "\u0266": 6, + "\u028b": 6, + "\u0270": 6, + "\u026c": 5, + "\u026e": 6, + "\u0298": 6, + "\u01c0": 2, + "\u01c3": 2, + "\u01c2": 6, + "\u01c1": 4, + "\u0253": 6, + "\u0257": 7, + "\u1d91": 7, + "\u0284": 7, + "\u0260": 7, + "\u029b": 7, + "\u0267": 6, + "\u026b": 6, + "\u0268": 4, + "\u0289": 8, + "\u028a": 6, + "\u0258": 6, + "\u0275": 6, + "\u0264": 6, + "\u025c": 6, + "\u025e": 6, + "\u0251": 6, + "\u0252": 6, + "\u025a": 8, + "\u025d": 8, + "\u0181": 8, + "\u0189": 7, + "\u0191": 7, + "\u01a9": 6, + "\u01b2": 6, + "\u10a0": 6, + "\u10a1": 8, + "\u10a2": 8, + "\u10a3": 6, + "\u10a4": 6, + "\u10a5": 8, + "\u10a6": 8, + "\u10a7": 8, + "\u10a8": 6, + "\u10a9": 6, + "\u10aa": 8, + "\u10ab": 7, + "\u10ac": 6, + "\u10ad": 8, + "\u10ae": 8, + "\u10af": 7, + "\u10b0": 8, + "\u10b1": 6, + "\u10b2": 6, + "\u10b3": 8, + "\u10b4": 6, + "\u10b5": 6, + "\u10b6": 6, + "\u10b7": 6, + "\u10b8": 6, + "\u10b9": 6, + "\u10ba": 6, + "\u10bb": 8, + "\u10bc": 6, + "\u10bd": 6, + "\u10be": 6, + "\u10bf": 6, + "\u10c0": 8, + "\u10c1": 6, + "\u10c2": 6, + "\u10c3": 6, + "\u10c4": 6, + "\u10c5": 8, + "\u10c7": 6, + "\u10cd": 6, + "\u10d0": 6, + "\u10d1": 6, + "\u10d2": 6, + "\u10d3": 6, + "\u10d4": 6, + "\u10d5": 6, + "\u10d6": 6, + "\u10d7": 6, + "\u10d8": 6, + "\u10d9": 6, + "\u10da": 8, + "\u10db": 6, + "\u10dc": 6, + "\u10dd": 6, + "\u10de": 6, + "\u10df": 6, + "\u10e0": 6, + "\u10e1": 6, + "\u10e2": 6, + "\u10e3": 6, + "\u10e4": 6, + "\u10e5": 6, + "\u10e6": 6, + "\u10e7": 6, + "\u10e8": 6, + "\u10e9": 6, + "\u10ea": 6, + "\u10eb": 6, + "\u10ec": 6, + "\u10ed": 6, + "\u10ee": 6, + "\u10ef": 5, + "\u10f0": 6, + "\u10f1": 7, + "\u10f2": 6, + "\u10f3": 6, + "\u10f4": 6, + "\u10f5": 6, + "\u10f6": 6, + "\u10f7": 6, + "\u10f8": 6, + "\u10f9": 6, + "\u10fa": 6, + "\u10fb": 4, + "\u10fc": 4, + "\u10fd": 6, + "\u10fe": 6, + "\u10ff": 6, + "\ufb4a": 6, + "\ufb2b": 6, + "\ufb4e": 6, + "\ufb44": 6, + "\ufb3b": 5, + "\ufb1f": 4, + "\ufb1d": 2, + "\ufb4b": 3, + "\ufb35": 4, + "\ufb4c": 6, + "\ufb31": 6, + "\ua727": 6, + "\ua726": 6, + "\u027a": 6, + "\u2c71": 8, + "\u02a0": 7, + "\u0297": 6, + "\u0296": 6, + "\u026d": 3, + "\u0277": 8, + "\u027f": 6, + "\u0285": 6, + "\u0286": 7, + "\u0293": 6, + "\u029a": 6, + "\u20aa": 8, + "\u20be": 7, + "\u058a": 6, + "\u2d00": 6, + "\u2d01": 7, + "\u2d02": 7, + "\u2d03": 6, + "\u2d04": 6, + "\u2d05": 6, + "\u2d06": 7, + "\u2d21": 6, + "\u2d07": 6, + "\u2d08": 6, + "\u2d09": 6, + "\u2d0a": 6, + "\u2d0b": 6, + "\u2d0c": 6, + "\u2d22": 6, + "\u2d0d": 6, + "\u2d0e": 7, + "\u2d0f": 7, + "\u2d10": 6, + "\u2d11": 6, + "\u2d12": 6, + "\u2d23": 6, + "\u2d13": 6, + "\u2d14": 6, + "\u2d15": 6, + "\u2d16": 6, + "\u2d17": 6, + "\u2d18": 6, + "\u2d19": 6, + "\u2d1a": 6, + "\u2d1b": 6, + "\u2d1c": 6, + "\u2d1d": 7, + "\u2d1e": 6, + "\u2d24": 6, + "\u2d1f": 6, + "\u2d20": 6, + "\u2d25": 6, + "\u215b": 9, + "\u215c": 9, + "\u215d": 9, + "\u215e": 9, + "\u2153": 9, + "\u2154": 9, + "\u2709": 8, + "\u2602": 8, + "\u2614": 8, + "\u2604": 8, + "\u26c4": 7, + "\u2603": 8, + "\u231b": 8, + "\u231a": 8, + "\u2690": 8, + "\u270e": 8, + "\u2763": 6, + "\u2664": 6, + "\u2667": 6, + "\u2661": 6, + "\u2662": 6, + "\u26c8": 9, + "\u2630": 6, + "\u2631": 6, + "\u2633": 6, + "\u2634": 6, + "\u2636": 6, + "\u2637": 6, + "\u2194": 9, + "\u21d2": 9, + "\u21cf": 9, + "\u21d4": 9, + "\u21f5": 7, + "\u2200": 8, + "\u2203": 6, + "\u2204": 6, + "\u2209": 6, + "\u220b": 6, + "\u220c": 6, + "\u2282": 6, + "\u2283": 6, + "\u2284": 6, + "\u2285": 6, + "\u2227": 6, + "\u2228": 6, + "\u22bb": 6, + "\u22bc": 6, + "\u22bd": 6, + "\u2225": 4, + "\u2262": 7, + "\u22c6": 4, + "\u2211": 6, + "\u22a4": 6, + "\u22a5": 6, + "\u22a2": 6, + "\u22a8": 6, + "\u2254": 8, + "\u2201": 5, + "\u2234": 6, + "\u2235": 6, + "\u221b": 8, + "\u221c": 8, + "\u2202": 6, + "\u22c3": 6, + "\u2286": 6, + "\u2287": 6, + "\u25a1": 6, + "\u25b3": 6, + "\u25b7": 7, + "\u25bd": 6, + "\u25c1": 7, + "\u25c6": 6, + "\u25c7": 6, + "\u25cb": 6, + "\u25ce": 8, + "\u2606": 8, + "\u2605": 8, + "\u2718": 7, + "\u2080": 5, + "\u2081": 4, + "\u2082": 5, + "\u2083": 5, + "\u2084": 5, + "\u2085": 5, + "\u2086": 5, + "\u2087": 5, + "\u2088": 5, + "\u2089": 5, + "\u208a": 4, + "\u208b": 4, + "\u208c": 4, + "\u208d": 3, + "\u208e": 3, + "\u222b": 6, + "\u222e": 6, + "\u221d": 7, + "\u2300": 8, + "\u2302": 8, + "\u2318": 8, + "\u3012": 6, + "\u027c": 6, + "\u0184": 7, + "\u0185": 7, + "\u1e9f": 6, + "\u023d": 7, + "\u019a": 4, + "\u019b": 6, + "\u0220": 6, + "\u019e": 6, + "\u019f": 6, + "\u01a7": 6, + "\u01a8": 6, + "\u01aa": 6, + "\u01b8": 6, + "\u01b9": 6, + "\u01bb": 6, + "\u01bc": 6, + "\u01bd": 6, + "\u01be": 6, + "\u0221": 8, + "\u0234": 4, + "\u0235": 8, + "\u0236": 5, + "\u023a": 6, + "\u2c65": 7, + "\u023b": 6, + "\u023c": 6, + "\u0246": 6, + "\u0247": 7, + "\u023e": 6, + "\u2c66": 6, + "\u0241": 6, + "\u0242": 6, + "\u0243": 7, + "\u0244": 8, + "\u0248": 7, + "\u0249": 7, + "\u024a": 7, + "\u024b": 7, + "\u024c": 7, + "\u024d": 7, + "\u024e": 8, + "\u024f": 8, + "\u1e9c": 5, + "\u1e9d": 5, + "\u1efc": 6, + "\u1efd": 5, + "\u1efe": 6, + "\u1eff": 7, + "\ua7a8": 7, + "\ua7a9": 6, + "\ud800\udf30": 6, + "\ud800\udf31": 6, + "\ud800\udf32": 6, + "\ud800\udf33": 6, + "\ud800\udf34": 6, + "\ud800\udf35": 6, + "\ud800\udf36": 6, + "\ud800\udf37": 6, + "\ud800\udf38": 6, + "\ud800\udf39": 2, + "\ud800\udf3a": 6, + "\ud800\udf3b": 6, + "\ud800\udf3c": 6, + "\ud800\udf3d": 6, + "\ud800\udf3e": 6, + "\ud800\udf3f": 6, + "\ud800\udf40": 6, + "\ud800\udf41": 6, + "\ud800\udf42": 6, + "\ud800\udf43": 6, + "\ud800\udf44": 6, + "\ud800\udf45": 6, + "\ud800\udf46": 6, + "\ud800\udf47": 6, + "\ud800\udf48": 6, + "\ud800\udf49": 6, + "\ud800\udf4a": 6, + "\ud83c\udf27": 9, + "\ud83d\udd25": 7, + "\ud83c\udf0a": 9, + "\u2150": 9, + "\u2151": 9, + "\u2155": 9, + "\u2156": 9, + "\u2157": 9, + "\u2159": 8, + "\u215a": 8, + "\u215f": 7, + "\u2189": 9, + "\ud83d\udde1": 9, + "\ud83c\udff9": 9, + "\ud83e\ude93": 7, + "\ud83d\udd31": 9, + "\ud83c\udfa3": 9, + "\ud83e\uddea": 8, + "\u2697": 8, + "\u2bea": 8, + "\u2beb": 8, + "\u2c6d": 6, + "\ud83d\udee1": 8, + "\u2702": 8, + "\ud83c\udf56": 9, + "\ud83e\udea3": 8, + "\ud83d\udd14": 8, + "\u23f3": 8, + "\u2691": 8, + "\u20a0": 6, + "\u20a1": 6, + "\u20a2": 6, + "\u20a3": 7, + "\u20a4": 6, + "\u20a5": 6, + "\u20a6": 8, + "\u20a9": 8, + "\u20ab": 7, + "\u20ad": 7, + "\u20ae": 6, + "\u20b0": 6, + "\u20b1": 8, + "\u20b2": 6, + "\u20b3": 8, + "\u20b5": 6, + "\u20b6": 6, + "\u20b7": 8, + "\u20b8": 6, + "\u20b9": 6, + "\u20ba": 7, + "\u20bb": 8, + "\u20bc": 6, + "\u20bf": 6 +} diff --git a/smithed_libraries/plugins/wiki/models.py b/smithed_libraries/plugins/wiki/models.py new file mode 100644 index 00000000..5b40fcf0 --- /dev/null +++ b/smithed_libraries/plugins/wiki/models.py @@ -0,0 +1,119 @@ +from typing import Annotated, Any, ClassVar, Literal + +from pydantic import BaseModel, Field, RootModel + + +class WikiOpts(BaseModel): + implementation_folder: str = "wiki" + """ + The base folder the generated files go into. + """ + + tick_function: str = "impl/technical/tick" + load_function: str = "impl/technical/load" + +class SectionModel(BaseModel): + """ + Represents a section of pages for a Wiki. + """ + _section_registry: ClassVar[list[type[BaseModel]]] = [] + + @classmethod + def __init_subclass__(cls, **kwargs: Any): + super().__init_subclass__(**kwargs) + cls._section_registry.append(cls) + + +class NonReferenceSectionModel(SectionModel): + """ + Represents any section that is not a reference to another section + """ + + title: str + """The title of the section""" + icon: str | None = None + """The icon used to display the section""" + + +class ReferenceSectionModel(BaseModel): + """ + Represents a reference to another section + """ + + type: Literal["smithed.wiki:reference"] = "smithed.wiki:reference" + """The type of the section""" + path: str + """The path to the referenced section in the Beet context""" + + +class TitleSectionModel(NonReferenceSectionModel): + """ + Represents a title page + """ + + type: Literal["smithed.wiki:title"] = "smithed.wiki:title" + """The type of the section""" + + description: str + """The description of the book""" + + +class CategorySectionModel(NonReferenceSectionModel): + """ + Represents a category of sections + """ + + type: Literal["smithed.wiki:category"] = "smithed.wiki:category" + """The type of the section""" + + description: str + """The description of the category""" + + sections: list[SectionUnion] + """The sections in the category""" + + +class TOCSectionModel(NonReferenceSectionModel): + """ + Represents the table of contents of the book + """ + type: Literal["smithed.wiki:toc"] = "smithed.wiki:toc" + """The type of the section""" + + sections: list[int] + """The index to each section in the book""" + + +class ArticleSectionModel(NonReferenceSectionModel): + """ + Represents an article section + """ + type: Literal["smithed.wiki:article"] = "smithed.wiki:article" + """The type of the section""" + + content: str + """The content of the article""" + + +SectionUnion = Annotated[ + ReferenceSectionModel + | ArticleSectionModel + | CategorySectionModel + | TitleSectionModel + | TOCSectionModel, + Field(discriminator="type"), +] +"""Represents the possible types for a section""" + + +class BookModel(BaseModel): + components: dict[str, Any] + sections: list[SectionUnion] + grant_automatically: bool = False + + +class AnySectionModel(RootModel[SectionUnion]): + root: SectionUnion + + +AnySectionModel.model_rebuild() diff --git a/smithed_libraries/plugins/wiki/plugin.py b/smithed_libraries/plugins/wiki/plugin.py new file mode 100644 index 00000000..4d857471 --- /dev/null +++ b/smithed_libraries/plugins/wiki/plugin.py @@ -0,0 +1,729 @@ +import logging +from typing import Any, Protocol, cast + +from beet import ( + Advancement, + Context, + Dialog, + Font, + Function, + FunctionTag, + LootTable, + Predicate, +) +from beet.core.utils import JsonDict + +from .models import ( + AnySectionModel, + ArticleSectionModel, + BookModel, + CategorySectionModel, + NonReferenceSectionModel, + ReferenceSectionModel, + SectionModel, + SectionUnion, + TOCSectionModel, + TitleSectionModel, + WikiOpts, +) +from .resources import WikiBook, WikiSection + +logger = logging.getLogger(__name__) + + +PAGE_INDEX_OFFSET = 1000 +SEPARATOR = "dark_gray" +DESCRIPTION = "gray" +PLACEHOLDER = "smithed.wiki:wiki/placeholder" + + +class SectionBuilder[T: SectionModel](Protocol): + def __call__( + self, key: str, builder: WikiBuilder, section: T + ) -> list[tuple[str, JsonDict]]: ... + + +class WikiBuilder: + """ + The context object used to build wiki books and sections. + """ + + current: BookModel + """ + The book that is currently being built. + """ + current_path: str + """ + The path to the current book. + """ + current_font: dict[tuple[str, int], int] + """ + The set of font characters current in use. + + Where the key is a tuple of (`path to image`, `height`) and the value is the unicode character offset from \\uE000. + """ + + builders: dict[str, SectionBuilder[Any]] + """ + The builders for each section type. + """ + + def __init__(self, ctx: Context): + # Define the default builders for the sections + self.builders = { + "smithed.wiki:title": TitleSectionBuilder(), + "smithed.wiki:category": CategorySectionBuilder(), + "smithed.wiki:toc": TOCSectionBuilder(), + "smithed.wiki:article": ArticleSectionBuilder(), + } + + self.ctx = ctx + + # Get the override for the implementation folder if present + self.opts = WikiOpts.model_validate(ctx.meta.get("smithed.wiki", {})) + + # Predicate used to detect if the player is holding a wiki book in either hand + ctx.data["smithed.wiki:impl/technical/holding_book"] = Predicate( + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "equipment": { + "offhand": { + "predicates": { + "minecraft:custom_data": { + "smithed": {"wiki": {"book": True}} + } + } + } + } + }, + }, + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "equipment": { + "mainhand": { + "predicates": { + "minecraft:custom_data": { + "smithed": {"wiki": {"book": True}} + } + } + } + } + }, + }, + ], + } + ) + + # Define a scoreboard which is used to track when the player opens a book + ctx.data[Function].setdefault( + "smithed.wiki:impl/technical/load", Function() + ).append( + """ + schedule function smithed.wiki:impl/technical/tick 1t replace + scoreboard objectives add smithed.wiki.use_book minecraft.used:minecraft.written_book + """ + ) + + # Function responsible for detecting the previously defined scoreboard + ctx.data[Function].setdefault( + "smithed.wiki:impl/technical/tick", Function() + ).append( + """ + schedule function smithed.wiki:impl/technical/tick 1t replace + execute as @a[scores={smithed.wiki.use_book=1..}] run function smithed.wiki:impl/wiki/use_book + """ + ) + + ctx.data[FunctionTag].setdefault("minecraft:load", FunctionTag()).add( + "smithed.wiki:impl/technical/load" + ) + + # The function ran on players that use a book + ctx.data["smithed.wiki:impl/wiki/use_book"] = Function(""" + # Reset the player's score + scoreboard players reset @s smithed.wiki.use_book + + # Exit early if they didn't use a wiki book + execute unless predicate smithed.wiki:impl/technical/holding_book run return fail + + # Determine the ID of the book they used + data remove storage smithed.wiki:temp trigger_name + data modify storage smithed.wiki:temp trigger_name set from entity @s SelectedItem.components."minecraft:custom_data".smithed.wiki.trigger + execute unless data storage smithed.wiki:temp trigger_name run data modify storage smithed.wiki:temp trigger_name set from entity @s equipment.offhand.components."minecraft:custom_data".smithed.wiki.trigger + + # Display the book + function smithed.wiki:impl/wiki/use_book/macro with storage smithed.wiki:temp {} + """) + + # Function used to open the first page of the book via macri + ctx.data["smithed.wiki:impl/wiki/use_book/macro"] = Function(f""" + $trigger $(trigger_name) set {PAGE_INDEX_OFFSET} + """) + + # Add the plugin to build all books at the end of the pipeline step + ctx.require(self.build_all) + + def get_image(self, texture: str | None, height: int = 16) -> tuple[str, str]: + """ + Parameters + --- + **texture**: The path in context to the texture. If `None`, the placeholder texture is used instead. + + **height**: The height of the texture in pixels. Defaults to 16px. + + Returns + --- + A tuple of a unicode character and font name to render the given texture. + """ + if texture is None or len(texture.strip()) == 0: + texture = PLACEHOLDER + + # If the texture & height has been registered, return it + if (texture, height) in self.current_font: + idx = self.current_font[(texture, height)] + return chr(0xE000 + idx), self.current_path + + # If the texture is found in context, register it in the dictionary and return it + if texture in self.ctx.assets.textures: + idx = len(self.current_font) + self.current_font[(texture, height)] = idx + return chr(0xE000 + idx), self.current_path + else: + raise KeyError(f"Texture {texture} not found") + + def build(self, key: str, section: SectionUnion) -> list[tuple[str, JsonDict]]: + """ + Builds the provided section. + Parameters + --- + **key**: The key used to identify the section. + + **section**: The section to build. + Returns + --- + A list of pages produced by the section. + Each page is represented by a tuple where: + - The first element is the key that generated the page (used for nesting) + - And the second is the JSON body of the page. + """ + if section.type == "smithed.wiki:reference": + while section.type == "smithed.wiki:reference": + section = AnySectionModel.model_validate( + self.ctx.data[WikiSection][section.path].data + ).root + + dialog = self.builders[section.type](key, self, section) + + return dialog + + def resolve_change_page( + self, contents: Any, trigger_name: str, key_to_index: dict[str, int] + ): + """ + Recursively update change_page actions to the appropriate trigger command + + Parameters + --- + **contents**: The object to update + + **trigger_name**: The name of the trigger to be used in the command + + **key_to_index**: A mapping from section key to page index + """ + match contents: + case list(): + for c in contents: + self.resolve_change_page(c, trigger_name, key_to_index) + case dict(): + if (click_event := contents.get("click_event")) and isinstance( + click_event, dict + ): + if click_event.get("action") == "change_page": + key = click_event.get("page") + if ( + isinstance(key, str) + and key.startswith("%") + and key.endswith("%") + ): + key = key[1:-1] + contents["click_event"] = { + "action": "run_command", + "command": f"/trigger {trigger_name} set {key_to_index[key] + PAGE_INDEX_OFFSET}", + } + + for c in contents.values(): + self.resolve_change_page(c, trigger_name, key_to_index) + case _: + pass + + def build_all(self, ctx: Context): + """ + Builds all wiki books loaded into context + """ + yield + + for location, book in ctx.data[WikiBook].items(): + logger.info(f"Building book {location}") + # Validate the Pydantic model and configure the builder + book = BookModel.model_validate(book.data) + namespace, path = location.split(":", 1) + + base_path = f"{namespace}:{self.opts.implementation_folder}" + + self.current = book + self.current_path = location + self.current_font = {} + + location = f"{base_path}/{path}" + + # Generate a unique trigger name for each book + trigger_name = f"{namespace}.{path.replace('/', '.')}.trigger" + + # The loot table to give a player the book + ctx.data[location] = LootTable( + { + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:written_book", + "functions": [ + { + "function": "minecraft:set_components", + "components": { + **book.components, + "minecraft:custom_data": { + "smithed": { + "wiki": { + "book": True, + "trigger": trigger_name, + }, + "ignore": { + "functionality": True, + "crafting": True, + }, + }, + }, + "minecraft:enchantment_glint_override": False, + "!written_book_content": {}, + "minecraft:tooltip_display": { + "hidden_components": [ + "minecraft:written_book_content" + ] + }, + "minecraft:max_stack_size": 1, + }, + } + ], + } + ], + } + ] + } + ) + + # If the book is automatically granted, generate an advancement that rewards the above loot table + if book.grant_automatically: + ctx.data[f"{base_path}/technical/tick/{path}"] = Advancement( + { + "criteria": {"tick": {"trigger": "minecraft:tick"}}, + "rewards": {"loot": [location]}, + } + ) + + # Register the trigger commands for changing pages + ctx.data[Function].setdefault( + f"{namespace}:{self.opts.load_function}", Function() + ).append(f"scoreboard objectives add {trigger_name} trigger") + ctx.data[Function].setdefault( + f"{namespace}:{self.opts.tick_function}", Function() + ).append( + f""" + scoreboard players enable @a {trigger_name} + execute as @a[scores={{{trigger_name}=1000..}}] run function {base_path}/{path}/change_page + """ + ) + + # Display the appropriate page when the player runs the trigger + ctx.data[Function][f"{base_path}/{path}/change_page"] = Function(f""" + scoreboard players remove @s {trigger_name} 1000 + execute store result storage smithed.wiki:temp page int 1 run scoreboard players get @s {trigger_name} + scoreboard players reset @s {trigger_name} + function {base_path}/{path}/change_page/macro with storage smithed.wiki:temp {{}} + """) + + ctx.data[Function][f"{base_path}/{path}/change_page/macro"] = Function(f""" + $dialog show @s {base_path}/{path}/page/$(page) + """) + + # We use a unique key for each section, so that each section can generate multiple pages + pages: list[tuple[str, JsonDict]] = [] + + # The index of the first ToC + toc_index = -1 + + for idx, section in enumerate(book.sections): + pages.extend(self.build(f"{self.current_path}/{idx}", section)) + + # Store the index to the TOC, if theres multiple, raise an error. + if isinstance(section, TOCSectionModel): + if toc_index != -1: + raise ValueError( + f"Multiple ToC sections found for book {namespace}:{path}" + ) + toc_index = idx + + # Build the required font to render all images + ctx.assets[Font][self.current_path] = Font( + { + "providers": [ + { + "type": "bitmap", + "ascent": 0, + "chars": [chr(0xE000 + idx)], + "file": texture + ".png", + "height": height, + } + for (texture, height), idx in self.current_font.items() + ] + } + ) + + # Saves the index to the first occurence of a given key + key_to_index: dict[str, int] = {} + for idx, (key, _) in enumerate(pages): + if key not in key_to_index: + key_to_index[key] = idx + + for idx, (_, page) in enumerate(pages): + page["title"] = { + "translate": f"item.{namespace}.{path.replace('/', '.')}" + } + page["pause"] = False + + page["body"]["contents"].append( + [ + ( + "", + ( + # If the page isn't first, add a back button + { + "text": "\n<--", + "color": "gold", + "bold": True, + "hover_event": { + "action": "show_text", + "value": {"text": "Previous Page"}, + }, + "click_event": { + "action": "run_command", + "command": f"/trigger {trigger_name} set {idx + PAGE_INDEX_OFFSET - 1}", + }, + } + if idx > 0 + else {"text": "\n "} + ), + ), + {"text": " " * 5}, + ( + # Add a button to go to the TOC if it is present in the book + { + "text": "â– ", + "color": "gold", + "hover_event": { + "action": "show_text", + "value": {"text": "Table of Contents"}, + }, + "click_event": { + "action": "run_command", + "command": f"/trigger {trigger_name} set {toc_index + PAGE_INDEX_OFFSET}", + }, + } + if toc_index != -1 + else {"text": " "} + ), + {"text": " " * 5}, + ( + # If it isn't the last page, add a button to go forward + { + "text": "-->", + "color": "gold", + "bold": True, + "hover_event": { + "action": "show_text", + "value": {"text": "Next Page"}, + }, + "click_event": { + "action": "run_command", + "command": f"/trigger {trigger_name} set {idx + PAGE_INDEX_OFFSET + 1}", + }, + } + if idx < len(pages) - 1 + else {"text": " "} + ), + ] + ) + + # Resolve any change_page actions + self.resolve_change_page( + page["body"]["contents"], trigger_name, key_to_index + ) + + # Save the page into context + ctx.data[f"{base_path}/{path}/page/{idx}"] = Dialog(page) + + yield + + ctx.data[WikiBook].clear() + ctx.data[WikiSection].clear() + + +def resolve(section: ReferenceSectionModel, ctx: Context) -> NonReferenceSectionModel: + """ + Resolves a reference section to the section it points to. + """ + root = section + + # Use a set to prevent cycles + visited: set[str] = set() + + while root.type == "smithed.wiki:reference" and root.path not in visited: + visited.add(root.path) + section = ctx.data[WikiSection][root.path].data + root = AnySectionModel.model_validate(section).root + + if root.type == "smithed.wiki:reference": + raise ValueError("Resolve failed to resolve reference") + + return cast(NonReferenceSectionModel, root) + + +class TitleSectionBuilder(SectionBuilder[TitleSectionModel]): + """ + The builder for title pages. + """ + + def __call__( + self, key: str, builder: WikiBuilder, section: TitleSectionModel + ) -> list[tuple[str, JsonDict]]: + icon, font = builder.get_image(section.icon, 64) + + return [ + ( + key, + { + "type": "minecraft:multi_action", + "body": { + "type": "minecraft:plain_message", + "contents": [ + "", + {"text": section.title, "bold": True}, + "\n", + {"text": icon, "font": font}, + # Spacing for a 64px image. + "\n" * 9, + {"text": section.description, "color": DESCRIPTION}, + "\n", + ], + }, + "actions": [{"label": "Close"}], + }, + ) + ] + + +class TOCSectionBuilder(SectionBuilder[TOCSectionModel]): + + def build_category( + self, key: str, builder: WikiBuilder, section: SectionUnion, indentation: int + ) -> list[JsonDict]: + """ + Builds the links to the section of the TOC. + """ + toc: list[JsonDict] = [] + + # Resolve the reference + if section.type == "smithed.wiki:reference": + section = resolve(section, builder.ctx) + + # Appease the type checker + assert section.type != "smithed.wiki:reference" + + toc.append({"text": f"{' ' * indentation}- ", "color": SEPARATOR}) + + toc.append( + { + "text": f"{section.title}\n", + "color": "white", + "click_event": {"action": "change_page", "page": f"%{key}%"}, + "hover_event": { + "action": "show_text", + "value": {"text": f"Jump to '{section.title}'"}, + }, + } + ) + + # Recursively build the subsections + if isinstance(section, CategorySectionModel): + for idx, s in enumerate(section.sections): + toc.extend( + self.build_category(f"{key}/{idx}", builder, s, indentation + 1) + ) + + return toc + + def __call__( + self, key: str, builder: WikiBuilder, section: TOCSectionModel + ) -> list[tuple[str, JsonDict]]: + """ + Builds the table of contents. + """ + + toc: list[JsonDict] = [] + + # Build the sub-sections + for idx in section.sections: + category = builder.current.sections[idx] + toc.extend( + self.build_category( + f"{builder.current_path}/{idx}", builder, category, 0 + ) + ) + + return [ + ( + key, + { + "type": "minecraft:multi_action", + "body": { + "type": "minecraft:plain_message", + "contents": [ + "", + {"text": "Table of Contents", "bold": True}, + {"text": "\n---\n", "color": SEPARATOR}, + *toc, + ], + }, + "actions": [{"label": "Close"}], + }, + ) + ] + + +class ArticleSectionBuilder(SectionBuilder[ArticleSectionModel]): + def __call__( + self, key: str, builder: WikiBuilder, section: ArticleSectionModel + ) -> list[tuple[str, JsonDict]]: + """ + Builds the article section. + """ + + return [ + ( + key, + { + "type": "minecraft:multi_action", + "body": { + "type": "minecraft:plain_message", + "contents": [ + "\n", + {"text": section.title, "bold": True}, + {"text": "\n---\n", "color": SEPARATOR}, + {"text": section.content}, + "\n", + ], + }, + "actions": [{"label": "Close"}], + }, + ) + ] + + +class CategorySectionBuilder(SectionBuilder[CategorySectionModel]): + def build_category( + self, + key: str, + builder: WikiBuilder, + sections: list[SectionUnion], + body: list[JsonDict], + ) -> list[tuple[str, JsonDict]]: + """ + Builds the category section. + """ + + for i, section in enumerate(sections): + if section.type == "smithed.wiki:reference": + section = resolve(section, builder.ctx) + + icon, font = builder.get_image(section.icon) + + body.append( + { + # Adds an additional space between the current icon and the next + "text": f'{icon}{" " if i % 4 < 3 and i + 1 < len(sections) else "\n\n\n"}', + "font": font, + "hover_event": { + "action": "show_text", + "value": {"text": f"Jump to '{section.title}'"}, + }, + "click_event": { + "action": "change_page", + "page": f"%{key}/{i}%", + }, + } + ) + + # Build the sub-sections + dialogs: list[tuple[str, JsonDict]] = [] + for i, d in enumerate(sections): + dialogs.extend(builder.build(f"{key}/{i}", d)) + + return dialogs + + def __call__( + self, key: str, builder: WikiBuilder, section: CategorySectionModel + ) -> list[tuple[str, JsonDict]]: + body: list[JsonDict] = [] + dialogs = self.build_category(key, builder, section.sections, body) + + icon, font = builder.get_image(section.icon, 32) + + return [ + ( + key, + { + "type": "minecraft:multi_action", + "body": { + "type": "minecraft:plain_message", + "contents": [ + "", + { + "text": icon, + "font": font, + "bold": True, + }, + # Adds space for a 32px image + "\n" * 5, + { + "text": f"{section.title}\n", + "bold": True, + }, + {"text": section.description, "color": DESCRIPTION}, + {"text": "\n---\n", "color": SEPARATOR}, + *body, + ], + }, + "actions": [{"label": "Close"}], + }, + ), + *dialogs, + ] diff --git a/smithed_libraries/plugins/wiki/resources.py b/smithed_libraries/plugins/wiki/resources.py new file mode 100644 index 00000000..4575071f --- /dev/null +++ b/smithed_libraries/plugins/wiki/resources.py @@ -0,0 +1,45 @@ +from typing import ClassVar + +from beet import JsonFileBase, NamespaceFileScope + +from .models import BookModel, AnySectionModel + + +class WikiBook(JsonFileBase[BookModel]): + """ + Registers a wiki book resource. + """ + + scope: ClassVar[NamespaceFileScope] = ("wiki", "book") + """ + The scope of the resource. + Loaded from `namespace:wiki/book/.json` + """ + extension: ClassVar[str] = ".json" + """ + The extension of the resource. + """ + model = BookModel + """ + The model used to validate the resource. + """ + + +class WikiSection(JsonFileBase[AnySectionModel]): + """ + Registers a wiki section resource. + """ + + scope: ClassVar[NamespaceFileScope] = ("wiki", "section") + """ + The scope of the resource. + Loaded from `namespace:wiki/section/.json` + """ + extension: ClassVar[str] = ".json" + """ + The extension of the resource. + """ + model = AnySectionModel + """ + The model used to validate the resource. + """ diff --git a/smithed_libraries/plugins/wiki/tests/__init__.py b/smithed_libraries/plugins/wiki/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/function/_private/init.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/function/_private/init.mcfunction new file mode 100644 index 00000000..63c02225 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/function/_private/init.mcfunction @@ -0,0 +1,2 @@ +scoreboard objectives add load.status dummy +scoreboard players reset * load.status diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/_private/init.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/_private/init.json new file mode 100644 index 00000000..7fc0841c --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/_private/init.json @@ -0,0 +1,5 @@ +{ + "values": [ + "load:_private/init" + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/_private/load.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/_private/load.json new file mode 100644 index 00000000..9b632188 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/_private/load.json @@ -0,0 +1,17 @@ +{ + "values": [ + "#load:_private/init", + { + "id": "#load:pre_load", + "required": false + }, + { + "id": "#load:load", + "required": false + }, + { + "id": "#load:post_load", + "required": false + } + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/load.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/load.json new file mode 100644 index 00000000..2a84e831 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/load/tags/function/load.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#smithed.wiki:load" + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/minecraft/tags/function/load.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/minecraft/tags/function/load.json new file mode 100644 index 00000000..bdbd367b --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/minecraft/tags/function/load.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#load:_private/load" + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/0.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/0.json new file mode 100644 index 00000000..aeb6517f --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/0.json @@ -0,0 +1,76 @@ +{ + "type": "minecraft:multi_action", + "body": { + "type": "minecraft:plain_message", + "contents": [ + "", + { + "text": "Example", + "bold": true + }, + "\n", + { + "text": "\ue000", + "font": "smithed.wiki:example" + }, + "\n\n\n\n\n\n\n\n\n", + { + "text": "An example wiki book", + "color": "gray" + }, + "\n", + [ + [ + "", + { + "text": "\n " + } + ], + { + "text": " " + }, + { + "text": "\u25a0", + "color": "gold", + "hover_event": { + "action": "show_text", + "value": { + "text": "Table of Contents" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1001" + } + }, + { + "text": " " + }, + { + "text": "-->", + "color": "gold", + "bold": true, + "hover_event": { + "action": "show_text", + "value": { + "text": "Next Page" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1001" + } + } + ] + ] + }, + "actions": [ + { + "label": "Close" + } + ], + "title": { + "translate": "item.smithed.wiki.example" + }, + "pause": false +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/1.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/1.json new file mode 100644 index 00000000..f5bd39c9 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/1.json @@ -0,0 +1,117 @@ +{ + "type": "minecraft:multi_action", + "body": { + "type": "minecraft:plain_message", + "contents": [ + "", + { + "text": "Table of Contents", + "bold": true + }, + { + "text": "\n---\n", + "color": "dark_gray" + }, + { + "text": "- ", + "color": "dark_gray" + }, + { + "text": "A category\n", + "color": "white", + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1002" + }, + "hover_event": { + "action": "show_text", + "value": { + "text": "Jump to 'A category'" + } + } + }, + { + "text": " - ", + "color": "dark_gray" + }, + { + "text": "An article\n", + "color": "white", + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1003" + }, + "hover_event": { + "action": "show_text", + "value": { + "text": "Jump to 'An article'" + } + } + }, + [ + [ + "", + { + "text": "\n<--", + "color": "gold", + "bold": true, + "hover_event": { + "action": "show_text", + "value": { + "text": "Previous Page" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1000" + } + } + ], + { + "text": " " + }, + { + "text": "\u25a0", + "color": "gold", + "hover_event": { + "action": "show_text", + "value": { + "text": "Table of Contents" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1001" + } + }, + { + "text": " " + }, + { + "text": "-->", + "color": "gold", + "bold": true, + "hover_event": { + "action": "show_text", + "value": { + "text": "Next Page" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1002" + } + } + ] + ] + }, + "actions": [ + { + "label": "Close" + } + ], + "title": { + "translate": "item.smithed.wiki.example" + }, + "pause": false +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/2.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/2.json new file mode 100644 index 00000000..b2587543 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/2.json @@ -0,0 +1,105 @@ +{ + "type": "minecraft:multi_action", + "body": { + "type": "minecraft:plain_message", + "contents": [ + "", + { + "text": "\ue002", + "font": "smithed.wiki:example", + "bold": true + }, + "\n\n\n\n\n", + { + "text": "A category\n", + "bold": true + }, + { + "text": "An example category", + "color": "gray" + }, + { + "text": "\n---\n", + "color": "dark_gray" + }, + { + "text": "\ue001\n\n\n", + "font": "smithed.wiki:example", + "hover_event": { + "action": "show_text", + "value": { + "text": "Jump to 'An article'" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1003" + } + }, + [ + [ + "", + { + "text": "\n<--", + "color": "gold", + "bold": true, + "hover_event": { + "action": "show_text", + "value": { + "text": "Previous Page" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1001" + } + } + ], + { + "text": " " + }, + { + "text": "\u25a0", + "color": "gold", + "hover_event": { + "action": "show_text", + "value": { + "text": "Table of Contents" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1001" + } + }, + { + "text": " " + }, + { + "text": "-->", + "color": "gold", + "bold": true, + "hover_event": { + "action": "show_text", + "value": { + "text": "Next Page" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1003" + } + } + ] + ] + }, + "actions": [ + { + "label": "Close" + } + ], + "title": { + "translate": "item.smithed.wiki.example" + }, + "pause": false +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/3.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/3.json new file mode 100644 index 00000000..33231daf --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/dialog/v0.1.0/wiki/example/page/3.json @@ -0,0 +1,73 @@ +{ + "type": "minecraft:multi_action", + "body": { + "type": "minecraft:plain_message", + "contents": [ + "\n", + { + "text": "An article", + "bold": true + }, + { + "text": "\n---\n", + "color": "dark_gray" + }, + { + "text": "The contents of an article" + }, + "\n", + [ + [ + "", + { + "text": "\n<--", + "color": "gold", + "bold": true, + "hover_event": { + "action": "show_text", + "value": { + "text": "Previous Page" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1002" + } + } + ], + { + "text": " " + }, + { + "text": "\u25a0", + "color": "gold", + "hover_event": { + "action": "show_text", + "value": { + "text": "Table of Contents" + } + }, + "click_event": { + "action": "run_command", + "command": "/trigger smithed.wiki.example.trigger set 1001" + } + }, + { + "text": " " + }, + { + "text": " " + } + ] + ] + }, + "actions": [ + { + "label": "Close" + } + ], + "title": { + "translate": "item.smithed.wiki.example" + }, + "pause": false +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load.mcfunction new file mode 100644 index 00000000..5d7e912e --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load.mcfunction @@ -0,0 +1,5 @@ + +schedule function smithed.wiki:v0.1.0/technical/tick 1 replace +scoreboard objectives add smithed.wiki.use_book minecraft.used:minecraft.written_book + +scoreboard objectives add smithed.wiki.example.trigger trigger diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate.mcfunction new file mode 100644 index 00000000..134c94d2 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate.mcfunction @@ -0,0 +1,5 @@ +scoreboard players reset #smithed.wiki.set load.status +scoreboard players add #smithed.wiki.major load.status 0 +scoreboard players add #smithed.wiki.minor load.status 0 +scoreboard players add #smithed.wiki.patch load.status 0 +function smithed.wiki:v0.1.0/technical/load/enumerate/major \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/major.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/major.mcfunction new file mode 100644 index 00000000..eb3a4d7d --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/major.mcfunction @@ -0,0 +1,2 @@ +execute if score #smithed.wiki.major load.status matches ..0 unless score #smithed.wiki.major load.status matches 0 run function smithed.wiki:v0.1.0/technical/load/enumerate/set_version +execute unless score #smithed.wiki.set load.status matches 1 if score #smithed.wiki.major load.status matches ..0 if score #smithed.wiki.major load.status matches 0 run function smithed.wiki:v0.1.0/technical/load/enumerate/minor \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/minor.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/minor.mcfunction new file mode 100644 index 00000000..ab68e0dd --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/minor.mcfunction @@ -0,0 +1,2 @@ +execute if score #smithed.wiki.minor load.status matches ..1 unless score #smithed.wiki.minor load.status matches 1 run function smithed.wiki:v0.1.0/technical/load/enumerate/set_version +execute unless score #smithed.wiki.set load.status matches 1 if score #smithed.wiki.minor load.status matches ..1 if score #smithed.wiki.minor load.status matches 1 run function smithed.wiki:v0.1.0/technical/load/enumerate/patch \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/patch.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/patch.mcfunction new file mode 100644 index 00000000..8678cae1 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/patch.mcfunction @@ -0,0 +1 @@ +execute if score #smithed.wiki.patch load.status matches ..0 unless score #smithed.wiki.patch load.status matches 0 run function smithed.wiki:v0.1.0/technical/load/enumerate/set_version \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/set_version.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/set_version.mcfunction new file mode 100644 index 00000000..8d42e1a3 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/enumerate/set_version.mcfunction @@ -0,0 +1,4 @@ +scoreboard players set #smithed.wiki.major load.status 0 +scoreboard players set #smithed.wiki.minor load.status 1 +scoreboard players set #smithed.wiki.patch load.status 0 +scoreboard players set #smithed.wiki.set load.status 1 \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/resolve.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/resolve.mcfunction new file mode 100644 index 00000000..2fd42e0e --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/load/resolve.mcfunction @@ -0,0 +1,2 @@ +schedule clear smithed.wiki:v0.1.0/technical/tick +execute if score #smithed.wiki.major load.status matches 0 if score #smithed.wiki.minor load.status matches 1 if score #smithed.wiki.patch load.status matches 0 run function smithed.wiki:v0.1.0/technical/load diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/tick.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/tick.mcfunction new file mode 100644 index 00000000..4490b09b --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/technical/tick.mcfunction @@ -0,0 +1,8 @@ + +schedule function smithed.wiki:v0.1.0/technical/tick 1 replace +execute as @a[scores={smithed.wiki.use_book=1..}] run function smithed.wiki:v0.1.0/wiki/use_book + + + scoreboard players enable @a smithed.wiki.example.trigger + execute as @a[scores={smithed.wiki.example.trigger=1000..}] run function smithed.wiki:v0.1.0/wiki/example/change_page + diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/example/change_page.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/example/change_page.mcfunction new file mode 100644 index 00000000..1be2ee56 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/example/change_page.mcfunction @@ -0,0 +1,6 @@ + + scoreboard players remove @s smithed.wiki.example.trigger 1000 + execute store result storage smithed.wiki:temp page int 1 run scoreboard players get @s smithed.wiki.example.trigger + scoreboard players reset @s smithed.wiki.example.trigger + function smithed.wiki:v0.1.0/wiki/example/change_page/macro with storage smithed.wiki:temp {} + \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/example/change_page/macro.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/example/change_page/macro.mcfunction new file mode 100644 index 00000000..b944f433 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/example/change_page/macro.mcfunction @@ -0,0 +1,3 @@ + + $dialog show @s smithed.wiki:v0.1.0/wiki/example/page/$(page) + \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/use_book.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/use_book.mcfunction new file mode 100644 index 00000000..5cdb7bdd --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/use_book.mcfunction @@ -0,0 +1,14 @@ + + # Reset the player's score +scoreboard players reset @s smithed.wiki.use_book + + # Exit early if they didn't use a wiki book +execute unless predicate smithed.wiki:v0.1.0/technical/holding_book run return fail + + # Determine the ID of the book they used +data remove storage smithed.wiki:temp trigger_name +data modify storage smithed.wiki:temp trigger_name set from entity @s SelectedItem.components."minecraft:custom_data".smithed.wiki.trigger +execute unless data storage smithed.wiki:temp trigger_name run data modify storage smithed.wiki:temp trigger_name set from entity @s equipment.offhand.components."minecraft:custom_data".smithed.wiki.trigger + + # Display the book +function smithed.wiki:v0.1.0/wiki/use_book/macro with storage smithed.wiki:temp {} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/use_book/macro.mcfunction b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/use_book/macro.mcfunction new file mode 100644 index 00000000..d17807fb --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/function/v0.1.0/wiki/use_book/macro.mcfunction @@ -0,0 +1,2 @@ + +$trigger $(trigger_name) set 1000 diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/loot_table/v0.1.0/wiki/example.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/loot_table/v0.1.0/wiki/example.json new file mode 100644 index 00000000..228b7ef1 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/loot_table/v0.1.0/wiki/example.json @@ -0,0 +1,45 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:written_book", + "functions": [ + { + "function": "minecraft:set_components", + "components": { + "minecraft:item_model": "smithed.wiki:wiki", + "minecraft:item_name": { + "translate": "item.smithed.wiki.example" + }, + "minecraft:rarity": "uncommon", + "minecraft:custom_data": { + "smithed": { + "wiki": { + "book": true, + "trigger": "smithed.wiki.example.trigger" + }, + "ignore": { + "functionality": true, + "crafting": true + } + } + }, + "minecraft:enchantment_glint_override": false, + "!written_book_content": {}, + "minecraft:tooltip_display": { + "hidden_components": [ + "minecraft:written_book_content" + ] + }, + "minecraft:max_stack_size": 1 + } + } + ] + } + ] + } + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/predicate/v0.1.0/technical/holding_book.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/predicate/v0.1.0/technical/holding_book.json new file mode 100644 index 00000000..5cc3766f --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/predicate/v0.1.0/technical/holding_book.json @@ -0,0 +1,43 @@ +{ + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "equipment": { + "offhand": { + "predicates": { + "minecraft:custom_data": { + "smithed": { + "wiki": { + "book": true + } + } + } + } + } + } + } + }, + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "equipment": { + "mainhand": { + "predicates": { + "minecraft:custom_data": { + "smithed": { + "wiki": { + "book": true + } + } + } + } + } + } + } + } + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load.json new file mode 100644 index 00000000..cffcf282 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load.json @@ -0,0 +1,10 @@ +{ + "values": [ + { + "id": "#smithed.wiki:load/dependencies", + "required": false + }, + "#smithed.wiki:load/enumerate", + "#smithed.wiki:load/resolve" + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load/enumerate.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load/enumerate.json new file mode 100644 index 00000000..1b1b6e30 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load/enumerate.json @@ -0,0 +1,5 @@ +{ + "values": [ + "smithed.wiki:v0.1.0/technical/load/enumerate" + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load/resolve.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load/resolve.json new file mode 100644 index 00000000..1e1d5118 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__0.data_pack/data/smithed.wiki/tags/function/load/resolve.json @@ -0,0 +1,5 @@ +{ + "values": [ + "smithed.wiki:v0.1.0/technical/load/resolve" + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/font/example.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/font/example.json new file mode 100644 index 00000000..e4aa408c --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/font/example.json @@ -0,0 +1,31 @@ +{ + "providers": [ + { + "type": "bitmap", + "ascent": 0, + "chars": [ + "\ue000" + ], + "file": "smithed.wiki:wiki/placeholder.png", + "height": 64 + }, + { + "type": "bitmap", + "ascent": 0, + "chars": [ + "\ue001" + ], + "file": "smithed.wiki:wiki/placeholder.png", + "height": 16 + }, + { + "type": "bitmap", + "ascent": 0, + "chars": [ + "\ue002" + ], + "file": "smithed.wiki:wiki/placeholder.png", + "height": 32 + } + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/font/technical/spaces.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/font/technical/spaces.json new file mode 100644 index 00000000..b405b28f --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/font/technical/spaces.json @@ -0,0 +1,26 @@ +{ + "providers": [ + { + "type": "space", + "advances": { + "0": 0, + "1": 4, + "2": 8, + "3": 12, + "4": 16, + "5": 20, + "6": 24, + "7": 28, + "8": 32, + "9": 36, + "A": 40, + "B": 44, + "C": 48, + "D": 52, + "E": 56, + "F": 60, + "G": 64 + } + } + ] +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/items/wiki.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/items/wiki.json new file mode 100644 index 00000000..5542d4be --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/items/wiki.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "smithed.wiki:item/wiki" + } +} \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/lang/en_us.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/lang/en_us.json new file mode 100644 index 00000000..1ccd9655 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "item.smithed.wiki.example": "Example Wiki" +} \ No newline at end of file diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/models/item/wiki.json b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/models/item/wiki.json new file mode 100644 index 00000000..0979093b --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/models/item/wiki.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "smithed.wiki:item/wiki" + } +} diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/textures/item/wiki.png b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/textures/item/wiki.png new file mode 100644 index 00000000..95de2898 Binary files /dev/null and b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/textures/item/wiki.png differ diff --git a/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/textures/wiki/placeholder.png b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/textures/wiki/placeholder.png new file mode 100644 index 00000000..f49419cc Binary files /dev/null and b/smithed_libraries/plugins/wiki/tests/snapshots/example__build__1.resource_pack/assets/smithed.wiki/textures/wiki/placeholder.png differ diff --git a/smithed_libraries/plugins/wiki/tests/test_book.py b/smithed_libraries/plugins/wiki/tests/test_book.py new file mode 100644 index 00000000..4960de6e --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/test_book.py @@ -0,0 +1,227 @@ +import pytest +from pydantic import ValidationError +from beet import Context, Texture, run_beet + +# Relative imports from your package +from ..models import ( + AnySectionModel, + ArticleSectionModel, + BookModel, + ReferenceSectionModel, + TitleSectionModel, + TOCSectionModel, +) +from ..plugin import resolve, WikiBuilder +from ..resources import WikiSection + + +@pytest.fixture(scope="session") +def ctx(): + """ + Session-scoped fixture to provide a fully loaded Beet context. + """ + with run_beet() as ctx: + yield ctx + + +# --- MODEL TESTS (../models.py) --- + + +def test_title_section_validates_correctly(): + """ + Tests that a well-formed dictionary correctly validates into a TitleSectionModel + and checks that default values (like type) are applied. + """ + data = { + "type": "smithed.wiki:title", + "title": "Welcome to the Wiki", + "description": "This is a test description.", + } + model = TitleSectionModel(**data) # type: ignore + + assert model.title == "Welcome to the Wiki" + assert model.description == "This is a test description." + assert model.icon is None # Tests the default fallback + + +def test_article_section_missing_content_fails(): + """ + Tests that omitting a required field (like 'content' in ArticleSectionModel) + properly raises a Pydantic ValidationError. + """ + data = { + "type": "smithed.wiki:article", + "title": "Invalid Article", + # Missing 'content' + } + + with pytest.raises(ValidationError): + ArticleSectionModel(**data) # type: ignore + + +def test_any_section_model_discriminator(): + """ + Tests the discriminatory union. Ensures that providing a specific 'type' + correctly routes the validation to the appropriate sub-model (TOCSectionModel). + """ + data = { + "type": "smithed.wiki:toc", + "title": "Table of Contents", + "sections": [0, 1, 2], + } + + model = AnySectionModel.model_validate(data).root + assert isinstance(model, TOCSectionModel) + assert model.sections == [0, 1, 2] + + +def test_book_model_validation(): + """ + Tests that an entire BookModel parses its child sections correctly via the + SectionUnion and respects default boolean flags. + """ + data = { + "components": {"minecraft:custom_data": {"foo": 1}}, + "sections": [ + { + "type": "smithed.wiki:title", + "title": "My Book", + "description": "Book desc", + }, + { + "type": "smithed.wiki:article", + "title": "Page 1", + "content": "Hello World", + }, + ], + } + + book = BookModel(**data) # type: ignore + assert not book.grant_automatically # Default is False + assert len(book.sections) == 2 + assert isinstance(book.sections[0], TitleSectionModel) + assert isinstance(book.sections[1], ArticleSectionModel) + + +# --- RESOURCE TESTS (../resources.py) --- + + +def test_wiki_section_resource(): + """ + Tests that the Beet WikiSection resource loads correct model data. + """ + data = {"type": "smithed.wiki:article", "title": "A", "content": "B"} + resource = WikiSection(data) # type: ignore + data = AnySectionModel.model_validate(resource.data).root + + assert isinstance(data, ArticleSectionModel) + + +# --- PLUGIN LOGIC TESTS (../plugin.py) --- + + +def test_resolve_standard_reference(ctx: Context): + """ + Tests that the `resolve` function successfully follows a standard reference + to grab the underlying article model from the Beet Context. + """ + # Inject a target article into the Beet context + ctx.data[WikiSection]["my_pack:articles/target"] = WikiSection( + { + "type": "smithed.wiki:article", + "title": "Targeted Article", + "content": "You found me!", + } # type: ignore + ) + + # Create the reference pointing to the injected article + ref = ReferenceSectionModel(path="my_pack:articles/target") + + resolved = resolve(ref, ctx) + assert isinstance(resolved, ArticleSectionModel) + assert resolved.title == "Targeted Article" + + +def test_resolve_chained_reference(ctx: Context): + """ + Tests that the `resolve` function can follow a chain of multiple references + (e.g., Ref A -> Ref B -> Article) and eventually return the NonReferenceSectionModel. + """ + ctx.data[WikiSection]["test:ref2"] = WikiSection( + { + "type": "smithed.wiki:article", + "title": "Deep Article", + "content": "Deep content", + } # type: ignore + ) + + ctx.data[WikiSection]["test:ref1"] = WikiSection( + {"type": "smithed.wiki:reference", "path": "test:ref2"} # type: ignore + ) + + ref = ReferenceSectionModel(path="test:ref1") + resolved = resolve(ref, ctx) + + assert isinstance(resolved, ArticleSectionModel) + assert resolved.title == "Deep Article" + + +def test_resolve_reference_cycle_handling(ctx: Context): + """ + Tests that if two references point to each other in an infinite loop, + the `resolve` function safely breaks the loop and raises a ValueError. + """ + # Creating a cycle: ref_a -> ref_b -> ref_a + ctx.data[WikiSection]["test:ref_a"] = WikiSection( + {"type": "smithed.wiki:reference", "path": "test:ref_b"} # type: ignore + ) + ctx.data[WikiSection]["test:ref_b"] = WikiSection( + {"type": "smithed.wiki:reference", "path": "test:ref_a"} # type: ignore + ) + + ref = ReferenceSectionModel(path="test:ref_a") + + with pytest.raises(ValueError, match="Resolve failed to resolve reference"): + resolve(ref, ctx) + + +def test_wiki_builder_get_image_placeholder(ctx: Context): + """ + Tests that passing None to `get_image` defaults to the placeholder texture, + registers it in the current_font dictionary, and returns the E000 unicode character. + """ + builder = WikiBuilder(ctx) + builder.current_font = {} + builder.current_path = "test_path" + + # Inject PLACEHOLDER to bypass Key Error + ctx.assets.textures["smithed.wiki:wiki/placeholder"] = Texture() + + char, path = builder.get_image(None, 16) + + assert char == chr(0xE000) + assert path == "test_path" + assert ("smithed.wiki:wiki/placeholder", 16) in builder.current_font + + +def test_wiki_builder_get_image_valid_texture(ctx: Context): + """ + Tests that providing a valid texture path registers correctly and + increments the unicode offset for subsequent images. + """ + ctx.assets.textures["minecraft:item/diamond"] = Texture() + ctx.assets.textures["minecraft:item/emerald"] = Texture() + + builder = WikiBuilder(ctx) + builder.current_font = {} + builder.current_path = "test_path" + + char1, _ = builder.get_image("minecraft:item/diamond", 16) + char2, _ = builder.get_image("minecraft:item/emerald", 16) + + assert char1 == chr(0xE000) + assert char2 == chr(0xE001) + + # Fetching the same image should return the cached unicode character + char_duplicate, _ = builder.get_image("minecraft:item/diamond", 16) + assert char_duplicate == chr(0xE000) diff --git a/smithed_libraries/plugins/wiki/tests/test_example.py b/smithed_libraries/plugins/wiki/tests/test_example.py new file mode 100644 index 00000000..8a939452 --- /dev/null +++ b/smithed_libraries/plugins/wiki/tests/test_example.py @@ -0,0 +1,11 @@ +from pytest_insta import SnapshotFixture + +from beet import run_beet + +def test_build(snapshot: SnapshotFixture): + with run_beet(directory="smithed_libraries/packs/wiki") as ctx: + assert snapshot("data_pack") == ctx.data + assert snapshot("resource_pack") == ctx.assets + + for key, _ in ctx.data.all(): + assert not key.startswith("smithed.wiki:impl") \ No newline at end of file diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..945bcbd3 --- /dev/null +++ b/uv.lock @@ -0,0 +1,1146 @@ +version = 1 +revision = 3 +requires-python = ">=3.14, <4" + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "asttokens" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/1d/f03bcb60c4a3212e15f99a56085d93093a497718adf828d050b9d675da81/asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0", size = 62284, upload-time = "2023-10-26T10:03:05.06Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/86/4736ac618d82a20d87d2f92ae19441ebc7ac9e7a581d7e58bbe79233b24a/asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24", size = 27764, upload-time = "2023-10-26T10:03:01.789Z" }, +] + +[[package]] +name = "beet" +version = "0.115.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "click-help-colors" }, + { name = "jinja2" }, + { name = "nbtlib" }, + { name = "pathspec" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "toml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/ad/798ffabe884dba56a7059bf899aff082efd964f5c3a27ca51c6bc71877f1/beet-0.115.0.tar.gz", hash = "sha256:9128aeb77f84389df01182c5f1e71ea861879391f114969589c48848e3f20512", size = 95694, upload-time = "2026-03-27T17:05:29.173Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/f8/9f904662f6d992f24c7939e841225faecb4bd990ac65bca443e4d48d7f2a/beet-0.115.0-py3-none-any.whl", hash = "sha256:29c153ebc7a60bfc980b7f23aa6eb5e9aa579268691616d025ce2b8cd25d4b89", size = 125192, upload-time = "2026-03-27T17:05:27.875Z" }, +] + +[[package]] +name = "bolt" +version = "0.50.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beet" }, + { name = "mecha" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/3c/53d8b950adbba601fdf4a0d2f1f1da652ca5f5879e040da2d8d8a020f9db/bolt-0.50.1.tar.gz", hash = "sha256:5bcb0ee76c87c0504fdf52fb79cf71a9acd0e681cc6df33fa9829039d8277ab8", size = 52341, upload-time = "2026-01-17T13:59:47.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/9b/fa2699f4d991fa7b83b61daecb0c7a533487358448191bf4eefbcef89ce7/bolt-0.50.1-py3-none-any.whl", hash = "sha256:89c5505050d4431f0c0a6fed28691c626d0439c8d2432c3fdfdc185dbcddf592", size = 59733, upload-time = "2026-01-17T13:59:48.527Z" }, +] + +[[package]] +name = "bolt-control-flow" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beet" }, + { name = "bolt" }, + { name = "mecha" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/3c/67c21c5a0ee61b461bd992c31b8da0283433f4f7233e0afe70f1717d2a12/bolt_control_flow-0.3.0.tar.gz", hash = "sha256:570fdac25e590d238ae02d5d286855cbece6880da20a9214ce90a7f32b6664a3", size = 8379, upload-time = "2024-02-23T23:32:45.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/24/23d3083266c1cb9b8b7bc8320a18c24ed38af519536a208b79e78cd5a672/bolt_control_flow-0.3.0-py3-none-any.whl", hash = "sha256:de2a6a0b9cd3a4f21466c07d22277ef07995484a2f7caded137ace4a4b5944f7", size = 10009, upload-time = "2024-02-23T23:32:44.197Z" }, +] + +[[package]] +name = "bolt-expressions" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beet" }, + { name = "bolt" }, + { name = "bolt-control-flow" }, + { name = "frozendict" }, + { name = "mecha" }, + { name = "nbtlib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/75/9146bfed6cd26f5b0bea02588de79ebc2683c0134e8e6cfbf26e752014e9/bolt_expressions-0.17.0.tar.gz", hash = "sha256:f9895d9c493822780c794d5c68cf80c5fd3de0671ab8e5e0865654165349ee42", size = 42153, upload-time = "2024-08-10T18:48:03.593Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/95/c696151938eeea5fa57eac7fc84423c0481ff84002e8af74b0aae9e41818/bolt_expressions-0.17.0-py3-none-any.whl", hash = "sha256:367e1976418404866b07a809bdff9c06608314f9f6895eaf3dcd2fe00f69750f", size = 46965, upload-time = "2024-08-10T18:48:01.744Z" }, +] + +[[package]] +name = "certifi" +version = "2026.2.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + +[[package]] +name = "click" +version = "8.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379, upload-time = "2026-04-03T19:14:43.505Z" }, +] + +[[package]] +name = "click-help-colors" +version = "0.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/50/76f51d9c7fcd72a12da466801f7c1fa3884424c947787333c74327b4fcf3/click-help-colors-0.9.4.tar.gz", hash = "sha256:f4cabe52cf550299b8888f4f2ee4c5f359ac27e33bcfe4d61db47785a5cc936c", size = 8048, upload-time = "2023-11-18T11:55:15.554Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/f8/8768f803151714640cb6f06fd9de490ce7db632d351da05f42f77330d2fd/click_help_colors-0.9.4-py3-none-any.whl", hash = "sha256:b33c5803eeaeb084393b1ab5899dc5476c7196b87a18713045afe76f840b42db", size = 6437, upload-time = "2023-11-18T11:55:09.775Z" }, +] + +[[package]] +name = "click-log" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/32/32/228be4f971e4bd556c33d52a22682bfe318ffe57a1ddb7a546f347a90260/click-log-0.4.0.tar.gz", hash = "sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975", size = 9985, upload-time = "2022-03-13T11:10:15.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/5a/4f025bc751087833686892e17e7564828e409c43b632878afeae554870cd/click_log-0.4.0-py2.py3-none-any.whl", hash = "sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756", size = 4273, upload-time = "2022-03-13T11:10:17.594Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cryptography" +version = "46.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/93/ac8f3d5ff04d54bc814e961a43ae5b0b146154c89c61b47bb07557679b18/cryptography-46.0.7.tar.gz", hash = "sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5", size = 750652, upload-time = "2026-04-08T01:57:54.692Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/45/6d80dc379b0bbc1f9d1e429f42e4cb9e1d319c7a8201beffd967c516ea01/cryptography-46.0.7-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325", size = 4275492, upload-time = "2026-04-08T01:56:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9a/1765afe9f572e239c3469f2cb429f3ba7b31878c893b246b4b2994ffe2fe/cryptography-46.0.7-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308", size = 4426670, upload-time = "2026-04-08T01:56:21.415Z" }, + { url = "https://files.pythonhosted.org/packages/8f/3e/af9246aaf23cd4ee060699adab1e47ced3f5f7e7a8ffdd339f817b446462/cryptography-46.0.7-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77", size = 4280275, upload-time = "2026-04-08T01:56:23.539Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/6bbbfc5efe86f9d71041827b793c24811a017c6ac0fd12883e4caa86b8ed/cryptography-46.0.7-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1", size = 4928402, upload-time = "2026-04-08T01:56:25.624Z" }, + { url = "https://files.pythonhosted.org/packages/2d/cf/054b9d8220f81509939599c8bdbc0c408dbd2bdd41688616a20731371fe0/cryptography-46.0.7-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef", size = 4459985, upload-time = "2026-04-08T01:56:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/f9/46/4e4e9c6040fb01c7467d47217d2f882daddeb8828f7df800cb806d8a2288/cryptography-46.0.7-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de", size = 3990652, upload-time = "2026-04-08T01:56:29.095Z" }, + { url = "https://files.pythonhosted.org/packages/36/5f/313586c3be5a2fbe87e4c9a254207b860155a8e1f3cca99f9910008e7d08/cryptography-46.0.7-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83", size = 4279805, upload-time = "2026-04-08T01:56:30.928Z" }, + { url = "https://files.pythonhosted.org/packages/69/33/60dfc4595f334a2082749673386a4d05e4f0cf4df8248e63b2c3437585f2/cryptography-46.0.7-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb", size = 4892883, upload-time = "2026-04-08T01:56:32.614Z" }, + { url = "https://files.pythonhosted.org/packages/c7/0b/333ddab4270c4f5b972f980adef4faa66951a4aaf646ca067af597f15563/cryptography-46.0.7-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b", size = 4459756, upload-time = "2026-04-08T01:56:34.306Z" }, + { url = "https://files.pythonhosted.org/packages/d2/14/633913398b43b75f1234834170947957c6b623d1701ffc7a9600da907e89/cryptography-46.0.7-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85", size = 4410244, upload-time = "2026-04-08T01:56:35.977Z" }, + { url = "https://files.pythonhosted.org/packages/10/f2/19ceb3b3dc14009373432af0c13f46aa08e3ce334ec6eff13492e1812ccd/cryptography-46.0.7-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e", size = 4674868, upload-time = "2026-04-08T01:56:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/74/66/e3ce040721b0b5599e175ba91ab08884c75928fbeb74597dd10ef13505d2/cryptography-46.0.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c", size = 4268551, upload-time = "2026-04-08T01:56:46.071Z" }, + { url = "https://files.pythonhosted.org/packages/03/11/5e395f961d6868269835dee1bafec6a1ac176505a167f68b7d8818431068/cryptography-46.0.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902", size = 4408887, upload-time = "2026-04-08T01:56:47.718Z" }, + { url = "https://files.pythonhosted.org/packages/40/53/8ed1cf4c3b9c8e611e7122fb56f1c32d09e1fff0f1d77e78d9ff7c82653e/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d", size = 4271354, upload-time = "2026-04-08T01:56:49.312Z" }, + { url = "https://files.pythonhosted.org/packages/50/46/cf71e26025c2e767c5609162c866a78e8a2915bbcfa408b7ca495c6140c4/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022", size = 4905845, upload-time = "2026-04-08T01:56:50.916Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ea/01276740375bac6249d0a971ebdf6b4dc9ead0ee0a34ef3b5a88c1a9b0d4/cryptography-46.0.7-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce", size = 4444641, upload-time = "2026-04-08T01:56:52.882Z" }, + { url = "https://files.pythonhosted.org/packages/3d/4c/7d258f169ae71230f25d9f3d06caabcff8c3baf0978e2b7d65e0acac3827/cryptography-46.0.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f", size = 3967749, upload-time = "2026-04-08T01:56:54.597Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2a/2ea0767cad19e71b3530e4cad9605d0b5e338b6a1e72c37c9c1ceb86c333/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99", size = 4270942, upload-time = "2026-04-08T01:56:56.416Z" }, + { url = "https://files.pythonhosted.org/packages/41/3d/fe14df95a83319af25717677e956567a105bb6ab25641acaa093db79975d/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1", size = 4871079, upload-time = "2026-04-08T01:56:58.31Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/4a479e0f36f8f378d397f4eab4c850b4ffb79a2f0d58704b8fa0703ddc11/cryptography-46.0.7-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2", size = 4443999, upload-time = "2026-04-08T01:57:00.508Z" }, + { url = "https://files.pythonhosted.org/packages/28/17/b59a741645822ec6d04732b43c5d35e4ef58be7bfa84a81e5ae6f05a1d33/cryptography-46.0.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e", size = 4399191, upload-time = "2026-04-08T01:57:02.654Z" }, + { url = "https://files.pythonhosted.org/packages/59/6a/bb2e166d6d0e0955f1e9ff70f10ec4b2824c9cfcdb4da772c7dd69cc7d80/cryptography-46.0.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee", size = 4655782, upload-time = "2026-04-08T01:57:04.592Z" }, + { url = "https://files.pythonhosted.org/packages/a5/d0/36a49f0262d2319139d2829f773f1b97ef8aef7f97e6e5bd21455e5a8fb5/cryptography-46.0.7-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7", size = 4270628, upload-time = "2026-04-08T01:57:12.885Z" }, + { url = "https://files.pythonhosted.org/packages/8a/6c/1a42450f464dda6ffbe578a911f773e54dd48c10f9895a23a7e88b3e7db5/cryptography-46.0.7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832", size = 4415405, upload-time = "2026-04-08T01:57:14.923Z" }, + { url = "https://files.pythonhosted.org/packages/9a/92/4ed714dbe93a066dc1f4b4581a464d2d7dbec9046f7c8b7016f5286329e2/cryptography-46.0.7-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163", size = 4272715, upload-time = "2026-04-08T01:57:16.638Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e6/a26b84096eddd51494bba19111f8fffe976f6a09f132706f8f1bf03f51f7/cryptography-46.0.7-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2", size = 4918400, upload-time = "2026-04-08T01:57:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/c7/08/ffd537b605568a148543ac3c2b239708ae0bd635064bab41359252ef88ed/cryptography-46.0.7-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067", size = 4450634, upload-time = "2026-04-08T01:57:21.185Z" }, + { url = "https://files.pythonhosted.org/packages/16/01/0cd51dd86ab5b9befe0d031e276510491976c3a80e9f6e31810cce46c4ad/cryptography-46.0.7-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0", size = 3985233, upload-time = "2026-04-08T01:57:22.862Z" }, + { url = "https://files.pythonhosted.org/packages/92/49/819d6ed3a7d9349c2939f81b500a738cb733ab62fbecdbc1e38e83d45e12/cryptography-46.0.7-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba", size = 4271955, upload-time = "2026-04-08T01:57:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/ad9b3c56ebb95ed2473d46df0847357e01583f4c52a85754d1a55e29e4d0/cryptography-46.0.7-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006", size = 4879888, upload-time = "2026-04-08T01:57:26.88Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c7/201d3d58f30c4c2bdbe9b03844c291feb77c20511cc3586daf7edc12a47b/cryptography-46.0.7-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0", size = 4449961, upload-time = "2026-04-08T01:57:29.068Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ef/649750cbf96f3033c3c976e112265c33906f8e462291a33d77f90356548c/cryptography-46.0.7-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85", size = 4401696, upload-time = "2026-04-08T01:57:31.029Z" }, + { url = "https://files.pythonhosted.org/packages/41/52/a8908dcb1a389a459a29008c29966c1d552588d4ae6d43f3a1a4512e0ebe/cryptography-46.0.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e", size = 4664256, upload-time = "2026-04-08T01:57:33.144Z" }, +] + +[[package]] +name = "devtools" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2d/e2/a1e80801b195539f552a2a369691e09ecc27648f5c5c0c0cab0256f4f098/devtools-0.9.0.tar.gz", hash = "sha256:86ede6e0273e023db766344d14098228785b48a80f31716f28e8b9453d52fa1e", size = 68180, upload-time = "2022-07-26T16:00:24.016Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/3a/741773833ee8f1d18d5ce377c3b062f0d63b951fb9e4bec25f994c7f4631/devtools-0.9.0-py3-none-any.whl", hash = "sha256:689cf4e7c75024237c42093ba19f4fa9cf15980269f02463aeab4d97d4b0a215", size = 15214, upload-time = "2022-07-26T16:00:21.651Z" }, +] + +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" }, +] + +[[package]] +name = "dotty-dict" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/ab/88d67f02024700b48cd8232579ad1316aa9df2272c63049c27cc094229d6/dotty_dict-1.3.1.tar.gz", hash = "sha256:4b016e03b8ae265539757a53eba24b9bfda506fb94fbce0bee843c6f05541a15", size = 7699, upload-time = "2022-07-09T18:50:57.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/91/e0d457ee03ec33d79ee2cd8d212debb1bc21dfb99728ae35efdb5832dc22/dotty_dict-1.3.1-py3-none-any.whl", hash = "sha256:5022d234d9922f13aa711b4950372a06a6d64cb6d6db9ba43d0ba133ebfce31f", size = 7014, upload-time = "2022-07-09T18:50:55.058Z" }, +] + +[[package]] +name = "executing" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/a7/6380f9bc4367ea010de6297540f69433e9a6070b8b7c1f283ff250b48e60/executing-0.10.0.tar.gz", hash = "sha256:d1cd87c2e371e9966261410c5b3769d6df2f9e4a79a83eebd2662dd3388f9833", size = 494257, upload-time = "2022-08-13T18:01:27.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/ab/82fbfcc5d1888770aeec5b7a17ad5ef0215ff3962c52a38f4429f7c9220b/executing-0.10.0-py2.py3-none-any.whl", hash = "sha256:9c745f80cda11eb22b62cbecf21156491a794eb56ab06f9d286a44e62822b24e", size = 17054, upload-time = "2022-08-13T18:01:24.282Z" }, +] + +[[package]] +name = "frozendict" +version = "2.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082, upload-time = "2025-11-11T22:40:14.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264, upload-time = "2025-11-11T22:40:12.836Z" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "github-action-utils" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/81/b70e3be8686c2011ec03eddf5a695496c9935818b18cde6a5f9553127a4e/github-action-utils-1.1.0.tar.gz", hash = "sha256:8aa40d90b89d814004160bb7e90b42cc07b55f41f66e4a4a32766d26c9ca3d61", size = 8860, upload-time = "2022-10-17T14:28:57.931Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/c8/d2a1c4ac43c9194316b8802b08502712ef242e6f325435409688e760b03a/github_action_utils-1.1.0-py2.py3-none-any.whl", hash = "sha256:bc84bac22e8a25ebe86370b08ff2c174960e468e899ffd313cb09d19629acefb", size = 8893, upload-time = "2022-10-17T14:28:56.215Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.46" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/b5/59d16470a1f0dfe8c793f9ef56fd3826093fc52b3bd96d6b9d6c26c7e27b/gitpython-3.1.46.tar.gz", hash = "sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f", size = 215371, upload-time = "2026-01-01T15:37:32.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl", hash = "sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058", size = 208620, upload-time = "2026-01-01T15:37:30.574Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "invoke" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/bd/b461d3424a24c80490313fd77feeb666ca4f6a28c7e72713e3d9095719b4/invoke-2.2.1.tar.gz", hash = "sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707", size = 304762, upload-time = "2025-10-11T00:36:35.172Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/4b/b99e37f88336009971405cbb7630610322ed6fbfa31e1d7ab3fbf3049a2d/invoke-2.2.1-py3-none-any.whl", hash = "sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8", size = 160287, upload-time = "2025-10-11T00:36:33.703Z" }, +] + +[[package]] +name = "jaraco-classes" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, +] + +[[package]] +name = "jaraco-context" +version = "6.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/50/4763cd07e722bb6285316d390a164bc7e479db9d90daa769f22578f698b4/jaraco_context-6.1.2.tar.gz", hash = "sha256:f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3", size = 16801, upload-time = "2026-03-20T22:13:33.922Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl", hash = "sha256:bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535", size = 7871, upload-time = "2026-03-20T22:13:32.808Z" }, +] + +[[package]] +name = "jaraco-functools" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/27/056e0638a86749374d6f57d0b0db39f29509cce9313cf91bdc0ac4d91084/jaraco_functools-4.4.0.tar.gz", hash = "sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb", size = 19943, upload-time = "2025-12-21T09:29:43.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl", hash = "sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176", size = 10481, upload-time = "2025-12-21T09:29:42.27Z" }, +] + +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "keyring" +version = "25.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jaraco-classes" }, + { name = "jaraco-context" }, + { name = "jaraco-functools" }, + { name = "jeepney", marker = "sys_platform == 'linux'" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, + { name = "secretstorage", marker = "sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mecha" +version = "0.103.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beet" }, + { name = "tokenstream" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/62/65/c0ac93886ec73499d90620e6b2931e90490ef6ed37e18a7400f6217dd017/mecha-0.103.0.tar.gz", hash = "sha256:37981668b3874547474ef2b31f28a11e7a3b4d02dc44000e423cde7649428b79", size = 581866, upload-time = "2026-03-27T17:06:01.04Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/72/e0b3a63935e2b9c2b6664f540b37ff32774dd438fcafa623353d75badcbc/mecha-0.103.0-py3-none-any.whl", hash = "sha256:af3f8f94e9838ecacff091996f666efaac92cca35e631435d154b160e8817f96", size = 617085, upload-time = "2026-03-27T17:06:02.658Z" }, +] + +[[package]] +name = "more-itertools" +version = "11.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/f7/139d22fef48ac78127d18e01d80cf1be40236ae489769d17f35c3d425293/more_itertools-11.0.2.tar.gz", hash = "sha256:392a9e1e362cbc106a2457d37cabf9b36e5e12efd4ebff1654630e76597df804", size = 144659, upload-time = "2026-04-09T15:01:33.297Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl", hash = "sha256:6e35b35f818b01f691643c6c611bc0902f2e92b46c18fffa77ae1e7c46e912e4", size = 71939, upload-time = "2026-04-09T15:01:32.21Z" }, +] + +[[package]] +name = "nbtlib" +version = "1.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/2d/d5b3db07f73629838bc61e67dc9dc764e1fff2c3f1d8ab2a27186476907c/nbtlib-1.12.1.tar.gz", hash = "sha256:1642e34ace7131718c21354562a183757613f3554445e6fcf8effb155b6591f5", size = 29004, upload-time = "2021-08-30T21:03:24.913Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/29/2cb2516761e2626240b38d8251793f7880890509383bab5d35c6e409cb2e/nbtlib-1.12.1-py3-none-any.whl", hash = "sha256:55e6811aa4e4bfe9000cbe026f1fe540ebc231c8a3f3558d7819c6c7274001c6", size = 28560, upload-time = "2021-08-30T21:03:13.639Z" }, +] + +[[package]] +name = "nh3" +version = "0.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/86/f8d3a7c9bd1bbaa181f6312c757e0b74d25f71ecf84ea3c0dc5e0f01840d/nh3-0.3.4.tar.gz", hash = "sha256:96709a379997c1b28c8974146ca660b0dcd3794f4f6d50c1ea549bab39ac6ade", size = 19520, upload-time = "2026-03-25T10:57:30.789Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/5e/c400663d14be2216bc084ed2befc871b7b12563f85d40904f2a4bf0dd2b7/nh3-0.3.4-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8b61058f34c2105d44d2a4d4241bacf603a1ef5c143b08766bbd0cf23830118f", size = 1417991, upload-time = "2026-03-25T10:56:59.13Z" }, + { url = "https://files.pythonhosted.org/packages/36/f5/109526f5002ec41322ac8cafd50f0f154bae0c26b9607c0fcb708bdca8ec/nh3-0.3.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:554cc2bab281758e94d770c3fb0bf2d8be5fb403ef6b2e8841dd7c1615df7a0f", size = 790566, upload-time = "2026-03-25T10:57:00.445Z" }, + { url = "https://files.pythonhosted.org/packages/7b/66/38950f2b4b316ffd82ee51ed8f9143d1f56fdd620312cacc91613b77b3e7/nh3-0.3.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbe76feaa44e2ef9436f345016012a591550e77818876a8de5c8bc2a248e08df", size = 837538, upload-time = "2026-03-25T10:57:01.848Z" }, + { url = "https://files.pythonhosted.org/packages/d8/9f/9d6da970e9524fe360ea02a2082856390c2c8ba540409d1be6e5851887b3/nh3-0.3.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:87dac8d611b4a478400e0821a13b35770e88c266582f065e7249d6a37b0f86e8", size = 1012154, upload-time = "2026-03-25T10:57:03.592Z" }, + { url = "https://files.pythonhosted.org/packages/54/92/7c85c33c241e9dd51dda115bd3f765e940446588cdaaca62ef8edffe675f/nh3-0.3.4-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8d697e19f2995b337f648204848ac3a528eaafffc39e7ce4ac6b7a2fbe6c84af", size = 1092516, upload-time = "2026-03-25T10:57:04.726Z" }, + { url = "https://files.pythonhosted.org/packages/16/0f/597842bdb2890999a3faa2f3fcb02db8aa6ad09320d3d843ff6d0a1f737b/nh3-0.3.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:7cae217f031809321db962cd7e092bda8d4e95a87f78c0226628fa6c2ea8ebc5", size = 1053793, upload-time = "2026-03-25T10:57:06.171Z" }, + { url = "https://files.pythonhosted.org/packages/7d/32/669da65147bc10746d2e1d7a8a3dbfbffe0315f419e74b559e2ee3471a01/nh3-0.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:07999b998bf89692738f15c0eac76a416382932f855709e0b7488b595c30ec89", size = 1035975, upload-time = "2026-03-25T10:57:07.292Z" }, + { url = "https://files.pythonhosted.org/packages/a1/7e/9e97a8b3c5161c79b4bf21cc54e9334860a52cc54ede15bf2239ef494b73/nh3-0.3.4-cp314-cp314t-win32.whl", hash = "sha256:ca90397c8d36c1535bf1988b2bed006597337843a164c7ec269dc8813f37536b", size = 600419, upload-time = "2026-03-25T10:57:08.342Z" }, + { url = "https://files.pythonhosted.org/packages/e0/c7/6849d8d4295d3997d148eacb2d4b1c9faada4895ee3c1b1e12e72f4611e2/nh3-0.3.4-cp314-cp314t-win_amd64.whl", hash = "sha256:41e46b3499918ab6128b6421677b316e79869d0c140da24069d220a94f4e72d1", size = 613342, upload-time = "2026-03-25T10:57:09.593Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0e/14a3f510f36c20b922c123a2730f071f938d006fb513aacfd46d6cbc03a7/nh3-0.3.4-cp314-cp314t-win_arm64.whl", hash = "sha256:80b955d802bf365bd42e09f6c3d64567dce777d20e97968d94b3e9d9e99b265e", size = 607025, upload-time = "2026-03-25T10:57:10.959Z" }, + { url = "https://files.pythonhosted.org/packages/4a/57/a97955bc95960cfb1f0517043d60a121f4ba93fde252d4d9ffd3c2a9eead/nh3-0.3.4-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:d8bebcb20ab4b91858385cd98fe58046ec4a624275b45ef9b976475604f45b49", size = 1439519, upload-time = "2026-03-25T10:57:12.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/c9a33361da8cde7c7760f091cd10467bc470634e4eea31c8bb70935b00a4/nh3-0.3.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d825722a1e8cbc87d7ca1e47ffb1d2a6cf343ad4c1b8465becf7cadcabcdfd0", size = 833798, upload-time = "2026-03-25T10:57:13.264Z" }, + { url = "https://files.pythonhosted.org/packages/6b/19/9487790780b8c94eacca37866c1270b747a4af8e244d43b3b550fddbbf62/nh3-0.3.4-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4aa8b43e68c26b68069a3b6cef09de166d1d7fa140cf8d77e409a46cbf742e44", size = 820414, upload-time = "2026-03-25T10:57:14.236Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b4/c6a340dd321d20b1e4a663307032741da045685c87403926c43656f6f5ec/nh3-0.3.4-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f5f214618ad5eff4f2a6b13a8d4da4d9e7f37c569d90a13fb9f0caaf7d04fe21", size = 1061531, upload-time = "2026-03-25T10:57:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/c4/49/f6b4b474e0032e4bcbb7174b44e4cf6915670e09c62421deb06ccfcb88b8/nh3-0.3.4-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3390e4333883673a684ce16c1716b481e91782d6f56dec5c85fed9feedb23382", size = 1021889, upload-time = "2026-03-25T10:57:16.454Z" }, + { url = "https://files.pythonhosted.org/packages/43/da/e52a6941746d1f974752af3fc8591f1dbcdcf7fd8c726c7d99f444ba820e/nh3-0.3.4-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a2e44ccb29cbb45071b8f3f2dab9ebfb41a6516f328f91f1f1fd18196239a4", size = 912965, upload-time = "2026-03-25T10:57:17.624Z" }, + { url = "https://files.pythonhosted.org/packages/d6/b7/ec1cbc6b297a808c513f59f501656389623fc09ad6a58c640851289c7854/nh3-0.3.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0961a27dc2057c38d0364cb05880e1997ae1c80220cbc847db63213720b8f304", size = 804975, upload-time = "2026-03-25T10:57:18.994Z" }, + { url = "https://files.pythonhosted.org/packages/a9/56/b1275aa2c6510191eed76178da4626b0900402439cb9f27d6b9bf7c6d5e9/nh3-0.3.4-cp38-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:9337517edb7c10228252cce2898e20fb3d77e32ffaccbb3c66897927d74215a0", size = 833400, upload-time = "2026-03-25T10:57:20.086Z" }, + { url = "https://files.pythonhosted.org/packages/7c/a5/5d574ffa3c6e49a5364d1b25ebad165501c055340056671493beb467a15e/nh3-0.3.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d866701affe67a5171b916b5c076e767a74c6a9efb7fb2006eb8d3c5f9a293d5", size = 854277, upload-time = "2026-03-25T10:57:21.433Z" }, + { url = "https://files.pythonhosted.org/packages/79/36/8aeb2ab21517cefa212db109e41024e02650716cb42bf293d0a88437a92d/nh3-0.3.4-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:47d749d99ae005ab19517224140b280dd56e77b33afb82f9b600e106d0458003", size = 1022021, upload-time = "2026-03-25T10:57:22.433Z" }, + { url = "https://files.pythonhosted.org/packages/9c/95/9fd860997685e64abe2d5a995ca2eb5004c0fb6d6585429612a7871548b9/nh3-0.3.4-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:f987cb56458323405e8e5ea827e1befcf141ffa0c0ac797d6d02e6b646056d9a", size = 1103526, upload-time = "2026-03-25T10:57:23.487Z" }, + { url = "https://files.pythonhosted.org/packages/7d/0d/df545070614c1007f0109bb004230226c9000e7857c9785583ec25cda9d7/nh3-0.3.4-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:883d5a6d6ee8078c4afc8e96e022fe579c4c265775ff6ee21e39b8c542cabab3", size = 1068050, upload-time = "2026-03-25T10:57:24.624Z" }, + { url = "https://files.pythonhosted.org/packages/94/d5/17b016df52df052f714c53be71df26a1943551d9931e9383b92c998b88f8/nh3-0.3.4-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:75643c22f5092d8e209f766ee8108c400bc1e44760fc94d2d638eb138d18f853", size = 1046037, upload-time = "2026-03-25T10:57:25.799Z" }, + { url = "https://files.pythonhosted.org/packages/51/39/49f737907e6ab2b4ca71855d3bd63dd7958862e9c8b94fb4e5b18ccf6988/nh3-0.3.4-cp38-abi3-win32.whl", hash = "sha256:72e4e9ca1c4bd41b4a28b0190edc2e21e3f71496acd36a0162858e1a28db3d7e", size = 609542, upload-time = "2026-03-25T10:57:27.112Z" }, + { url = "https://files.pythonhosted.org/packages/73/4f/af8e9071d7464575a7316831938237ffc9d92d27f163dbdd964b1309cd9b/nh3-0.3.4-cp38-abi3-win_amd64.whl", hash = "sha256:c10b1f0c741e257a5cb2978d6bac86e7c784ab20572724b20c6402c2e24bce75", size = 624244, upload-time = "2026-03-25T10:57:28.302Z" }, + { url = "https://files.pythonhosted.org/packages/44/0c/37695d6b0168f6714b5c492331636a9e6123d6ec22d25876c68d06eab1b8/nh3-0.3.4-cp38-abi3-win_arm64.whl", hash = "sha256:43ad4eedee7e049b9069bc015b7b095d320ed6d167ecec111f877de1540656e9", size = 616649, upload-time = "2026-03-25T10:57:29.623Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587, upload-time = "2026-03-29T13:22:01.298Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/06/c54062f85f673dd5c04cbe2f14c3acb8c8b95e3384869bb8cc9bff8cb9df/numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0", size = 16684353, upload-time = "2026-03-29T13:20:29.504Z" }, + { url = "https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a", size = 14704914, upload-time = "2026-03-29T13:20:33.547Z" }, + { url = "https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a", size = 5210005, upload-time = "2026-03-29T13:20:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/63/eb/fcc338595309910de6ecabfcef2419a9ce24399680bfb149421fa2df1280/numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b", size = 6544974, upload-time = "2026-03-29T13:20:39.014Z" }, + { url = "https://files.pythonhosted.org/packages/44/5d/e7e9044032a716cdfaa3fba27a8e874bf1c5f1912a1ddd4ed071bf8a14a6/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a", size = 15684591, upload-time = "2026-03-29T13:20:42.146Z" }, + { url = "https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d", size = 16637700, upload-time = "2026-03-29T13:20:46.204Z" }, + { url = "https://files.pythonhosted.org/packages/b1/29/56d2bbef9465db24ef25393383d761a1af4f446a1df9b8cded4fe3a5a5d7/numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252", size = 17035781, upload-time = "2026-03-29T13:20:50.242Z" }, + { url = "https://files.pythonhosted.org/packages/e3/2b/a35a6d7589d21f44cea7d0a98de5ddcbb3d421b2622a5c96b1edf18707c3/numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f", size = 18362959, upload-time = "2026-03-29T13:20:54.019Z" }, + { url = "https://files.pythonhosted.org/packages/64/c9/d52ec581f2390e0f5f85cbfd80fb83d965fc15e9f0e1aec2195faa142cde/numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc", size = 6008768, upload-time = "2026-03-29T13:20:56.912Z" }, + { url = "https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74", size = 12449181, upload-time = "2026-03-29T13:20:59.548Z" }, + { url = "https://files.pythonhosted.org/packages/70/2e/14cda6f4d8e396c612d1bf97f22958e92148801d7e4f110cabebdc0eef4b/numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb", size = 10496035, upload-time = "2026-03-29T13:21:02.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e8/8fed8c8d848d7ecea092dc3469643f9d10bc3a134a815a3b033da1d2039b/numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e", size = 14824958, upload-time = "2026-03-29T13:21:05.671Z" }, + { url = "https://files.pythonhosted.org/packages/05/1a/d8007a5138c179c2bf33ef44503e83d70434d2642877ee8fbb230e7c0548/numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113", size = 5330020, upload-time = "2026-03-29T13:21:08.635Z" }, + { url = "https://files.pythonhosted.org/packages/99/64/ffb99ac6ae93faf117bcbd5c7ba48a7f45364a33e8e458545d3633615dda/numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d", size = 6650758, upload-time = "2026-03-29T13:21:10.949Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6e/795cc078b78a384052e73b2f6281ff7a700e9bf53bcce2ee579d4f6dd879/numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d", size = 15729948, upload-time = "2026-03-29T13:21:14.047Z" }, + { url = "https://files.pythonhosted.org/packages/5f/86/2acbda8cc2af5f3d7bfc791192863b9e3e19674da7b5e533fded124d1299/numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f", size = 16679325, upload-time = "2026-03-29T13:21:17.561Z" }, + { url = "https://files.pythonhosted.org/packages/bc/59/cafd83018f4aa55e0ac6fa92aa066c0a1877b77a615ceff1711c260ffae8/numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0", size = 17084883, upload-time = "2026-03-29T13:21:21.106Z" }, + { url = "https://files.pythonhosted.org/packages/f0/85/a42548db84e65ece46ab2caea3d3f78b416a47af387fcbb47ec28e660dc2/numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150", size = 18403474, upload-time = "2026-03-29T13:21:24.828Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ad/483d9e262f4b831000062e5d8a45e342166ec8aaa1195264982bca267e62/numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871", size = 6155500, upload-time = "2026-03-29T13:21:28.205Z" }, + { url = "https://files.pythonhosted.org/packages/c7/03/2fc4e14c7bd4ff2964b74ba90ecb8552540b6315f201df70f137faa5c589/numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e", size = 12637755, upload-time = "2026-03-29T13:21:31.107Z" }, + { url = "https://files.pythonhosted.org/packages/58/78/548fb8e07b1a341746bfbecb32f2c268470f45fa028aacdbd10d9bc73aab/numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7", size = 10566643, upload-time = "2026-03-29T13:21:34.339Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "pathspec" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, +] + +[[package]] +name = "pillow" +version = "12.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" }, + { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" }, + { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" }, + { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" }, + { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" }, + { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" }, + { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" }, + { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" }, + { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" }, + { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" }, + { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" }, + { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" }, + { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" }, +] + +[[package]] +name = "pkginfo" +version = "1.12.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/03/e26bf3d6453b7fda5bd2b84029a426553bb373d6277ef6b5ac8863421f87/pkginfo-1.12.1.2.tar.gz", hash = "sha256:5cd957824ac36f140260964eba3c6be6442a8359b8c48f4adf90210f33a04b7b", size = 451828, upload-time = "2025-02-19T15:27:37.188Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/3d/f4f2ba829efb54b6cd2d91349c7463316a9cc55a43fc980447416c88540f/pkginfo-1.12.1.2-py3-none-any.whl", hash = "sha256:c783ac885519cab2c34927ccfa6bf64b5a704d7c69afaea583dd9b7afe969343", size = 32717, upload-time = "2025-02-19T15:27:33.071Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, + { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, + { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, + { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, + { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, + { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, + { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, + { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, +] + +[[package]] +name = "pytest-insta" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/31/d2ca30c6dec0c35cf49fb78ac1c1c35af721c2f402d8fc80dd0aa6286643/pytest_insta-0.4.1.tar.gz", hash = "sha256:2cb6e0c5745c3dc351661c592e5c2cfc4c62529e154d188329ff47e8a514e3c9", size = 10306, upload-time = "2025-11-22T20:03:30.172Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/33/a86f7617fe169f95686dfa3a3f507a2bc7a8d3729e6e8466a1a774a51f7d/pytest_insta-0.4.1-py3-none-any.whl", hash = "sha256:63b85ea2c38436e4d0b7633112cf3d0e583b5e40b82937031f33cb8cf42fd12c", size = 12930, upload-time = "2025-11-22T20:03:29.145Z" }, +] + +[[package]] +name = "python-gitlab" +version = "3.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, + { name = "requests-toolbelt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/53/248b87282df591d74ba3d38c3c3ced2b5087248c0ccfb6b3a947bb1034c3/python-gitlab-3.15.0.tar.gz", hash = "sha256:c9e65eb7612a9fbb8abf0339972eca7fd7a73d4da66c9b446ffe528930aff534", size = 273270, upload-time = "2023-06-09T09:51:31.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/51/3c7dd08272658e5490d0c0b6c94af15bd0c0649e7ad23c9ed0db1d276143/python_gitlab-3.15.0-py3-none-any.whl", hash = "sha256:8f8d1c0d387f642eb1ac7bf5e8e0cd8b3dd49c6f34170cee3c7deb7d384611f3", size = 135865, upload-time = "2023-06-09T09:51:29.996Z" }, +] + +[[package]] +name = "python-semantic-release" +version = "7.34.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "click-log" }, + { name = "dotty-dict" }, + { name = "gitpython" }, + { name = "invoke" }, + { name = "packaging" }, + { name = "python-gitlab" }, + { name = "requests" }, + { name = "semver" }, + { name = "tomlkit" }, + { name = "twine" }, + { name = "wheel" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/67/abf0ed527dafc5545b2ae264ec090b9849fac7775c319f0f6da95a50e9b7/python-semantic-release-7.34.6.tar.gz", hash = "sha256:e9b8fb788024ae9510a924136d573588415a16eeca31cc5240f2754a80a2e831", size = 41885, upload-time = "2023-06-17T14:12:17.089Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/53/d9b4c4a811a946489f89b62b02b01e9e456dc8c3bde154a18eac4f1dcbe4/python_semantic_release-7.34.6-py3-none-any.whl", hash = "sha256:7e3969ba4663d9b2087b02bf3ac140e202551377bf045c34e09bfe19753e19ab", size = 55637, upload-time = "2023-06-17T14:12:14.975Z" }, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "readme-renderer" +version = "44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docutils" }, + { name = "nh3" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz", hash = "sha256:8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", size = 32056, upload-time = "2024-07-08T15:00:57.805Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl", hash = "sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", size = 13310, upload-time = "2024-07-08T15:00:56.577Z" }, +] + +[[package]] +name = "requests" +version = "2.33.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + +[[package]] +name = "rfc3986" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", size = 49026, upload-time = "2022-01-10T00:52:30.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", size = 31326, upload-time = "2022-01-10T00:52:29.594Z" }, +] + +[[package]] +name = "rich" +version = "13.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149, upload-time = "2024-11-01T16:43:57.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424, upload-time = "2024-11-01T16:43:55.817Z" }, +] + +[[package]] +name = "ruff" +version = "0.15.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/d9/aa3f7d59a10ef6b14fe3431706f854dbf03c5976be614a9796d36326810c/ruff-0.15.10.tar.gz", hash = "sha256:d1f86e67ebfdef88e00faefa1552b5e510e1d35f3be7d423dc7e84e63788c94e", size = 4631728, upload-time = "2026-04-09T14:06:09.884Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/00/a1c2fdc9939b2c03691edbda290afcd297f1f389196172826b03d6b6a595/ruff-0.15.10-py3-none-linux_armv6l.whl", hash = "sha256:0744e31482f8f7d0d10a11fcbf897af272fefdfcb10f5af907b18c2813ff4d5f", size = 10563362, upload-time = "2026-04-09T14:06:21.189Z" }, + { url = "https://files.pythonhosted.org/packages/5c/15/006990029aea0bebe9d33c73c3e28c80c391ebdba408d1b08496f00d422d/ruff-0.15.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b1e7c16ea0ff5a53b7c2df52d947e685973049be1cdfe2b59a9c43601897b22e", size = 10951122, upload-time = "2026-04-09T14:06:02.236Z" }, + { url = "https://files.pythonhosted.org/packages/f2/c0/4ac978fe874d0618c7da647862afe697b281c2806f13ce904ad652fa87e4/ruff-0.15.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:93cc06a19e5155b4441dd72808fdf84290d84ad8a39ca3b0f994363ade4cebb1", size = 10314005, upload-time = "2026-04-09T14:06:00.026Z" }, + { url = "https://files.pythonhosted.org/packages/da/73/c209138a5c98c0d321266372fc4e33ad43d506d7e5dd817dd89b60a8548f/ruff-0.15.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83e1dd04312997c99ea6965df66a14fb4f03ba978564574ffc68b0d61fd3989e", size = 10643450, upload-time = "2026-04-09T14:05:42.137Z" }, + { url = "https://files.pythonhosted.org/packages/ec/76/0deec355d8ec10709653635b1f90856735302cb8e149acfdf6f82a5feb70/ruff-0.15.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8154d43684e4333360fedd11aaa40b1b08a4e37d8ffa9d95fee6fa5b37b6fab1", size = 10379597, upload-time = "2026-04-09T14:05:49.984Z" }, + { url = "https://files.pythonhosted.org/packages/dc/be/86bba8fc8798c081e28a4b3bb6d143ccad3fd5f6f024f02002b8f08a9fa3/ruff-0.15.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ab88715f3a6deb6bde6c227f3a123410bec7b855c3ae331b4c006189e895cef", size = 11146645, upload-time = "2026-04-09T14:06:12.246Z" }, + { url = "https://files.pythonhosted.org/packages/a8/89/140025e65911b281c57be1d385ba1d932c2366ca88ae6663685aed8d4881/ruff-0.15.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a768ff5969b4f44c349d48edf4ab4f91eddb27fd9d77799598e130fb628aa158", size = 12030289, upload-time = "2026-04-09T14:06:04.776Z" }, + { url = "https://files.pythonhosted.org/packages/88/de/ddacca9545a5e01332567db01d44bd8cf725f2db3b3d61a80550b48308ea/ruff-0.15.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ee3ef42dab7078bda5ff6a1bcba8539e9857deb447132ad5566a038674540d0", size = 11496266, upload-time = "2026-04-09T14:05:55.485Z" }, + { url = "https://files.pythonhosted.org/packages/bc/bb/7ddb00a83760ff4a83c4e2fc231fd63937cc7317c10c82f583302e0f6586/ruff-0.15.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51cb8cc943e891ba99989dd92d61e29b1d231e14811db9be6440ecf25d5c1609", size = 11256418, upload-time = "2026-04-09T14:05:57.69Z" }, + { url = "https://files.pythonhosted.org/packages/dc/8d/55de0d35aacf6cd50b6ee91ee0f291672080021896543776f4170fc5c454/ruff-0.15.10-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:e59c9bdc056a320fb9ea1700a8d591718b8faf78af065484e801258d3a76bc3f", size = 11288416, upload-time = "2026-04-09T14:05:44.695Z" }, + { url = "https://files.pythonhosted.org/packages/68/cf/9438b1a27426ec46a80e0a718093c7f958ef72f43eb3111862949ead3cc1/ruff-0.15.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:136c00ca2f47b0018b073f28cb5c1506642a830ea941a60354b0e8bc8076b151", size = 10621053, upload-time = "2026-04-09T14:05:52.782Z" }, + { url = "https://files.pythonhosted.org/packages/4c/50/e29be6e2c135e9cd4cb15fbade49d6a2717e009dff3766dd080fcb82e251/ruff-0.15.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8b80a2f3c9c8a950d6237f2ca12b206bccff626139be9fa005f14feb881a1ae8", size = 10378302, upload-time = "2026-04-09T14:06:14.361Z" }, + { url = "https://files.pythonhosted.org/packages/18/2f/e0b36a6f99c51bb89f3a30239bc7bf97e87a37ae80aa2d6542d6e5150364/ruff-0.15.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:e3e53c588164dc025b671c9df2462429d60357ea91af7e92e9d56c565a9f1b07", size = 10850074, upload-time = "2026-04-09T14:06:16.581Z" }, + { url = "https://files.pythonhosted.org/packages/11/08/874da392558ce087a0f9b709dc6ec0d60cbc694c1c772dab8d5f31efe8cb/ruff-0.15.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b0c52744cf9f143a393e284125d2576140b68264a93c6716464e129a3e9adb48", size = 11358051, upload-time = "2026-04-09T14:06:18.948Z" }, + { url = "https://files.pythonhosted.org/packages/e4/46/602938f030adfa043e67112b73821024dc79f3ab4df5474c25fa4c1d2d14/ruff-0.15.10-py3-none-win32.whl", hash = "sha256:d4272e87e801e9a27a2e8df7b21011c909d9ddd82f4f3281d269b6ba19789ca5", size = 10588964, upload-time = "2026-04-09T14:06:07.14Z" }, + { url = "https://files.pythonhosted.org/packages/25/b6/261225b875d7a13b33a6d02508c39c28450b2041bb01d0f7f1a83d569512/ruff-0.15.10-py3-none-win_amd64.whl", hash = "sha256:28cb32d53203242d403d819fd6983152489b12e4a3ae44993543d6fe62ab42ed", size = 11745044, upload-time = "2026-04-09T14:05:39.473Z" }, + { url = "https://files.pythonhosted.org/packages/58/ed/dea90a65b7d9e69888890fb14c90d7f51bf0c1e82ad800aeb0160e4bacfd/ruff-0.15.10-py3-none-win_arm64.whl", hash = "sha256:601d1610a9e1f1c2165a4f561eeaa2e2ea1e97f3287c5aa258d3dab8b57c6188", size = 11035607, upload-time = "2026-04-09T14:05:47.593Z" }, +] + +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jeepney" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + +[[package]] +name = "semver" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/a9/b61190916030ee9af83de342e101f192bbb436c59be20a4cb0cdb7256ece/semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f", size = 45816, upload-time = "2020-10-20T20:16:54.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/70/b84f9944a03964a88031ef6ac219b6c91e8ba2f373362329d8770ef36f02/semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4", size = 12901, upload-time = "2020-10-20T20:16:52.583Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "smithed-libraries" +version = "0.16.4" +source = { virtual = "." } +dependencies = [ + { name = "beet" }, + { name = "bolt" }, + { name = "bolt-expressions" }, + { name = "mecha" }, + { name = "pydantic" }, + { name = "rich" }, +] + +[package.dev-dependencies] +dev = [ + { name = "devtools" }, + { name = "github-action-utils" }, + { name = "pytest" }, + { name = "pytest-insta" }, + { name = "python-semantic-release" }, + { name = "requests" }, + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [ + { name = "beet", specifier = ">=0.115.0" }, + { name = "bolt", specifier = ">=0.50.0,<0.51" }, + { name = "bolt-expressions", specifier = ">=0.17.0,<0.18" }, + { name = "mecha", specifier = ">=0.103.0,<0.104" }, + { name = "pydantic", specifier = ">=2.5.2,<3" }, + { name = "rich", specifier = ">=13.9.2,<14" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "devtools", specifier = ">=0.9.0,<0.10" }, + { name = "github-action-utils", specifier = ">=1.1.0,<2" }, + { name = "pytest", specifier = ">=9.0.3" }, + { name = "pytest-insta", specifier = ">=0.4.1" }, + { name = "python-semantic-release", specifier = ">=7.32.2,<8" }, + { name = "requests", specifier = ">=2.28.1,<3" }, + { name = "ruff", specifier = ">=0.15.10" }, +] + +[[package]] +name = "smmap" +version = "5.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506, upload-time = "2026-03-09T03:43:26.1Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390, upload-time = "2026-03-09T03:43:24.361Z" }, +] + +[[package]] +name = "tokenstream" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/33/0874abc08b5811aab60818b4596ab3463a4044e59061fa5b8bb8cca53b59/tokenstream-1.7.0.tar.gz", hash = "sha256:9f98387c7e74d224f7cca874ce77bb775ece6cb585e9ba18441960e2b35fae61", size = 17012, upload-time = "2023-08-03T00:21:02.4Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/e3/ed2623ff7a54bbd45f59c536f9b8923cc797a1125d9d087ea51cc9424e99/tokenstream-1.7.0-py3-none-any.whl", hash = "sha256:fdbb20e8a99b07e94ce88016e5f243a1582630a7459bd2e7a1c786f33543fcf9", size = 16857, upload-time = "2023-08-03T00:21:00.394Z" }, +] + +[[package]] +name = "toml" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, +] + +[[package]] +name = "tomlkit" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/af/14b24e41977adb296d6bd1fb59402cf7d60ce364f90c890bd2ec65c43b5a/tomlkit-0.14.0.tar.gz", hash = "sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064", size = 187167, upload-time = "2026-01-13T01:14:53.304Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl", hash = "sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680", size = 39310, upload-time = "2026-01-13T01:14:51.965Z" }, +] + +[[package]] +name = "tqdm" +version = "4.67.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, +] + +[[package]] +name = "twine" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama" }, + { name = "importlib-metadata" }, + { name = "keyring" }, + { name = "pkginfo" }, + { name = "readme-renderer" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "rfc3986" }, + { name = "tqdm" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/3e/ce331d7e215abdc16c53e65f8506bfccf4840ce191b709a37b8c83cc32c7/twine-3.8.0.tar.gz", hash = "sha256:8efa52658e0ae770686a13b675569328f1fba9837e5de1867bfe5f46a9aefe19", size = 214568, upload-time = "2022-02-02T18:50:23.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/74/ea7dfb86223695fd8efa256a24d1520729dde79a4e628ee6879f0f136d40/twine-3.8.0-py3-none-any.whl", hash = "sha256:d0550fca9dc19f3d5e8eadfce0c227294df0a2a951251a4385797c8a6198b7c8", size = 36057, upload-time = "2022-02-02T18:50:21.723Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "wheel" +version = "0.46.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/24/a2eb353a6edac9a0303977c4cb048134959dd2a51b48a269dfc9dde00c8a/wheel-0.46.3.tar.gz", hash = "sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803", size = 60605, upload-time = "2026-01-22T12:39:49.136Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl", hash = "sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d", size = 30557, upload-time = "2026-01-22T12:39:48.099Z" }, +] + +[[package]] +name = "wrapt" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/64/925f213fdcbb9baeb1530449ac71a4d57fc361c053d06bf78d0c5c7cd80c/wrapt-2.1.2.tar.gz", hash = "sha256:3996a67eecc2c68fd47b4e3c564405a5777367adfd9b8abb58387b63ee83b21e", size = 81678, upload-time = "2026-03-06T02:53:25.134Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/25/e7ea0b417db02bb796182a5316398a75792cd9a22528783d868755e1f669/wrapt-2.1.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1370e516598854e5b4366e09ce81e08bfe94d42b0fd569b88ec46cc56d9164a9", size = 61418, upload-time = "2026-03-06T02:53:55.706Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0f/fa539e2f6a770249907757eaeb9a5ff4deb41c026f8466c1c6d799088a9b/wrapt-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6de1a3851c27e0bd6a04ca993ea6f80fc53e6c742ee1601f486c08e9f9b900a9", size = 61914, upload-time = "2026-03-06T02:52:53.37Z" }, + { url = "https://files.pythonhosted.org/packages/53/37/02af1867f5b1441aaeda9c82deed061b7cd1372572ddcd717f6df90b5e93/wrapt-2.1.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:de9f1a2bbc5ac7f6012ec24525bdd444765a2ff64b5985ac6e0692144838542e", size = 120417, upload-time = "2026-03-06T02:54:30.74Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b7/0138a6238c8ba7476c77cf786a807f871672b37f37a422970342308276e7/wrapt-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:970d57ed83fa040d8b20c52fe74a6ae7e3775ae8cff5efd6a81e06b19078484c", size = 122797, upload-time = "2026-03-06T02:54:51.539Z" }, + { url = "https://files.pythonhosted.org/packages/e1/ad/819ae558036d6a15b7ed290d5b14e209ca795dd4da9c58e50c067d5927b0/wrapt-2.1.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3969c56e4563c375861c8df14fa55146e81ac11c8db49ea6fb7f2ba58bc1ff9a", size = 117350, upload-time = "2026-03-06T02:54:37.651Z" }, + { url = "https://files.pythonhosted.org/packages/8b/2d/afc18dc57a4600a6e594f77a9ae09db54f55ba455440a54886694a84c71b/wrapt-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:57d7c0c980abdc5f1d98b11a2aa3bb159790add80258c717fa49a99921456d90", size = 121223, upload-time = "2026-03-06T02:54:35.221Z" }, + { url = "https://files.pythonhosted.org/packages/b9/5b/5ec189b22205697bc56eb3b62aed87a1e0423e9c8285d0781c7a83170d15/wrapt-2.1.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:776867878e83130c7a04237010463372e877c1c994d449ca6aaafeab6aab2586", size = 116287, upload-time = "2026-03-06T02:54:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/f7/2d/f84939a7c9b5e6cdd8a8d0f6a26cabf36a0f7e468b967720e8b0cd2bdf69/wrapt-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fab036efe5464ec3291411fabb80a7a39e2dd80bae9bcbeeca5087fdfa891e19", size = 119593, upload-time = "2026-03-06T02:54:16.697Z" }, + { url = "https://files.pythonhosted.org/packages/0b/fe/ccd22a1263159c4ac811ab9374c061bcb4a702773f6e06e38de5f81a1bdc/wrapt-2.1.2-cp314-cp314-win32.whl", hash = "sha256:e6ed62c82ddf58d001096ae84ce7f833db97ae2263bff31c9b336ba8cfe3f508", size = 58631, upload-time = "2026-03-06T02:53:06.498Z" }, + { url = "https://files.pythonhosted.org/packages/65/0a/6bd83be7bff2e7efaac7b4ac9748da9d75a34634bbbbc8ad077d527146df/wrapt-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:467e7c76315390331c67073073d00662015bb730c566820c9ca9b54e4d67fd04", size = 60875, upload-time = "2026-03-06T02:53:50.252Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c0/0b3056397fe02ff80e5a5d72d627c11eb885d1ca78e71b1a5c1e8c7d45de/wrapt-2.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:da1f00a557c66225d53b095a97eace0fc5349e3bfda28fa34ffae238978ee575", size = 59164, upload-time = "2026-03-06T02:53:59.128Z" }, + { url = "https://files.pythonhosted.org/packages/71/ed/5d89c798741993b2371396eb9d4634f009ff1ad8a6c78d366fe2883ea7a6/wrapt-2.1.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:62503ffbc2d3a69891cf29beeaccdb4d5e0a126e2b6a851688d4777e01428dbb", size = 63163, upload-time = "2026-03-06T02:52:54.873Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8c/05d277d182bf36b0a13d6bd393ed1dec3468a25b59d01fba2dd70fe4d6ae/wrapt-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c7e6cd120ef837d5b6f860a6ea3745f8763805c418bb2f12eeb1fa6e25f22d22", size = 63723, upload-time = "2026-03-06T02:52:56.374Z" }, + { url = "https://files.pythonhosted.org/packages/f4/27/6c51ec1eff4413c57e72d6106bb8dec6f0c7cdba6503d78f0fa98767bcc9/wrapt-2.1.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3769a77df8e756d65fbc050333f423c01ae012b4f6731aaf70cf2bef61b34596", size = 152652, upload-time = "2026-03-06T02:53:23.79Z" }, + { url = "https://files.pythonhosted.org/packages/db/4c/d7dd662d6963fc7335bfe29d512b02b71cdfa23eeca7ab3ac74a67505deb/wrapt-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a76d61a2e851996150ba0f80582dd92a870643fa481f3b3846f229de88caf044", size = 158807, upload-time = "2026-03-06T02:53:35.742Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4d/1e5eea1a78d539d346765727422976676615814029522c76b87a95f6bcdd/wrapt-2.1.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6f97edc9842cf215312b75fe737ee7c8adda75a89979f8e11558dfff6343cc4b", size = 146061, upload-time = "2026-03-06T02:52:57.574Z" }, + { url = "https://files.pythonhosted.org/packages/89/bc/62cabea7695cd12a288023251eeefdcb8465056ddaab6227cb78a2de005b/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4006c351de6d5007aa33a551f600404ba44228a89e833d2fadc5caa5de8edfbf", size = 155667, upload-time = "2026-03-06T02:53:39.422Z" }, + { url = "https://files.pythonhosted.org/packages/e9/99/6f2888cd68588f24df3a76572c69c2de28287acb9e1972bf0c83ce97dbc1/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a9372fc3639a878c8e7d87e1556fa209091b0a66e912c611e3f833e2c4202be2", size = 144392, upload-time = "2026-03-06T02:54:22.41Z" }, + { url = "https://files.pythonhosted.org/packages/40/51/1dfc783a6c57971614c48e361a82ca3b6da9055879952587bc99fe1a7171/wrapt-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3144b027ff30cbd2fca07c0a87e67011adb717eb5f5bd8496325c17e454257a3", size = 150296, upload-time = "2026-03-06T02:54:07.848Z" }, + { url = "https://files.pythonhosted.org/packages/6c/38/cbb8b933a0201076c1f64fc42883b0023002bdc14a4964219154e6ff3350/wrapt-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:3b8d15e52e195813efe5db8cec156eebe339aaf84222f4f4f051a6c01f237ed7", size = 60539, upload-time = "2026-03-06T02:54:00.594Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/e5176e4b241c9f528402cebb238a36785a628179d7d8b71091154b3e4c9e/wrapt-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:08ffa54146a7559f5b8df4b289b46d963a8e74ed16ba3687f99896101a3990c5", size = 63969, upload-time = "2026-03-06T02:54:39Z" }, + { url = "https://files.pythonhosted.org/packages/5c/99/79f17046cf67e4a95b9987ea129632ba8bcec0bc81f3fb3d19bdb0bd60cd/wrapt-2.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:72aaa9d0d8e4ed0e2e98019cea47a21f823c9dd4b43c7b77bba6679ffcca6a00", size = 60554, upload-time = "2026-03-06T02:53:14.132Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c7/8528ac2dfa2c1e6708f647df7ae144ead13f0a31146f43c7264b4942bf12/wrapt-2.1.2-py3-none-any.whl", hash = "sha256:b8fd6fa2b2c4e7621808f8c62e8317f4aae56e59721ad933bac5239d913cf0e8", size = 43993, upload-time = "2026-03-06T02:53:12.905Z" }, +] + +[[package]] +name = "zipp" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, +]