From d01b2de479625b7f252c99e749d6c04e7b35c4db Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Thu, 4 Jun 2026 16:25:17 -0400 Subject: [PATCH] chore(deps): use lizardbyte-common for python helpers --- .flake8 | 7 -- .github/workflows/ci-freebsd.yml | 10 +- .github/workflows/ci-linux.yml | 8 +- .github/workflows/ci-macos.yml | 7 +- .github/workflows/ci-windows.yml | 6 +- .github/workflows/localize.yml | 95 +--------------- .gitmodules | 4 + docs/contributing.md | 15 ++- pyproject.toml | 15 +-- scripts/_locale.py | 182 ------------------------------- scripts/update_clang_format.py | 40 ------- third-party/lizardbyte-common | 1 + uv.lock | 180 ------------------------------ 13 files changed, 40 insertions(+), 530 deletions(-) delete mode 100644 .flake8 delete mode 100644 scripts/_locale.py delete mode 100644 scripts/update_clang_format.py create mode 160000 third-party/lizardbyte-common diff --git a/.flake8 b/.flake8 deleted file mode 100644 index a8948ef1e66..00000000000 --- a/.flake8 +++ /dev/null @@ -1,7 +0,0 @@ -[flake8] -filename = - *.py -max-line-length = 120 -extend-exclude = - .venv/ - venv/ diff --git a/.github/workflows/ci-freebsd.yml b/.github/workflows/ci-freebsd.yml index 787c524cb1c..f0bff9ed165 100644 --- a/.github/workflows/ci-freebsd.yml +++ b/.github/workflows/ci-freebsd.yml @@ -15,6 +15,7 @@ on: env: BRANCH: ${{ github.head_ref || github.ref_name }} BUILD_VERSION: ${{ inputs.release_version }} + PYTHON_VERSION: '3.14' COMMIT: ${{ inputs.release_commit }} FREEBSD_CLANG_VERSION: 19 @@ -90,7 +91,7 @@ jobs: with: arch: ${{ matrix.arch }} cpu: ${{ steps.processor_count.outputs.PROCESSOR_COUNT }} - envs: 'BRANCH BUILD_VERSION COMMIT' + envs: 'BRANCH BUILD_VERSION COMMIT PYTHON_VERSION' # TODO: there is no libcap for freebsd... we need graphics/libdrm if we find a way to use libcap # TODO: docs are off because doxygen is too old: https://www.freshports.org/devel/doxygen/ must be >= 1.10 prepare: | @@ -142,7 +143,10 @@ jobs: release: ${{ matrix.bsd_release }} run: | set -e - uv sync --locked --group glad --group test --python /usr/local/bin/python3.14 \ + uv sync --locked --only-group glad --python "/usr/local/bin/python${PYTHON_VERSION}" \ + --no-python-downloads --no-install-project + uv sync --project third-party/lizardbyte-common --locked --only-group test-c \ + --python "/usr/local/bin/python${PYTHON_VERSION}" \ --no-python-downloads --no-install-project # fix git safe.directory issues @@ -255,7 +259,7 @@ jobs: shell: freebsd {0} run: | cd "${GITHUB_WORKSPACE}/build" - uv run --locked --no-sync python -m gcovr . -r ../src \ + uv run --project ../third-party/lizardbyte-common --locked --no-sync gcovr . -r ../src \ --exclude-noncode-lines \ --exclude-throw-branches \ --exclude-unreachable-branches \ diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml index eafc46c5baa..adf2899b2e4 100644 --- a/.github/workflows/ci-linux.yml +++ b/.github/workflows/ci-linux.yml @@ -172,7 +172,10 @@ jobs: enable-cache: true - name: Sync Python tools - run: uv sync --locked --only-group test --python "${PYTHON_VERSION}" --no-python-downloads --no-install-project + run: | + uv sync --project third-party/lizardbyte-common --locked --only-group test-c \ + --python "${PYTHON_VERSION}" \ + --no-python-downloads --no-install-project - name: Run tests id: test @@ -192,7 +195,8 @@ jobs: (steps.test.outcome == 'success' || steps.test.outcome == 'failure') working-directory: build run: | - uv run --locked --no-sync python -m gcovr --gcov-executable "gcov-${GCC_VERSION}" . -r ../src \ + uv run --project ../third-party/lizardbyte-common --locked --no-sync gcovr \ + --gcov-executable "gcov-${GCC_VERSION}" . -r ../src \ --exclude-noncode-lines \ --exclude-throw-branches \ --exclude-unreachable-branches \ diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml index 07a9597d809..8db1bb9288b 100644 --- a/.github/workflows/ci-macos.yml +++ b/.github/workflows/ci-macos.yml @@ -99,7 +99,10 @@ jobs: enable-cache: true - name: Sync Python tools - run: uv sync --locked --only-group test --python "${PYTHON_VERSION}" --no-python-downloads --no-install-project + run: | + uv sync --project third-party/lizardbyte-common --locked --only-group test-c \ + --python "${PYTHON_VERSION}" \ + --no-python-downloads --no-install-project - name: Configure env: @@ -181,7 +184,7 @@ jobs: (steps.test.outcome == 'success' || steps.test.outcome == 'failure') working-directory: build run: | - uv run --locked --no-sync python -m gcovr . -r ../src \ + uv run --project ../third-party/lizardbyte-common --locked --no-sync gcovr . -r ../src \ --exclude-noncode-lines \ --exclude-throw-branches \ --exclude-unreachable-branches \ diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml index 41e6ca3b69d..f35104d27d1 100644 --- a/.github/workflows/ci-windows.yml +++ b/.github/workflows/ci-windows.yml @@ -214,7 +214,9 @@ jobs: MSYS2_PATH_TYPE: inherit UV_PYTHON: ${{ steps.setup-python.outputs.python-path }} run: | - uv sync --locked --only-group test --no-python-downloads --no-install-project + uv sync --project third-party/lizardbyte-common --locked --only-group test-c \ + --no-python-downloads \ + --no-install-project - name: Build Windows shell: msys2 {0} @@ -367,7 +369,7 @@ jobs: env: MSYS2_PATH_TYPE: inherit run: | - uv run --locked --no-sync python -m gcovr . -r ../src \ + uv run --project ../third-party/lizardbyte-common --locked --no-sync gcovr . -r ../src \ --exclude-noncode-lines \ --exclude-throw-branches \ --exclude-unreachable-branches \ diff --git a/.github/workflows/localize.yml b/.github/workflows/localize.yml index 983f3beac2b..5127d184ef3 100644 --- a/.github/workflows/localize.yml +++ b/.github/workflows/localize.yml @@ -12,100 +12,11 @@ on: - 'locale/sunshine.po' workflow_dispatch: -env: - FILE: ./locale/sunshine.po - PYTHON_VERSION: '3.14' - jobs: localize: name: Update Localization permissions: contents: read - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - - - name: Install Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 - with: - python-version: ${{ env.PYTHON_VERSION }} - - - name: Setup uv - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 - with: - enable-cache: true - - - name: Sync Python tools - run: | - uv sync --frozen --only-group locale \ - --python "${PYTHON_VERSION}" \ - --no-python-downloads \ - --no-install-project - - - name: Set up xgettext - run: | - sudo apt-get update -y && \ - sudo apt-get --reinstall install -y \ - gettext - - - name: Update Strings - run: | - new_file=true - - # first, try to remove existing file as xgettext does not remove unused translations - if [ -f "${FILE}" ]; - then - rm "${FILE}" - new_file=false - fi - echo "NEW_FILE=${new_file}" >> "${GITHUB_ENV}" - - # extract the new strings - uv run --frozen --no-sync python ./scripts/_locale.py --extract - - - name: git diff - if: env.NEW_FILE == 'false' - run: | - # disable the pager - git config --global pager.diff false - - # print the git diff - git diff locale/sunshine.po - - # set the variable with minimal output, replacing `\t` with ` ` - OUTPUT=$(git diff --numstat locale/sunshine.po | sed -e "s#\t# #g") - echo "GIT_DIFF=${OUTPUT}" >> "${GITHUB_ENV}" - - - name: git reset - # only run if a single line changed (date/time) and file already existed - if: >- - env.GIT_DIFF == '1 1 locale/sunshine.po' && - env.NEW_FILE == 'false' - run: | - git reset --hard - - - name: Get current date - id: date - run: echo "date=$(date +'%Y-%m-%d')" >> "${GITHUB_OUTPUT}" - - - name: Create/Update Pull Request - uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1 - with: - add-paths: | - locale/*.po - token: ${{ secrets.GH_BOT_TOKEN }} # must trigger PR tests - commit-message: "chore(l10n): new babel updates" - branch: localize/update - delete-branch: true - base: master - title: "chore(l10n): new babel updates" - body: | - Update report - - Updated ${{ steps.date.outputs.date }} - - Auto-generated by [create-pull-request][1] - - [1]: https://github.com/peter-evans/create-pull-request - labels: | - babel - l10n + uses: LizardByte/lizardbyte-common/.github/workflows/localize.yml@master + secrets: + GH_TOKEN: ${{ secrets.GH_BOT_TOKEN }} diff --git a/.gitmodules b/.gitmodules index 16a493a5d36..373fc925811 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,6 +25,10 @@ path = third-party/libdisplaydevice url = https://github.com/LizardByte/libdisplaydevice.git branch = master +[submodule "third-party/lizardbyte-common"] + path = third-party/lizardbyte-common + url = https://github.com/LizardByte/lizardbyte-common.git + branch = master [submodule "third-party/moonlight-common-c"] path = third-party/moonlight-common-c url = https://github.com/moonlight-stream/moonlight-common-c.git diff --git a/docs/contributing.md b/docs/contributing.md index a70770c706d..7595918bf0e 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -128,23 +128,25 @@ any of the following paths are modified. ``` When testing locally, it may be desirable to manually extract, initialize, update, and compile strings. Python and -uv are required for this, along with the Python dependencies in the `./pyproject.toml` file. You can install these -with the following command. +uv are required for this, along with the Python dependencies in the `third-party/lizardbyte-common/pyproject.toml` +file. You can install these with the following command. ```bash -uv sync --only-group locale +uv sync --project third-party/lizardbyte-common --locked --only-group locale --no-install-project ``` Additionally, [xgettext](https://www.gnu.org/software/gettext) must be installed. * Extract, initialize, and update ```bash - uv run --no-sync python ./scripts/_locale.py --extract --init --update + uv run --project third-party/lizardbyte-common --locked --no-sync \ + python third-party/lizardbyte-common/scripts/localize.py --root-dir . --extract --init --update ``` * Compile ```bash - uv run --no-sync python ./scripts/_locale.py --compile + uv run --project third-party/lizardbyte-common --locked --no-sync \ + python third-party/lizardbyte-common/scripts/localize.py --root-dir . --compile ``` > [!IMPORTANT] @@ -160,7 +162,8 @@ Source code is tested against the `.clang-format` file for linting errors. To apply clang-format locally (will modify files): ```bash -uv run --no-sync --only-group lint python ./scripts/update_clang_format.py +uv run --project third-party/lizardbyte-common --locked --only-group lint-c \ + python third-party/lizardbyte-common/scripts/update_clang_format.py ``` #### Unit Testing diff --git a/pyproject.toml b/pyproject.toml index bf4b4c5c34d..ce5686c2abf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "Sunshine" version = "0.0.0" -description = "Helper scripts for Sunshine" +description = "Python tooling for Sunshine" requires-python = ">=3.14" license = {text = "GPL-3.0-only"} authors = [ @@ -29,19 +29,6 @@ flatpak = [ "flatpak_pip_generator", ] -lint = [ - "clang-format==20.*", - "flake8==7.3.0", -] - -locale = [ - "Babel==2.18.0", -] - -test = [ - "gcovr==8.6", -] - [project.urls] Homepage = "https://app.lizardbyte.dev/Sunshine" Repository = "https://github.com/LizardByte/Sunshine" diff --git a/scripts/_locale.py b/scripts/_locale.py deleted file mode 100644 index 0a2cda8725e..00000000000 --- a/scripts/_locale.py +++ /dev/null @@ -1,182 +0,0 @@ -""" -.. - _locale.py - -Functions related to building, initializing, updating, and compiling localization translations. - -Borrowed from RetroArcher. -""" -# standard imports -import argparse -import datetime -import os -import subprocess - -project_name = 'Sunshine' -project_owner = 'LizardByte' - -script_dir = os.path.dirname(os.path.abspath(__file__)) -root_dir = os.path.dirname(script_dir) -locale_dir = os.path.join(root_dir, 'locale') -project_dir = os.path.join(root_dir, 'src') - -year = datetime.datetime.now().year - -# target locales -target_locales = [ - 'bg', # Bulgarian - 'cs', # Czech - 'de', # German - 'en', # English - 'en_GB', # English (United Kingdom) - 'en_US', # English (United States) - 'es', # Spanish - 'fr', # French - 'it', # Italian - 'ja', # Japanese - 'ko', # Korean - 'pl', # Polish - 'pt', # Portuguese - 'pt_BR', # Portuguese (Brazil) - 'ru', # Russian - 'sv', # Swedish - 'tr', # Turkish - 'uk', # Ukrainian - 'zh', # Chinese - 'zh_TW', # Chinese (Traditional) -] - - -def x_extract(): - """Executes `xgettext extraction` in subprocess.""" - - pot_filepath = os.path.join(locale_dir, f'{project_name.lower()}.po') - - commands = [ - 'xgettext', - '--keyword=translate:1,1t', - '--keyword=translate:1c,2,2t', - '--keyword=translate:1,2,3t', - '--keyword=translate:1c,2,3,4t', - '--keyword=gettext:1', - '--keyword=pgettext:1c,2', - '--keyword=ngettext:1,2', - '--keyword=npgettext:1c,2,3', - f'--default-domain={project_name.lower()}', - f'--output={pot_filepath}', - '--language=C++', - '--boost', - '--from-code=utf-8', - '-F', - f'--msgid-bugs-address=github.com/{project_owner.lower()}/{project_name.lower()}', - f'--copyright-holder={project_owner}', - f'--package-name={project_name}', - '--package-version=v0' - ] - - extensions = ['cpp', 'h', 'm', 'mm'] - - # find input files - for root, dirs, files in os.walk(project_dir, topdown=True): - for name in files: - filename = os.path.join(root, name) - extension = filename.rsplit('.', 1)[-1] - if extension in extensions: # append input files - commands.append(filename) - - print(commands) - subprocess.check_output(args=commands, cwd=root_dir) - - try: - # fix header - body = "" - with open(file=pot_filepath, mode='r') as file: - for line in file.readlines(): - if line != '"Language: \\n"\n': # do not include this line - if line == '# SOME DESCRIPTIVE TITLE.\n': - body += f'# Translations template for {project_name}.\n' - elif line.startswith('#') and 'YEAR' in line: - body += line.replace('YEAR', str(year)) - elif line.startswith('#') and 'PACKAGE' in line: - body += line.replace('PACKAGE', project_name) - else: - body += line - - # rewrite pot file with updated header - with open(file=pot_filepath, mode='w+') as file: - file.write(body) - except FileNotFoundError: - pass - - -def babel_init(locale_code: str): - """Executes `pybabel init` in subprocess. - - :param locale_code: str - locale code - """ - commands = [ - 'pybabel', - 'init', - '-i', os.path.join(locale_dir, f'{project_name.lower()}.po'), - '-d', locale_dir, - '-D', project_name.lower(), - '-l', locale_code - ] - - print(commands) - subprocess.check_output(args=commands, cwd=root_dir) - - -def babel_update(): - """Executes `pybabel update` in subprocess.""" - commands = [ - 'pybabel', - 'update', - '-i', os.path.join(locale_dir, f'{project_name.lower()}.po'), - '-d', locale_dir, - '-D', project_name.lower(), - '--update-header-comment' - ] - - print(commands) - subprocess.check_output(args=commands, cwd=root_dir) - - -def babel_compile(): - """Executes `pybabel compile` in subprocess.""" - commands = [ - 'pybabel', - 'compile', - '-d', locale_dir, - '-D', project_name.lower() - ] - - print(commands) - subprocess.check_output(args=commands, cwd=root_dir) - - -if __name__ == '__main__': - # Set up and gather command line arguments - parser = argparse.ArgumentParser( - description='Script helps update locale translations. Translations must be done manually.') - - parser.add_argument('--extract', action='store_true', help='Extract messages from c++ files.') - parser.add_argument('--init', action='store_true', help='Initialize any new locales specified in target locales.') - parser.add_argument('--update', action='store_true', help='Update existing locales.') - parser.add_argument('--compile', action='store_true', help='Compile translated locales.') - - args = parser.parse_args() - - if args.extract: - x_extract() - - if args.init: - for locale_id in target_locales: - if not os.path.isdir(os.path.join(locale_dir, locale_id)): - babel_init(locale_code=locale_id) - - if args.update: - babel_update() - - if args.compile: - babel_compile() diff --git a/scripts/update_clang_format.py b/scripts/update_clang_format.py deleted file mode 100644 index 7ae027faaf8..00000000000 --- a/scripts/update_clang_format.py +++ /dev/null @@ -1,40 +0,0 @@ -# standard imports -import os -import subprocess - -# variables -directories = [ - 'src', - 'tests', - 'tools', -] -file_types = [ - 'cpp', - 'cu', - 'h', - 'hpp', - 'm', - 'mm' -] - - -def clang_format(file: str): - print(f'Formatting {file} ...') - subprocess.run(['clang-format', '-i', file]) - - -def main(): - """ - Main entry point. - """ - # walk the directories - for directory in directories: - for root, dirs, files in os.walk(directory): - for file in files: - file_path = os.path.join(root, file) - if os.path.isfile(file_path) and file.rsplit('.')[-1] in file_types: - clang_format(file=file_path) - - -if __name__ == '__main__': - main() diff --git a/third-party/lizardbyte-common b/third-party/lizardbyte-common new file mode 160000 index 00000000000..c049430764e --- /dev/null +++ b/third-party/lizardbyte-common @@ -0,0 +1 @@ +Subproject commit c049430764e3ce04d86d1dd05a3ad9224a676e5c diff --git a/uv.lock b/uv.lock index 73d45229241..8e1a38f6265 100644 --- a/uv.lock +++ b/uv.lock @@ -83,75 +83,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, ] -[[package]] -name = "babel" -version = "2.18.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, -] - -[[package]] -name = "clang-format" -version = "20.1.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/62/e5/6560d6466378597f76292a6f54702dcf8a3746edfbd5fbdcb54b12e9ac46/clang_format-20.1.8.tar.gz", hash = "sha256:8ebd717257d8c7daf6bb1f703a4024f009a58941723eeb0d92ec493ce26aa520", size = 11500, upload-time = "2025-07-10T11:40:06.899Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/cd/6dab2c15bb2f13ad13015fb92eda0b49b3bd866153072e4d9796f7b220e4/clang_format-20.1.8-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:e9422bc81b3bea6c0ee773662fbe3bfd8a9479ae70e59008095dfae7001c5a84", size = 1429486, upload-time = "2025-07-10T11:39:38.665Z" }, - { url = "https://files.pythonhosted.org/packages/d8/4c/3efe4fe6910e1e00dcec0c8d9ef715164500f043e9911bdf253370ff917b/clang_format-20.1.8-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:c0cf62720247a7dd1e2d610816a2f7d7016433f9c2869880cba655449bd09616", size = 1400840, upload-time = "2025-07-10T11:39:40.516Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c3/af601563d3bfa4c514406347c13dc639f984df7c9e13df3a0adf3a650fc9/clang_format-20.1.8-py2.py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4f998e5c19e10f69b87af6991ccb14db934b5fa36fd28c7dbfc17dee957007f4", size = 1777504, upload-time = "2025-07-10T11:39:42.266Z" }, - { url = "https://files.pythonhosted.org/packages/06/60/7c2ff3019599ad985d0a61f74ba8226d538c72485b0e3d25b1899601a9f5/clang_format-20.1.8-py2.py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34de32fe53452a07497793d5faf3fd03f7cf8b960b915417471ae81227461a39", size = 1692081, upload-time = "2025-07-10T11:39:43.67Z" }, - { url = "https://files.pythonhosted.org/packages/99/74/956bc5455ce102767805b2eafcada0de003c391adb8299222432091af309/clang_format-20.1.8-py2.py3-none-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1397b1b700ee78af73b14c5d65ad777c570c79a175c220768056fbcb7afed113", size = 1987169, upload-time = "2025-07-10T11:39:45.465Z" }, - { url = "https://files.pythonhosted.org/packages/70/3f/0c141c391a0d4bd4012758f68a27ddc1db8b48814f96eb459417e197124a/clang_format-20.1.8-py2.py3-none-manylinux_2_27_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e195b5f6b79d89d42d4094d103f0a4f47ff3997d6474811622b95ab596f01fd2", size = 2005960, upload-time = "2025-07-10T11:39:47.163Z" }, - { url = "https://files.pythonhosted.org/packages/a6/77/786aa0fc8a75d8ce94966bb33e44c63fec1964cbf343ee862ed6a5be38c1/clang_format-20.1.8-py2.py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c6bcb7e01ba4f05a4c980fda147b330f7e4833c2aea8c92a0c2df9573ae7afe", size = 1777063, upload-time = "2025-07-10T11:39:48.962Z" }, - { url = "https://files.pythonhosted.org/packages/bc/0b/79cc55d7a64f3798a044c1f12c288048c6551af834700ac2ed1204c1181d/clang_format-20.1.8-py2.py3-none-manylinux_2_31_armv7l.whl", hash = "sha256:d99a5f3d7a252ab762ed79bc2a271a63fe593ae2e2565ce287835c00ce13c37e", size = 1626598, upload-time = "2025-07-10T11:39:50.468Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a2/913509f0e845b2beb0d298a9ec78c230a3a1f659c6928f990e84b842da4a/clang_format-20.1.8-py2.py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0a687c6efd7708227eafec37e98143e0b4b7dbeca82ff8e1de110d434f4e63ac", size = 2689936, upload-time = "2025-07-10T11:39:52.08Z" }, - { url = "https://files.pythonhosted.org/packages/0e/29/7cb26c5884040d4cb2f1e3ece6d37ebaf318d7cd281339affc94d1a9803c/clang_format-20.1.8-py2.py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d6491195d8edc788de8abfaea30b78ff74ad3f5ee89653cd0a27a4af4feb1317", size = 2462082, upload-time = "2025-07-10T11:39:53.73Z" }, - { url = "https://files.pythonhosted.org/packages/6a/55/11ba71667856abfc7872c33e71b15c551d2d0fc3ef86ef73f92a46b2749c/clang_format-20.1.8-py2.py3-none-musllinux_1_2_i686.whl", hash = "sha256:9ceae6a1fbd594ec2a31157997378b70df42273795a0177be0725a4e96336231", size = 2927834, upload-time = "2025-07-10T11:39:55.264Z" }, - { url = "https://files.pythonhosted.org/packages/e6/71/496d2bafcb03b16a6fff25e73dcbe5aedcf68dd138580022b3114a3f7a84/clang_format-20.1.8-py2.py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:941396455b529ca130fae24d6d95bdf9a236d2ad22318991090d0b7ae53d236a", size = 3054954, upload-time = "2025-07-10T11:39:56.823Z" }, - { url = "https://files.pythonhosted.org/packages/d5/b9/8e5595a8d301c9695802664e4e00548a4c88a9fb6e434aac43e4778f06e1/clang_format-20.1.8-py2.py3-none-musllinux_1_2_s390x.whl", hash = "sha256:8dbbdfce85bdde675dee98fdbcddee445e6a9492b2a2b04afabfd33525be5642", size = 3159351, upload-time = "2025-07-10T11:39:58.95Z" }, - { url = "https://files.pythonhosted.org/packages/51/50/d385c1eb678061a18ab1de198e8400bb8c69003ec54fd4220f1c34ea6c46/clang_format-20.1.8-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:abc1b72f42db5db695d539b0a1b3cc3c125dfaa9c5baea0a94a3a2d6d1e50c1f", size = 2809188, upload-time = "2025-07-10T11:40:00.797Z" }, - { url = "https://files.pythonhosted.org/packages/a7/2d/e02502cd8c845f0b3e17c556648fd481aca0d77935adf8684cda5e4293e5/clang_format-20.1.8-py2.py3-none-win32.whl", hash = "sha256:635b57361fa3caeb9449aa62584d7cd38fbee81dbf3addd6b1d7c377eb34e766", size = 1261819, upload-time = "2025-07-10T11:40:02.194Z" }, - { url = "https://files.pythonhosted.org/packages/bd/ee/656287efdf58dccc7a7299fab547fe1313b49ca1ea1607ea475b262d640f/clang_format-20.1.8-py2.py3-none-win_amd64.whl", hash = "sha256:346ac8cab571eaba4d6b89dfa30fdbbc512db82a66ab0eeb1763cacc5977e325", size = 1414174, upload-time = "2025-07-10T11:40:03.701Z" }, - { url = "https://files.pythonhosted.org/packages/8b/27/71cd96599d47229bd819dcc0c688a859764bb1b4960a23b8a75f8558c044/clang_format-20.1.8-py2.py3-none-win_arm64.whl", hash = "sha256:d18b7b69697e97b6917a69f4bf48bf94e3827b016b491c90dd0f6ab917e37cf9", size = 1319592, upload-time = "2025-07-10T11:40:05.441Z" }, -] - -[[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 = "colorlog" -version = "6.10.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a2/61/f083b5ac52e505dfc1c624eafbf8c7589a0d7f32daa398d2e7590efa5fda/colorlog-6.10.1.tar.gz", hash = "sha256:eb4ae5cb65fe7fec7773c2306061a8e63e02efc2c72eba9d27b0fa23c94f1321", size = 17162, upload-time = "2025-10-16T16:14:11.978Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl", hash = "sha256:2d7e8348291948af66122cff006c9f8da6255d224e7cf8e37d8de2df3bad8c9c", size = 11743, upload-time = "2025-10-16T16:14:10.512Z" }, -] - -[[package]] -name = "flake8" -version = "7.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mccabe" }, - { name = "pycodestyle" }, - { name = "pyflakes" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/af/fbfe3c4b5a657d79e5c47a2827a362f9e1b763336a52f926126aa6dc7123/flake8-7.3.0.tar.gz", hash = "sha256:fe044858146b9fc69b551a4b490d69cf960fcb78ad1edcb84e7fbb1b4a8e3872", size = 48326, upload-time = "2025-06-20T19:31:35.838Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl", hash = "sha256:b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e", size = 57922, upload-time = "2025-06-20T19:31:34.425Z" }, -] - [[package]] name = "flatpak-node-generator" version = "0.1.0" @@ -231,21 +162,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, ] -[[package]] -name = "gcovr" -version = "8.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorlog" }, - { name = "jinja2" }, - { name = "lxml" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/07/37/b4a87dff166dc0a5002e9d03fcb6ca8eeff048247b011b67f047e31122c9/gcovr-8.6.tar.gz", hash = "sha256:b2e7042abca9321cadbab8a06eb34d19f801b831557b28cdc30a029313de8b9e", size = 199997, upload-time = "2026-01-13T20:04:30.019Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/be/f722c843e7875c7cf92cf0e0c1604cddda55a70278c768c6327a78fdba79/gcovr-8.6-py3-none-any.whl", hash = "sha256:dbf9d87c38042752ad6f530aa8210427e22b526611bb7b7bfed0e81977d1f1ef", size = 254618, upload-time = "2026-01-13T20:04:28.15Z" }, -] - [[package]] name = "glad2" source = { directory = "third-party/glad" } @@ -281,50 +197,6 @@ 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 = "lxml" -version = "6.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/05/3b/aab6728cae887456f409b4d75e8a01856e4f04bd510de38052a47768b680/lxml-6.1.1.tar.gz", hash = "sha256:ba96ae44888e0185281e937633a743ea90d5a196c6000f82565ebb0580012d40", size = 4197430, upload-time = "2026-05-18T19:19:06.424Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/e2/2e325795566de01d0d7c3bb57d3c370616b2d07b01214e84eec5d3b10963/lxml-6.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:19b7ab10b210b0b3ad7985d9ac4eb66ab09a90b20fe6e2f7ba55d01a234345d0", size = 8577146, upload-time = "2026-05-18T19:18:17.765Z" }, - { url = "https://files.pythonhosted.org/packages/93/cf/5630b5e4be7d2e6bee8efe83865c925221103cf0221303b104ce134b01e2/lxml-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c08e5c694306507275f2290073350c4f32e383db15213b2c69e7ff39c1193840", size = 4623866, upload-time = "2026-05-18T19:18:30.669Z" }, - { url = "https://files.pythonhosted.org/packages/d2/51/3904907c063451cf8d4a5c9fe0cad95fa1f4ec57f4e3884fa0731bd7a305/lxml-6.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:74a9717fd0d82effef5c2854f0d917231d5324b5a3eb7275c43ac9fa32f97a14", size = 4950022, upload-time = "2026-05-18T19:19:31.958Z" }, - { url = "https://files.pythonhosted.org/packages/94/cd/9c7611a51c37a2830928405817cc5d56a97f64fab83cc3f628748b135749/lxml-6.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efe0374196335f93b53269acd811b944f2e6bdc88e8894f214bd636455484909", size = 5086695, upload-time = "2026-05-18T19:19:34.764Z" }, - { url = "https://files.pythonhosted.org/packages/da/d6/24e3b5906abb0b674ff2ae195bc3ce59708df2bcd17cf17703b2d7dd643a/lxml-6.1.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac931cdc9442c1763b8a8f6cd62c0c938737eafc5be75eff88df55fc73bc0d00", size = 5031642, upload-time = "2026-05-18T19:19:37.771Z" }, - { url = "https://files.pythonhosted.org/packages/2d/db/6ec54f99019838bff54785c51da07f189eb4676861c5f2730962b0d8d665/lxml-6.1.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:aee395f5d0927f947758b4ec119fd5fc8ec71f07a1c5c52077b30b04c0fa6955", size = 5647338, upload-time = "2026-05-18T19:19:40.553Z" }, - { url = "https://files.pythonhosted.org/packages/42/3d/ef4dcfffd22d27a61805d8ed9f7fb888495bc6aa88648fa07c1eaa5586b6/lxml-6.1.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9395002973c827b3ed67db77e6ec09f092919a587022174554096a269378fb13", size = 5239528, upload-time = "2026-05-18T19:19:43.657Z" }, - { url = "https://files.pythonhosted.org/packages/62/bb/37fb3f0dff146bdcfa78eec47879273820b2a0bf350ec236ce14bd0b1c26/lxml-6.1.1-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:73bc2086f141224ebddb7fc5c6a36ca58b31b94b561e1dfe8e073e3270fad1e7", size = 5350730, upload-time = "2026-05-18T19:19:46.307Z" }, - { url = "https://files.pythonhosted.org/packages/90/42/43253f168388df4fae1f38c01df36ddb9bee39e2048167b54cdcbae85ea3/lxml-6.1.1-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:3779def59032b81e44a5f70096ef6bf2082f8d901937dca354474ba09782e245", size = 4697530, upload-time = "2026-05-18T19:19:49.889Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a8/c5a8504f81bbdfc8e7094c2c850cdb4ed6777fc4d5ddd9e5ab819f3b0d54/lxml-6.1.1-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:86c89b9d55ebf820ad7c90bc533410f0d098054f293351f10603c0c46ff598f5", size = 5250670, upload-time = "2026-05-18T19:19:53.199Z" }, - { url = "https://files.pythonhosted.org/packages/77/b7/c7e76ab18744d75e21f320ebf9ff9d1ceae2b54dd431ea5a64caf26c9672/lxml-6.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19607c6bbff2a44cf3fe8250abccd20942d3462473e0a721d01d379ed017e462", size = 5084485, upload-time = "2026-05-18T19:19:08.422Z" }, - { url = "https://files.pythonhosted.org/packages/31/31/b35c53f8ef7b7c31cacd23d3638652fff7bcd1deb6eedb709ab43b685908/lxml-6.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:c6ed5141a5c7507cf3ee76bd363b0d6f801e3321adc35b5d825a23115faa5465", size = 4737635, upload-time = "2026-05-18T19:19:12.321Z" }, - { url = "https://files.pythonhosted.org/packages/d9/06/31f23c813a7fe8e0cb1b175e915b08c9bf4e86d225b210feadbdbe519667/lxml-6.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:62aeb7e85b5d60320b9d77eef2e773994e2c0ce10121b277e0a19804e1654a5a", size = 5670681, upload-time = "2026-05-18T19:19:15.001Z" }, - { url = "https://files.pythonhosted.org/packages/1a/bc/ce619bccc89b1fd9ad8a8e1330ee3f3beff9f2ff95b712d7bbcdd6e22fc3/lxml-6.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b1b963fd8f5caa68e99dfae060d54de1fe9cba899b8718b44a00cdca53c3e590", size = 5238229, upload-time = "2026-05-18T19:19:18.131Z" }, - { url = "https://files.pythonhosted.org/packages/2f/5d/b329acbbedc0b619ebc2be6cf7ee9ed07e80892c88d4dfd612c33805789a/lxml-6.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:63876be28efefa04a1df615b46770e82042cce445cfdce55160522f57b231ccb", size = 5264191, upload-time = "2026-05-18T19:19:21.118Z" }, - { url = "https://files.pythonhosted.org/packages/d6/85/be36fb1425b30db3c3f9df75fe86343ebffb79e6320bd7f588e25bfeac39/lxml-6.1.1-cp314-cp314-win32.whl", hash = "sha256:7f7a92e8583f06b1fd49d01158143b8461cfcd135dcb10ec807270a3051bd603", size = 3657202, upload-time = "2026-05-18T19:17:39.509Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ce/3cf9a827342269f54d405a6202397de63f07c69cbd6ce7d183a3f0cba1e9/lxml-6.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:b2d444f2e66624d68e9c6b211e28a76e22fff5fcabcfff4deac18b529b7d4137", size = 4064497, upload-time = "2026-05-18T19:18:14.662Z" }, - { url = "https://files.pythonhosted.org/packages/d9/3e/1a957bde8f0760039e627f94699f82caa782c9d838d86c3d28245ee67212/lxml-6.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:3fd9728a2735fda14f4e8235830c86b539e9661e849665bf926d3f867943b4bf", size = 3741991, upload-time = "2026-05-19T19:22:59.111Z" }, - { url = "https://files.pythonhosted.org/packages/78/b2/00ed55b3a2efa4658fb795c38d1090ec9b3e8a6c3683d4441fa517f09c3b/lxml-6.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:787b2496d0dbe8cd180984e8d29e3a6f76e7ea34db781cb3bd55e4ba1ef8b4ee", size = 8827545, upload-time = "2026-05-18T19:18:41.193Z" }, - { url = "https://files.pythonhosted.org/packages/c0/73/74573db19baa618d5f266f2407898b087ff6927115b00b71e5fc1b700847/lxml-6.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2c8daa471358dc2d6fcf02165e80ec68f77871a286df95bc5cc3816153b0fd2c", size = 4735736, upload-time = "2026-05-18T19:18:46.761Z" }, - { url = "https://files.pythonhosted.org/packages/16/02/6f7061f4f95f51e545d48e87647c54791d204a4e881be4156e7a26ba5338/lxml-6.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:acd7d70b64c0aae0c7922cca83d288a16f5f6da523637697872253415269baef", size = 4970291, upload-time = "2026-05-18T19:19:56.215Z" }, - { url = "https://files.pythonhosted.org/packages/b0/02/55fc057d8283427dea7d6edb102e7a840239c77a64a983d92f62a304c0e9/lxml-6.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4f0dd2f01f9f8a89f565d000e03abcf0a13d692a346c8d22f628d49af098777a", size = 5102822, upload-time = "2026-05-18T19:19:59.223Z" }, - { url = "https://files.pythonhosted.org/packages/e4/48/8e1cf78d89d66850121d9255a2a24414c98f775da93b90cf976956c24b14/lxml-6.1.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b7e8a14c8634bf6f7a568634cb395305a6d964aeb5b7ee32248094bed3a7e2c", size = 5027923, upload-time = "2026-05-18T19:20:01.549Z" }, - { url = "https://files.pythonhosted.org/packages/ed/00/0632a0647612c8af24d26997b3b961397daa9d5b2581444805933629a4cb/lxml-6.1.1-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:86281fbdd6a8162756f8d603f37e3435bfa38043adb79c6dc6a2dfee065e7525", size = 5595843, upload-time = "2026-05-18T19:20:03.93Z" }, - { url = "https://files.pythonhosted.org/packages/bc/86/ab008a7dc360711b66858d61c80a5979a70a09f2aa2b05d9698df80b803d/lxml-6.1.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5d7152ec39ca7c402d8fb9bad86140a15b9503bd0c54484e3f1bbe3dd37ceca", size = 5224515, upload-time = "2026-05-18T19:20:06.381Z" }, - { url = "https://files.pythonhosted.org/packages/75/c6/2702ff375e728e34f56d9a45339a9cf7e4427e917f542225242d63a05afa/lxml-6.1.1-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:88d8cb75b9d82858497a5393e3c63cfbf03035225e4b35a49ed7ccb151e4dc0e", size = 5312511, upload-time = "2026-05-18T19:20:09.308Z" }, - { url = "https://files.pythonhosted.org/packages/b7/57/a5807c98f87a86f10ef9ffab35516df7c0f0c4b6d5d33e9f608ab9c04a31/lxml-6.1.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f64ec5397ea6a41fc1b4af0380d79b44a755b5531dcaccd9940fb260dca93038", size = 4639206, upload-time = "2026-05-18T19:20:11.704Z" }, - { url = "https://files.pythonhosted.org/packages/1f/e1/8a0a2c35734812395f4da4eaf33748a7e5705bfb2a58b128da764339d5ec/lxml-6.1.1-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d34bbf07dbc7ca5970671b1512e928991fb5e9d95365636c9b2d8b4f53af405e", size = 5232404, upload-time = "2026-05-18T19:20:14.064Z" }, - { url = "https://files.pythonhosted.org/packages/c2/e2/0e6a4dd5ad84d01d99aa7bae7cfefd4a760a0e0f8176818241de17d9b6c0/lxml-6.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:17e0e18d4ad8adbd0399291bc44845b69d9dd68439a3cdebdf35ff902ec05072", size = 5083769, upload-time = "2026-05-18T19:19:23.758Z" }, - { url = "https://files.pythonhosted.org/packages/a0/7e/161f33d463f6ffc1c7679104b65086dea120080d49dde4d238f015aaee2f/lxml-6.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:3ab541146f1f6968c462d6c2ac495148e8cdba2f8347700b2141b6ec5a75bf52", size = 4758936, upload-time = "2026-05-18T19:19:27.256Z" }, - { url = "https://files.pythonhosted.org/packages/f1/fb/2369825e3f6ca99305bf9f7b7085fda91c8b0922a89e54d900974aa3ef85/lxml-6.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2a0217714657e023ef4293500f65aa20fce6164c8fd6b08fa5bd4a859fb14b9b", size = 5620296, upload-time = "2026-05-18T19:19:29.993Z" }, - { url = "https://files.pythonhosted.org/packages/30/90/d61e383146f74c5ab683947ea14dc7b82778838ab9b95ea73a23b60d0191/lxml-6.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:05a82eb6e1530a64f26225b55cbd178113bd0b5af1c2b625f25e5296742c26d2", size = 5228598, upload-time = "2026-05-18T19:19:33.523Z" }, - { url = "https://files.pythonhosted.org/packages/76/2d/2dafd8149e94b05bb070690efd5bb2680720681e03ff03fc57d2b70a1105/lxml-6.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9e36f163528fc50cbef305f02a5fd66d404edf7049cdaff211dbc2cba5a7013e", size = 5247845, upload-time = "2026-05-18T19:19:36.649Z" }, - { url = "https://files.pythonhosted.org/packages/ce/68/b30e913340c380ddac9580c6e6230991fc37240ec4f64704833e4f3e2769/lxml-6.1.1-cp314-cp314t-win32.whl", hash = "sha256:649dda677cf3bd6ac9ae14007ba0c824ded8ce5808b53fc7431d9140399118c1", size = 3897345, upload-time = "2026-05-18T19:17:33.562Z" }, - { url = "https://files.pythonhosted.org/packages/3c/4e/9eb2af5335545f9fbcd7af57bcf87c6025d31eaa31b14ec184a6c8675328/lxml-6.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:793033d6c5cdf33a573f910d9bea14ef8f5771820411d118da8e1182edb53d5e", size = 4393350, upload-time = "2026-05-18T19:18:10.076Z" }, - { url = "https://files.pythonhosted.org/packages/7f/2c/0f1e93c636720e8a3eb59af2bfda99d98b55891e1c53bc30c2e0e865f01b/lxml-6.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:58bb955caba94e467d2a96da17660d2d704e0675894cba21ab8a775b8621fd1c", size = 3817223, upload-time = "2026-05-19T19:22:56.823Z" }, -] - [[package]] name = "markupsafe" version = "3.0.3" @@ -355,15 +227,6 @@ wheels = [ { 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 = "mccabe" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/ff/0ffefdcac38932a54d2b5eed4e0ba8a408f215002cd178ad1df0f2806ff8/mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", size = 9658, upload-time = "2022-01-24T01:14:51.113Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e", size = 7350, upload-time = "2022-01-24T01:14:49.62Z" }, -] - [[package]] name = "multidict" version = "6.7.1" @@ -461,33 +324,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, ] -[[package]] -name = "pycodestyle" -version = "2.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/e0/abfd2a0d2efe47670df87f3e3a0e2edda42f055053c85361f19c0e2c1ca8/pycodestyle-2.14.0.tar.gz", hash = "sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783", size = 39472, upload-time = "2025-06-20T18:49:48.75Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, -] - -[[package]] -name = "pyflakes" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/45/dc/fd034dc20b4b264b3d015808458391acbf9df40b1e54750ef175d39180b1/pyflakes-3.4.0.tar.gz", hash = "sha256:b24f96fafb7d2ab0ec5075b7350b3d2d2218eab42003821c06344973d3ea2f58", size = 64669, upload-time = "2025-06-20T18:45:27.834Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl", hash = "sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f", size = 63551, upload-time = "2025-06-20T18:45:26.937Z" }, -] - -[[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 = "pyyaml" version = "6.0.3" @@ -549,16 +385,6 @@ glad = [ { name = "glad2" }, { name = "setuptools" }, ] -lint = [ - { name = "clang-format" }, - { name = "flake8" }, -] -locale = [ - { name = "babel" }, -] -test = [ - { name = "gcovr" }, -] [package.metadata] @@ -571,12 +397,6 @@ glad = [ { name = "glad2", directory = "third-party/glad" }, { name = "setuptools", specifier = "<82" }, ] -lint = [ - { name = "clang-format", specifier = "==20.*" }, - { name = "flake8", specifier = "==7.3.0" }, -] -locale = [{ name = "babel", specifier = "==2.18.0" }] -test = [{ name = "gcovr", specifier = "==8.6" }] [[package]] name = "yarl"