From eb14f28d31723b9f1faf52a048abe4296533bf0d Mon Sep 17 00:00:00 2001 From: stonebig Date: Sat, 16 Aug 2025 14:23:39 +0200 Subject: [PATCH 1/2] remove "details" dropdown, not so ergnonomic --- wppm/diff.py | 4 ++-- wppm/wppm.py | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/wppm/diff.py b/wppm/diff.py index 12671faf..5e1de9b2 100644 --- a/wppm/diff.py +++ b/wppm/diff.py @@ -133,11 +133,11 @@ def compare_package_indexes(version2, version1=None, searchdir=None, flavor="", result = ( f"## History of changes for WinPython-{architecture}bit {version2 + flavor}\r\n\r\n" f"The following changes were made to WinPython-{architecture}bit distribution since version {version1 + flavor1}.\n\n\n" - "
\n\n" + "\n" ) for k in PackageIndex.HEADERS: result += compare_markdown_sections(md1, md2, k, k, version1, version2) + "\n" - return result+ "\n
\n\n* * *\n" + return result+ "\n\n* * *\n" def copy_changelogs(version, searchdir, flavor="", architecture=64, basedir=None): """Copy all changelogs for a major.minor version into basedir.""" diff --git a/wppm/wppm.py b/wppm/wppm.py index a80d3961..73e93b38 100644 --- a/wppm/wppm.py +++ b/wppm/wppm.py @@ -101,12 +101,10 @@ def generate_package_index_markdown(self, python_executable_directory: str|None The following packages are included in WinPython-{my_arch}bit v{my_winpyver2 + my_flavor} {my_release_level}. -
{self.render_markdown_for_list("Tools", tools_list)} {self.render_markdown_for_list("Python packages", package_list)} {self.render_markdown_for_list("WheelHouse packages", wheelhouse_list)} -
""" def find_package(self, name: str) -> Package | None: From c9eb5d5fb0edf05de46c9790861600191b1c0999 Mon Sep 17 00:00:00 2001 From: stonebig Date: Sat, 16 Aug 2025 17:27:18 +0200 Subject: [PATCH 2/2] trying to build wppm wheel on the cloud --- .../workflows/github_workflows_build-wppm.yml | 81 ++++ .../cycle_2025_04/pylock.wppmbuild.toml | 376 ++++++++++++++++++ .../cycle_2025_04/requir.wppmbuild.txt | 68 ++++ 3 files changed, 525 insertions(+) create mode 100644 .github/workflows/github_workflows_build-wppm.yml create mode 100644 winpython/portable/cycle_2025_04/pylock.wppmbuild.toml create mode 100644 winpython/portable/cycle_2025_04/requir.wppmbuild.txt diff --git a/.github/workflows/github_workflows_build-wppm.yml b/.github/workflows/github_workflows_build-wppm.yml new file mode 100644 index 00000000..3e955147 --- /dev/null +++ b/.github/workflows/github_workflows_build-wppm.yml @@ -0,0 +1,81 @@ +name: Build_wppm # 2025-08-16: from TornadoWeb simple example +# object: +# - learn the matrix method +# - be compatible with cibuilds later +# +# using a predefined hashed wheel environnment: pylock.wppmbuild.toml +# pip freeze>test.txt +# python -m pip lock --no-deps --find-links=C:\WinP\packages.srcreq -r test.txt -o pylock.wppmbuild.toml +# python -X utf8 -c "from wppm import wheelhouse as wh; wh.pylock_to_req('pylock.wppmbuild.toml', r'requir.wppmbuild.txt')" +# +on: + push: + #branches: + # # Run on release branches. This gives us a chance to detect rot in this + # # configuration before pushing a tag (which we'd rather not have to undo). + # - "branch[0-9]*" + #tags: + # # The main purpose of this workflow is to build wheels for release tags. + # # It runs automatically on tags matching this pattern and pushes to pypi. + # - "v*" + workflow_dispatch: + # Allow this workflow to be run manually (pushing to testpypi instead of pypi) +permissions: {} + +env: + python-version: '3.13' + WINPYrequirements=winpython/portable/cycle_2025_04/requir.wppmbuild.toml + +jobs: + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest] + + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - uses: actions/setup-python@v5 + name: Install Python + with: + python-version: ${{ env.python-version }} + + - name: Install dependencies to build + shell: pwsh + run: | + python -m pip install --no-deps --no-index --require-hashes -r $env:WINPYrequirements + + - name: Build sdist + shell: bash + run: | + python -m flit build && ls -l dist + + + - name: prepare result + shell: bash + run: | + mkdir wheelhouse + cp dist/*.whl wheelhouse + + - name: generate hashes wppm style + shell: pwsh + run: | + $destfile = "wheelhouse\hashes.md" + python -c "import sys;from winpython import hash; hash.print_hashes(sys.argv[1:])" wheelhouse\*.whl | | Out-File -FilePath $destfile -Encoding utf8 + + + - name: List wheelhouse contents (for debugging) + shell: pwsh + run: | + Get-ChildItem wheelhouse + + - uses: actions/upload-artifact@v4 + with: + name: artifacts-${{ matrix.os }} + path: ./wheelhouse/*.* + #retention-days: 30 # keeps artifact for 30 days diff --git a/winpython/portable/cycle_2025_04/pylock.wppmbuild.toml b/winpython/portable/cycle_2025_04/pylock.wppmbuild.toml new file mode 100644 index 00000000..af5bd953 --- /dev/null +++ b/winpython/portable/cycle_2025_04/pylock.wppmbuild.toml @@ -0,0 +1,376 @@ +lock-version = "1.0" +created-by = "pip" + +[[packages]] +name = "build" +version = "1.2.2.post1" + +[[packages.wheels]] +name = "build-1.2.2.post1-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/84/c2/80633736cd183ee4a62107413def345f7e6e3c01563dbca1417363cf957e/build-1.2.2.post1-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5" + +[[packages]] +name = "certifi" +version = "2025.4.26" + +[[packages.wheels]] +name = "certifi-2025.4.26-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3" + +[[packages]] +name = "charset-normalizer" +version = "3.4.2" + +[[packages.wheels]] +name = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl" +url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl" + +[packages.wheels.hashes] +sha256 = "aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980" + +[[packages]] +name = "colorama" +version = "0.4.6" + +[[packages.wheels]] +name = "colorama-0.4.6-py2.py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + +[[packages]] +name = "docutils" +version = "0.21.2" + +[[packages.wheels]] +name = "docutils-0.21.2-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2" + +[[packages]] +name = "flit" +version = "3.12.0" + +[[packages.wheels]] +name = "flit-3.12.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/f5/82/ce1d3bb380b227e26e517655d1de7b32a72aad61fa21ff9bd91a2e2db6ee/flit-3.12.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "2b4e7171dc22881fa6adc2dbf083e5ecc72520be3cd7587d2a803da94d6ef431" + +[[packages]] +name = "flit-core" +version = "3.12.0" + +[[packages.wheels]] +name = "flit_core-3.12.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/f2/65/b6ba90634c984a4fcc02c7e3afe523fef500c4980fec67cc27536ee50acf/flit_core-3.12.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "e7a0304069ea895172e3c7bb703292e992c5d1555dd1233ab7b5621b5b69e62c" + +[[packages]] +name = "id" +version = "1.5.0" + +[[packages.wheels]] +name = "id-1.5.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/9f/cb/18326d2d89ad3b0dd143da971e77afd1e6ca6674f1b1c3df4b6bec6279fc/id-1.5.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658" + +[[packages]] +name = "idna" +version = "3.10" + +[[packages.wheels]] +name = "idna-3.10-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" + +[[packages]] +name = "jaraco-classes" +version = "3.4.0" + +[[packages.wheels]] +name = "jaraco.classes-3.4.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790" + +[[packages]] +name = "jaraco-context" +version = "6.0.1" + +[[packages.wheels]] +name = "jaraco.context-6.0.1-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4" + +[[packages]] +name = "jaraco-functools" +version = "4.1.0" + +[[packages.wheels]] +name = "jaraco.functools-4.1.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649" + +[[packages]] +name = "keyring" +version = "25.6.0" + +[[packages.wheels]] +name = "keyring-25.6.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd" + +[[packages]] +name = "markdown-it-py" +version = "3.0.0" + +[[packages.wheels]] +name = "markdown_it_py-3.0.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1" + +[[packages]] +name = "mdurl" +version = "0.1.2" + +[[packages.wheels]] +name = "mdurl-0.1.2-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8" + +[[packages]] +name = "more-itertools" +version = "10.7.0" + +[[packages.wheels]] +name = "more_itertools-10.7.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e" + +[[packages]] +name = "nh3" +version = "0.2.21" + +[[packages.wheels]] +name = "nh3-0.2.21-cp38-abi3-win_amd64.whl" +url = "https://files.pythonhosted.org/packages/23/fc/8ce756c032c70ae3dd1d48a3552577a325475af2a2f629604b44f571165c/nh3-0.2.21-cp38-abi3-win_amd64.whl" + +[packages.wheels.hashes] +sha256 = "bb0014948f04d7976aabae43fcd4cb7f551f9f8ce785a4c9ef66e6c2590f8629" + +[[packages]] +name = "packaging" +version = "25.0" + +[[packages.wheels]] +name = "packaging-25.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484" + +[[packages]] +name = "pygments" +version = "2.19.1" + +[[packages.wheels]] +name = "pygments-2.19.1-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c" + +[[packages]] +name = "pyproject-hooks" +version = "1.2.0" + +[[packages.wheels]] +name = "pyproject_hooks-1.2.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913" + +[[packages]] +name = "pywin32-ctypes" +version = "0.2.3" + +[[packages.wheels]] +name = "pywin32_ctypes-0.2.3-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8" + +[[packages]] +name = "readme-renderer" +version = "44.0" + +[[packages.wheels]] +name = "readme_renderer-44.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151" + +[[packages]] +name = "requests" +version = "2.32.3" + +[[packages.wheels]] +name = "requests-2.32.3-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + +[[packages]] +name = "requests-toolbelt" +version = "1.0.0" + +[[packages.wheels]] +name = "requests_toolbelt-1.0.0-py2.py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06" + +[[packages]] +name = "rfc3986" +version = "2.0.0" + +[[packages.wheels]] +name = "rfc3986-2.0.0-py2.py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd" + +[[packages]] +name = "rich" +version = "14.0.0" + +[[packages.wheels]] +name = "rich-14.0.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0" + +[[packages]] +name = "setuptools" +version = "80.9.0" + +[[packages.wheels]] +name = "setuptools-80.9.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922" + +[[packages]] +name = "sqlite-bro" +version = "0.13.1" + +[[packages.wheels]] +name = "sqlite_bro-0.13.1-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/2a/b3/81b91f5b26fff329c59dbf826a87637bd51d1903120427912322f86e7d33/sqlite_bro-0.13.1-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "c26033b0af133049ca578b5fd30b2372f002e7ff934b39774aa4d2da7638c23d" + +[[packages]] +name = "sv-ttk" +version = "2.6.0" + +[[packages.wheels]] +name = "sv_ttk-2.6.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/0f/3d/be0abc3202e90f282ad465f4e7c6e41bc8dce810ce5d1611566a1e7dfba8/sv_ttk-2.6.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "4319c52edf2e14732fe84bdc9788e26f9e9a1ad79451ec0f89f0120ffc8105d9" + +[[packages]] +name = "tomli-w" +version = "1.2.0" + +[[packages.wheels]] +name = "tomli_w-1.2.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90" + +[[packages]] +name = "twine" +version = "6.1.0" + +[[packages.wheels]] +name = "twine-6.1.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/7c/b6/74e927715a285743351233f33ea3c684528a0d374d2e43ff9ce9585b73fe/twine-6.1.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384" + +[[packages]] +name = "urllib3" +version = "2.4.0" + +[[packages.wheels]] +name = "urllib3-2.4.0-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813" + +[[packages]] +name = "wheel" +version = "0.45.1" + +[[packages.wheels]] +name = "wheel-0.45.1-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248" + +[[packages]] +name = "wppm" +version = "17.2.20250802b2" + +[[packages.wheels]] +name = "wppm-17.2.20250802b2-py3-none-any.whl" +url = "https://files.pythonhosted.org/packages/80/7b/07a8203e29fea503b6012a075055fdbc57c4be95739e4a9b7d65ed8ef599/wppm-17.2.20250802b2-py3-none-any.whl" + +[packages.wheels.hashes] +sha256 = "ed916dcefbc2d597a77cc74d459e8661c59584a690a7d4063d60976fb4d1499f" diff --git a/winpython/portable/cycle_2025_04/requir.wppmbuild.txt b/winpython/portable/cycle_2025_04/requir.wppmbuild.txt new file mode 100644 index 00000000..f1c6adf3 --- /dev/null +++ b/winpython/portable/cycle_2025_04/requir.wppmbuild.txt @@ -0,0 +1,68 @@ +build==1.2.2.post1 \ + --hash=sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5 +certifi==2025.4.26 \ + --hash=sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3 +charset-normalizer==3.4.2 \ + --hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 +colorama==0.4.6 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +docutils==0.21.2 \ + --hash=sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2 +flit==3.12.0 \ + --hash=sha256:2b4e7171dc22881fa6adc2dbf083e5ecc72520be3cd7587d2a803da94d6ef431 +flit-core==3.12.0 \ + --hash=sha256:e7a0304069ea895172e3c7bb703292e992c5d1555dd1233ab7b5621b5b69e62c +id==1.5.0 \ + --hash=sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658 +idna==3.10 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 +jaraco-classes==3.4.0 \ + --hash=sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 +jaraco-context==6.0.1 \ + --hash=sha256:f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 +jaraco-functools==4.1.0 \ + --hash=sha256:ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649 +keyring==25.6.0 \ + --hash=sha256:552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd +markdown-it-py==3.0.0 \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 +more-itertools==10.7.0 \ + --hash=sha256:d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e +nh3==0.2.21 \ + --hash=sha256:bb0014948f04d7976aabae43fcd4cb7f551f9f8ce785a4c9ef66e6c2590f8629 +packaging==25.0 \ + --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 +pygments==2.19.1 \ + --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c +pyproject-hooks==1.2.0 \ + --hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 +pywin32-ctypes==0.2.3 \ + --hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 +readme-renderer==44.0 \ + --hash=sha256:2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151 +requests==2.32.3 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 +requests-toolbelt==1.0.0 \ + --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 +rfc3986==2.0.0 \ + --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd +rich==14.0.0 \ + --hash=sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0 +setuptools==80.9.0 \ + --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 +sqlite-bro==0.13.1 \ + --hash=sha256:c26033b0af133049ca578b5fd30b2372f002e7ff934b39774aa4d2da7638c23d +sv-ttk==2.6.0 \ + --hash=sha256:4319c52edf2e14732fe84bdc9788e26f9e9a1ad79451ec0f89f0120ffc8105d9 +tomli-w==1.2.0 \ + --hash=sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90 +twine==6.1.0 \ + --hash=sha256:a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384 +urllib3==2.4.0 \ + --hash=sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813 +wheel==0.45.1 \ + --hash=sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248 +wppm==17.2.20250802b2 \ + --hash=sha256:ed916dcefbc2d597a77cc74d459e8661c59584a690a7d4063d60976fb4d1499f