From 0fcdd6d402066a5c78393385f38cc6fdb90eefce Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 6 Oct 2025 07:19:15 +0200 Subject: [PATCH 01/35] refactor: dev scripts --- .github/copilot-instructions.md | 2 +- .github/workflows/check-backend.yaml | 24 ++++++++ .github/workflows/check-frontend.yaml | 19 ++++++ .github/workflows/ci.yaml | 16 ++--- .github/workflows/e2e-tests.yaml | 4 +- .github/workflows/lint-backend.yaml | 32 ---------- .github/workflows/lint-ui.yaml | 17 ------ .github/workflows/{pytest.yaml => tests.yaml} | 11 ++-- .gitignore | 3 +- CONTRIBUTING.md | 36 ++++++------ backend/build.py | 2 +- backend/pyproject.toml | 4 +- frontend/package.json | 8 +-- libs/copilot/package.json | 4 +- libs/react-client/package.json | 8 ++- lint-staged.config.js | 10 ++-- package.json | 17 +++--- pyproject.toml | 12 ++++ scripts/format.py | 16 +++++ scripts/lint.py | 16 +++++ scripts/type-check.py | 16 +++++ backend/uv.lock => uv.lock | 58 +++++++++++-------- 22 files changed, 196 insertions(+), 139 deletions(-) create mode 100644 .github/workflows/check-backend.yaml create mode 100644 .github/workflows/check-frontend.yaml delete mode 100644 .github/workflows/lint-backend.yaml delete mode 100644 .github/workflows/lint-ui.yaml rename .github/workflows/{pytest.yaml => tests.yaml} (74%) create mode 100644 pyproject.toml create mode 100644 scripts/format.py create mode 100644 scripts/lint.py create mode 100644 scripts/type-check.py rename backend/uv.lock => uv.lock (99%) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 48ce412c65..20ed1d80b7 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -52,7 +52,7 @@ Always reference these instructions first and fallback to search or bash command # Timeout: Use 60 seconds # E2E tests require Cypress download - may not work in restricted environments - # If available: pnpm test (takes variable time depending on tests) + # If available: pnpm test:e2e (takes variable time depending on tests) ``` 4. **Run Development Servers**: diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml new file mode 100644 index 0000000000..6d9cc6b62b --- /dev/null +++ b/.github/workflows/check-backend.yaml @@ -0,0 +1,24 @@ +name: LintBackend + +on: [workflow_call] + +permissions: read-all + +jobs: + check-backend: + runs-on: ubuntu-latest + env: + BACKEND_DIR: ./backend + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/uv-python-install + name: Install Python, uv and Python dependencies + with: + extra-dependencies: --extra tests --extra mypy --extra custom-data + working-directory: ${{ env.BACKEND_DIR }} + - name: Lint backend + run: uv run scripts/lint.py + - name: Check backend formatting + run: uv run scripts/format.py --check + - name: Typecheck backend + run: uv run scripts/type-check.py diff --git a/.github/workflows/check-frontend.yaml b/.github/workflows/check-frontend.yaml new file mode 100644 index 0000000000..88a0d4229e --- /dev/null +++ b/.github/workflows/check-frontend.yaml @@ -0,0 +1,19 @@ +name: Lint frontend & libs + +on: [workflow_call] + +permissions: read-all + +jobs: + check-frontend: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/pnpm-node-install + name: Install Node, pnpm and dependencies. + - name: Lint frontend & libs + run: pnpm lint + - name: Check frontend & libs formatting + run: pnpm format + - name: Typecheck frontend & libs + run: pnpm type-check diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a0f1b80279..d3b95ed2d2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -18,23 +18,23 @@ on: permissions: read-all jobs: - pytest: - uses: ./.github/workflows/pytest.yaml + check-backend: + uses: ./.github/workflows/check-backend.yaml secrets: inherit - lint-backend: - uses: ./.github/workflows/lint-backend.yaml + check-frontend: + uses: ./.github/workflows/check-frontend.yaml + secrets: inherit + tests: + uses: ./.github/workflows/tests.yaml secrets: inherit e2e-tests: uses: ./.github/workflows/e2e-tests.yaml secrets: inherit - lint-ui: - uses: ./.github/workflows/lint-ui.yaml - secrets: inherit ci: runs-on: ubuntu-latest name: Run CI if: always() # This ensures the job always runs - needs: [lint-backend, pytest, lint-ui, e2e-tests] + needs: [check-backend, check-frontend, tests, e2e-tests] steps: # Propagate failure - name: Check dependent jobs diff --git a/.github/workflows/e2e-tests.yaml b/.github/workflows/e2e-tests.yaml index 9c509a13b8..491c3317c3 100644 --- a/.github/workflows/e2e-tests.yaml +++ b/.github/workflows/e2e-tests.yaml @@ -5,7 +5,7 @@ on: [workflow_call] permissions: read-all jobs: - ci: + e2e-tests: runs-on: ${{ matrix.os }} strategy: matrix: @@ -31,7 +31,7 @@ jobs: - name: Run tests env: CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - run: pnpm test + run: pnpm test:e2e shell: bash - name: Upload screenshots uses: actions/upload-artifact@v4 diff --git a/.github/workflows/lint-backend.yaml b/.github/workflows/lint-backend.yaml deleted file mode 100644 index e6628819a6..0000000000 --- a/.github/workflows/lint-backend.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: LintBackend - -on: [workflow_call] - -permissions: read-all - -jobs: - lint-backend: - runs-on: ubuntu-latest - env: - BACKEND_DIR: ./backend - steps: - - uses: actions/checkout@v4 - - uses: ./.github/actions/uv-python-install - name: Install Python, uv and Python dependencies - with: - extra-dependencies: --extra tests --extra mypy --extra custom-data - working-directory: ${{ env.BACKEND_DIR }} - - name: Lint with ruff - uses: astral-sh/ruff-action@v1 - with: - src: ${{ env.BACKEND_DIR }} - changed-files: "true" - - name: Check formatting with ruff - uses: astral-sh/ruff-action@v1 - with: - src: ${{ env.BACKEND_DIR }} - changed-files: "true" - args: "format --check" - - name: Run Mypy - run: uv run --no-project mypy chainlit/ tests/ - working-directory: ${{ env.BACKEND_DIR }} diff --git a/.github/workflows/lint-ui.yaml b/.github/workflows/lint-ui.yaml deleted file mode 100644 index c4562def0b..0000000000 --- a/.github/workflows/lint-ui.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: LintUI - -on: [workflow_call] - -permissions: read-all - -jobs: - ci: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/actions/pnpm-node-install - name: Install Node, pnpm and dependencies. - - name: Build UI - run: pnpm run buildUi - - name: Lint UI - run: pnpm run lintUi diff --git a/.github/workflows/pytest.yaml b/.github/workflows/tests.yaml similarity index 74% rename from .github/workflows/pytest.yaml rename to .github/workflows/tests.yaml index cbf0f08fab..dc95650e30 100644 --- a/.github/workflows/pytest.yaml +++ b/.github/workflows/tests.yaml @@ -5,7 +5,7 @@ on: [workflow_call] permissions: read-all jobs: - pytest: + tests: runs-on: ubuntu-latest strategy: matrix: @@ -21,10 +21,7 @@ jobs: with: python-version: ${{ matrix.python-version }} extra-dependencies: --extra tests --extra mypy --extra custom-data - working-directory: ${{ env.BACKEND_DIR }} - - name: Build UI components - run: pnpm run buildUi - timeout-minutes: 5 - - name: Run Pytest + - name: Run backend tests run: uv run --no-project pytest --cov=chainlit/ - working-directory: ${{ env.BACKEND_DIR }} + - name: Run frontend tests + run: pnpm run test diff --git a/.gitignore b/.gitignore index f2272e91eb..fe6668e33c 100644 --- a/.gitignore +++ b/.gitignore @@ -59,7 +59,6 @@ dist-ssr .aider* .coverage -backend/README.md -backend/.dmypy.json +.dmypy.json .history diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9d4e088bb5..c488429685 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,13 +15,12 @@ I've copy/pasted the whole document there, and then formatted it with prettier. - [Requirements](#requirements) - [Set up the repo](#set-up-the-repo) - [Install dependencies](#install-dependencies) - - [Build Frontend](#build-frontend) - [Start the Chainlit server from source](#start-the-chainlit-server-from-source) - [Start the UI from source](#start-the-ui-from-source) - [Run the tests](#run-the-tests) - [Backend unit tests](#backend-unit-tests) + - [Frontend unit tests](#frontend-unit-tests) - [E2E tests](#e2e-tests) - - [Headed/debugging](#headeddebugging) ## Local setup @@ -116,6 +115,14 @@ cd backend uv run pytest --cov=chainlit ``` +### Frontend unit tests + +This will run the frontend's unit tests. + +``` +pnpm test +``` + ### E2E tests You may need additional configuration or dependency installation to run Cypress. See the [Cypress system requirements](https://docs.cypress.io/app/get-started/install-cypress#System-requirements) for details. @@ -124,12 +131,12 @@ This will run end to end tests, assessing both the frontend, the backend and the ```sh // from root -pnpm test // will do cypress run -pnpm test -- --spec cypress/e2e/copilot // will run single test with the name copilot -pnpm test -- --spec "cypress/e2e/copilot,cypress/e2e/data_layer" // will run two tests with the names copilot and data_layer -pnpm test -- --spec "cypress/e2e/**/async-*" // will run all async tests -pnpm test -- --spec "cypress/e2e/**/sync-*" // will run all sync tests -pnpm test -- --spec "cypress/e2e/**/spec.cy.ts" // will run all usual tests +pnpm test:e2e // will do cypress run +pnpm test:e2e -- --spec cypress/e2e/copilot // will run single test with the name copilot +pnpm test:e2e -- --spec "cypress/e2e/copilot,cypress/e2e/data_layer" // will run two tests with the names copilot and data_layer +pnpm test:e2e -- --spec "cypress/e2e/**/async-*" // will run all async tests +pnpm test:e2e -- --spec "cypress/e2e/**/sync-*" // will run all sync tests +pnpm test:e2e -- --spec "cypress/e2e/**/spec.cy.ts" // will run all usual tests ``` (Go grab a cup of something, this will take a while.) @@ -137,18 +144,9 @@ pnpm test -- --spec "cypress/e2e/**/spec.cy.ts" // will run all usual tests For debugging purposes, you can use the **interactive mode** (Cypress UI). Run: ``` -pnpm test:interactive // runs `cypress open` +pnpm test:e2e:interactive // runs `cypress open` ``` Once you create a pull request, the tests will automatically run. It is a good practice to run the tests locally before pushing. -Make sure to run `uv sync` again whenever you've updated the frontend! - -### Headed/debugging - -Causes the Electron browser to be shown on screen and keeps it open after tests are done. -Extremely useful for debugging! - -```sh -SINGLE_TEST=password_auth CYPRESS_OPTIONS='--headed --no-exit' pnpm test -``` \ No newline at end of file +Make sure to run `uv sync` again whenever you've updated the frontend! \ No newline at end of file diff --git a/backend/build.py b/backend/build.py index a5c294cdc7..9103257d6e 100644 --- a/backend/build.py +++ b/backend/build.py @@ -32,7 +32,7 @@ def pnpm_install(project_root: pathlib.Path, pnpm_path: str): def pnpm_buildui(project_root: pathlib.Path, pnpm_path: str): - run_subprocess([pnpm_path, "buildUi"], project_root) + run_subprocess([pnpm_path, "build"], project_root) def copy_directory(src: pathlib.Path, dst: pathlib.Path, description: str): diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 037c254bfc..484cd5692b 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -87,7 +87,7 @@ tests = [ "moto>=5.0.14,<6.0.0", ] dev = [ - "ruff>=0.9.0,<1.0.0", + "ruff>=0.13.3,<1.0.0", ] mypy = [ "mypy>=1.13,<2.0.0", @@ -164,7 +164,7 @@ testpaths = ["tests"] asyncio_mode = "auto" [tool.ruff] -target-version = "py39" +target-version = "py310" [tool.ruff.lint] select = [ diff --git a/frontend/package.json b/frontend/package.json index 67f24e62fb..e410179440 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,10 +7,10 @@ "dev": "vite", "build": "vite build", "preview": "vite preview", - "lint": "eslint ./src --ext .ts,.tsx && tsc --noemit", - "format": "prettier 'src/**/*.{ts,tsx,css}' --write", - "test": "vitest run", - "prepublishOnly": "pnpm run build && pnpm test" + "lint": "eslint ./src --ext .ts,.tsx", + "format": "prettier 'src/**/*.{ts,tsx,css}'", + "type-check": "tsc --noemit", + "test": "vitest run" }, "dependencies": { "@chainlit/react-client": "workspace:^", diff --git a/libs/copilot/package.json b/libs/copilot/package.json index 4d0bc78389..97b5939761 100644 --- a/libs/copilot/package.json +++ b/libs/copilot/package.json @@ -8,7 +8,9 @@ "build": "vite build", "preview": "vite preview", "lint": "eslint ./src --ext .ts,.tsx", - "format": "prettier 'src/**/*.{ts,tsx}' --write", + "format": "prettier 'src/**/*.{ts,tsx}'", + "type-check": "tsc --noemit", + "test": "echo no tests yet", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build" }, diff --git a/libs/react-client/package.json b/libs/react-client/package.json index 528d615de7..d8e507cf3a 100644 --- a/libs/react-client/package.json +++ b/libs/react-client/package.json @@ -3,10 +3,12 @@ "description": "Websocket client to connect to your chainlit app.", "version": "0.3.0", "scripts": { - "build": "tsup src/index.ts --tsconfig tsconfig.build.json --clean --format esm,cjs --dts --external react --external recoil --minify --sourcemap --treeshake", + "preinstall": "npx only-allow pnpm", "dev": "tsup src/index.ts --clean --format esm,cjs --dts --external react --external recoil --minify --sourcemap --treeshake", - "lint": "eslint ./src --ext ts,tsx --report-unused-disable-directives --max-warnings 0 && tsc --noemit", - "format": "prettier '**/*.{ts,tsx}' --write", + "build": "tsup src/index.ts --tsconfig tsconfig.build.json --clean --format esm,cjs --dts --external react --external recoil --minify --sourcemap --treeshake", + "lint": "eslint ./src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "format": "prettier '**/*.{ts,tsx}'", + "type-check": "tsc --noemit", "test": "echo no tests yet" }, "repository": { diff --git a/lint-staged.config.js b/lint-staged.config.js index 4ccf50985b..279cfb3de4 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,11 +1,11 @@ // eslint-disable-next-line no-undef module.exports = { - '**/*.{js,jsx,ts,tsx}': ['npx prettier --write', 'npx eslint --fix'], - '**/*.{ts,tsx}': [() => 'tsc --skipLibCheck --noEmit'], + '**/*.{js,jsx,ts,tsx}': ['pnpm lint --fix', 'pnpm format --fix'], + '**/*.{ts,tsx}': [() => 'pnpm type-check'], '**/*.py': [ - 'uv run --project backend ruff check --fix', - 'uv run --project backend ruff format', - () => 'pnpm run lintPython' + 'uv run scripts/lint.py', + 'uv run scripts/format.py --check', + 'uv run scripts/type_check.py', ], '.github/workflows/**': ['actionlint'] }; diff --git a/package.json b/package.json index af44b763d6..31f2388c22 100644 --- a/package.json +++ b/package.json @@ -19,17 +19,14 @@ }, "scripts": { "preinstall": "npx only-allow pnpm", - "test": "cypress run", - "test:interactive": "cypress open", - "test:ui": "cd frontend && pnpm test", "prepare": "husky", - "lint": "pnpm run lintUi && pnpm run lintPython", - "lintUi": "pnpm run --parallel lint", - "formatUi": "pnpm run --parallel format", - "lintPython": "cd backend && uv run dmypy run -- chainlit/ tests/", - "formatPython": "black `git ls-files | grep '.py$'` && isort --profile=black .", - "build:libs": "cd libs/react-client && pnpm run build && cd ../copilot && pnpm run build", - "buildUi": "pnpm build:libs && cd frontend && pnpm run build" + "build": "pnpm run --recursive build", + "lint": "pnpm run --parallel lint", + "format": "pnpm run --parallel format", + "type-check": "pnpm run --parallel type-check", + "test": "pnpm run --recursive test", + "test:e2e": "cypress run", + "test:e2e:interactive": "cypress open" }, "pnpm": { "overrides": { diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000..cbf3b8f88a --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,12 @@ +[dependency-groups] +backend = ["chainlit"] + +[tool.uv] +default-groups = ["backend"] +package = false + +[tool.uv.sources] +chainlit = { workspace = true } + +[tool.uv.workspace] +members = ["backend"] \ No newline at end of file diff --git a/scripts/format.py b/scripts/format.py new file mode 100644 index 0000000000..c41d1fb72c --- /dev/null +++ b/scripts/format.py @@ -0,0 +1,16 @@ +#!/usr/bin/env -S uv run +"""Test runner script for the project.""" + +import subprocess +import sys + + +def main(): + """Run pytest on the test suite.""" + cmd = ["ruff", "format"] + sys.argv[1:] + result = subprocess.run(cmd) + return result.returncode + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/lint.py b/scripts/lint.py new file mode 100644 index 0000000000..1192e155d8 --- /dev/null +++ b/scripts/lint.py @@ -0,0 +1,16 @@ +#!/usr/bin/env -S uv run +"""Test runner script for the project.""" + +import subprocess +import sys + + +def main(): + """Run pytest on the test suite.""" + cmd = ["ruff", "check"] + sys.argv[1:] + result = subprocess.run(cmd) + return result.returncode + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/type-check.py b/scripts/type-check.py new file mode 100644 index 0000000000..478b37141c --- /dev/null +++ b/scripts/type-check.py @@ -0,0 +1,16 @@ +#!/usr/bin/env -S uv run +"""Test runner script for the project.""" + +import subprocess +import sys + + +def main(): + """Run pytest on the test suite.""" + cmd = ["dmypy", "run", "--", "backend/"] + sys.argv[1:] + result = subprocess.run(cmd) + return result.returncode + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/backend/uv.lock b/uv.lock similarity index 99% rename from backend/uv.lock rename to uv.lock index 4d4517d255..74d8369dbb 100644 --- a/backend/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.10, <4.0.0" resolution-markers = [ "python_full_version >= '3.13'", @@ -9,6 +9,14 @@ resolution-markers = [ "python_full_version < '3.11'", ] +[manifest] +members = [ + "chainlit", +] + +[manifest.dependency-groups] +backend = [{ name = "chainlit", editable = "backend" }] + [[package]] name = "aiofiles" version = "24.1.0" @@ -679,7 +687,7 @@ wheels = [ [[package]] name = "chainlit" -source = { editable = "." } +source = { editable = "backend" } dependencies = [ { name = "aiofiles" }, { name = "asyncer" }, @@ -790,7 +798,7 @@ requires-dist = [ { name = "python-dotenv", specifier = ">=1.0.0,<2.0.0" }, { name = "python-multipart", specifier = ">=0.0.18,<1.0.0" }, { name = "python-socketio", specifier = ">=5.11.0,<6.0.0" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.9.0,<1.0.0" }, + { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.13.3,<1.0.0" }, { name = "semantic-kernel", marker = "extra == 'tests'", specifier = ">=1.24.0,<2.0.0" }, { name = "slack-bolt", marker = "extra == 'tests'", specifier = ">=1.18.1,<2.0.0" }, { name = "sqlalchemy", marker = "extra == 'custom-data'", specifier = ">=2.0.28,<3.0.0" }, @@ -4972,28 +4980,28 @@ wheels = [ [[package]] name = "ruff" -version = "0.12.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/45/2e403fa7007816b5fbb324cb4f8ed3c7402a927a0a0cb2b6279879a8bfdc/ruff-0.12.9.tar.gz", hash = "sha256:fbd94b2e3c623f659962934e52c2bea6fc6da11f667a427a368adaf3af2c866a", size = 5254702, upload-time = "2025-08-14T16:08:55.2Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/20/53bf098537adb7b6a97d98fcdebf6e916fcd11b2e21d15f8c171507909cc/ruff-0.12.9-py3-none-linux_armv6l.whl", hash = "sha256:fcebc6c79fcae3f220d05585229463621f5dbf24d79fdc4936d9302e177cfa3e", size = 11759705, upload-time = "2025-08-14T16:08:12.968Z" }, - { url = "https://files.pythonhosted.org/packages/20/4d/c764ee423002aac1ec66b9d541285dd29d2c0640a8086c87de59ebbe80d5/ruff-0.12.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aed9d15f8c5755c0e74467731a007fcad41f19bcce41cd75f768bbd687f8535f", size = 12527042, upload-time = "2025-08-14T16:08:16.54Z" }, - { url = "https://files.pythonhosted.org/packages/8b/45/cfcdf6d3eb5fc78a5b419e7e616d6ccba0013dc5b180522920af2897e1be/ruff-0.12.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5b15ea354c6ff0d7423814ba6d44be2807644d0c05e9ed60caca87e963e93f70", size = 11724457, upload-time = "2025-08-14T16:08:18.686Z" }, - { url = "https://files.pythonhosted.org/packages/72/e6/44615c754b55662200c48bebb02196dbb14111b6e266ab071b7e7297b4ec/ruff-0.12.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d596c2d0393c2502eaabfef723bd74ca35348a8dac4267d18a94910087807c53", size = 11949446, upload-time = "2025-08-14T16:08:21.059Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d1/9b7d46625d617c7df520d40d5ac6cdcdf20cbccb88fad4b5ecd476a6bb8d/ruff-0.12.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b15599931a1a7a03c388b9c5df1bfa62be7ede6eb7ef753b272381f39c3d0ff", size = 11566350, upload-time = "2025-08-14T16:08:23.433Z" }, - { url = "https://files.pythonhosted.org/packages/59/20/b73132f66f2856bc29d2d263c6ca457f8476b0bbbe064dac3ac3337a270f/ruff-0.12.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d02faa2977fb6f3f32ddb7828e212b7dd499c59eb896ae6c03ea5c303575756", size = 13270430, upload-time = "2025-08-14T16:08:25.837Z" }, - { url = "https://files.pythonhosted.org/packages/a2/21/eaf3806f0a3d4c6be0a69d435646fba775b65f3f2097d54898b0fd4bb12e/ruff-0.12.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:17d5b6b0b3a25259b69ebcba87908496e6830e03acfb929ef9fd4c58675fa2ea", size = 14264717, upload-time = "2025-08-14T16:08:27.907Z" }, - { url = "https://files.pythonhosted.org/packages/d2/82/1d0c53bd37dcb582b2c521d352fbf4876b1e28bc0d8894344198f6c9950d/ruff-0.12.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72db7521860e246adbb43f6ef464dd2a532ef2ef1f5dd0d470455b8d9f1773e0", size = 13684331, upload-time = "2025-08-14T16:08:30.352Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2f/1c5cf6d8f656306d42a686f1e207f71d7cebdcbe7b2aa18e4e8a0cb74da3/ruff-0.12.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a03242c1522b4e0885af63320ad754d53983c9599157ee33e77d748363c561ce", size = 12739151, upload-time = "2025-08-14T16:08:32.55Z" }, - { url = "https://files.pythonhosted.org/packages/47/09/25033198bff89b24d734e6479e39b1968e4c992e82262d61cdccaf11afb9/ruff-0.12.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fc83e4e9751e6c13b5046d7162f205d0a7bac5840183c5beebf824b08a27340", size = 12954992, upload-time = "2025-08-14T16:08:34.816Z" }, - { url = "https://files.pythonhosted.org/packages/52/8e/d0dbf2f9dca66c2d7131feefc386523404014968cd6d22f057763935ab32/ruff-0.12.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:881465ed56ba4dd26a691954650de6ad389a2d1fdb130fe51ff18a25639fe4bb", size = 12899569, upload-time = "2025-08-14T16:08:36.852Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b614d7c08515b1428ed4d3f1d4e3d687deffb2479703b90237682586fa66/ruff-0.12.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:43f07a3ccfc62cdb4d3a3348bf0588358a66da756aa113e071b8ca8c3b9826af", size = 11751983, upload-time = "2025-08-14T16:08:39.314Z" }, - { url = "https://files.pythonhosted.org/packages/58/d6/383e9f818a2441b1a0ed898d7875f11273f10882f997388b2b51cb2ae8b5/ruff-0.12.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:07adb221c54b6bba24387911e5734357f042e5669fa5718920ee728aba3cbadc", size = 11538635, upload-time = "2025-08-14T16:08:41.297Z" }, - { url = "https://files.pythonhosted.org/packages/20/9c/56f869d314edaa9fc1f491706d1d8a47747b9d714130368fbd69ce9024e9/ruff-0.12.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f5cd34fabfdea3933ab85d72359f118035882a01bff15bd1d2b15261d85d5f66", size = 12534346, upload-time = "2025-08-14T16:08:43.39Z" }, - { url = "https://files.pythonhosted.org/packages/bd/4b/d8b95c6795a6c93b439bc913ee7a94fda42bb30a79285d47b80074003ee7/ruff-0.12.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f6be1d2ca0686c54564da8e7ee9e25f93bdd6868263805f8c0b8fc6a449db6d7", size = 13017021, upload-time = "2025-08-14T16:08:45.889Z" }, - { url = "https://files.pythonhosted.org/packages/c7/c1/5f9a839a697ce1acd7af44836f7c2181cdae5accd17a5cb85fcbd694075e/ruff-0.12.9-py3-none-win32.whl", hash = "sha256:cc7a37bd2509974379d0115cc5608a1a4a6c4bff1b452ea69db83c8855d53f93", size = 11734785, upload-time = "2025-08-14T16:08:48.062Z" }, - { url = "https://files.pythonhosted.org/packages/fa/66/cdddc2d1d9a9f677520b7cfc490d234336f523d4b429c1298de359a3be08/ruff-0.12.9-py3-none-win_amd64.whl", hash = "sha256:6fb15b1977309741d7d098c8a3cb7a30bc112760a00fb6efb7abc85f00ba5908", size = 12840654, upload-time = "2025-08-14T16:08:50.158Z" }, - { url = "https://files.pythonhosted.org/packages/ac/fd/669816bc6b5b93b9586f3c1d87cd6bc05028470b3ecfebb5938252c47a35/ruff-0.12.9-py3-none-win_arm64.whl", hash = "sha256:63c8c819739d86b96d500cce885956a1a48ab056bbcbc61b747ad494b2485089", size = 11949623, upload-time = "2025-08-14T16:08:52.233Z" }, +version = "0.13.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/8e/f9f9ca747fea8e3ac954e3690d4698c9737c23b51731d02df999c150b1c9/ruff-0.13.3.tar.gz", hash = "sha256:5b0ba0db740eefdfbcce4299f49e9eaefc643d4d007749d77d047c2bab19908e", size = 5438533, upload-time = "2025-10-02T19:29:31.582Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/33/8f7163553481466a92656d35dea9331095122bb84cf98210bef597dd2ecd/ruff-0.13.3-py3-none-linux_armv6l.whl", hash = "sha256:311860a4c5e19189c89d035638f500c1e191d283d0cc2f1600c8c80d6dcd430c", size = 12484040, upload-time = "2025-10-02T19:28:49.199Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b5/4a21a4922e5dd6845e91896b0d9ef493574cbe061ef7d00a73c61db531af/ruff-0.13.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2bdad6512fb666b40fcadb65e33add2b040fc18a24997d2e47fee7d66f7fcae2", size = 13122975, upload-time = "2025-10-02T19:28:52.446Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/15649af836d88c9f154e5be87e64ae7d2b1baa5a3ef317cb0c8fafcd882d/ruff-0.13.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fc6fa4637284708d6ed4e5e970d52fc3b76a557d7b4e85a53013d9d201d93286", size = 12346621, upload-time = "2025-10-02T19:28:54.712Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/bcbccb8141305f9a6d3f72549dd82d1134299177cc7eaf832599700f95a7/ruff-0.13.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c9e6469864f94a98f412f20ea143d547e4c652f45e44f369d7b74ee78185838", size = 12574408, upload-time = "2025-10-02T19:28:56.679Z" }, + { url = "https://files.pythonhosted.org/packages/ce/19/0f3681c941cdcfa2d110ce4515624c07a964dc315d3100d889fcad3bfc9e/ruff-0.13.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5bf62b705f319476c78891e0e97e965b21db468b3c999086de8ffb0d40fd2822", size = 12285330, upload-time = "2025-10-02T19:28:58.79Z" }, + { url = "https://files.pythonhosted.org/packages/10/f8/387976bf00d126b907bbd7725219257feea58650e6b055b29b224d8cb731/ruff-0.13.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78cc1abed87ce40cb07ee0667ce99dbc766c9f519eabfd948ed87295d8737c60", size = 13980815, upload-time = "2025-10-02T19:29:01.577Z" }, + { url = "https://files.pythonhosted.org/packages/0c/a6/7c8ec09d62d5a406e2b17d159e4817b63c945a8b9188a771193b7e1cc0b5/ruff-0.13.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4fb75e7c402d504f7a9a259e0442b96403fa4a7310ffe3588d11d7e170d2b1e3", size = 14987733, upload-time = "2025-10-02T19:29:04.036Z" }, + { url = "https://files.pythonhosted.org/packages/97/e5/f403a60a12258e0fd0c2195341cfa170726f254c788673495d86ab5a9a9d/ruff-0.13.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17b951f9d9afb39330b2bdd2dd144ce1c1335881c277837ac1b50bfd99985ed3", size = 14439848, upload-time = "2025-10-02T19:29:06.684Z" }, + { url = "https://files.pythonhosted.org/packages/39/49/3de381343e89364c2334c9f3268b0349dc734fc18b2d99a302d0935c8345/ruff-0.13.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6052f8088728898e0a449f0dde8fafc7ed47e4d878168b211977e3e7e854f662", size = 13421890, upload-time = "2025-10-02T19:29:08.767Z" }, + { url = "https://files.pythonhosted.org/packages/ab/b5/c0feca27d45ae74185a6bacc399f5d8920ab82df2d732a17213fb86a2c4c/ruff-0.13.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc742c50f4ba72ce2a3be362bd359aef7d0d302bf7637a6f942eaa763bd292af", size = 13444870, upload-time = "2025-10-02T19:29:11.234Z" }, + { url = "https://files.pythonhosted.org/packages/50/a1/b655298a1f3fda4fdc7340c3f671a4b260b009068fbeb3e4e151e9e3e1bf/ruff-0.13.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:8e5640349493b378431637019366bbd73c927e515c9c1babfea3e932f5e68e1d", size = 13691599, upload-time = "2025-10-02T19:29:13.353Z" }, + { url = "https://files.pythonhosted.org/packages/32/b0/a8705065b2dafae007bcae21354e6e2e832e03eb077bb6c8e523c2becb92/ruff-0.13.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b139f638a80eae7073c691a5dd8d581e0ba319540be97c343d60fb12949c8d0", size = 12421893, upload-time = "2025-10-02T19:29:15.668Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1e/cbe7082588d025cddbb2f23e6dfef08b1a2ef6d6f8328584ad3015b5cebd/ruff-0.13.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6b547def0a40054825de7cfa341039ebdfa51f3d4bfa6a0772940ed351d2746c", size = 12267220, upload-time = "2025-10-02T19:29:17.583Z" }, + { url = "https://files.pythonhosted.org/packages/a5/99/4086f9c43f85e0755996d09bdcb334b6fee9b1eabdf34e7d8b877fadf964/ruff-0.13.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9cc48a3564423915c93573f1981d57d101e617839bef38504f85f3677b3a0a3e", size = 13177818, upload-time = "2025-10-02T19:29:19.943Z" }, + { url = "https://files.pythonhosted.org/packages/9b/de/7b5db7e39947d9dc1c5f9f17b838ad6e680527d45288eeb568e860467010/ruff-0.13.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1a993b17ec03719c502881cb2d5f91771e8742f2ca6de740034433a97c561989", size = 13618715, upload-time = "2025-10-02T19:29:22.527Z" }, + { url = "https://files.pythonhosted.org/packages/28/d3/bb25ee567ce2f61ac52430cf99f446b0e6d49bdfa4188699ad005fdd16aa/ruff-0.13.3-py3-none-win32.whl", hash = "sha256:f14e0d1fe6460f07814d03c6e32e815bff411505178a1f539a38f6097d3e8ee3", size = 12334488, upload-time = "2025-10-02T19:29:24.782Z" }, + { url = "https://files.pythonhosted.org/packages/cf/49/12f5955818a1139eed288753479ba9d996f6ea0b101784bb1fe6977ec128/ruff-0.13.3-py3-none-win_amd64.whl", hash = "sha256:621e2e5812b691d4f244638d693e640f188bacbb9bc793ddd46837cea0503dd2", size = 13455262, upload-time = "2025-10-02T19:29:26.882Z" }, + { url = "https://files.pythonhosted.org/packages/fe/72/7b83242b26627a00e3af70d0394d68f8f02750d642567af12983031777fc/ruff-0.13.3-py3-none-win_arm64.whl", hash = "sha256:9e9e9d699841eaf4c2c798fa783df2fabc680b72059a02ca0ed81c460bc58330", size = 12538484, upload-time = "2025-10-02T19:29:28.951Z" }, ] [[package]] From ddf6577419b5b9f8a58d4999e245a8be51f97f89 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Fri, 7 Nov 2025 21:55:52 +0200 Subject: [PATCH 02/35] ci: fix check-backend workflow --- .github/workflows/check-backend.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 6d9cc6b62b..64f8768081 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -14,11 +14,11 @@ jobs: - uses: ./.github/actions/uv-python-install name: Install Python, uv and Python dependencies with: - extra-dependencies: --extra tests --extra mypy --extra custom-data + extra-dependencies: --extra mypy working-directory: ${{ env.BACKEND_DIR }} - name: Lint backend - run: uv run scripts/lint.py + run: uv run --no-project scripts/lint.py - name: Check backend formatting - run: uv run scripts/format.py --check + run: uv run --no-project scripts/format.py --check - name: Typecheck backend - run: uv run scripts/type-check.py + run: uv run --no-project scripts/type-check.py From 59c579c4a913047538e7c653347403191566b838 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Fri, 7 Nov 2025 21:58:29 +0200 Subject: [PATCH 03/35] ci: add missed dev deps to check-backend --- .github/workflows/check-backend.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 64f8768081..317886926d 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -14,7 +14,7 @@ jobs: - uses: ./.github/actions/uv-python-install name: Install Python, uv and Python dependencies with: - extra-dependencies: --extra mypy + extra-dependencies: --dev --extra mypy working-directory: ${{ env.BACKEND_DIR }} - name: Lint backend run: uv run --no-project scripts/lint.py From 3e8fc9d7d6f57c24b07bdf9bdf07cde8fdbf4695 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Sat, 8 Nov 2025 01:08:50 +0200 Subject: [PATCH 04/35] ci: fix uv-python-install action installation --- .github/actions/uv-python-install/action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/uv-python-install/action.yaml b/.github/actions/uv-python-install/action.yaml index 9cecc2b182..6520321d87 100644 --- a/.github/actions/uv-python-install/action.yaml +++ b/.github/actions/uv-python-install/action.yaml @@ -32,6 +32,6 @@ runs: with: python-version: ${{ inputs.python-version }} - name: Install Python dependencies - run: uv sync --no-install-project --no-editable ${{ inputs.extra-dependencies }} + run: uv sync --no-install-workspace ${{ inputs.extra-dependencies }} shell: bash working-directory: ${{ inputs.working-directory }} From f710211637d6e74f20782149b5f4b76afd89a312 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Sat, 8 Nov 2025 01:14:11 +0200 Subject: [PATCH 05/35] ci: fix dev dependencies --- backend/pyproject.toml | 8 +++++--- uv.lock | 24 +++++++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/backend/pyproject.toml b/backend/pyproject.toml index ac988fddd9..f8df26e5dc 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -58,6 +58,11 @@ dependencies = [ "pydantic-settings>=2.10.1" ] +[dependency-groups] +dev = [ + "ruff>=0.13.3,<1.0.0", +] + [project.urls] Homepage = "https://chainlit.io/" Documentation = "https://docs.chainlit.io/" @@ -86,9 +91,6 @@ tests = [ "pandas>=2.2.2,<3.0.0", "moto>=5.0.14,<6.0.0", ] -dev = [ - "ruff>=0.13.3,<1.0.0", -] mypy = [ "mypy>=1.13,<2.0.0", "types-requests>=2.31.0.2,<3.0.0", diff --git a/uv.lock b/uv.lock index 57ef3ef93a..8f47fd06a3 100644 --- a/uv.lock +++ b/uv.lock @@ -725,9 +725,6 @@ custom-data = [ { name = "google-cloud-storage" }, { name = "sqlalchemy" }, ] -dev = [ - { name = "ruff" }, -] mypy = [ { name = "mypy" }, { name = "mypy-boto3-dynamodb" }, @@ -755,6 +752,11 @@ tests = [ { name = "transformers" }, ] +[package.dev-dependencies] +dev = [ + { name = "ruff" }, +] + [package.metadata] requires-dist = [ { name = "aiofiles", specifier = ">=23.1.0,<25.0.0" }, @@ -798,7 +800,6 @@ requires-dist = [ { name = "python-dotenv", specifier = ">=1.0.0,<2.0.0" }, { name = "python-multipart", specifier = ">=0.0.18,<1.0.0" }, { name = "python-socketio", specifier = ">=5.11.0,<6.0.0" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.13.3,<1.0.0" }, { name = "semantic-kernel", marker = "extra == 'tests'", specifier = ">=1.24.0,<2.0.0" }, { name = "slack-bolt", marker = "extra == 'tests'", specifier = ">=1.18.1,<2.0.0" }, { name = "sqlalchemy", marker = "extra == 'custom-data'", specifier = ">=2.0.28,<3.0.0" }, @@ -812,7 +813,10 @@ requires-dist = [ { name = "uvicorn", specifier = ">=0.35.0" }, { name = "watchfiles", specifier = ">=0.20.0,<1.0.0" }, ] -provides-extras = ["custom-data", "dev", "mypy", "tests"] +provides-extras = ["custom-data", "mypy", "tests"] + +[package.metadata.requires-dev] +dev = [{ name = "ruff", specifier = ">=0.13.3,<1.0.0" }] [[package]] name = "chardet" @@ -1668,6 +1672,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d", size = 584358, upload-time = "2025-08-07T13:18:23.708Z" }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5", size = 1113550, upload-time = "2025-08-07T13:42:37.467Z" }, { url = "https://files.pythonhosted.org/packages/a1/8d/88f3ebd2bc96bf7747093696f4335a0a8a4c5acfcf1b757717c0d2474ba3/greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f", size = 1137126, upload-time = "2025-08-07T13:18:20.239Z" }, + { url = "https://files.pythonhosted.org/packages/f1/29/74242b7d72385e29bcc5563fba67dad94943d7cd03552bac320d597f29b2/greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7", size = 1544904, upload-time = "2025-11-04T12:42:04.763Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e2/1572b8eeab0f77df5f6729d6ab6b141e4a84ee8eb9bc8c1e7918f94eda6d/greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8", size = 1611228, upload-time = "2025-11-04T12:42:08.423Z" }, { url = "https://files.pythonhosted.org/packages/d6/6f/b60b0291d9623c496638c582297ead61f43c4b72eef5e9c926ef4565ec13/greenlet-3.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c", size = 298654, upload-time = "2025-08-07T13:50:00.469Z" }, { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2", size = 272305, upload-time = "2025-08-07T13:15:41.288Z" }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246", size = 632472, upload-time = "2025-08-07T13:42:55.044Z" }, @@ -1677,6 +1683,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8", size = 587684, upload-time = "2025-08-07T13:18:25.164Z" }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52", size = 1116647, upload-time = "2025-08-07T13:42:38.655Z" }, { url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa", size = 1142073, upload-time = "2025-08-07T13:18:21.737Z" }, + { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c", size = 1548385, upload-time = "2025-11-04T12:42:11.067Z" }, + { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5", size = 1613329, upload-time = "2025-11-04T12:42:12.928Z" }, { url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9", size = 299100, upload-time = "2025-08-07T13:44:12.287Z" }, { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd", size = 274079, upload-time = "2025-08-07T13:15:45.033Z" }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb", size = 640997, upload-time = "2025-08-07T13:42:56.234Z" }, @@ -1686,6 +1694,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0", size = 607586, upload-time = "2025-08-07T13:18:28.544Z" }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0", size = 1123281, upload-time = "2025-08-07T13:42:39.858Z" }, { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f", size = 1151142, upload-time = "2025-08-07T13:18:22.981Z" }, + { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0", size = 1564846, upload-time = "2025-11-04T12:42:15.191Z" }, + { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d", size = 1633814, upload-time = "2025-11-04T12:42:17.175Z" }, { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02", size = 299899, upload-time = "2025-08-07T13:38:53.448Z" }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31", size = 272814, upload-time = "2025-08-07T13:15:50.011Z" }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945", size = 641073, upload-time = "2025-08-07T13:42:57.23Z" }, @@ -1695,6 +1705,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671", size = 610497, upload-time = "2025-08-07T13:18:31.636Z" }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b", size = 1121662, upload-time = "2025-08-07T13:42:41.117Z" }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae", size = 1149210, upload-time = "2025-08-07T13:18:24.072Z" }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b", size = 1564759, upload-time = "2025-11-04T12:42:19.395Z" }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929", size = 1634288, upload-time = "2025-11-04T12:42:21.174Z" }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b", size = 299685, upload-time = "2025-08-07T13:24:38.824Z" }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0", size = 273586, upload-time = "2025-08-07T13:16:08.004Z" }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f", size = 686346, upload-time = "2025-08-07T13:42:59.944Z" }, @@ -1702,6 +1714,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1", size = 694659, upload-time = "2025-08-07T13:53:17.759Z" }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735", size = 695355, upload-time = "2025-08-07T13:18:34.517Z" }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337", size = 657512, upload-time = "2025-08-07T13:18:33.969Z" }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508, upload-time = "2025-11-04T12:42:23.427Z" }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681", size = 1680760, upload-time = "2025-11-04T12:42:25.341Z" }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01", size = 303425, upload-time = "2025-08-07T13:32:27.59Z" }, ] From 895b23e12c2f54b1459bcd35a9500ca3428805b9 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Sat, 8 Nov 2025 01:51:09 +0200 Subject: [PATCH 06/35] ci: fix tests & uv args --- .github/actions/uv-python-install/action.yaml | 8 ++++---- .github/workflows/check-backend.yaml | 2 +- .github/workflows/copilot-setup-steps.yaml | 2 +- .github/workflows/e2e-tests.yaml | 2 +- .github/workflows/tests.yaml | 2 +- pyproject.toml | 3 +++ 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/actions/uv-python-install/action.yaml b/.github/actions/uv-python-install/action.yaml index 6520321d87..4d4df903fb 100644 --- a/.github/actions/uv-python-install/action.yaml +++ b/.github/actions/uv-python-install/action.yaml @@ -10,13 +10,13 @@ inputs: description: uv version required: true default: 'latest' + uv-args: + description: Extra uv args, for example dependencies to install, e.g. --extra tests --extra dev. + required: false working-directory: description: Working directory for uv command. required: false default: . - extra-dependencies: - description: Extra dependencies to install, e.g. --extra tests --extra dev. - required: false runs: using: composite @@ -32,6 +32,6 @@ runs: with: python-version: ${{ inputs.python-version }} - name: Install Python dependencies - run: uv sync --no-install-workspace ${{ inputs.extra-dependencies }} + run: uv sync ${{ inputs.uv-args }} shell: bash working-directory: ${{ inputs.working-directory }} diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 317886926d..f3e0360765 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -14,7 +14,7 @@ jobs: - uses: ./.github/actions/uv-python-install name: Install Python, uv and Python dependencies with: - extra-dependencies: --dev --extra mypy + uv-args: --no-install-workspace --extra mypy working-directory: ${{ env.BACKEND_DIR }} - name: Lint backend run: uv run --no-project scripts/lint.py diff --git a/.github/workflows/copilot-setup-steps.yaml b/.github/workflows/copilot-setup-steps.yaml index d129c3ae2d..c8f36149cd 100644 --- a/.github/workflows/copilot-setup-steps.yaml +++ b/.github/workflows/copilot-setup-steps.yaml @@ -39,7 +39,7 @@ jobs: python-version: "3.10" uv-version: "latest" working-directory: "./backend" - extra-dependencies: "--extra tests --extra mypy --extra dev --extra custom-data" + uv-args: "--all-extras" - name: Build UI components run: pnpm run buildUi diff --git a/.github/workflows/e2e-tests.yaml b/.github/workflows/e2e-tests.yaml index 491c3317c3..e0b80f4e60 100644 --- a/.github/workflows/e2e-tests.yaml +++ b/.github/workflows/e2e-tests.yaml @@ -24,7 +24,7 @@ jobs: name: Install Python, uv and Python & pnpm (uv does it automatically) dependencies with: working-directory: ${{ env.BACKEND_DIR }} - extra-dependencies: --extra tests + uv-args: --extra tests - name: Build UI components run: pnpm run buildUi timeout-minutes: 5 diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index dc95650e30..3a947c7207 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -20,7 +20,7 @@ jobs: name: Install Python, uv and Python dependencies with: python-version: ${{ matrix.python-version }} - extra-dependencies: --extra tests --extra mypy --extra custom-data + uv-args: --extra tests --extra custom-data - name: Run backend tests run: uv run --no-project pytest --cov=chainlit/ - name: Run frontend tests diff --git a/pyproject.toml b/pyproject.toml index cbf3b8f88a..0bf7f711d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,9 @@ [dependency-groups] backend = ["chainlit"] +[tool.pytest.ini_options] +asyncio_mode = "auto" + [tool.uv] default-groups = ["backend"] package = false From efd3a07f5b85a37f7a1aaba01300412e89d84165 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 10 Nov 2025 23:08:07 +0200 Subject: [PATCH 07/35] fix: some missed linting issues --- backend/chainlit/langchain/callbacks.py | 2 +- backend/chainlit/sync.py | 9 +-------- backend/tests/data/storage_clients/test_gcs.py | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/backend/chainlit/langchain/callbacks.py b/backend/chainlit/langchain/callbacks.py index 0f811cc7ea..4b04544de1 100644 --- a/backend/chainlit/langchain/callbacks.py +++ b/backend/chainlit/langchain/callbacks.py @@ -572,7 +572,7 @@ async def _on_run_update(self, run: Run) -> None: """Process a run upon update.""" context_var.set(self.context) - ignore, parent_id = self._should_ignore_run(run) + ignore, _ = self._should_ignore_run(run) if ignore: return diff --git a/backend/chainlit/sync.py b/backend/chainlit/sync.py index 09d4ee72de..ccb86d97dc 100644 --- a/backend/chainlit/sync.py +++ b/backend/chainlit/sync.py @@ -1,13 +1,6 @@ -import sys -from typing import Any, Coroutine, TypeVar - -if sys.version_info >= (3, 10): - from typing import ParamSpec -else: - from typing_extensions import ParamSpec - import asyncio import threading +from typing import Any, Coroutine, ParamSpec, TypeVar from asyncer import asyncify from syncer import sync diff --git a/backend/tests/data/storage_clients/test_gcs.py b/backend/tests/data/storage_clients/test_gcs.py index 37a73258c1..b7b9fcc929 100644 --- a/backend/tests/data/storage_clients/test_gcs.py +++ b/backend/tests/data/storage_clients/test_gcs.py @@ -206,7 +206,7 @@ def test_sync_upload_file_no_overwrite(self, mock_gcs_client): with pytest.raises( Exception, - match="Failed to upload file to GCS: File test/path/existing.txt already exists and overwrite is False", + match=r"Failed to upload file to GCS: File test/path/existing.txt already exists and overwrite is False", ): client.sync_upload_file( object_key="test/path/existing.txt", From c9aecf0d36022266b131e615b75e9840d792c3a9 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 10 Nov 2025 23:12:37 +0200 Subject: [PATCH 08/35] fix: type checking, backend & test workflows --- .github/copilot-instructions.md | 10 ++-------- .github/workflows/check-backend.yaml | 4 ++-- .github/workflows/e2e-tests.yaml | 5 ----- backend/pyproject.toml | 1 + scripts/{type-check.py => type_check.py} | 0 5 files changed, 5 insertions(+), 15 deletions(-) rename scripts/{type-check.py => type_check.py} (100%) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 20ed1d80b7..fc480585c0 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -32,13 +32,7 @@ Always reference these instructions first and fallback to search or bash command # NOTE: Cypress download may fail due to network restrictions - this is expected in CI environments ``` -2. **Build the Frontend - takes ~1 minute, NEVER CANCEL**: - ```bash - pnpm run buildUi - # Timeout: Use 300+ seconds (5+ minutes) - ``` - -3. **Run Tests**: +2. **Run Tests**: ```bash # Backend tests - takes ~17 seconds, NEVER CANCEL cd backend @@ -55,7 +49,7 @@ Always reference these instructions first and fallback to search or bash command # If available: pnpm test:e2e (takes variable time depending on tests) ``` -4. **Run Development Servers**: +3. **Run Development Servers**: ```bash # Start backend (in one terminal) cd backend diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index f3e0360765..9cba3d6aa3 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -14,11 +14,11 @@ jobs: - uses: ./.github/actions/uv-python-install name: Install Python, uv and Python dependencies with: - uv-args: --no-install-workspace --extra mypy + uv-args: --no-install-workspace --dev --extra mypy working-directory: ${{ env.BACKEND_DIR }} - name: Lint backend run: uv run --no-project scripts/lint.py - name: Check backend formatting run: uv run --no-project scripts/format.py --check - name: Typecheck backend - run: uv run --no-project scripts/type-check.py + run: uv run --no-project scripts/type_check.py diff --git a/.github/workflows/e2e-tests.yaml b/.github/workflows/e2e-tests.yaml index e0b80f4e60..6e7a5d5145 100644 --- a/.github/workflows/e2e-tests.yaml +++ b/.github/workflows/e2e-tests.yaml @@ -25,12 +25,7 @@ jobs: with: working-directory: ${{ env.BACKEND_DIR }} uv-args: --extra tests - - name: Build UI components - run: pnpm run buildUi - timeout-minutes: 5 - name: Run tests - env: - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} run: pnpm test:e2e shell: bash - name: Upload screenshots diff --git a/backend/pyproject.toml b/backend/pyproject.toml index f8df26e5dc..ae5d1caefd 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -139,6 +139,7 @@ path = "chainlit/version.py" [tool.mypy] python_version = "3.10" +explicit_package_bases = true [[tool.mypy.overrides]] module = [ diff --git a/scripts/type-check.py b/scripts/type_check.py similarity index 100% rename from scripts/type-check.py rename to scripts/type_check.py From b4c2f1048396dc3bd86dc9eaa3f0fc716958ca96 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 10 Nov 2025 23:19:05 +0200 Subject: [PATCH 09/35] fix: most of import errors on type checking --- .github/workflows/check-backend.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 9cba3d6aa3..768052d00e 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -14,7 +14,7 @@ jobs: - uses: ./.github/actions/uv-python-install name: Install Python, uv and Python dependencies with: - uv-args: --no-install-workspace --dev --extra mypy + uv-args: --no-install-workspace --all-extras working-directory: ${{ env.BACKEND_DIR }} - name: Lint backend run: uv run --no-project scripts/lint.py From 9e44bbae95475e5fd99f0cb01454d8cdbeb22954 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 04:44:47 +0200 Subject: [PATCH 10/35] ci: fix some issues --- .github/actions/uv-python-install/action.yaml | 2 +- .github/workflows/check-backend.yaml | 2 +- CONTRIBUTING.md | 6 +- backend/pyproject.toml | 73 +---- pyproject.toml | 63 ++++ uv.lock | 309 ++---------------- 6 files changed, 103 insertions(+), 352 deletions(-) diff --git a/.github/actions/uv-python-install/action.yaml b/.github/actions/uv-python-install/action.yaml index 4d4df903fb..8afada8f2b 100644 --- a/.github/actions/uv-python-install/action.yaml +++ b/.github/actions/uv-python-install/action.yaml @@ -32,6 +32,6 @@ runs: with: python-version: ${{ inputs.python-version }} - name: Install Python dependencies - run: uv sync ${{ inputs.uv-args }} + run: uv sync --all-packages ${{ inputs.uv-args }} shell: bash working-directory: ${{ inputs.working-directory }} diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 768052d00e..d42dc39cf7 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -14,7 +14,7 @@ jobs: - uses: ./.github/actions/uv-python-install name: Install Python, uv and Python dependencies with: - uv-args: --no-install-workspace --all-extras + uv-args: --no-install-workspace --all-extras --dev working-directory: ${{ env.BACKEND_DIR }} - name: Lint backend run: uv run --no-project scripts/lint.py diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c488429685..891dc4841c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -75,7 +75,7 @@ The following command will install Python dependencies, Node (pnpm) dependencies ```sh cd backend -uv sync --extra tests --extra mypy --extra dev --extra custom-data +uv sync --all-packages --all-extras --dev ``` ## Start the Chainlit server from source @@ -147,6 +147,4 @@ For debugging purposes, you can use the **interactive mode** (Cypress UI). Run: pnpm test:e2e:interactive // runs `cypress open` ``` -Once you create a pull request, the tests will automatically run. It is a good practice to run the tests locally before pushing. - -Make sure to run `uv sync` again whenever you've updated the frontend! \ No newline at end of file +Once you create a pull request, the tests will automatically run. It is a good practice to run the tests locally before pushing. \ No newline at end of file diff --git a/backend/pyproject.toml b/backend/pyproject.toml index ae5d1caefd..c742164173 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -20,7 +20,7 @@ authors = [ ] license = { text = "Apache-2.0" } readme = "README.md" -requires-python = ">=3.10,<4.0.0" +requires-python = ">=3.10,<3.14.0" classifiers = [ "Framework :: FastAPI", "Topic :: Scientific/Engineering :: Artificial Intelligence", @@ -60,6 +60,7 @@ dependencies = [ [dependency-groups] dev = [ + "hatchling", "ruff>=0.13.3,<1.0.0", ] @@ -135,72 +136,4 @@ artifacts = [ ] [tool.hatch.version] -path = "chainlit/version.py" - -[tool.mypy] -python_version = "3.10" -explicit_package_bases = true - -[[tool.mypy.overrides]] -module = [ - "boto3.dynamodb.types", - "botbuilder.*", - "filetype", - "langflow", - "lazify", - "plotly", - "nest_asyncio", - "socketio.*", - "syncer", - "azure.storage.filedatalake", - "google-cloud-storage", - "azure.storage.blob", - "azure.storage.blob.aio", - "google.auth", - "google.oauth2", -] - -ignore_missing_imports = true - -[tool.pytest.ini_options] -testpaths = ["tests"] -asyncio_mode = "auto" - -[tool.ruff] -target-version = "py310" - -[tool.ruff.lint] -select = [ - "E", - "F", - "I", - "LOG", - "UP", - "T10", - "ISC", - "ICN", - "LOG", - "G", - "PIE", - "PT", - "Q", - "RSE", - "FURB", - "RUF", -] -ignore = [ - "E712", - "E501", - "UP006", - "UP007", - "UP035", - "UP045", - "PIE790", - "RUF005", - "RUF006", - "RUF012", - "ISC001", -] - -[tool.ruff.lint.isort] -combine-as-imports = true +path = "chainlit/version.py" \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 0bf7f711d4..e2b3aaf8bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,72 @@ [dependency-groups] backend = ["chainlit"] +[tool.mypy] +python_version = "3.10" + +[[tool.mypy.overrides]] +module = [ + "boto3.dynamodb.types", + "botbuilder.*", + "filetype", + "langflow", + "lazify", + "plotly", + "nest_asyncio", + "socketio.*", + "syncer", + "azure.storage.filedatalake", + "google-cloud-storage", + "azure.storage.blob", + "azure.storage.blob.aio", + "google.auth", + "google.oauth2", +] +ignore_missing_imports = true + [tool.pytest.ini_options] +testpaths = ["backend/tests"] asyncio_mode = "auto" +[tool.ruff] +target-version = "py310" + +[tool.ruff.lint] +select = [ + "E", + "F", + "I", + "LOG", + "UP", + "T10", + "ISC", + "ICN", + "LOG", + "G", + "PIE", + "PT", + "Q", + "RSE", + "FURB", + "RUF", +] +ignore = [ + "E712", + "E501", + "UP006", + "UP007", + "UP035", + "UP045", + "PIE790", + "RUF005", + "RUF006", + "RUF012", + "ISC001", +] + +[tool.ruff.lint.isort] +combine-as-imports = true + [tool.uv] default-groups = ["backend"] package = false diff --git a/uv.lock b/uv.lock index 8f47fd06a3..e7834debcc 100644 --- a/uv.lock +++ b/uv.lock @@ -1,6 +1,6 @@ version = 1 revision = 3 -requires-python = ">=3.10, <4.0.0" +requires-python = ">=3.10, <3.14.0" resolution-markers = [ "python_full_version >= '3.13'", "python_full_version >= '3.12.4' and python_full_version < '3.13'", @@ -331,22 +331,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4f/41/affea7181592ab0ab560044632571a38edaf9130b84928177823fbf3176a/audioop_lts-0.2.2-cp313-cp313t-win32.whl", hash = "sha256:d5e73fa573e273e4f2e5ff96f9043858a5e9311e94ffefd88a3186a910c70917", size = 26568, upload-time = "2025-08-05T16:42:55.627Z" }, { url = "https://files.pythonhosted.org/packages/28/2b/0372842877016641db8fc54d5c88596b542eec2f8f6c20a36fb6612bf9ee/audioop_lts-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9191d68659eda01e448188f60364c7763a7ca6653ed3f87ebb165822153a8547", size = 30942, upload-time = "2025-08-05T16:42:56.674Z" }, { url = "https://files.pythonhosted.org/packages/ee/ca/baf2b9cc7e96c179bb4a54f30fcd83e6ecb340031bde68f486403f943768/audioop_lts-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c174e322bb5783c099aaf87faeb240c8d210686b04bd61dfd05a8e5a83d88969", size = 24603, upload-time = "2025-08-05T16:42:57.571Z" }, - { url = "https://files.pythonhosted.org/packages/5c/73/413b5a2804091e2c7d5def1d618e4837f1cb82464e230f827226278556b7/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f9ee9b52f5f857fbaf9d605a360884f034c92c1c23021fb90b2e39b8e64bede6", size = 47104, upload-time = "2025-08-05T16:42:58.518Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8c/daa3308dc6593944410c2c68306a5e217f5c05b70a12e70228e7dd42dc5c/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:49ee1a41738a23e98d98b937a0638357a2477bc99e61b0f768a8f654f45d9b7a", size = 27754, upload-time = "2025-08-05T16:43:00.132Z" }, - { url = "https://files.pythonhosted.org/packages/4e/86/c2e0f627168fcf61781a8f72cab06b228fe1da4b9fa4ab39cfb791b5836b/audioop_lts-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5b00be98ccd0fc123dcfad31d50030d25fcf31488cde9e61692029cd7394733b", size = 27332, upload-time = "2025-08-05T16:43:01.666Z" }, - { url = "https://files.pythonhosted.org/packages/c7/bd/35dce665255434f54e5307de39e31912a6f902d4572da7c37582809de14f/audioop_lts-0.2.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6d2e0f9f7a69403e388894d4ca5ada5c47230716a03f2847cfc7bd1ecb589d6", size = 92396, upload-time = "2025-08-05T16:43:02.991Z" }, - { url = "https://files.pythonhosted.org/packages/2d/d2/deeb9f51def1437b3afa35aeb729d577c04bcd89394cb56f9239a9f50b6f/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9b0b8a03ef474f56d1a842af1a2e01398b8f7654009823c6d9e0ecff4d5cfbf", size = 91811, upload-time = "2025-08-05T16:43:04.096Z" }, - { url = "https://files.pythonhosted.org/packages/76/3b/09f8b35b227cee28cc8231e296a82759ed80c1a08e349811d69773c48426/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2b267b70747d82125f1a021506565bdc5609a2b24bcb4773c16d79d2bb260bbd", size = 100483, upload-time = "2025-08-05T16:43:05.085Z" }, - { url = "https://files.pythonhosted.org/packages/0b/15/05b48a935cf3b130c248bfdbdea71ce6437f5394ee8533e0edd7cfd93d5e/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0337d658f9b81f4cd0fdb1f47635070cc084871a3d4646d9de74fdf4e7c3d24a", size = 103885, upload-time = "2025-08-05T16:43:06.197Z" }, - { url = "https://files.pythonhosted.org/packages/83/80/186b7fce6d35b68d3d739f228dc31d60b3412105854edb975aa155a58339/audioop_lts-0.2.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:167d3b62586faef8b6b2275c3218796b12621a60e43f7e9d5845d627b9c9b80e", size = 84899, upload-time = "2025-08-05T16:43:07.291Z" }, - { url = "https://files.pythonhosted.org/packages/49/89/c78cc5ac6cb5828f17514fb12966e299c850bc885e80f8ad94e38d450886/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0d9385e96f9f6da847f4d571ce3cb15b5091140edf3db97276872647ce37efd7", size = 89998, upload-time = "2025-08-05T16:43:08.335Z" }, - { url = "https://files.pythonhosted.org/packages/4c/4b/6401888d0c010e586c2ca50fce4c903d70a6bb55928b16cfbdfd957a13da/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:48159d96962674eccdca9a3df280e864e8ac75e40a577cc97c5c42667ffabfc5", size = 99046, upload-time = "2025-08-05T16:43:09.367Z" }, - { url = "https://files.pythonhosted.org/packages/de/f8/c874ca9bb447dae0e2ef2e231f6c4c2b0c39e31ae684d2420b0f9e97ee68/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8fefe5868cd082db1186f2837d64cfbfa78b548ea0d0543e9b28935ccce81ce9", size = 84843, upload-time = "2025-08-05T16:43:10.749Z" }, - { url = "https://files.pythonhosted.org/packages/3e/c0/0323e66f3daebc13fd46b36b30c3be47e3fc4257eae44f1e77eb828c703f/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:58cf54380c3884fb49fdd37dfb7a772632b6701d28edd3e2904743c5e1773602", size = 94490, upload-time = "2025-08-05T16:43:12.131Z" }, - { url = "https://files.pythonhosted.org/packages/98/6b/acc7734ac02d95ab791c10c3f17ffa3584ccb9ac5c18fd771c638ed6d1f5/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:088327f00488cdeed296edd9215ca159f3a5a5034741465789cad403fcf4bec0", size = 92297, upload-time = "2025-08-05T16:43:13.139Z" }, - { url = "https://files.pythonhosted.org/packages/13/c3/c3dc3f564ce6877ecd2a05f8d751b9b27a8c320c2533a98b0c86349778d0/audioop_lts-0.2.2-cp314-cp314t-win32.whl", hash = "sha256:068aa17a38b4e0e7de771c62c60bbca2455924b67a8814f3b0dee92b5820c0b3", size = 27331, upload-time = "2025-08-05T16:43:14.19Z" }, - { url = "https://files.pythonhosted.org/packages/72/bb/b4608537e9ffcb86449091939d52d24a055216a36a8bf66b936af8c3e7ac/audioop_lts-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a5bf613e96f49712073de86f20dbdd4014ca18efd4d34ed18c75bd808337851b", size = 31697, upload-time = "2025-08-05T16:43:15.193Z" }, - { url = "https://files.pythonhosted.org/packages/f6/22/91616fe707a5c5510de2cac9b046a30defe7007ba8a0c04f9c08f27df312/audioop_lts-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:b492c3b040153e68b9fdaff5913305aaaba5bb433d8a7f73d5cf6a64ed3cc1dd", size = 25206, upload-time = "2025-08-05T16:43:16.444Z" }, ] [[package]] @@ -754,6 +738,7 @@ tests = [ [package.dev-dependencies] dev = [ + { name = "hatchling" }, { name = "ruff" }, ] @@ -816,7 +801,10 @@ requires-dist = [ provides-extras = ["custom-data", "mypy", "tests"] [package.metadata.requires-dev] -dev = [{ name = "ruff", specifier = ">=0.13.3,<1.0.0" }] +dev = [ + { name = "hatchling" }, + { name = "ruff", specifier = ">=0.13.3,<1.0.0" }, +] [[package]] name = "chardet" @@ -877,17 +865,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" }, { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" }, { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" }, - { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" }, - { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" }, - { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" }, - { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" }, - { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" }, - { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" }, - { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" }, - { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" }, - { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" }, { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, ] @@ -1062,28 +1039,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, - { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, - { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, - { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, - { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, - { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, - { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, - { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, - { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, - { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, - { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, - { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, - { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, - { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, - { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, - { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, - { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, - { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, - { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, { url = "https://files.pythonhosted.org/packages/a5/29/8dcfe16f0107943fa92388c23f6e05cff0ba58058c4c95b00280d4c75a14/contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497", size = 278809, upload-time = "2025-07-26T12:02:52.74Z" }, { url = "https://files.pythonhosted.org/packages/85/a9/8b37ef4f7dafeb335daee3c8254645ef5725be4d9c6aa70b50ec46ef2f7e/contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8", size = 261593, upload-time = "2025-07-26T12:02:54.037Z" }, { url = "https://files.pythonhosted.org/packages/0a/59/ebfb8c677c75605cc27f7122c90313fd2f375ff3c8d19a1694bda74aaa63/contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e", size = 302202, upload-time = "2025-07-26T12:02:55.947Z" }, @@ -1151,28 +1106,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/c6/bbea60a3b309621162e53faf7fac740daaf083048ea22077418e1ecaba3f/coverage-7.10.4-cp313-cp313t-win32.whl", hash = "sha256:e24afb178f21f9ceb1aefbc73eb524769aa9b504a42b26857243f881af56880c", size = 219833, upload-time = "2025-08-17T00:25:39.252Z" }, { url = "https://files.pythonhosted.org/packages/44/a5/f9f080d49cfb117ddffe672f21eab41bd23a46179a907820743afac7c021/coverage-7.10.4-cp313-cp313t-win_amd64.whl", hash = "sha256:be04507ff1ad206f4be3d156a674e3fb84bbb751ea1b23b142979ac9eebaa15f", size = 220897, upload-time = "2025-08-17T00:25:40.772Z" }, { url = "https://files.pythonhosted.org/packages/46/89/49a3fc784fa73d707f603e586d84a18c2e7796707044e9d73d13260930b7/coverage-7.10.4-cp313-cp313t-win_arm64.whl", hash = "sha256:f3e3ff3f69d02b5dad67a6eac68cc9c71ae343b6328aae96e914f9f2f23a22e2", size = 219160, upload-time = "2025-08-17T00:25:42.229Z" }, - { url = "https://files.pythonhosted.org/packages/b5/22/525f84b4cbcff66024d29f6909d7ecde97223f998116d3677cfba0d115b5/coverage-7.10.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a59fe0af7dd7211ba595cf7e2867458381f7e5d7b4cffe46274e0b2f5b9f4eb4", size = 216717, upload-time = "2025-08-17T00:25:43.875Z" }, - { url = "https://files.pythonhosted.org/packages/a6/58/213577f77efe44333a416d4bcb251471e7f64b19b5886bb515561b5ce389/coverage-7.10.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3a6c35c5b70f569ee38dc3350cd14fdd0347a8b389a18bb37538cc43e6f730e6", size = 216994, upload-time = "2025-08-17T00:25:45.405Z" }, - { url = "https://files.pythonhosted.org/packages/17/85/34ac02d0985a09472f41b609a1d7babc32df87c726c7612dc93d30679b5a/coverage-7.10.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:acb7baf49f513554c4af6ef8e2bd6e8ac74e6ea0c7386df8b3eb586d82ccccc4", size = 248038, upload-time = "2025-08-17T00:25:46.981Z" }, - { url = "https://files.pythonhosted.org/packages/47/4f/2140305ec93642fdaf988f139813629cbb6d8efa661b30a04b6f7c67c31e/coverage-7.10.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a89afecec1ed12ac13ed203238b560cbfad3522bae37d91c102e690b8b1dc46c", size = 250575, upload-time = "2025-08-17T00:25:48.613Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b5/41b5784180b82a083c76aeba8f2c72ea1cb789e5382157b7dc852832aea2/coverage-7.10.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:480442727f464407d8ade6e677b7f21f3b96a9838ab541b9a28ce9e44123c14e", size = 251927, upload-time = "2025-08-17T00:25:50.881Z" }, - { url = "https://files.pythonhosted.org/packages/78/ca/c1dd063e50b71f5aea2ebb27a1c404e7b5ecf5714c8b5301f20e4e8831ac/coverage-7.10.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a89bf193707f4a17f1ed461504031074d87f035153239f16ce86dfb8f8c7ac76", size = 249930, upload-time = "2025-08-17T00:25:52.422Z" }, - { url = "https://files.pythonhosted.org/packages/8d/66/d8907408612ffee100d731798e6090aedb3ba766ecf929df296c1a7ee4fb/coverage-7.10.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:3ddd912c2fc440f0fb3229e764feec85669d5d80a988ff1b336a27d73f63c818", size = 247862, upload-time = "2025-08-17T00:25:54.316Z" }, - { url = "https://files.pythonhosted.org/packages/29/db/53cd8ec8b1c9c52d8e22a25434785bfc2d1e70c0cfb4d278a1326c87f741/coverage-7.10.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8a538944ee3a42265e61c7298aeba9ea43f31c01271cf028f437a7b4075592cf", size = 249360, upload-time = "2025-08-17T00:25:55.833Z" }, - { url = "https://files.pythonhosted.org/packages/4f/75/5ec0a28ae4a0804124ea5a5becd2b0fa3adf30967ac656711fb5cdf67c60/coverage-7.10.4-cp314-cp314-win32.whl", hash = "sha256:fd2e6002be1c62476eb862b8514b1ba7e7684c50165f2a8d389e77da6c9a2ebd", size = 219449, upload-time = "2025-08-17T00:25:57.984Z" }, - { url = "https://files.pythonhosted.org/packages/9d/ab/66e2ee085ec60672bf5250f11101ad8143b81f24989e8c0e575d16bb1e53/coverage-7.10.4-cp314-cp314-win_amd64.whl", hash = "sha256:ec113277f2b5cf188d95fb66a65c7431f2b9192ee7e6ec9b72b30bbfb53c244a", size = 220246, upload-time = "2025-08-17T00:25:59.868Z" }, - { url = "https://files.pythonhosted.org/packages/37/3b/00b448d385f149143190846217797d730b973c3c0ec2045a7e0f5db3a7d0/coverage-7.10.4-cp314-cp314-win_arm64.whl", hash = "sha256:9744954bfd387796c6a091b50d55ca7cac3d08767795b5eec69ad0f7dbf12d38", size = 218825, upload-time = "2025-08-17T00:26:01.44Z" }, - { url = "https://files.pythonhosted.org/packages/ee/2e/55e20d3d1ce00b513efb6fd35f13899e1c6d4f76c6cbcc9851c7227cd469/coverage-7.10.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5af4829904dda6aabb54a23879f0f4412094ba9ef153aaa464e3c1b1c9bc98e6", size = 217462, upload-time = "2025-08-17T00:26:03.014Z" }, - { url = "https://files.pythonhosted.org/packages/47/b3/aab1260df5876f5921e2c57519e73a6f6eeacc0ae451e109d44ee747563e/coverage-7.10.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7bba5ed85e034831fac761ae506c0644d24fd5594727e174b5a73aff343a7508", size = 217675, upload-time = "2025-08-17T00:26:04.606Z" }, - { url = "https://files.pythonhosted.org/packages/67/23/1cfe2aa50c7026180989f0bfc242168ac7c8399ccc66eb816b171e0ab05e/coverage-7.10.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d57d555b0719834b55ad35045de6cc80fc2b28e05adb6b03c98479f9553b387f", size = 259176, upload-time = "2025-08-17T00:26:06.159Z" }, - { url = "https://files.pythonhosted.org/packages/9d/72/5882b6aeed3f9de7fc4049874fd7d24213bf1d06882f5c754c8a682606ec/coverage-7.10.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ba62c51a72048bb1ea72db265e6bd8beaabf9809cd2125bbb5306c6ce105f214", size = 261341, upload-time = "2025-08-17T00:26:08.137Z" }, - { url = "https://files.pythonhosted.org/packages/1b/70/a0c76e3087596ae155f8e71a49c2c534c58b92aeacaf4d9d0cbbf2dde53b/coverage-7.10.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0acf0c62a6095f07e9db4ec365cc58c0ef5babb757e54745a1aa2ea2a2564af1", size = 263600, upload-time = "2025-08-17T00:26:11.045Z" }, - { url = "https://files.pythonhosted.org/packages/cb/5f/27e4cd4505b9a3c05257fb7fc509acbc778c830c450cb4ace00bf2b7bda7/coverage-7.10.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e1033bf0f763f5cf49ffe6594314b11027dcc1073ac590b415ea93463466deec", size = 261036, upload-time = "2025-08-17T00:26:12.693Z" }, - { url = "https://files.pythonhosted.org/packages/02/d6/cf2ae3a7f90ab226ea765a104c4e76c5126f73c93a92eaea41e1dc6a1892/coverage-7.10.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:92c29eff894832b6a40da1789b1f252305af921750b03ee4535919db9179453d", size = 258794, upload-time = "2025-08-17T00:26:14.261Z" }, - { url = "https://files.pythonhosted.org/packages/9e/b1/39f222eab0d78aa2001cdb7852aa1140bba632db23a5cfd832218b496d6c/coverage-7.10.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:822c4c830989c2093527e92acd97be4638a44eb042b1bdc0e7a278d84a070bd3", size = 259946, upload-time = "2025-08-17T00:26:15.899Z" }, - { url = "https://files.pythonhosted.org/packages/74/b2/49d82acefe2fe7c777436a3097f928c7242a842538b190f66aac01f29321/coverage-7.10.4-cp314-cp314t-win32.whl", hash = "sha256:e694d855dac2e7cf194ba33653e4ba7aad7267a802a7b3fc4347d0517d5d65cd", size = 220226, upload-time = "2025-08-17T00:26:17.566Z" }, - { url = "https://files.pythonhosted.org/packages/06/b0/afb942b6b2fc30bdbc7b05b087beae11c2b0daaa08e160586cf012b6ad70/coverage-7.10.4-cp314-cp314t-win_amd64.whl", hash = "sha256:efcc54b38ef7d5bfa98050f220b415bc5bb3d432bd6350a861cf6da0ede2cdcd", size = 221346, upload-time = "2025-08-17T00:26:19.311Z" }, - { url = "https://files.pythonhosted.org/packages/d8/66/e0531c9d1525cb6eac5b5733c76f27f3053ee92665f83f8899516fea6e76/coverage-7.10.4-cp314-cp314t-win_arm64.whl", hash = "sha256:6f3a3496c0fa26bfac4ebc458747b778cff201c8ae94fa05e1391bab0dbc473c", size = 219368, upload-time = "2025-08-17T00:26:21.011Z" }, { url = "https://files.pythonhosted.org/packages/bb/78/983efd23200921d9edb6bd40512e1aa04af553d7d5a171e50f9b2b45d109/coverage-7.10.4-py3-none-any.whl", hash = "sha256:065d75447228d05121e5c938ca8f0e91eed60a1eb2d1258d42d5084fecfc3302", size = 208365, upload-time = "2025-08-17T00:26:41.479Z" }, ] @@ -1417,22 +1350,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/63/71/c7d6840f858d695adc0c4371ec45e3fb1c8e060b276ba944e2800495aca4/fonttools-4.59.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2beb5bfc4887a3130f8625349605a3a45fe345655ce6031d1bac11017454b943", size = 5032668, upload-time = "2025-08-14T16:27:13.872Z" }, { url = "https://files.pythonhosted.org/packages/90/54/57be4aca6f1312e2bc4d811200dd822325794e05bdb26eeff0976edca651/fonttools-4.59.1-cp313-cp313-win32.whl", hash = "sha256:419f16d750d78e6d704bfe97b48bba2f73b15c9418f817d0cb8a9ca87a5b94bf", size = 2201832, upload-time = "2025-08-14T16:27:16.126Z" }, { url = "https://files.pythonhosted.org/packages/fc/1f/1899a6175a5f900ed8730a0d64f53ca1b596ed7609bfda033cf659114258/fonttools-4.59.1-cp313-cp313-win_amd64.whl", hash = "sha256:c536f8a852e8d3fa71dde1ec03892aee50be59f7154b533f0bf3c1174cfd5126", size = 2250673, upload-time = "2025-08-14T16:27:18.033Z" }, - { url = "https://files.pythonhosted.org/packages/15/07/f6ba82c22f118d9985c37fea65d8d715ca71300d78b6c6e90874dc59f11d/fonttools-4.59.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:d5c3bfdc9663f3d4b565f9cb3b8c1efb3e178186435b45105bde7328cfddd7fe", size = 2758606, upload-time = "2025-08-14T16:27:20.064Z" }, - { url = "https://files.pythonhosted.org/packages/3a/81/84aa3d0ce27b0112c28b67b637ff7a47cf401cf5fbfee6476e4bc9777580/fonttools-4.59.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ea03f1da0d722fe3c2278a05957e6550175571a4894fbf9d178ceef4a3783d2b", size = 2330187, upload-time = "2025-08-14T16:27:22.42Z" }, - { url = "https://files.pythonhosted.org/packages/17/41/b3ba43f78afb321e2e50232c87304c8d0f5ab39b64389b8286cc39cdb824/fonttools-4.59.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:57a3708ca6bfccb790f585fa6d8f29432ec329618a09ff94c16bcb3c55994643", size = 4832020, upload-time = "2025-08-14T16:27:24.214Z" }, - { url = "https://files.pythonhosted.org/packages/67/b1/3af871c7fb325a68938e7ce544ca48bfd2c6bb7b357f3c8252933b29100a/fonttools-4.59.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:729367c91eb1ee84e61a733acc485065a00590618ca31c438e7dd4d600c01486", size = 4930687, upload-time = "2025-08-14T16:27:26.484Z" }, - { url = "https://files.pythonhosted.org/packages/c5/4f/299fc44646b30d9ef03ffaa78b109c7bd32121f0d8f10009ee73ac4514bc/fonttools-4.59.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f8ef66ac6db450193ed150e10b3b45dde7aded10c5d279968bc63368027f62b", size = 4875794, upload-time = "2025-08-14T16:27:28.887Z" }, - { url = "https://files.pythonhosted.org/packages/90/cf/a0a3d763ab58f5f81ceff104ddb662fd9da94248694862b9c6cbd509fdd5/fonttools-4.59.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:075f745d539a998cd92cb84c339a82e53e49114ec62aaea8307c80d3ad3aef3a", size = 4985780, upload-time = "2025-08-14T16:27:30.858Z" }, - { url = "https://files.pythonhosted.org/packages/72/c5/ba76511aaae143d89c29cd32ce30bafb61c477e8759a1590b8483f8065f8/fonttools-4.59.1-cp314-cp314-win32.whl", hash = "sha256:c2b0597522d4c5bb18aa5cf258746a2d4a90f25878cbe865e4d35526abd1b9fc", size = 2205610, upload-time = "2025-08-14T16:27:32.578Z" }, - { url = "https://files.pythonhosted.org/packages/a9/65/b250e69d6caf35bc65cddbf608be0662d741c248f2e7503ab01081fc267e/fonttools-4.59.1-cp314-cp314-win_amd64.whl", hash = "sha256:e9ad4ce044e3236f0814c906ccce8647046cc557539661e35211faadf76f283b", size = 2255376, upload-time = "2025-08-14T16:27:34.653Z" }, - { url = "https://files.pythonhosted.org/packages/11/f3/0bc63a23ac0f8175e23d82f85d6ee693fbd849de7ad739f0a3622182ad29/fonttools-4.59.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:652159e8214eb4856e8387ebcd6b6bd336ee258cbeb639c8be52005b122b9609", size = 2826546, upload-time = "2025-08-14T16:27:36.783Z" }, - { url = "https://files.pythonhosted.org/packages/e9/46/a3968205590e068fdf60e926be329a207782576cb584d3b7dcd2d2844957/fonttools-4.59.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:43d177cd0e847ea026fedd9f099dc917da136ed8792d142298a252836390c478", size = 2359771, upload-time = "2025-08-14T16:27:39.678Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ff/d14b4c283879e8cb57862d9624a34fe6522b6fcdd46ccbfc58900958794a/fonttools-4.59.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e54437651e1440ee53a95e6ceb6ee440b67a3d348c76f45f4f48de1a5ecab019", size = 4831575, upload-time = "2025-08-14T16:27:41.885Z" }, - { url = "https://files.pythonhosted.org/packages/9c/04/a277d9a584a49d98ca12d3b2c6663bdf333ae97aaa83bd0cdabf7c5a6c84/fonttools-4.59.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6065fdec8ff44c32a483fd44abe5bcdb40dd5e2571a5034b555348f2b3a52cea", size = 5069962, upload-time = "2025-08-14T16:27:44.284Z" }, - { url = "https://files.pythonhosted.org/packages/16/6f/3d2ae69d96c4cdee6dfe7598ca5519a1514487700ca3d7c49c5a1ad65308/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42052b56d176f8b315fbc09259439c013c0cb2109df72447148aeda677599612", size = 4942926, upload-time = "2025-08-14T16:27:46.523Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d3/c17379e0048d03ce26b38e4ab0e9a98280395b00529e093fe2d663ac0658/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bcd52eaa5c4c593ae9f447c1d13e7e4a00ca21d755645efa660b6999425b3c88", size = 4958678, upload-time = "2025-08-14T16:27:48.555Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3f/c5543a1540abdfb4d375e3ebeb84de365ab9b153ec14cb7db05f537dd1e7/fonttools-4.59.1-cp314-cp314t-win32.whl", hash = "sha256:02e4fdf27c550dded10fe038a5981c29f81cb9bc649ff2eaa48e80dab8998f97", size = 2266706, upload-time = "2025-08-14T16:27:50.556Z" }, - { url = "https://files.pythonhosted.org/packages/3e/99/85bff6e674226bc8402f983e365f07e76d990e7220ba72bcc738fef52391/fonttools-4.59.1-cp314-cp314t-win_amd64.whl", hash = "sha256:412a5fd6345872a7c249dac5bcce380393f40c1c316ac07f447bc17d51900922", size = 2329994, upload-time = "2025-08-14T16:27:52.36Z" }, { url = "https://files.pythonhosted.org/packages/0f/64/9d606e66d498917cd7a2ff24f558010d42d6fd4576d9dd57f0bd98333f5a/fonttools-4.59.1-py3-none-any.whl", hash = "sha256:647db657073672a8330608970a984d51573557f328030566521bc03415535042", size = 1130094, upload-time = "2025-08-14T16:28:12.048Z" }, ] @@ -1708,15 +1625,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b", size = 1564759, upload-time = "2025-11-04T12:42:19.395Z" }, { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929", size = 1634288, upload-time = "2025-11-04T12:42:21.174Z" }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b", size = 299685, upload-time = "2025-08-07T13:24:38.824Z" }, - { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0", size = 273586, upload-time = "2025-08-07T13:16:08.004Z" }, - { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f", size = 686346, upload-time = "2025-08-07T13:42:59.944Z" }, - { url = "https://files.pythonhosted.org/packages/c0/aa/687d6b12ffb505a4447567d1f3abea23bd20e73a5bed63871178e0831b7a/greenlet-3.2.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c17b6b34111ea72fc5a4e4beec9711d2226285f0386ea83477cbb97c30a3f3a5", size = 699218, upload-time = "2025-08-07T13:45:30.969Z" }, - { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1", size = 694659, upload-time = "2025-08-07T13:53:17.759Z" }, - { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735", size = 695355, upload-time = "2025-08-07T13:18:34.517Z" }, - { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337", size = 657512, upload-time = "2025-08-07T13:18:33.969Z" }, - { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508, upload-time = "2025-11-04T12:42:23.427Z" }, - { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681", size = 1680760, upload-time = "2025-11-04T12:42:25.341Z" }, - { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01", size = 303425, upload-time = "2025-08-07T13:32:27.59Z" }, ] [[package]] @@ -1788,6 +1696,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, ] +[[package]] +name = "hatchling" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "pathspec" }, + { name = "pluggy" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "trove-classifiers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/8a/cc1debe3514da292094f1c3a700e4ca25442489731ef7c0814358816bb03/hatchling-1.27.0.tar.gz", hash = "sha256:971c296d9819abb3811112fc52c7a9751c8d381898f36533bb16f9791e941fd6", size = 54983, upload-time = "2024-12-15T17:08:11.894Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl", hash = "sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b", size = 75794, upload-time = "2024-12-15T17:08:10.364Z" }, +] + [[package]] name = "hf-xet" version = "1.1.7" @@ -1985,19 +1909,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/46/caa2c1342655f57d8f0f2519774c6d67132205909c65e9aa8255e1d7b4f4/jiter-0.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:28ed2a4c05a1f32ef0e1d24c2611330219fed727dae01789f4a335617634b1ca", size = 318225, upload-time = "2025-05-18T19:04:20.583Z" }, { url = "https://files.pythonhosted.org/packages/43/84/c7d44c75767e18946219ba2d703a5a32ab37b0bc21886a97bc6062e4da42/jiter-0.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a4c418b1ec86a195f1ca69da8b23e8926c752b685af665ce30777233dfe070", size = 350235, upload-time = "2025-05-18T19:04:22.363Z" }, { url = "https://files.pythonhosted.org/packages/01/16/f5a0135ccd968b480daad0e6ab34b0c7c5ba3bc447e5088152696140dcb3/jiter-0.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d7bfed2fe1fe0e4dda6ef682cee888ba444b21e7a6553e03252e4feb6cf0adca", size = 207278, upload-time = "2025-05-18T19:04:23.627Z" }, - { url = "https://files.pythonhosted.org/packages/1c/9b/1d646da42c3de6c2188fdaa15bce8ecb22b635904fc68be025e21249ba44/jiter-0.10.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:5e9251a5e83fab8d87799d3e1a46cb4b7f2919b895c6f4483629ed2446f66522", size = 310866, upload-time = "2025-05-18T19:04:24.891Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0e/26538b158e8a7c7987e94e7aeb2999e2e82b1f9d2e1f6e9874ddf71ebda0/jiter-0.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:023aa0204126fe5b87ccbcd75c8a0d0261b9abdbbf46d55e7ae9f8e22424eeb8", size = 318772, upload-time = "2025-05-18T19:04:26.161Z" }, - { url = "https://files.pythonhosted.org/packages/7b/fb/d302893151caa1c2636d6574d213e4b34e31fd077af6050a9c5cbb42f6fb/jiter-0.10.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c189c4f1779c05f75fc17c0c1267594ed918996a231593a21a5ca5438445216", size = 344534, upload-time = "2025-05-18T19:04:27.495Z" }, - { url = "https://files.pythonhosted.org/packages/01/d8/5780b64a149d74e347c5128d82176eb1e3241b1391ac07935693466d6219/jiter-0.10.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15720084d90d1098ca0229352607cd68256c76991f6b374af96f36920eae13c4", size = 369087, upload-time = "2025-05-18T19:04:28.896Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5b/f235a1437445160e777544f3ade57544daf96ba7e96c1a5b24a6f7ac7004/jiter-0.10.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4f2fb68e5f1cfee30e2b2a09549a00683e0fde4c6a2ab88c94072fc33cb7426", size = 490694, upload-time = "2025-05-18T19:04:30.183Z" }, - { url = "https://files.pythonhosted.org/packages/85/a9/9c3d4617caa2ff89cf61b41e83820c27ebb3f7b5fae8a72901e8cd6ff9be/jiter-0.10.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce541693355fc6da424c08b7edf39a2895f58d6ea17d92cc2b168d20907dee12", size = 388992, upload-time = "2025-05-18T19:04:32.028Z" }, - { url = "https://files.pythonhosted.org/packages/68/b1/344fd14049ba5c94526540af7eb661871f9c54d5f5601ff41a959b9a0bbd/jiter-0.10.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31c50c40272e189d50006ad5c73883caabb73d4e9748a688b216e85a9a9ca3b9", size = 351723, upload-time = "2025-05-18T19:04:33.467Z" }, - { url = "https://files.pythonhosted.org/packages/41/89/4c0e345041186f82a31aee7b9d4219a910df672b9fef26f129f0cda07a29/jiter-0.10.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa3402a2ff9815960e0372a47b75c76979d74402448509ccd49a275fa983ef8a", size = 392215, upload-time = "2025-05-18T19:04:34.827Z" }, - { url = "https://files.pythonhosted.org/packages/55/58/ee607863e18d3f895feb802154a2177d7e823a7103f000df182e0f718b38/jiter-0.10.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:1956f934dca32d7bb647ea21d06d93ca40868b505c228556d3373cbd255ce853", size = 522762, upload-time = "2025-05-18T19:04:36.19Z" }, - { url = "https://files.pythonhosted.org/packages/15/d0/9123fb41825490d16929e73c212de9a42913d68324a8ce3c8476cae7ac9d/jiter-0.10.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:fcedb049bdfc555e261d6f65a6abe1d5ad68825b7202ccb9692636c70fcced86", size = 513427, upload-time = "2025-05-18T19:04:37.544Z" }, - { url = "https://files.pythonhosted.org/packages/d8/b3/2bd02071c5a2430d0b70403a34411fc519c2f227da7b03da9ba6a956f931/jiter-0.10.0-cp314-cp314-win32.whl", hash = "sha256:ac509f7eccca54b2a29daeb516fb95b6f0bd0d0d8084efaf8ed5dfc7b9f0b357", size = 210127, upload-time = "2025-05-18T19:04:38.837Z" }, - { url = "https://files.pythonhosted.org/packages/03/0c/5fe86614ea050c3ecd728ab4035534387cd41e7c1855ef6c031f1ca93e3f/jiter-0.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5ed975b83a2b8639356151cef5c0d597c68376fc4922b45d0eb384ac058cfa00", size = 318527, upload-time = "2025-05-18T19:04:40.612Z" }, - { url = "https://files.pythonhosted.org/packages/b3/4a/4175a563579e884192ba6e81725fc0448b042024419be8d83aa8a80a3f44/jiter-0.10.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa96f2abba33dc77f79b4cf791840230375f9534e5fac927ccceb58c5e604a5", size = 354213, upload-time = "2025-05-18T19:04:41.894Z" }, ] [[package]] @@ -2160,32 +2071,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/43/7320c50e4133575c66e9f7dadead35ab22d7c012a3b09bb35647792b2a6d/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff", size = 2594639, upload-time = "2025-08-10T21:26:57.882Z" }, { url = "https://files.pythonhosted.org/packages/65/d6/17ae4a270d4a987ef8a385b906d2bdfc9fce502d6dc0d3aea865b47f548c/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07", size = 2391741, upload-time = "2025-08-10T21:26:59.237Z" }, { url = "https://files.pythonhosted.org/packages/2a/8f/8f6f491d595a9e5912971f3f863d81baddccc8a4d0c3749d6a0dd9ffc9df/kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c", size = 68646, upload-time = "2025-08-10T21:27:00.52Z" }, - { url = "https://files.pythonhosted.org/packages/6b/32/6cc0fbc9c54d06c2969faa9c1d29f5751a2e51809dd55c69055e62d9b426/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386", size = 123806, upload-time = "2025-08-10T21:27:01.537Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dd/2bfb1d4a4823d92e8cbb420fe024b8d2167f72079b3bb941207c42570bdf/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552", size = 66605, upload-time = "2025-08-10T21:27:03.335Z" }, - { url = "https://files.pythonhosted.org/packages/f7/69/00aafdb4e4509c2ca6064646cba9cd4b37933898f426756adb2cb92ebbed/kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3", size = 64925, upload-time = "2025-08-10T21:27:04.339Z" }, - { url = "https://files.pythonhosted.org/packages/43/dc/51acc6791aa14e5cb6d8a2e28cefb0dc2886d8862795449d021334c0df20/kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58", size = 1472414, upload-time = "2025-08-10T21:27:05.437Z" }, - { url = "https://files.pythonhosted.org/packages/3d/bb/93fa64a81db304ac8a246f834d5094fae4b13baf53c839d6bb6e81177129/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4", size = 1281272, upload-time = "2025-08-10T21:27:07.063Z" }, - { url = "https://files.pythonhosted.org/packages/70/e6/6df102916960fb8d05069d4bd92d6d9a8202d5a3e2444494e7cd50f65b7a/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df", size = 1298578, upload-time = "2025-08-10T21:27:08.452Z" }, - { url = "https://files.pythonhosted.org/packages/7c/47/e142aaa612f5343736b087864dbaebc53ea8831453fb47e7521fa8658f30/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6", size = 1345607, upload-time = "2025-08-10T21:27:10.125Z" }, - { url = "https://files.pythonhosted.org/packages/54/89/d641a746194a0f4d1a3670fb900d0dbaa786fb98341056814bc3f058fa52/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5", size = 2230150, upload-time = "2025-08-10T21:27:11.484Z" }, - { url = "https://files.pythonhosted.org/packages/aa/6b/5ee1207198febdf16ac11f78c5ae40861b809cbe0e6d2a8d5b0b3044b199/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf", size = 2325979, upload-time = "2025-08-10T21:27:12.917Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ff/b269eefd90f4ae14dcc74973d5a0f6d28d3b9bb1afd8c0340513afe6b39a/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5", size = 2491456, upload-time = "2025-08-10T21:27:14.353Z" }, - { url = "https://files.pythonhosted.org/packages/fc/d4/10303190bd4d30de547534601e259a4fbf014eed94aae3e5521129215086/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce", size = 2294621, upload-time = "2025-08-10T21:27:15.808Z" }, - { url = "https://files.pythonhosted.org/packages/28/e0/a9a90416fce5c0be25742729c2ea52105d62eda6c4be4d803c2a7be1fa50/kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7", size = 75417, upload-time = "2025-08-10T21:27:17.436Z" }, - { url = "https://files.pythonhosted.org/packages/1f/10/6949958215b7a9a264299a7db195564e87900f709db9245e4ebdd3c70779/kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c", size = 66582, upload-time = "2025-08-10T21:27:18.436Z" }, - { url = "https://files.pythonhosted.org/packages/ec/79/60e53067903d3bc5469b369fe0dfc6b3482e2133e85dae9daa9527535991/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548", size = 126514, upload-time = "2025-08-10T21:27:19.465Z" }, - { url = "https://files.pythonhosted.org/packages/25/d1/4843d3e8d46b072c12a38c97c57fab4608d36e13fe47d47ee96b4d61ba6f/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d", size = 67905, upload-time = "2025-08-10T21:27:20.51Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ae/29ffcbd239aea8b93108de1278271ae764dfc0d803a5693914975f200596/kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c", size = 66399, upload-time = "2025-08-10T21:27:21.496Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ae/d7ba902aa604152c2ceba5d352d7b62106bedbccc8e95c3934d94472bfa3/kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122", size = 1582197, upload-time = "2025-08-10T21:27:22.604Z" }, - { url = "https://files.pythonhosted.org/packages/f2/41/27c70d427eddb8bc7e4f16420a20fefc6f480312122a59a959fdfe0445ad/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64", size = 1390125, upload-time = "2025-08-10T21:27:24.036Z" }, - { url = "https://files.pythonhosted.org/packages/41/42/b3799a12bafc76d962ad69083f8b43b12bf4fe78b097b12e105d75c9b8f1/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134", size = 1402612, upload-time = "2025-08-10T21:27:25.773Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b5/a210ea073ea1cfaca1bb5c55a62307d8252f531beb364e18aa1e0888b5a0/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370", size = 1453990, upload-time = "2025-08-10T21:27:27.089Z" }, - { url = "https://files.pythonhosted.org/packages/5f/ce/a829eb8c033e977d7ea03ed32fb3c1781b4fa0433fbadfff29e39c676f32/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21", size = 2331601, upload-time = "2025-08-10T21:27:29.343Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4b/b5e97eb142eb9cd0072dacfcdcd31b1c66dc7352b0f7c7255d339c0edf00/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a", size = 2422041, upload-time = "2025-08-10T21:27:30.754Z" }, - { url = "https://files.pythonhosted.org/packages/40/be/8eb4cd53e1b85ba4edc3a9321666f12b83113a178845593307a3e7891f44/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f", size = 2594897, upload-time = "2025-08-10T21:27:32.803Z" }, - { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835, upload-time = "2025-08-10T21:27:34.23Z" }, - { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988, upload-time = "2025-08-10T21:27:35.587Z" }, - { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260, upload-time = "2025-08-10T21:27:36.606Z" }, { url = "https://files.pythonhosted.org/packages/a2/63/fde392691690f55b38d5dd7b3710f5353bf7a8e52de93a22968801ab8978/kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4d1d9e582ad4d63062d34077a9a1e9f3c34088a2ec5135b1f7190c07cf366527", size = 60183, upload-time = "2025-08-10T21:27:37.669Z" }, { url = "https://files.pythonhosted.org/packages/27/b1/6aad34edfdb7cced27f371866f211332bba215bfd918ad3322a58f480d8b/kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:deed0c7258ceb4c44ad5ec7d9918f9f14fd05b2be86378d86cf50e63d1e7b771", size = 58675, upload-time = "2025-08-10T21:27:39.031Z" }, { url = "https://files.pythonhosted.org/packages/9d/1a/23d855a702bb35a76faed5ae2ba3de57d323f48b1f6b17ee2176c4849463/kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a590506f303f512dff6b7f75fd2fd18e16943efee932008fe7140e5fa91d80e", size = 80277, upload-time = "2025-08-10T21:27:40.129Z" }, @@ -2642,20 +2527,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/89/11/9c66f6a990e27bb9aa023f7988d2d5809cb98aa39c09cbf20fba75a542ef/matplotlib-3.10.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52c6573dfcb7726a9907b482cd5b92e6b5499b284ffacb04ffbfe06b3e568124", size = 9573917, upload-time = "2025-07-31T18:08:47.038Z" }, { url = "https://files.pythonhosted.org/packages/b3/69/8b49394de92569419e5e05e82e83df9b749a0ff550d07631ea96ed2eb35a/matplotlib-3.10.5-cp313-cp313t-win_amd64.whl", hash = "sha256:a23193db2e9d64ece69cac0c8231849db7dd77ce59c7b89948cf9d0ce655a3ce", size = 8181034, upload-time = "2025-07-31T18:08:48.943Z" }, { url = "https://files.pythonhosted.org/packages/47/23/82dc435bb98a2fc5c20dffcac8f0b083935ac28286413ed8835df40d0baa/matplotlib-3.10.5-cp313-cp313t-win_arm64.whl", hash = "sha256:56da3b102cf6da2776fef3e71cd96fcf22103a13594a18ac9a9b31314e0be154", size = 8023337, upload-time = "2025-07-31T18:08:50.791Z" }, - { url = "https://files.pythonhosted.org/packages/ac/e0/26b6cfde31f5383503ee45dcb7e691d45dadf0b3f54639332b59316a97f8/matplotlib-3.10.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:96ef8f5a3696f20f55597ffa91c28e2e73088df25c555f8d4754931515512715", size = 8253591, upload-time = "2025-07-31T18:08:53.254Z" }, - { url = "https://files.pythonhosted.org/packages/c1/89/98488c7ef7ea20ea659af7499628c240a608b337af4be2066d644cfd0a0f/matplotlib-3.10.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:77fab633e94b9da60512d4fa0213daeb76d5a7b05156840c4fd0399b4b818837", size = 8112566, upload-time = "2025-07-31T18:08:55.116Z" }, - { url = "https://files.pythonhosted.org/packages/52/67/42294dfedc82aea55e1a767daf3263aacfb5a125f44ba189e685bab41b6f/matplotlib-3.10.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27f52634315e96b1debbfdc5c416592edcd9c4221bc2f520fd39c33db5d9f202", size = 9513281, upload-time = "2025-07-31T18:08:56.885Z" }, - { url = "https://files.pythonhosted.org/packages/e7/68/f258239e0cf34c2cbc816781c7ab6fca768452e6bf1119aedd2bd4a882a3/matplotlib-3.10.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:525f6e28c485c769d1f07935b660c864de41c37fd716bfa64158ea646f7084bb", size = 9780873, upload-time = "2025-07-31T18:08:59.241Z" }, - { url = "https://files.pythonhosted.org/packages/89/64/f4881554006bd12e4558bd66778bdd15d47b00a1f6c6e8b50f6208eda4b3/matplotlib-3.10.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1f5f3ec4c191253c5f2b7c07096a142c6a1c024d9f738247bfc8e3f9643fc975", size = 9568954, upload-time = "2025-07-31T18:09:01.244Z" }, - { url = "https://files.pythonhosted.org/packages/06/f8/42779d39c3f757e1f012f2dda3319a89fb602bd2ef98ce8faf0281f4febd/matplotlib-3.10.5-cp314-cp314-win_amd64.whl", hash = "sha256:707f9c292c4cd4716f19ab8a1f93f26598222cd931e0cd98fbbb1c5994bf7667", size = 8237465, upload-time = "2025-07-31T18:09:03.206Z" }, - { url = "https://files.pythonhosted.org/packages/cf/f8/153fd06b5160f0cd27c8b9dd797fcc9fb56ac6a0ebf3c1f765b6b68d3c8a/matplotlib-3.10.5-cp314-cp314-win_arm64.whl", hash = "sha256:21a95b9bf408178d372814de7baacd61c712a62cae560b5e6f35d791776f6516", size = 8108898, upload-time = "2025-07-31T18:09:05.231Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ee/c4b082a382a225fe0d2a73f1f57cf6f6f132308805b493a54c8641006238/matplotlib-3.10.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a6b310f95e1102a8c7c817ef17b60ee5d1851b8c71b63d9286b66b177963039e", size = 8295636, upload-time = "2025-07-31T18:09:07.306Z" }, - { url = "https://files.pythonhosted.org/packages/30/73/2195fa2099718b21a20da82dfc753bf2af58d596b51aefe93e359dd5915a/matplotlib-3.10.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:94986a242747a0605cb3ff1cb98691c736f28a59f8ffe5175acaeb7397c49a5a", size = 8158575, upload-time = "2025-07-31T18:09:09.083Z" }, - { url = "https://files.pythonhosted.org/packages/f6/e9/a08cdb34618a91fa08f75e6738541da5cacde7c307cea18ff10f0d03fcff/matplotlib-3.10.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ff10ea43288f0c8bab608a305dc6c918cc729d429c31dcbbecde3b9f4d5b569", size = 9522815, upload-time = "2025-07-31T18:09:11.191Z" }, - { url = "https://files.pythonhosted.org/packages/4e/bb/34d8b7e0d1bb6d06ef45db01dfa560d5a67b1c40c0b998ce9ccde934bb09/matplotlib-3.10.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f6adb644c9d040ffb0d3434e440490a66cf73dbfa118a6f79cd7568431f7a012", size = 9783514, upload-time = "2025-07-31T18:09:13.307Z" }, - { url = "https://files.pythonhosted.org/packages/12/09/d330d1e55dcca2e11b4d304cc5227f52e2512e46828d6249b88e0694176e/matplotlib-3.10.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4fa40a8f98428f789a9dcacd625f59b7bc4e3ef6c8c7c80187a7a709475cf592", size = 9573932, upload-time = "2025-07-31T18:09:15.335Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3b/f70258ac729aa004aca673800a53a2b0a26d49ca1df2eaa03289a1c40f81/matplotlib-3.10.5-cp314-cp314t-win_amd64.whl", hash = "sha256:95672a5d628b44207aab91ec20bf59c26da99de12b88f7e0b1fb0a84a86ff959", size = 8322003, upload-time = "2025-07-31T18:09:17.416Z" }, - { url = "https://files.pythonhosted.org/packages/5b/60/3601f8ce6d76a7c81c7f25a0e15fde0d6b66226dd187aa6d2838e6374161/matplotlib-3.10.5-cp314-cp314t-win_arm64.whl", hash = "sha256:2efaf97d72629e74252e0b5e3c46813e9eeaa94e011ecf8084a971a31a97f40b", size = 8153849, upload-time = "2025-07-31T18:09:19.673Z" }, { url = "https://files.pythonhosted.org/packages/e4/eb/7d4c5de49eb78294e1a8e2be8a6ecff8b433e921b731412a56cd1abd3567/matplotlib-3.10.5-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b5fa2e941f77eb579005fb804026f9d0a1082276118d01cc6051d0d9626eaa7f", size = 8222360, upload-time = "2025-07-31T18:09:21.813Z" }, { url = "https://files.pythonhosted.org/packages/16/8a/e435db90927b66b16d69f8f009498775f4469f8de4d14b87856965e58eba/matplotlib-3.10.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1fc0d2a3241cdcb9daaca279204a3351ce9df3c0e7e621c7e04ec28aaacaca30", size = 8087462, upload-time = "2025-07-31T18:09:23.504Z" }, { url = "https://files.pythonhosted.org/packages/0b/dd/06c0e00064362f5647f318e00b435be2ff76a1bdced97c5eaf8347311fbe/matplotlib-3.10.5-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8dee65cb1424b7dc982fe87895b5613d4e691cc57117e8af840da0148ca6c1d7", size = 8659802, upload-time = "2025-07-31T18:09:25.256Z" }, @@ -2904,12 +2775,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9f/0f/478b4dce1cb4f43cf0f0d00fba3030b21ca04a01b74d1cd272a528cf446f/mypy-1.17.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:099b9a5da47de9e2cb5165e581f158e854d9e19d2e96b6698c0d64de911dd849", size = 12744296, upload-time = "2025-07-31T07:53:03.896Z" }, { url = "https://files.pythonhosted.org/packages/ca/70/afa5850176379d1b303f992a828de95fc14487429a7139a4e0bdd17a8279/mypy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ffadfbe6994d724c5a1bb6123a7d27dd68fc9c059561cd33b664a79578e14", size = 12914657, upload-time = "2025-07-31T07:54:08.576Z" }, { url = "https://files.pythonhosted.org/packages/53/f9/4a83e1c856a3d9c8f6edaa4749a4864ee98486e9b9dbfbc93842891029c2/mypy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:9a2b7d9180aed171f033c9f2fc6c204c1245cf60b0cb61cf2e7acc24eea78e0a", size = 9593320, upload-time = "2025-07-31T07:53:01.341Z" }, - { url = "https://files.pythonhosted.org/packages/38/56/79c2fac86da57c7d8c48622a05873eaab40b905096c33597462713f5af90/mypy-1.17.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:15a83369400454c41ed3a118e0cc58bd8123921a602f385cb6d6ea5df050c733", size = 11040037, upload-time = "2025-07-31T07:54:10.942Z" }, - { url = "https://files.pythonhosted.org/packages/4d/c3/adabe6ff53638e3cad19e3547268482408323b1e68bf082c9119000cd049/mypy-1.17.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55b918670f692fc9fba55c3298d8a3beae295c5cded0a55dccdc5bbead814acd", size = 10131550, upload-time = "2025-07-31T07:53:41.307Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c5/2e234c22c3bdeb23a7817af57a58865a39753bde52c74e2c661ee0cfc640/mypy-1.17.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62761474061feef6f720149d7ba876122007ddc64adff5ba6f374fda35a018a0", size = 11872963, upload-time = "2025-07-31T07:53:16.878Z" }, - { url = "https://files.pythonhosted.org/packages/ab/26/c13c130f35ca8caa5f2ceab68a247775648fdcd6c9a18f158825f2bc2410/mypy-1.17.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c49562d3d908fd49ed0938e5423daed8d407774a479b595b143a3d7f87cdae6a", size = 12710189, upload-time = "2025-07-31T07:54:01.962Z" }, - { url = "https://files.pythonhosted.org/packages/82/df/c7d79d09f6de8383fe800521d066d877e54d30b4fb94281c262be2df84ef/mypy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:397fba5d7616a5bc60b45c7ed204717eaddc38f826e3645402c426057ead9a91", size = 12900322, upload-time = "2025-07-31T07:53:10.551Z" }, - { url = "https://files.pythonhosted.org/packages/b8/98/3d5a48978b4f708c55ae832619addc66d677f6dc59f3ebad71bae8285ca6/mypy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:9d6b20b97d373f41617bd0708fd46aa656059af57f2ef72aa8c7d6a2b73b74ed", size = 9751879, upload-time = "2025-07-31T07:52:56.683Z" }, { url = "https://files.pythonhosted.org/packages/1d/f3/8fcd2af0f5b806f6cf463efaffd3c9548a28f84220493ecd38d127b6b66d/mypy-1.17.1-py3-none-any.whl", hash = "sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9", size = 2283411, upload-time = "2025-07-31T07:53:24.664Z" }, ] @@ -3816,17 +3681,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9c/5b/e398449080ce6b4c8fcadad57e51fa16f65768e1b142ba90b23ac5d10801/orjson-3.11.2-cp313-cp313-win32.whl", hash = "sha256:51dc033df2e4a4c91c0ba4f43247de99b3cbf42ee7a42ee2b2b2f76c8b2f2cb5", size = 124402, upload-time = "2025-08-12T15:11:44.036Z" }, { url = "https://files.pythonhosted.org/packages/b3/66/429e4608e124debfc4790bfc37131f6958e59510ba3b542d5fc163be8e5f/orjson-3.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:29d91d74942b7436f29b5d1ed9bcfc3f6ef2d4f7c4997616509004679936650d", size = 119498, upload-time = "2025-08-12T15:11:45.864Z" }, { url = "https://files.pythonhosted.org/packages/7b/04/f8b5f317cce7ad3580a9ad12d7e2df0714dfa8a83328ecddd367af802f5b/orjson-3.11.2-cp313-cp313-win_arm64.whl", hash = "sha256:4ca4fb5ac21cd1e48028d4f708b1bb13e39c42d45614befd2ead004a8bba8535", size = 114051, upload-time = "2025-08-12T15:11:47.555Z" }, - { url = "https://files.pythonhosted.org/packages/74/83/2c363022b26c3c25b3708051a19d12f3374739bb81323f05b284392080c0/orjson-3.11.2-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3dcba7101ea6a8d4ef060746c0f2e7aa8e2453a1012083e1ecce9726d7554cb7", size = 226406, upload-time = "2025-08-12T15:11:49.445Z" }, - { url = "https://files.pythonhosted.org/packages/b0/a7/aa3c973de0b33fc93b4bd71691665ffdfeae589ea9d0625584ab10a7d0f5/orjson-3.11.2-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:15d17bdb76a142e1f55d91913e012e6e6769659daa6bfef3ef93f11083137e81", size = 115788, upload-time = "2025-08-12T15:11:50.992Z" }, - { url = "https://files.pythonhosted.org/packages/ef/f2/e45f233dfd09fdbb052ec46352363dca3906618e1a2b264959c18f809d0b/orjson-3.11.2-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:53c9e81768c69d4b66b8876ec3c8e431c6e13477186d0db1089d82622bccd19f", size = 111318, upload-time = "2025-08-12T15:11:52.495Z" }, - { url = "https://files.pythonhosted.org/packages/3e/23/cf5a73c4da6987204cbbf93167f353ff0c5013f7c5e5ef845d4663a366da/orjson-3.11.2-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:d4f13af59a7b84c1ca6b8a7ab70d608f61f7c44f9740cd42409e6ae7b6c8d8b7", size = 121231, upload-time = "2025-08-12T15:11:53.941Z" }, - { url = "https://files.pythonhosted.org/packages/40/1d/47468a398ae68a60cc21e599144e786e035bb12829cb587299ecebc088f1/orjson-3.11.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bde64aa469b5ee46cc960ed241fae3721d6a8801dacb2ca3466547a2535951e4", size = 119204, upload-time = "2025-08-12T15:11:55.409Z" }, - { url = "https://files.pythonhosted.org/packages/4d/d9/f99433d89b288b5bc8836bffb32a643f805e673cf840ef8bab6e73ced0d1/orjson-3.11.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:b5ca86300aeb383c8fa759566aca065878d3d98c3389d769b43f0a2e84d52c5f", size = 392237, upload-time = "2025-08-12T15:11:57.18Z" }, - { url = "https://files.pythonhosted.org/packages/d4/dc/1b9d80d40cebef603325623405136a29fb7d08c877a728c0943dd066c29a/orjson-3.11.2-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:24e32a558ebed73a6a71c8f1cbc163a7dd5132da5270ff3d8eeb727f4b6d1bc7", size = 134578, upload-time = "2025-08-12T15:11:58.844Z" }, - { url = "https://files.pythonhosted.org/packages/45/b3/72e7a4c5b6485ef4e83ef6aba7f1dd041002bad3eb5d1d106ca5b0fc02c6/orjson-3.11.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e36319a5d15b97e4344110517450396845cc6789aed712b1fbf83c1bd95792f6", size = 123799, upload-time = "2025-08-12T15:12:00.352Z" }, - { url = "https://files.pythonhosted.org/packages/c8/3e/a3d76b392e7acf9b34dc277171aad85efd6accc75089bb35b4c614990ea9/orjson-3.11.2-cp314-cp314-win32.whl", hash = "sha256:40193ada63fab25e35703454d65b6afc71dbc65f20041cb46c6d91709141ef7f", size = 124461, upload-time = "2025-08-12T15:12:01.854Z" }, - { url = "https://files.pythonhosted.org/packages/fb/e3/75c6a596ff8df9e4a5894813ff56695f0a218e6ea99420b4a645c4f7795d/orjson-3.11.2-cp314-cp314-win_amd64.whl", hash = "sha256:7c8ac5f6b682d3494217085cf04dadae66efee45349ad4ee2a1da3c97e2305a8", size = 119494, upload-time = "2025-08-12T15:12:03.337Z" }, - { url = "https://files.pythonhosted.org/packages/5b/3d/9e74742fc261c5ca473c96bb3344d03995869e1dc6402772c60afb97736a/orjson-3.11.2-cp314-cp314-win_arm64.whl", hash = "sha256:21cf261e8e79284242e4cb1e5924df16ae28255184aafeff19be1405f6d33f67", size = 114046, upload-time = "2025-08-12T15:12:04.87Z" }, ] [[package]] @@ -3990,28 +3844,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload-time = "2025-07-01T09:15:17.429Z" }, - { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload-time = "2025-07-01T09:15:19.423Z" }, - { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload-time = "2025-07-03T13:10:38.404Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload-time = "2025-07-03T13:10:44.987Z" }, - { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload-time = "2025-07-01T09:15:21.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload-time = "2025-07-01T09:15:23.186Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload-time = "2025-07-01T09:15:25.1Z" }, - { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload-time = "2025-07-01T09:15:27.378Z" }, - { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload-time = "2025-07-01T09:15:29.294Z" }, - { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload-time = "2025-07-01T09:15:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload-time = "2025-07-01T09:15:33.328Z" }, - { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload-time = "2025-07-01T09:15:35.194Z" }, - { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload-time = "2025-07-01T09:15:37.114Z" }, - { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload-time = "2025-07-03T13:10:50.248Z" }, - { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload-time = "2025-07-03T13:10:56.432Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload-time = "2025-07-01T09:15:39.436Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload-time = "2025-07-01T09:15:41.269Z" }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload-time = "2025-07-01T09:15:43.13Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload-time = "2025-07-01T09:15:44.937Z" }, - { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" }, - { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" }, - { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" }, { url = "https://files.pythonhosted.org/packages/6f/8b/209bd6b62ce8367f47e68a218bffac88888fdf2c9fcf1ecadc6c3ec1ebc7/pillow-11.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967", size = 5270556, upload-time = "2025-07-01T09:16:09.961Z" }, { url = "https://files.pythonhosted.org/packages/2e/e6/231a0b76070c2cfd9e260a7a5b504fb72da0a95279410fa7afd99d9751d6/pillow-11.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe", size = 4654625, upload-time = "2025-07-01T09:16:11.913Z" }, { url = "https://files.pythonhosted.org/packages/13/f4/10cf94fda33cb12765f2397fc285fa6d8eb9c29de7f3185165b702fc7386/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", size = 4874207, upload-time = "2025-07-03T13:11:10.201Z" }, @@ -4581,9 +4413,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, ] [[package]] @@ -4707,20 +4536,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/47/80/2f46677c0b3c2b723b2c358d19f9346e714113865da0f5f736ca1a883bde/regex-2025.7.34-cp313-cp313-win32.whl", hash = "sha256:da7507d083ee33ccea1310447410c27ca11fb9ef18c95899ca57ff60a7e4d8f1", size = 264401, upload-time = "2025-07-31T00:20:15.233Z" }, { url = "https://files.pythonhosted.org/packages/be/fa/917d64dd074682606a003cba33585c28138c77d848ef72fc77cbb1183849/regex-2025.7.34-cp313-cp313-win_amd64.whl", hash = "sha256:9d644de5520441e5f7e2db63aec2748948cc39ed4d7a87fd5db578ea4043d997", size = 275368, upload-time = "2025-07-31T00:20:16.711Z" }, { url = "https://files.pythonhosted.org/packages/65/cd/f94383666704170a2154a5df7b16be28f0c27a266bffcd843e58bc84120f/regex-2025.7.34-cp313-cp313-win_arm64.whl", hash = "sha256:7bf1c5503a9f2cbd2f52d7e260acb3131b07b6273c470abb78568174fe6bde3f", size = 268482, upload-time = "2025-07-31T00:20:18.189Z" }, - { url = "https://files.pythonhosted.org/packages/ac/23/6376f3a23cf2f3c00514b1cdd8c990afb4dfbac3cb4a68b633c6b7e2e307/regex-2025.7.34-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:8283afe7042d8270cecf27cca558873168e771183d4d593e3c5fe5f12402212a", size = 485385, upload-time = "2025-07-31T00:20:19.692Z" }, - { url = "https://files.pythonhosted.org/packages/73/5b/6d4d3a0b4d312adbfd6d5694c8dddcf1396708976dd87e4d00af439d962b/regex-2025.7.34-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6c053f9647e3421dd2f5dff8172eb7b4eec129df9d1d2f7133a4386319b47435", size = 289788, upload-time = "2025-07-31T00:20:21.941Z" }, - { url = "https://files.pythonhosted.org/packages/92/71/5862ac9913746e5054d01cb9fb8125b3d0802c0706ef547cae1e7f4428fa/regex-2025.7.34-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a16dd56bbcb7d10e62861c3cd000290ddff28ea142ffb5eb3470f183628011ac", size = 286136, upload-time = "2025-07-31T00:20:26.146Z" }, - { url = "https://files.pythonhosted.org/packages/27/df/5b505dc447eb71278eba10d5ec940769ca89c1af70f0468bfbcb98035dc2/regex-2025.7.34-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69c593ff5a24c0d5c1112b0df9b09eae42b33c014bdca7022d6523b210b69f72", size = 797753, upload-time = "2025-07-31T00:20:27.919Z" }, - { url = "https://files.pythonhosted.org/packages/86/38/3e3dc953d13998fa047e9a2414b556201dbd7147034fbac129392363253b/regex-2025.7.34-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98d0ce170fcde1a03b5df19c5650db22ab58af375aaa6ff07978a85c9f250f0e", size = 863263, upload-time = "2025-07-31T00:20:29.803Z" }, - { url = "https://files.pythonhosted.org/packages/68/e5/3ff66b29dde12f5b874dda2d9dec7245c2051f2528d8c2a797901497f140/regex-2025.7.34-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d72765a4bff8c43711d5b0f5b452991a9947853dfa471972169b3cc0ba1d0751", size = 910103, upload-time = "2025-07-31T00:20:31.313Z" }, - { url = "https://files.pythonhosted.org/packages/9e/fe/14176f2182125977fba3711adea73f472a11f3f9288c1317c59cd16ad5e6/regex-2025.7.34-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4494f8fd95a77eb434039ad8460e64d57baa0434f1395b7da44015bef650d0e4", size = 801709, upload-time = "2025-07-31T00:20:33.323Z" }, - { url = "https://files.pythonhosted.org/packages/5a/0d/80d4e66ed24f1ba876a9e8e31b709f9fd22d5c266bf5f3ab3c1afe683d7d/regex-2025.7.34-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4f42b522259c66e918a0121a12429b2abcf696c6f967fa37bdc7b72e61469f98", size = 786726, upload-time = "2025-07-31T00:20:35.252Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/c3ebb30e04a56c046f5c85179dc173818551037daae2c0c940c7b19152cb/regex-2025.7.34-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:aaef1f056d96a0a5d53ad47d019d5b4c66fe4be2da87016e0d43b7242599ffc7", size = 857306, upload-time = "2025-07-31T00:20:37.12Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b2/a4dc5d8b14f90924f27f0ac4c4c4f5e195b723be98adecc884f6716614b6/regex-2025.7.34-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:656433e5b7dccc9bc0da6312da8eb897b81f5e560321ec413500e5367fcd5d47", size = 848494, upload-time = "2025-07-31T00:20:38.818Z" }, - { url = "https://files.pythonhosted.org/packages/0d/21/9ac6e07a4c5e8646a90b56b61f7e9dac11ae0747c857f91d3d2bc7c241d9/regex-2025.7.34-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e91eb2c62c39705e17b4d42d4b86c4e86c884c0d15d9c5a47d0835f8387add8e", size = 787850, upload-time = "2025-07-31T00:20:40.478Z" }, - { url = "https://files.pythonhosted.org/packages/be/6c/d51204e28e7bc54f9a03bb799b04730d7e54ff2718862b8d4e09e7110a6a/regex-2025.7.34-cp314-cp314-win32.whl", hash = "sha256:f978ddfb6216028c8f1d6b0f7ef779949498b64117fc35a939022f67f810bdcb", size = 269730, upload-time = "2025-07-31T00:20:42.253Z" }, - { url = "https://files.pythonhosted.org/packages/74/52/a7e92d02fa1fdef59d113098cb9f02c5d03289a0e9f9e5d4d6acccd10677/regex-2025.7.34-cp314-cp314-win_amd64.whl", hash = "sha256:4b7dc33b9b48fb37ead12ffc7bdb846ac72f99a80373c4da48f64b373a7abeae", size = 278640, upload-time = "2025-07-31T00:20:44.42Z" }, - { url = "https://files.pythonhosted.org/packages/d1/78/a815529b559b1771080faa90c3ab401730661f99d495ab0071649f139ebd/regex-2025.7.34-cp314-cp314-win_arm64.whl", hash = "sha256:4b8c4d39f451e64809912c82392933d80fe2e4a87eeef8859fcc5380d0173c64", size = 271757, upload-time = "2025-07-31T00:20:46.355Z" }, ] [[package]] @@ -4868,35 +4683,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/03/a3dd6470fc76499959b00ae56295b76b4bdf7c6ffc60d62006b1217567e1/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:42894616da0fc0dcb2ec08a77896c3f56e9cb2f4b66acd76fc8992c3557ceb1c", size = 554211, upload-time = "2025-08-07T08:24:40.6Z" }, { url = "https://files.pythonhosted.org/packages/bf/d1/ee5fd1be395a07423ac4ca0bcc05280bf95db2b155d03adefeb47d5ebf7e/rpds_py-0.27.0-cp313-cp313t-win32.whl", hash = "sha256:b1fef1f13c842a39a03409e30ca0bf87b39a1e2a305a9924deadb75a43105d23", size = 216624, upload-time = "2025-08-07T08:24:42.204Z" }, { url = "https://files.pythonhosted.org/packages/1c/94/4814c4c858833bf46706f87349c37ca45e154da7dbbec9ff09f1abeb08cc/rpds_py-0.27.0-cp313-cp313t-win_amd64.whl", hash = "sha256:183f5e221ba3e283cd36fdfbe311d95cd87699a083330b4f792543987167eff1", size = 230007, upload-time = "2025-08-07T08:24:43.329Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a5/8fffe1c7dc7c055aa02df310f9fb71cfc693a4d5ccc5de2d3456ea5fb022/rpds_py-0.27.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:f3cd110e02c5bf17d8fb562f6c9df5c20e73029d587cf8602a2da6c5ef1e32cb", size = 362595, upload-time = "2025-08-07T08:24:44.478Z" }, - { url = "https://files.pythonhosted.org/packages/bc/c7/4e4253fd2d4bb0edbc0b0b10d9f280612ca4f0f990e3c04c599000fe7d71/rpds_py-0.27.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8d0e09cf4863c74106b5265c2c310f36146e2b445ff7b3018a56799f28f39f6f", size = 347252, upload-time = "2025-08-07T08:24:45.678Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c8/3d1a954d30f0174dd6baf18b57c215da03cf7846a9d6e0143304e784cddc/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f689ab822f9b5eb6dfc69893b4b9366db1d2420f7db1f6a2adf2a9ca15ad64", size = 384886, upload-time = "2025-08-07T08:24:46.86Z" }, - { url = "https://files.pythonhosted.org/packages/e0/52/3c5835f2df389832b28f9276dd5395b5a965cea34226e7c88c8fbec2093c/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e36c80c49853b3ffda7aa1831bf175c13356b210c73128c861f3aa93c3cc4015", size = 399716, upload-time = "2025-08-07T08:24:48.174Z" }, - { url = "https://files.pythonhosted.org/packages/40/73/176e46992461a1749686a2a441e24df51ff86b99c2d34bf39f2a5273b987/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6de6a7f622860af0146cb9ee148682ff4d0cea0b8fd3ad51ce4d40efb2f061d0", size = 517030, upload-time = "2025-08-07T08:24:49.52Z" }, - { url = "https://files.pythonhosted.org/packages/79/2a/7266c75840e8c6e70effeb0d38922a45720904f2cd695e68a0150e5407e2/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4045e2fc4b37ec4b48e8907a5819bdd3380708c139d7cc358f03a3653abedb89", size = 408448, upload-time = "2025-08-07T08:24:50.727Z" }, - { url = "https://files.pythonhosted.org/packages/e6/5f/a7efc572b8e235093dc6cf39f4dbc8a7f08e65fdbcec7ff4daeb3585eef1/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da162b718b12c4219eeeeb68a5b7552fbc7aadedf2efee440f88b9c0e54b45d", size = 387320, upload-time = "2025-08-07T08:24:52.004Z" }, - { url = "https://files.pythonhosted.org/packages/a2/eb/9ff6bc92efe57cf5a2cb74dee20453ba444b6fdc85275d8c99e0d27239d1/rpds_py-0.27.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:0665be515767dc727ffa5f74bd2ef60b0ff85dad6bb8f50d91eaa6b5fb226f51", size = 407414, upload-time = "2025-08-07T08:24:53.664Z" }, - { url = "https://files.pythonhosted.org/packages/fb/bd/3b9b19b00d5c6e1bd0f418c229ab0f8d3b110ddf7ec5d9d689ef783d0268/rpds_py-0.27.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:203f581accef67300a942e49a37d74c12ceeef4514874c7cede21b012613ca2c", size = 420766, upload-time = "2025-08-07T08:24:55.917Z" }, - { url = "https://files.pythonhosted.org/packages/17/6b/521a7b1079ce16258c70805166e3ac6ec4ee2139d023fe07954dc9b2d568/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7873b65686a6471c0037139aa000d23fe94628e0daaa27b6e40607c90e3f5ec4", size = 562409, upload-time = "2025-08-07T08:24:57.17Z" }, - { url = "https://files.pythonhosted.org/packages/8b/bf/65db5bfb14ccc55e39de8419a659d05a2a9cd232f0a699a516bb0991da7b/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:249ab91ceaa6b41abc5f19513cb95b45c6f956f6b89f1fe3d99c81255a849f9e", size = 590793, upload-time = "2025-08-07T08:24:58.388Z" }, - { url = "https://files.pythonhosted.org/packages/db/b8/82d368b378325191ba7aae8f40f009b78057b598d4394d1f2cdabaf67b3f/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2f184336bc1d6abfaaa1262ed42739c3789b1e3a65a29916a615307d22ffd2e", size = 558178, upload-time = "2025-08-07T08:24:59.756Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ff/f270bddbfbc3812500f8131b1ebbd97afd014cd554b604a3f73f03133a36/rpds_py-0.27.0-cp314-cp314-win32.whl", hash = "sha256:d3c622c39f04d5751408f5b801ecb527e6e0a471b367f420a877f7a660d583f6", size = 222355, upload-time = "2025-08-07T08:25:01.027Z" }, - { url = "https://files.pythonhosted.org/packages/bf/20/fdab055b1460c02ed356a0e0b0a78c1dd32dc64e82a544f7b31c9ac643dc/rpds_py-0.27.0-cp314-cp314-win_amd64.whl", hash = "sha256:cf824aceaeffff029ccfba0da637d432ca71ab21f13e7f6f5179cd88ebc77a8a", size = 234007, upload-time = "2025-08-07T08:25:02.268Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a8/694c060005421797a3be4943dab8347c76c2b429a9bef68fb2c87c9e70c7/rpds_py-0.27.0-cp314-cp314-win_arm64.whl", hash = "sha256:86aca1616922b40d8ac1b3073a1ead4255a2f13405e5700c01f7c8d29a03972d", size = 223527, upload-time = "2025-08-07T08:25:03.45Z" }, - { url = "https://files.pythonhosted.org/packages/1e/f9/77f4c90f79d2c5ca8ce6ec6a76cb4734ee247de6b3a4f337e289e1f00372/rpds_py-0.27.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:341d8acb6724c0c17bdf714319c393bb27f6d23d39bc74f94221b3e59fc31828", size = 359469, upload-time = "2025-08-07T08:25:04.648Z" }, - { url = "https://files.pythonhosted.org/packages/c0/22/b97878d2f1284286fef4172069e84b0b42b546ea7d053e5fb7adb9ac6494/rpds_py-0.27.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6b96b0b784fe5fd03beffff2b1533dc0d85e92bab8d1b2c24ef3a5dc8fac5669", size = 343960, upload-time = "2025-08-07T08:25:05.863Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b0/dfd55b5bb480eda0578ae94ef256d3061d20b19a0f5e18c482f03e65464f/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c431bfb91478d7cbe368d0a699978050d3b112d7f1d440a41e90faa325557fd", size = 380201, upload-time = "2025-08-07T08:25:07.513Z" }, - { url = "https://files.pythonhosted.org/packages/28/22/e1fa64e50d58ad2b2053077e3ec81a979147c43428de9e6de68ddf6aff4e/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e222a44ae9f507d0f2678ee3dd0c45ec1e930f6875d99b8459631c24058aec", size = 392111, upload-time = "2025-08-07T08:25:09.149Z" }, - { url = "https://files.pythonhosted.org/packages/49/f9/43ab7a43e97aedf6cea6af70fdcbe18abbbc41d4ae6cdec1bfc23bbad403/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:184f0d7b342967f6cda94a07d0e1fae177d11d0b8f17d73e06e36ac02889f303", size = 515863, upload-time = "2025-08-07T08:25:10.431Z" }, - { url = "https://files.pythonhosted.org/packages/38/9b/9bd59dcc636cd04d86a2d20ad967770bf348f5eb5922a8f29b547c074243/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a00c91104c173c9043bc46f7b30ee5e6d2f6b1149f11f545580f5d6fdff42c0b", size = 402398, upload-time = "2025-08-07T08:25:11.819Z" }, - { url = "https://files.pythonhosted.org/packages/71/bf/f099328c6c85667aba6b66fa5c35a8882db06dcd462ea214be72813a0dd2/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a37dd208f0d658e0487522078b1ed68cd6bce20ef4b5a915d2809b9094b410", size = 384665, upload-time = "2025-08-07T08:25:13.194Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c5/9c1f03121ece6634818490bd3c8be2c82a70928a19de03467fb25a3ae2a8/rpds_py-0.27.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:92f3b3ec3e6008a1fe00b7c0946a170f161ac00645cde35e3c9a68c2475e8156", size = 400405, upload-time = "2025-08-07T08:25:14.417Z" }, - { url = "https://files.pythonhosted.org/packages/b5/b8/e25d54af3e63ac94f0c16d8fe143779fe71ff209445a0c00d0f6984b6b2c/rpds_py-0.27.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1b3db5fae5cbce2131b7420a3f83553d4d89514c03d67804ced36161fe8b6b2", size = 413179, upload-time = "2025-08-07T08:25:15.664Z" }, - { url = "https://files.pythonhosted.org/packages/f9/d1/406b3316433fe49c3021546293a04bc33f1478e3ec7950215a7fce1a1208/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5355527adaa713ab693cbce7c1e0ec71682f599f61b128cf19d07e5c13c9b1f1", size = 556895, upload-time = "2025-08-07T08:25:17.061Z" }, - { url = "https://files.pythonhosted.org/packages/5f/bc/3697c0c21fcb9a54d46ae3b735eb2365eea0c2be076b8f770f98e07998de/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fcc01c57ce6e70b728af02b2401c5bc853a9e14eb07deda30624374f0aebfe42", size = 585464, upload-time = "2025-08-07T08:25:18.406Z" }, - { url = "https://files.pythonhosted.org/packages/63/09/ee1bb5536f99f42c839b177d552f6114aa3142d82f49cef49261ed28dbe0/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3001013dae10f806380ba739d40dee11db1ecb91684febb8406a87c2ded23dae", size = 555090, upload-time = "2025-08-07T08:25:20.461Z" }, - { url = "https://files.pythonhosted.org/packages/7d/2c/363eada9e89f7059199d3724135a86c47082cbf72790d6ba2f336d146ddb/rpds_py-0.27.0-cp314-cp314t-win32.whl", hash = "sha256:0f401c369186a5743694dd9fc08cba66cf70908757552e1f714bfc5219c655b5", size = 218001, upload-time = "2025-08-07T08:25:21.761Z" }, - { url = "https://files.pythonhosted.org/packages/e2/3f/d6c216ed5199c9ef79e2a33955601f454ed1e7420a93b89670133bca5ace/rpds_py-0.27.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8a1dca5507fa1337f75dcd5070218b20bc68cf8844271c923c1b79dfcbc20391", size = 230993, upload-time = "2025-08-07T08:25:23.34Z" }, { url = "https://files.pythonhosted.org/packages/47/55/287068956f9ba1cb40896d291213f09fdd4527630709058b45a592bc09dc/rpds_py-0.27.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:46f48482c1a4748ab2773f75fffbdd1951eb59794e32788834b945da857c47a8", size = 371566, upload-time = "2025-08-07T08:25:43.95Z" }, { url = "https://files.pythonhosted.org/packages/a2/fb/443af59cbe552e89680bb0f1d1ba47f6387b92083e28a45b8c8863b86c5a/rpds_py-0.27.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:419dd9c98bcc9fb0242be89e0c6e922df333b975d4268faa90d58499fd9c9ebe", size = 355781, upload-time = "2025-08-07T08:25:45.256Z" }, { url = "https://files.pythonhosted.org/packages/ad/f0/35f48bb073b5ca42b1dcc55cb148f4a3bd4411a3e584f6a18d26f0ea8832/rpds_py-0.27.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d42a0ef2bdf6bc81e1cc2d49d12460f63c6ae1423c4f4851b828e454ccf6f1", size = 382575, upload-time = "2025-08-07T08:25:46.524Z" }, @@ -4941,7 +4727,7 @@ name = "ruamel-yaml" version = "0.18.14" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, + { name = "ruamel-yaml-clib", marker = "platform_python_implementation == 'CPython'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/39/87/6da0df742a4684263261c253f00edd5829e6aca970fff69e75028cccc547/ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7", size = 145511, upload-time = "2025-06-09T08:51:09.828Z" } wheels = [ @@ -5162,24 +4948,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/57/59/0dc3c8b43e118f1e4ee2b798dcc96ac21bb20014e5f1f7a8e85cc0653bdb/scipy-1.16.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8503517c44c18d1030d666cb70aaac1cc8913608816e06742498833b128488b7", size = 35667665, upload-time = "2025-07-27T16:30:05.916Z" }, { url = "https://files.pythonhosted.org/packages/45/5f/844ee26e34e2f3f9f8febb9343748e72daeaec64fe0c70e9bf1ff84ec955/scipy-1.16.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:30cc4bb81c41831ecfd6dc450baf48ffd80ef5aed0f5cf3ea775740e80f16ecc", size = 38045210, upload-time = "2025-07-27T16:30:11.655Z" }, { url = "https://files.pythonhosted.org/packages/8d/d7/210f2b45290f444f1de64bc7353aa598ece9f0e90c384b4a156f9b1a5063/scipy-1.16.1-cp313-cp313t-win_amd64.whl", hash = "sha256:c24fa02f7ed23ae514460a22c57eca8f530dbfa50b1cfdbf4f37c05b5309cc39", size = 38593661, upload-time = "2025-07-27T16:30:17.825Z" }, - { url = "https://files.pythonhosted.org/packages/81/ea/84d481a5237ed223bd3d32d6e82d7a6a96e34756492666c260cef16011d1/scipy-1.16.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:796a5a9ad36fa3a782375db8f4241ab02a091308eb079746bc0f874c9b998318", size = 36525921, upload-time = "2025-07-27T16:30:30.081Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9f/d9edbdeff9f3a664807ae3aea383e10afaa247e8e6255e6d2aa4515e8863/scipy-1.16.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:3ea0733a2ff73fd6fdc5fecca54ee9b459f4d74f00b99aced7d9a3adb43fb1cc", size = 28564152, upload-time = "2025-07-27T16:30:35.336Z" }, - { url = "https://files.pythonhosted.org/packages/3b/95/8125bcb1fe04bc267d103e76516243e8d5e11229e6b306bda1024a5423d1/scipy-1.16.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:85764fb15a2ad994e708258bb4ed8290d1305c62a4e1ef07c414356a24fcfbf8", size = 20836028, upload-time = "2025-07-27T16:30:39.421Z" }, - { url = "https://files.pythonhosted.org/packages/77/9c/bf92e215701fc70bbcd3d14d86337cf56a9b912a804b9c776a269524a9e9/scipy-1.16.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ca66d980469cb623b1759bdd6e9fd97d4e33a9fad5b33771ced24d0cb24df67e", size = 23489666, upload-time = "2025-07-27T16:30:43.663Z" }, - { url = "https://files.pythonhosted.org/packages/5e/00/5e941d397d9adac41b02839011594620d54d99488d1be5be755c00cde9ee/scipy-1.16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e7cc1ffcc230f568549fc56670bcf3df1884c30bd652c5da8138199c8c76dae0", size = 33358318, upload-time = "2025-07-27T16:30:48.982Z" }, - { url = "https://files.pythonhosted.org/packages/0e/87/8db3aa10dde6e3e8e7eb0133f24baa011377d543f5b19c71469cf2648026/scipy-1.16.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ddfb1e8d0b540cb4ee9c53fc3dea3186f97711248fb94b4142a1b27178d8b4b", size = 35185724, upload-time = "2025-07-27T16:30:54.26Z" }, - { url = "https://files.pythonhosted.org/packages/89/b4/6ab9ae443216807622bcff02690262d8184078ea467efee2f8c93288a3b1/scipy-1.16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4dc0e7be79e95d8ba3435d193e0d8ce372f47f774cffd882f88ea4e1e1ddc731", size = 35554335, upload-time = "2025-07-27T16:30:59.765Z" }, - { url = "https://files.pythonhosted.org/packages/9c/9a/d0e9dc03c5269a1afb60661118296a32ed5d2c24298af61b676c11e05e56/scipy-1.16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f23634f9e5adb51b2a77766dac217063e764337fbc816aa8ad9aaebcd4397fd3", size = 37960310, upload-time = "2025-07-27T16:31:06.151Z" }, - { url = "https://files.pythonhosted.org/packages/5e/00/c8f3130a50521a7977874817ca89e0599b1b4ee8e938bad8ae798a0e1f0d/scipy-1.16.1-cp314-cp314-win_amd64.whl", hash = "sha256:57d75524cb1c5a374958a2eae3d84e1929bb971204cc9d52213fb8589183fc19", size = 39319239, upload-time = "2025-07-27T16:31:59.942Z" }, - { url = "https://files.pythonhosted.org/packages/f2/f2/1ca3eda54c3a7e4c92f6acef7db7b3a057deb135540d23aa6343ef8ad333/scipy-1.16.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:d8da7c3dd67bcd93f15618938f43ed0995982eb38973023d46d4646c4283ad65", size = 36939460, upload-time = "2025-07-27T16:31:11.865Z" }, - { url = "https://files.pythonhosted.org/packages/80/30/98c2840b293a132400c0940bb9e140171dcb8189588619048f42b2ce7b4f/scipy-1.16.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:cc1d2f2fd48ba1e0620554fe5bc44d3e8f5d4185c8c109c7fbdf5af2792cfad2", size = 29093322, upload-time = "2025-07-27T16:31:17.045Z" }, - { url = "https://files.pythonhosted.org/packages/c1/e6/1e6e006e850622cf2a039b62d1a6ddc4497d4851e58b68008526f04a9a00/scipy-1.16.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:21a611ced9275cb861bacadbada0b8c0623bc00b05b09eb97f23b370fc2ae56d", size = 21365329, upload-time = "2025-07-27T16:31:21.188Z" }, - { url = "https://files.pythonhosted.org/packages/8e/02/72a5aa5b820589dda9a25e329ca752842bfbbaf635e36bc7065a9b42216e/scipy-1.16.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dfbb25dffc4c3dd9371d8ab456ca81beeaf6f9e1c2119f179392f0dc1ab7695", size = 23897544, upload-time = "2025-07-27T16:31:25.408Z" }, - { url = "https://files.pythonhosted.org/packages/2b/dc/7122d806a6f9eb8a33532982234bed91f90272e990f414f2830cfe656e0b/scipy-1.16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f0ebb7204f063fad87fc0a0e4ff4a2ff40b2a226e4ba1b7e34bf4b79bf97cd86", size = 33442112, upload-time = "2025-07-27T16:31:30.62Z" }, - { url = "https://files.pythonhosted.org/packages/24/39/e383af23564daa1021a5b3afbe0d8d6a68ec639b943661841f44ac92de85/scipy-1.16.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f1b9e5962656f2734c2b285a8745358ecb4e4efbadd00208c80a389227ec61ff", size = 35286594, upload-time = "2025-07-27T16:31:36.112Z" }, - { url = "https://files.pythonhosted.org/packages/95/47/1a0b0aff40c3056d955f38b0df5d178350c3d74734ec54f9c68d23910be5/scipy-1.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e1a106f8c023d57a2a903e771228bf5c5b27b5d692088f457acacd3b54511e4", size = 35665080, upload-time = "2025-07-27T16:31:42.025Z" }, - { url = "https://files.pythonhosted.org/packages/64/df/ce88803e9ed6e27fe9b9abefa157cf2c80e4fa527cf17ee14be41f790ad4/scipy-1.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:709559a1db68a9abc3b2c8672c4badf1614f3b440b3ab326d86a5c0491eafae3", size = 38050306, upload-time = "2025-07-27T16:31:48.109Z" }, - { url = "https://files.pythonhosted.org/packages/6e/6c/a76329897a7cae4937d403e623aa6aaea616a0bb5b36588f0b9d1c9a3739/scipy-1.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c0c804d60492a0aad7f5b2bb1862f4548b990049e27e828391ff2bf6f7199998", size = 39427705, upload-time = "2025-07-27T16:31:53.96Z" }, ] [[package]] @@ -5290,7 +5058,7 @@ name = "sqlalchemy" version = "2.0.43" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "greenlet", marker = "(python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64')" }, + { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d7/bc/d59b5d97d27229b0e009bd9098cd81af71c2fa5549c580a0a67b9bed0496/sqlalchemy-2.0.43.tar.gz", hash = "sha256:788bfcef6787a7764169cfe9859fe425bf44559619e1d9f56f5bddf2ebf6f417", size = 9762949, upload-time = "2025-08-11T14:24:58.438Z" } @@ -5574,6 +5342,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/5a/022ac010bedfb5119734cf9d743cf1d830cb4c604f53bb1552216f4344dc/transformers-4.55.2-py3-none-any.whl", hash = "sha256:097e3c2e2c0c9681db3da9d748d8f9d6a724c644514673d0030e8c5a1109f1f1", size = 11269748, upload-time = "2025-08-13T18:25:40.394Z" }, ] +[[package]] +name = "trove-classifiers" +version = "2025.11.14.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/a9/880cccf76af9e7b322112f52e4e2dbb3534cbe671197b8f443a42189dfc7/trove_classifiers-2025.11.14.15.tar.gz", hash = "sha256:6b60f49d40bbd895bc61d8dc414fc2f2286d70eb72ed23548db8cf94f62804ca", size = 16995, upload-time = "2025-11-14T15:23:13.78Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/f6/73c4aa003d1237ee9bea8a46f49dc38c45dfe95af4f0da7e60678d388011/trove_classifiers-2025.11.14.15-py3-none-any.whl", hash = "sha256:d1dac259c1e908939862e3331177931c6df0a37af2c1a8debcc603d9115fcdd9", size = 14191, upload-time = "2025-11-14T15:23:12.467Z" }, +] + [[package]] name = "types-aiofiles" version = "23.2.0.20240623" @@ -5852,26 +5629,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/cf/7d848740203c7b4b27eb55dbfede11aca974a51c3d894f6cc4b865f42f58/wrapt-1.17.3-cp313-cp313-win32.whl", hash = "sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8", size = 36711, upload-time = "2025-08-12T05:53:10.074Z" }, { url = "https://files.pythonhosted.org/packages/57/54/35a84d0a4d23ea675994104e667ceff49227ce473ba6a59ba2c84f250b74/wrapt-1.17.3-cp313-cp313-win_amd64.whl", hash = "sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb", size = 38885, upload-time = "2025-08-12T05:53:08.695Z" }, { url = "https://files.pythonhosted.org/packages/01/77/66e54407c59d7b02a3c4e0af3783168fff8e5d61def52cda8728439d86bc/wrapt-1.17.3-cp313-cp313-win_arm64.whl", hash = "sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16", size = 36896, upload-time = "2025-08-12T05:52:55.34Z" }, - { url = "https://files.pythonhosted.org/packages/02/a2/cd864b2a14f20d14f4c496fab97802001560f9f41554eef6df201cd7f76c/wrapt-1.17.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39", size = 54132, upload-time = "2025-08-12T05:51:49.864Z" }, - { url = "https://files.pythonhosted.org/packages/d5/46/d011725b0c89e853dc44cceb738a307cde5d240d023d6d40a82d1b4e1182/wrapt-1.17.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235", size = 39091, upload-time = "2025-08-12T05:51:38.935Z" }, - { url = "https://files.pythonhosted.org/packages/2e/9e/3ad852d77c35aae7ddebdbc3b6d35ec8013af7d7dddad0ad911f3d891dae/wrapt-1.17.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c", size = 39172, upload-time = "2025-08-12T05:51:59.365Z" }, - { url = "https://files.pythonhosted.org/packages/c3/f7/c983d2762bcce2326c317c26a6a1e7016f7eb039c27cdf5c4e30f4160f31/wrapt-1.17.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b", size = 87163, upload-time = "2025-08-12T05:52:40.965Z" }, - { url = "https://files.pythonhosted.org/packages/e4/0f/f673f75d489c7f22d17fe0193e84b41540d962f75fce579cf6873167c29b/wrapt-1.17.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa", size = 87963, upload-time = "2025-08-12T05:52:20.326Z" }, - { url = "https://files.pythonhosted.org/packages/df/61/515ad6caca68995da2fac7a6af97faab8f78ebe3bf4f761e1b77efbc47b5/wrapt-1.17.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7", size = 86945, upload-time = "2025-08-12T05:52:21.581Z" }, - { url = "https://files.pythonhosted.org/packages/d3/bd/4e70162ce398462a467bc09e768bee112f1412e563620adc353de9055d33/wrapt-1.17.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4", size = 86857, upload-time = "2025-08-12T05:52:43.043Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b8/da8560695e9284810b8d3df8a19396a6e40e7518059584a1a394a2b35e0a/wrapt-1.17.3-cp314-cp314-win32.whl", hash = "sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10", size = 37178, upload-time = "2025-08-12T05:53:12.605Z" }, - { url = "https://files.pythonhosted.org/packages/db/c8/b71eeb192c440d67a5a0449aaee2310a1a1e8eca41676046f99ed2487e9f/wrapt-1.17.3-cp314-cp314-win_amd64.whl", hash = "sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6", size = 39310, upload-time = "2025-08-12T05:53:11.106Z" }, - { url = "https://files.pythonhosted.org/packages/45/20/2cda20fd4865fa40f86f6c46ed37a2a8356a7a2fde0773269311f2af56c7/wrapt-1.17.3-cp314-cp314-win_arm64.whl", hash = "sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58", size = 37266, upload-time = "2025-08-12T05:52:56.531Z" }, - { url = "https://files.pythonhosted.org/packages/77/ed/dd5cf21aec36c80443c6f900449260b80e2a65cf963668eaef3b9accce36/wrapt-1.17.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a", size = 56544, upload-time = "2025-08-12T05:51:51.109Z" }, - { url = "https://files.pythonhosted.org/packages/8d/96/450c651cc753877ad100c7949ab4d2e2ecc4d97157e00fa8f45df682456a/wrapt-1.17.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067", size = 40283, upload-time = "2025-08-12T05:51:39.912Z" }, - { url = "https://files.pythonhosted.org/packages/d1/86/2fcad95994d9b572db57632acb6f900695a648c3e063f2cd344b3f5c5a37/wrapt-1.17.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454", size = 40366, upload-time = "2025-08-12T05:52:00.693Z" }, - { url = "https://files.pythonhosted.org/packages/64/0e/f4472f2fdde2d4617975144311f8800ef73677a159be7fe61fa50997d6c0/wrapt-1.17.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e", size = 108571, upload-time = "2025-08-12T05:52:44.521Z" }, - { url = "https://files.pythonhosted.org/packages/cc/01/9b85a99996b0a97c8a17484684f206cbb6ba73c1ce6890ac668bcf3838fb/wrapt-1.17.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f", size = 113094, upload-time = "2025-08-12T05:52:22.618Z" }, - { url = "https://files.pythonhosted.org/packages/25/02/78926c1efddcc7b3aa0bc3d6b33a822f7d898059f7cd9ace8c8318e559ef/wrapt-1.17.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056", size = 110659, upload-time = "2025-08-12T05:52:24.057Z" }, - { url = "https://files.pythonhosted.org/packages/dc/ee/c414501ad518ac3e6fe184753632fe5e5ecacdcf0effc23f31c1e4f7bfcf/wrapt-1.17.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804", size = 106946, upload-time = "2025-08-12T05:52:45.976Z" }, - { url = "https://files.pythonhosted.org/packages/be/44/a1bd64b723d13bb151d6cc91b986146a1952385e0392a78567e12149c7b4/wrapt-1.17.3-cp314-cp314t-win32.whl", hash = "sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977", size = 38717, upload-time = "2025-08-12T05:53:15.214Z" }, - { url = "https://files.pythonhosted.org/packages/79/d9/7cfd5a312760ac4dd8bf0184a6ee9e43c33e47f3dadc303032ce012b8fa3/wrapt-1.17.3-cp314-cp314t-win_amd64.whl", hash = "sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116", size = 41334, upload-time = "2025-08-12T05:53:14.178Z" }, - { url = "https://files.pythonhosted.org/packages/46/78/10ad9781128ed2f99dbc474f43283b13fea8ba58723e98844367531c18e9/wrapt-1.17.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6", size = 38471, upload-time = "2025-08-12T05:52:57.784Z" }, { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, ] From b8f4461e256bf74e676f97fc9c99371dd3e59d3b Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 04:48:23 +0200 Subject: [PATCH 11/35] style: fix linting issues --- backend/tests/auth/test_cookie.py | 9 ++++----- backend/tests/conftest.py | 1 - backend/tests/data/conftest.py | 1 - .../tests/data/storage_clients/test_gcs.py | 1 - backend/tests/data/storage_clients/test_s3.py | 3 +-- backend/tests/data/test_literalai.py | 19 +++++++++---------- backend/tests/data/test_sql_alchemy.py | 5 ++--- .../tests/langchain/test_async_callback.py | 3 +-- backend/tests/langchain/test_sync_callback.py | 3 +-- backend/tests/llama_index/test_callbacks.py | 5 ++--- backend/tests/test_action.py | 1 - backend/tests/test_cache.py | 1 - backend/tests/test_callbacks.py | 3 +-- backend/tests/test_chat_settings.py | 1 - backend/tests/test_context.py | 1 - backend/tests/test_element.py | 1 - backend/tests/test_emitter.py | 1 - backend/tests/test_input_widget.py | 1 - backend/tests/test_markdown.py | 1 - backend/tests/test_mcp.py | 3 +-- backend/tests/test_message.py | 1 - backend/tests/test_oauth_providers.py | 3 +-- backend/tests/test_server.py | 3 +-- backend/tests/test_session.py | 1 - backend/tests/test_sidebar.py | 1 - backend/tests/test_socket.py | 1 - backend/tests/test_step.py | 1 - backend/tests/test_translations.py | 1 - backend/tests/test_utils.py | 1 - cypress/e2e/ask_file/main.py | 1 - cypress/e2e/dataframe/main.py | 3 +-- cypress/e2e/llama_index_cb/main.py | 3 +-- cypress/e2e/plotly/main.py | 3 +-- cypress/e2e/pyplot/main.py | 3 +-- cypress/e2e/thread_resume/main.py | 12 ++++++------ 35 files changed, 34 insertions(+), 68 deletions(-) diff --git a/backend/tests/auth/test_cookie.py b/backend/tests/auth/test_cookie.py index 7f1e7a0233..65e5159a85 100644 --- a/backend/tests/auth/test_cookie.py +++ b/backend/tests/auth/test_cookie.py @@ -1,14 +1,13 @@ import pytest -from fastapi import FastAPI, Form -from fastapi.testclient import TestClient -from starlette.requests import Request -from starlette.responses import Response - from chainlit.auth import ( clear_auth_cookie, get_token_from_cookies, set_auth_cookie, ) +from fastapi import FastAPI, Form +from fastapi.testclient import TestClient +from starlette.requests import Request +from starlette.responses import Response @pytest.fixture diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index 0f19528f81..95ae070368 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -6,7 +6,6 @@ import pytest import pytest_asyncio - from chainlit import config from chainlit.callbacks import data_layer from chainlit.context import ChainlitContext, context_var diff --git a/backend/tests/data/conftest.py b/backend/tests/data/conftest.py index 84276df670..e7a98d9081 100644 --- a/backend/tests/data/conftest.py +++ b/backend/tests/data/conftest.py @@ -1,7 +1,6 @@ from unittest.mock import AsyncMock import pytest - from chainlit.data.storage_clients.base import BaseStorageClient from chainlit.user import User diff --git a/backend/tests/data/storage_clients/test_gcs.py b/backend/tests/data/storage_clients/test_gcs.py index d5bdc5d74c..a8040a1059 100644 --- a/backend/tests/data/storage_clients/test_gcs.py +++ b/backend/tests/data/storage_clients/test_gcs.py @@ -1,7 +1,6 @@ from unittest.mock import MagicMock, patch import pytest - from chainlit.data.storage_clients.base import storage_expiry_time from chainlit.data.storage_clients.gcs import GCSStorageClient diff --git a/backend/tests/data/storage_clients/test_s3.py b/backend/tests/data/storage_clients/test_s3.py index 6dc238583e..38804f8c67 100644 --- a/backend/tests/data/storage_clients/test_s3.py +++ b/backend/tests/data/storage_clients/test_s3.py @@ -2,9 +2,8 @@ import boto3 # type: ignore import pytest -from moto import mock_aws - from chainlit.data.storage_clients.s3 import S3StorageClient +from moto import mock_aws # Fixtures for setting up the DynamoDB table diff --git a/backend/tests/data/test_literalai.py b/backend/tests/data/test_literalai.py index 1eeb91243e..b0a73dca8c 100644 --- a/backend/tests/data/test_literalai.py +++ b/backend/tests/data/test_literalai.py @@ -3,6 +3,15 @@ from unittest.mock import ANY, AsyncMock, Mock, patch import pytest +from chainlit.data.literalai import LiteralDataLayer, LiteralToChainlitConverter +from chainlit.element import Audio, File, Image, Pdf, Text, Video +from chainlit.step import Step, StepDict +from chainlit.types import ( + Feedback, + Pagination, + ThreadFilter, +) +from chainlit.user import PersistedUser, User from httpx import HTTPStatusError, RequestError from literalai import ( AsyncLiteralClient, @@ -24,16 +33,6 @@ ) from literalai.observability.thread import ThreadDict as LiteralThreadDict -from chainlit.data.literalai import LiteralDataLayer, LiteralToChainlitConverter -from chainlit.element import Audio, File, Image, Pdf, Text, Video -from chainlit.step import Step, StepDict -from chainlit.types import ( - Feedback, - Pagination, - ThreadFilter, -) -from chainlit.user import PersistedUser, User - @pytest.fixture async def mock_literal_client(monkeypatch: pytest.MonkeyPatch): diff --git a/backend/tests/data/test_sql_alchemy.py b/backend/tests/data/test_sql_alchemy.py index decd5e34c5..5357723a5a 100644 --- a/backend/tests/data/test_sql_alchemy.py +++ b/backend/tests/data/test_sql_alchemy.py @@ -2,13 +2,12 @@ from pathlib import Path import pytest -from sqlalchemy import text -from sqlalchemy.ext.asyncio import create_async_engine - from chainlit import User from chainlit.data.sql_alchemy import SQLAlchemyDataLayer from chainlit.data.storage_clients.base import BaseStorageClient from chainlit.element import Text +from sqlalchemy import text +from sqlalchemy.ext.asyncio import create_async_engine @pytest.fixture diff --git a/backend/tests/langchain/test_async_callback.py b/backend/tests/langchain/test_async_callback.py index 910a885f62..7650fa4f49 100644 --- a/backend/tests/langchain/test_async_callback.py +++ b/backend/tests/langchain/test_async_callback.py @@ -5,10 +5,9 @@ from uuid import uuid4 import pytest -from langchain_core.outputs import GenerationChunk - from chainlit.langchain.callbacks import LangchainTracer from chainlit.step import Step +from langchain_core.outputs import GenerationChunk def create_mock_run(**kwargs): diff --git a/backend/tests/langchain/test_sync_callback.py b/backend/tests/langchain/test_sync_callback.py index a97e5bb73c..7a0f2aaab1 100644 --- a/backend/tests/langchain/test_sync_callback.py +++ b/backend/tests/langchain/test_sync_callback.py @@ -4,13 +4,12 @@ from unittest.mock import Mock from uuid import uuid4 -from langchain.schema import AIMessage, HumanMessage - from chainlit.langchain.callbacks import ( FinalStreamHelper, GenerationHelper, LangchainTracer, ) +from langchain.schema import AIMessage, HumanMessage def create_mock_run(**kwargs): diff --git a/backend/tests/llama_index/test_callbacks.py b/backend/tests/llama_index/test_callbacks.py index 8c89cf51cf..edf8ec4cf4 100644 --- a/backend/tests/llama_index/test_callbacks.py +++ b/backend/tests/llama_index/test_callbacks.py @@ -1,10 +1,9 @@ from unittest.mock import patch -from llama_index.core.callbacks.schema import CBEventType, EventPayload -from llama_index.core.tools.types import ToolMetadata - from chainlit.llama_index.callbacks import LlamaIndexCallbackHandler from chainlit.step import Step +from llama_index.core.callbacks.schema import CBEventType, EventPayload +from llama_index.core.tools.types import ToolMetadata async def test_on_event_start_for_function_calls(mock_chainlit_context): diff --git a/backend/tests/test_action.py b/backend/tests/test_action.py index 1f1fcd5808..dfd6dedabd 100644 --- a/backend/tests/test_action.py +++ b/backend/tests/test_action.py @@ -1,7 +1,6 @@ import uuid import pytest - from chainlit.action import Action diff --git a/backend/tests/test_cache.py b/backend/tests/test_cache.py index 31cf910a13..f0d2b09dad 100644 --- a/backend/tests/test_cache.py +++ b/backend/tests/test_cache.py @@ -3,7 +3,6 @@ from unittest.mock import Mock, patch import pytest - from chainlit.cache import cache, init_lc_cache # Import the actual cache module to access _cache dict diff --git a/backend/tests/test_callbacks.py b/backend/tests/test_callbacks.py index 5a87e6d557..4b100a63c2 100644 --- a/backend/tests/test_callbacks.py +++ b/backend/tests/test_callbacks.py @@ -31,9 +31,8 @@ async def auth_func(username: str, password: str) -> User | None: async def test_header_auth_callback(test_config: config.ChainlitConfig): - from starlette.datastructures import Headers - from chainlit.callbacks import header_auth_callback + from starlette.datastructures import Headers @header_auth_callback async def auth_func(headers: Headers) -> User | None: diff --git a/backend/tests/test_chat_settings.py b/backend/tests/test_chat_settings.py index ae88874dc6..c239339b57 100644 --- a/backend/tests/test_chat_settings.py +++ b/backend/tests/test_chat_settings.py @@ -1,5 +1,4 @@ import pytest - from chainlit.chat_settings import ChatSettings from chainlit.input_widget import ( Checkbox, diff --git a/backend/tests/test_context.py b/backend/tests/test_context.py index 6ffb12cc0e..c5449c9e91 100644 --- a/backend/tests/test_context.py +++ b/backend/tests/test_context.py @@ -1,7 +1,6 @@ from unittest.mock import Mock import pytest - from chainlit.context import ( ChainlitContext, ChainlitContextException, diff --git a/backend/tests/test_element.py b/backend/tests/test_element.py index d24222d6f8..ffe426b8cc 100644 --- a/backend/tests/test_element.py +++ b/backend/tests/test_element.py @@ -2,7 +2,6 @@ from unittest.mock import AsyncMock import pytest - from chainlit.element import ( Audio, CustomElement, diff --git a/backend/tests/test_emitter.py b/backend/tests/test_emitter.py index 9a8290583c..26f0a00bed 100644 --- a/backend/tests/test_emitter.py +++ b/backend/tests/test_emitter.py @@ -1,7 +1,6 @@ from unittest.mock import MagicMock import pytest - from chainlit.element import ElementDict from chainlit.emitter import ChainlitEmitter from chainlit.step import StepDict diff --git a/backend/tests/test_input_widget.py b/backend/tests/test_input_widget.py index 6df4b2c35b..4330b5cca6 100644 --- a/backend/tests/test_input_widget.py +++ b/backend/tests/test_input_widget.py @@ -1,5 +1,4 @@ import pytest - from chainlit.input_widget import ( Checkbox, MultiSelect, diff --git a/backend/tests/test_markdown.py b/backend/tests/test_markdown.py index e1e89b56fb..11073f714e 100644 --- a/backend/tests/test_markdown.py +++ b/backend/tests/test_markdown.py @@ -3,7 +3,6 @@ from unittest.mock import patch import pytest - from chainlit.markdown import DEFAULT_MARKDOWN_STR, get_markdown_str, init_markdown diff --git a/backend/tests/test_mcp.py b/backend/tests/test_mcp.py index 2963493bb9..bdf9e71179 100644 --- a/backend/tests/test_mcp.py +++ b/backend/tests/test_mcp.py @@ -2,14 +2,13 @@ from unittest.mock import patch import pytest -from pydantic import ValidationError - from chainlit.mcp import ( HttpMcpConnection, SseMcpConnection, StdioMcpConnection, validate_mcp_command, ) +from pydantic import ValidationError class TestStdioMcpConnection: diff --git a/backend/tests/test_message.py b/backend/tests/test_message.py index 952f557414..8200ce4ad7 100644 --- a/backend/tests/test_message.py +++ b/backend/tests/test_message.py @@ -4,7 +4,6 @@ from unittest.mock import AsyncMock, Mock, patch import pytest - from chainlit.action import Action from chainlit.context import ChainlitContext, context_var from chainlit.message import ( diff --git a/backend/tests/test_oauth_providers.py b/backend/tests/test_oauth_providers.py index 09522c0e48..ca446820c9 100644 --- a/backend/tests/test_oauth_providers.py +++ b/backend/tests/test_oauth_providers.py @@ -3,8 +3,6 @@ import httpx import pytest -from fastapi import HTTPException - from chainlit.oauth_providers import ( ACCESS_TOKEN_MISSING, Auth0OAuthProvider, @@ -23,6 +21,7 @@ get_oauth_provider, ) from chainlit.user import User +from fastapi import HTTPException class TestOAuthProviderBase: diff --git a/backend/tests/test_server.py b/backend/tests/test_server.py index 538ff6db6b..62ce2798fa 100644 --- a/backend/tests/test_server.py +++ b/backend/tests/test_server.py @@ -6,8 +6,6 @@ from unittest.mock import AsyncMock, Mock, create_autospec, mock_open import pytest -from fastapi.testclient import TestClient - from chainlit.auth import get_current_user from chainlit.config import ( APP_ROOT, @@ -17,6 +15,7 @@ from chainlit.server import app from chainlit.types import AskFileSpec from chainlit.user import PersistedUser +from fastapi.testclient import TestClient @pytest.fixture diff --git a/backend/tests/test_session.py b/backend/tests/test_session.py index e98b7a0994..9526a18e77 100644 --- a/backend/tests/test_session.py +++ b/backend/tests/test_session.py @@ -5,7 +5,6 @@ from unittest.mock import AsyncMock, Mock, patch import pytest - from chainlit.session import ( BaseSession, HTTPSession, diff --git a/backend/tests/test_sidebar.py b/backend/tests/test_sidebar.py index 1cc6c9847e..d17ae358ad 100644 --- a/backend/tests/test_sidebar.py +++ b/backend/tests/test_sidebar.py @@ -1,5 +1,4 @@ import pytest - from chainlit.element import File, Image, Text from chainlit.sidebar import ElementSidebar diff --git a/backend/tests/test_socket.py b/backend/tests/test_socket.py index c063c677b9..26130d9da0 100644 --- a/backend/tests/test_socket.py +++ b/backend/tests/test_socket.py @@ -2,7 +2,6 @@ from unittest.mock import AsyncMock, Mock, patch import pytest - from chainlit.session import WebsocketSession from chainlit.socket import ( _authenticate_connection, diff --git a/backend/tests/test_step.py b/backend/tests/test_step.py index 6516f3b6cb..7148391f55 100644 --- a/backend/tests/test_step.py +++ b/backend/tests/test_step.py @@ -3,7 +3,6 @@ from unittest.mock import AsyncMock, Mock, patch import pytest - from chainlit.context import local_steps from chainlit.element import Element from chainlit.step import ( diff --git a/backend/tests/test_translations.py b/backend/tests/test_translations.py index 6e517c4748..d0d35f4872 100644 --- a/backend/tests/test_translations.py +++ b/backend/tests/test_translations.py @@ -2,7 +2,6 @@ from unittest.mock import patch import pytest - from chainlit.translations import compare_json_structures, lint_translation_json diff --git a/backend/tests/test_utils.py b/backend/tests/test_utils.py index 5687c7833d..15355548e1 100644 --- a/backend/tests/test_utils.py +++ b/backend/tests/test_utils.py @@ -5,7 +5,6 @@ import click import pytest - from chainlit.utils import ( check_file, check_module_version, diff --git a/cypress/e2e/ask_file/main.py b/cypress/e2e/ask_file/main.py index 5af6507147..bb5ff29c6b 100644 --- a/cypress/e2e/ask_file/main.py +++ b/cypress/e2e/ask_file/main.py @@ -1,5 +1,4 @@ import aiofiles - import chainlit as cl diff --git a/cypress/e2e/dataframe/main.py b/cypress/e2e/dataframe/main.py index 81bfd9849a..b7361672ee 100644 --- a/cypress/e2e/dataframe/main.py +++ b/cypress/e2e/dataframe/main.py @@ -1,6 +1,5 @@ -import pandas as pd - import chainlit as cl +import pandas as pd @cl.on_chat_start diff --git a/cypress/e2e/llama_index_cb/main.py b/cypress/e2e/llama_index_cb/main.py index 136cd05411..80ce43ef16 100644 --- a/cypress/e2e/llama_index_cb/main.py +++ b/cypress/e2e/llama_index_cb/main.py @@ -1,9 +1,8 @@ +import chainlit as cl from llama_index.core.callbacks.schema import CBEventType, EventPayload from llama_index.core.llms import ChatMessage, ChatResponse from llama_index.core.schema import NodeWithScore, TextNode -import chainlit as cl - @cl.on_chat_start async def start(): diff --git a/cypress/e2e/plotly/main.py b/cypress/e2e/plotly/main.py index cdb6e57ca5..8a5aa4759f 100644 --- a/cypress/e2e/plotly/main.py +++ b/cypress/e2e/plotly/main.py @@ -1,6 +1,5 @@ -import plotly.graph_objects as go - import chainlit as cl +import plotly.graph_objects as go @cl.on_chat_start diff --git a/cypress/e2e/pyplot/main.py b/cypress/e2e/pyplot/main.py index 4ec64325bc..e61d7659af 100644 --- a/cypress/e2e/pyplot/main.py +++ b/cypress/e2e/pyplot/main.py @@ -1,6 +1,5 @@ -import matplotlib.pyplot as plt - import chainlit as cl +import matplotlib.pyplot as plt @cl.on_chat_start diff --git a/cypress/e2e/thread_resume/main.py b/cypress/e2e/thread_resume/main.py index 2f6ab41137..6bc12be0a4 100644 --- a/cypress/e2e/thread_resume/main.py +++ b/cypress/e2e/thread_resume/main.py @@ -1,17 +1,17 @@ import os -from typing import Optional, Dict, List +from typing import Dict, List, Optional import chainlit as cl import chainlit.data as cl_data -from chainlit.element import ElementDict, Element +from chainlit.element import Element, ElementDict from chainlit.step import StepDict from chainlit.types import ( - ThreadDict, + Feedback, + PageInfo, + PaginatedResponse, Pagination, + ThreadDict, ThreadFilter, - PaginatedResponse, - PageInfo, - Feedback, ) from chainlit.utils import utc_now From d5e1b06f2710a3f5d0cb7eee486da20ecaea1d08 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 04:52:54 +0200 Subject: [PATCH 12/35] ci: fix copilot setup steps --- .github/workflows/copilot-setup-steps.yaml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/copilot-setup-steps.yaml b/.github/workflows/copilot-setup-steps.yaml index c8f36149cd..ee3651c69e 100644 --- a/.github/workflows/copilot-setup-steps.yaml +++ b/.github/workflows/copilot-setup-steps.yaml @@ -38,9 +38,4 @@ jobs: with: python-version: "3.10" uv-version: "latest" - working-directory: "./backend" - uv-args: "--all-extras" - - - name: Build UI components - run: pnpm run buildUi - timeout-minutes: 5 \ No newline at end of file + uv-args: "--all-packages --all-extras --dev" \ No newline at end of file From 23326b82f431ba570115bfe41844d3272595caad Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 04:54:54 +0200 Subject: [PATCH 13/35] ci: change workflow names to more meaningful --- .github/workflows/check-backend.yaml | 2 +- .github/workflows/check-frontend.yaml | 2 +- .github/workflows/e2e-tests.yaml | 2 +- .github/workflows/tests.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index d42dc39cf7..5c4ab0f6de 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -1,4 +1,4 @@ -name: LintBackend +name: Check backend on: [workflow_call] diff --git a/.github/workflows/check-frontend.yaml b/.github/workflows/check-frontend.yaml index 88a0d4229e..0f4986ac84 100644 --- a/.github/workflows/check-frontend.yaml +++ b/.github/workflows/check-frontend.yaml @@ -1,4 +1,4 @@ -name: Lint frontend & libs +name: Check frontend & libs on: [workflow_call] diff --git a/.github/workflows/e2e-tests.yaml b/.github/workflows/e2e-tests.yaml index 6e7a5d5145..515e340a98 100644 --- a/.github/workflows/e2e-tests.yaml +++ b/.github/workflows/e2e-tests.yaml @@ -1,4 +1,4 @@ -name: E2ETests +name: E2E tests on: [workflow_call] diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 3a947c7207..a38acc1aa9 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,4 +1,4 @@ -name: Pytest +name: Tests on: [workflow_call] From 01dd9f6935760168663906cef285e5ade7624ef9 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 04:57:37 +0200 Subject: [PATCH 14/35] ci: cancel previous workflow run on new commit (except main branch) --- .github/workflows/ci.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d3b95ed2d2..5b87f21106 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -15,6 +15,10 @@ on: - '*.md' - LICENSE +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref_name != 'main' }} + permissions: read-all jobs: From 387a9c254e48b9fc5af80d7e6241dc5863a44476 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 05:00:41 +0200 Subject: [PATCH 15/35] ci: add concurrency control to the rest of workflows --- .github/workflows/check-backend.yaml | 4 ++++ .github/workflows/check-frontend.yaml | 4 ++++ .github/workflows/e2e-tests.yaml | 4 ++++ .github/workflows/publish.yaml | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 5c4ab0f6de..36c504fcee 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -2,6 +2,10 @@ name: Check backend on: [workflow_call] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref_name != 'main' }} + permissions: read-all jobs: diff --git a/.github/workflows/check-frontend.yaml b/.github/workflows/check-frontend.yaml index 0f4986ac84..5f2c17fa13 100644 --- a/.github/workflows/check-frontend.yaml +++ b/.github/workflows/check-frontend.yaml @@ -2,6 +2,10 @@ name: Check frontend & libs on: [workflow_call] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref_name != 'main' }} + permissions: read-all jobs: diff --git a/.github/workflows/e2e-tests.yaml b/.github/workflows/e2e-tests.yaml index 515e340a98..4099acf0ce 100644 --- a/.github/workflows/e2e-tests.yaml +++ b/.github/workflows/e2e-tests.yaml @@ -2,6 +2,10 @@ name: E2E tests on: [workflow_call] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref_name != 'main' }} + permissions: read-all jobs: diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 2b017f857a..0efac55466 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -11,6 +11,10 @@ on: release: types: [published] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref_name != 'main' }} + permissions: read-all jobs: From 73e667ca88b65276d6a53b12376af403dd1d41be Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 05:34:18 +0200 Subject: [PATCH 16/35] ci: fix concurrency deadlock --- .github/workflows/check-backend.yaml | 2 +- .github/workflows/check-frontend.yaml | 2 +- .github/workflows/ci.yaml | 2 +- .github/workflows/e2e-tests.yaml | 2 +- .github/workflows/tests.yaml | 6 +++++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 36c504fcee..f4ac681e71 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -3,7 +3,7 @@ name: Check backend on: [workflow_call] concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: check-backend-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} permissions: read-all diff --git a/.github/workflows/check-frontend.yaml b/.github/workflows/check-frontend.yaml index 5f2c17fa13..a0a9cc8960 100644 --- a/.github/workflows/check-frontend.yaml +++ b/.github/workflows/check-frontend.yaml @@ -3,7 +3,7 @@ name: Check frontend & libs on: [workflow_call] concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: check-frontend-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} permissions: read-all diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5b87f21106..aca23b360e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -16,7 +16,7 @@ on: - LICENSE concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ci-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} permissions: read-all diff --git a/.github/workflows/e2e-tests.yaml b/.github/workflows/e2e-tests.yaml index 4099acf0ce..cc539d79a6 100644 --- a/.github/workflows/e2e-tests.yaml +++ b/.github/workflows/e2e-tests.yaml @@ -3,7 +3,7 @@ name: E2E tests on: [workflow_call] concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: e2e-tests-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} permissions: read-all diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index a38acc1aa9..903ea356c1 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,7 +1,11 @@ -name: Tests +name: Unit & integration tests on: [workflow_call] +concurrency: + group: tests-${{ github.ref }} + cancel-in-progress: ${{ github.ref_name != 'main' }} + permissions: read-all jobs: From 2fc73342fcbcbdd0be6db43ddd2fda6ffd03e1dc Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 05:34:52 +0200 Subject: [PATCH 17/35] ci: fix copilot setup steps uv command --- .github/workflows/copilot-setup-steps.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yaml b/.github/workflows/copilot-setup-steps.yaml index ee3651c69e..e943c0d4f8 100644 --- a/.github/workflows/copilot-setup-steps.yaml +++ b/.github/workflows/copilot-setup-steps.yaml @@ -38,4 +38,4 @@ jobs: with: python-version: "3.10" uv-version: "latest" - uv-args: "--all-packages --all-extras --dev" \ No newline at end of file + uv-args: "-all-extras --dev" \ No newline at end of file From ddac0230bc7974f74ea4cf8a43514c630a53df6a Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 05:38:26 +0200 Subject: [PATCH 18/35] ci: fix copilot setup steps uv command --- .github/workflows/copilot-setup-steps.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yaml b/.github/workflows/copilot-setup-steps.yaml index e943c0d4f8..350842cefe 100644 --- a/.github/workflows/copilot-setup-steps.yaml +++ b/.github/workflows/copilot-setup-steps.yaml @@ -38,4 +38,4 @@ jobs: with: python-version: "3.10" uv-version: "latest" - uv-args: "-all-extras --dev" \ No newline at end of file + uv-args: "--all-extras --dev" \ No newline at end of file From 8b862bc68ea51486fae066b86346212a5ebdb1d7 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:19:50 +0200 Subject: [PATCH 19/35] ci: try create separate checks for check workflows --- .github/actions/check-complete/action.yaml | 26 ++++++++++++++ .github/actions/check-start/action.yaml | 30 ++++++++++++++++ .github/actions/pnpm-node-install/action.yaml | 2 +- .github/workflows/check-backend.yaml | 34 ++++++++++++++++++- 4 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 .github/actions/check-complete/action.yaml create mode 100644 .github/actions/check-start/action.yaml diff --git a/.github/actions/check-complete/action.yaml b/.github/actions/check-complete/action.yaml new file mode 100644 index 0000000000..72b3e82826 --- /dev/null +++ b/.github/actions/check-complete/action.yaml @@ -0,0 +1,26 @@ +name: Complete GitHub check +description: Complete a GitHub check run based on a step outcome + +inputs: + check_id: + description: ID of the check run to update + required: true + check_outcome: + description: Outcome of the step (success, failure, cancelled, skipped) + required: true + +runs: + using: composite + steps: + - uses: actions/github-script@v8 + with: + script: | + const conclusion = '${{ inputs.check_outcome }}' === 'success' ? 'success' : 'failure'; + await github.rest.checks.update({ + owner: context.repo.owner, + repo: context.repo.repo, + check_run_id: parseInt('${{ inputs.check_id }}'), + status: 'completed', + conclusion: conclusion + }); + diff --git a/.github/actions/check-start/action.yaml b/.github/actions/check-start/action.yaml new file mode 100644 index 0000000000..fd4eae106b --- /dev/null +++ b/.github/actions/check-start/action.yaml @@ -0,0 +1,30 @@ +name: Start GitHub check +description: Create a GitHub check run in progress state + +inputs: + check_name: + description: Check name + required: true +outputs: + check_id: + description: ID of the created check run + +runs: + using: composite + steps: + - uses: actions/github-script@v8 + id: script + with: + script: | + const check = await github.rest.checks.create({ + owner: context.repo.owner, + repo: context.repo.repo, + name: '${{ inputs.check_name }}', + head_sha: context.sha, + status: 'in_progress' + }); + return check.data.id.toString(); + - name: Set output + shell: bash + run: echo "check_id=${{ steps.script.outputs.result }}" >> $GITHUB_OUTPUT + diff --git a/.github/actions/pnpm-node-install/action.yaml b/.github/actions/pnpm-node-install/action.yaml index 9e0efd274e..a7e2cd8d90 100644 --- a/.github/actions/pnpm-node-install/action.yaml +++ b/.github/actions/pnpm-node-install/action.yaml @@ -5,7 +5,7 @@ inputs: node-version: description: Node.js version required: true - default: '24.3.0' # Switch to 'lts' as soon as Node 24 reaches LTS status. + default: 'lts' runs: using: composite diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index f4ac681e71..61ea8234fe 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -6,7 +6,9 @@ concurrency: group: check-backend-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} -permissions: read-all +permissions: + contents: read + checks: write jobs: check-backend: @@ -20,9 +22,39 @@ jobs: with: uv-args: --no-install-workspace --all-extras --dev working-directory: ${{ env.BACKEND_DIR }} + + - uses: ./.github/actions/check-start + id: linting-start + with: + check_name: 'Linting' - name: Lint backend + id: linting-run run: uv run --no-project scripts/lint.py + - uses: ./.github/actions/check-complete + with: + check_id: ${{ steps.linting-start.outputs.check_id }} + check_outcome: ${{ steps.linting-run.outcome }} + + - uses: ./.github/actions/check-start + id: formatting-start + with: + check_name: 'Formatting' - name: Check backend formatting + id: formatting-run run: uv run --no-project scripts/format.py --check + - uses: ./.github/actions/check-complete + with: + check_id: ${{ steps.formatting-start.outputs.check_id }} + check_outcome: ${{ steps.formatting-run.outcome }} + + - uses: ./.github/actions/check-start + id: typechecking-start + with: + check_name: 'Type checking' - name: Typecheck backend + id: typechecking-run run: uv run --no-project scripts/type_check.py + - uses: ./.github/actions/check-complete + with: + check_id: ${{ steps.typechecking-start.outputs.check_id }} + check_outcome: ${{ steps.typechecking-run.outcome }} From 0e132eb4d6614dd17ec2d99deebe17fa8df17f1d Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:20:39 +0200 Subject: [PATCH 20/35] ci: refactor checks --- .github/actions/check-complete/action.yaml | 26 ------------- .github/actions/check-run/action.yaml | 43 ++++++++++++++++++++++ .github/actions/check-start/action.yaml | 30 --------------- .github/workflows/check-backend.yaml | 40 ++++---------------- 4 files changed, 51 insertions(+), 88 deletions(-) delete mode 100644 .github/actions/check-complete/action.yaml create mode 100644 .github/actions/check-run/action.yaml delete mode 100644 .github/actions/check-start/action.yaml diff --git a/.github/actions/check-complete/action.yaml b/.github/actions/check-complete/action.yaml deleted file mode 100644 index 72b3e82826..0000000000 --- a/.github/actions/check-complete/action.yaml +++ /dev/null @@ -1,26 +0,0 @@ -name: Complete GitHub check -description: Complete a GitHub check run based on a step outcome - -inputs: - check_id: - description: ID of the check run to update - required: true - check_outcome: - description: Outcome of the step (success, failure, cancelled, skipped) - required: true - -runs: - using: composite - steps: - - uses: actions/github-script@v8 - with: - script: | - const conclusion = '${{ inputs.check_outcome }}' === 'success' ? 'success' : 'failure'; - await github.rest.checks.update({ - owner: context.repo.owner, - repo: context.repo.repo, - check_run_id: parseInt('${{ inputs.check_id }}'), - status: 'completed', - conclusion: conclusion - }); - diff --git a/.github/actions/check-run/action.yaml b/.github/actions/check-run/action.yaml new file mode 100644 index 0000000000..7f1c27ae2b --- /dev/null +++ b/.github/actions/check-run/action.yaml @@ -0,0 +1,43 @@ +name: Run command with GitHub check +description: Create a GitHub check, run a command, and complete the check based on the command outcome + +inputs: + check_name: + description: Check name + required: true + command: + description: Command to run + required: true + +runs: + using: composite + steps: + - uses: actions/github-script@v8 + id: create-check + with: + script: | + const check = await github.rest.checks.create({ + owner: context.repo.owner, + repo: context.repo.repo, + name: '${{ inputs.check_name }}', + head_sha: context.sha, + status: 'in_progress' + }); + return check.data.id.toString(); + - name: Run command + id: run-command + shell: bash + run: ${{ inputs.command }} + - uses: actions/github-script@v8 + if: always() + with: + script: | + const conclusion = '${{ steps.run-command.outcome }}' === 'success' ? 'success' : 'failure'; + await github.rest.checks.update({ + owner: context.repo.owner, + repo: context.repo.repo, + check_run_id: parseInt('${{ steps.create-check.outputs.result }}'), + status: 'completed', + conclusion: conclusion + }); + diff --git a/.github/actions/check-start/action.yaml b/.github/actions/check-start/action.yaml deleted file mode 100644 index fd4eae106b..0000000000 --- a/.github/actions/check-start/action.yaml +++ /dev/null @@ -1,30 +0,0 @@ -name: Start GitHub check -description: Create a GitHub check run in progress state - -inputs: - check_name: - description: Check name - required: true -outputs: - check_id: - description: ID of the created check run - -runs: - using: composite - steps: - - uses: actions/github-script@v8 - id: script - with: - script: | - const check = await github.rest.checks.create({ - owner: context.repo.owner, - repo: context.repo.repo, - name: '${{ inputs.check_name }}', - head_sha: context.sha, - status: 'in_progress' - }); - return check.data.id.toString(); - - name: Set output - shell: bash - run: echo "check_id=${{ steps.script.outputs.result }}" >> $GITHUB_OUTPUT - diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 61ea8234fe..9c878327ba 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -13,48 +13,24 @@ permissions: jobs: check-backend: runs-on: ubuntu-latest - env: - BACKEND_DIR: ./backend steps: - uses: actions/checkout@v4 - uses: ./.github/actions/uv-python-install name: Install Python, uv and Python dependencies with: uv-args: --no-install-workspace --all-extras --dev - working-directory: ${{ env.BACKEND_DIR }} - - uses: ./.github/actions/check-start - id: linting-start + - uses: ./.github/actions/check-run with: check_name: 'Linting' - - name: Lint backend - id: linting-run - run: uv run --no-project scripts/lint.py - - uses: ./.github/actions/check-complete - with: - check_id: ${{ steps.linting-start.outputs.check_id }} - check_outcome: ${{ steps.linting-run.outcome }} - - - uses: ./.github/actions/check-start - id: formatting-start + command: uv run --no-project scripts/lint.py + + - uses: ./.github/actions/check-run with: check_name: 'Formatting' - - name: Check backend formatting - id: formatting-run - run: uv run --no-project scripts/format.py --check - - uses: ./.github/actions/check-complete - with: - check_id: ${{ steps.formatting-start.outputs.check_id }} - check_outcome: ${{ steps.formatting-run.outcome }} - - - uses: ./.github/actions/check-start - id: typechecking-start + command: uv run --no-project scripts/format.py --check + + - uses: ./.github/actions/check-run with: check_name: 'Type checking' - - name: Typecheck backend - id: typechecking-run - run: uv run --no-project scripts/type_check.py - - uses: ./.github/actions/check-complete - with: - check_id: ${{ steps.typechecking-start.outputs.check_id }} - check_outcome: ${{ steps.typechecking-run.outcome }} + command: uv run --no-project scripts/type_check.py From 7c7ba7d75f18ff7002c14f3223129f98c344eea9 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:25:30 +0200 Subject: [PATCH 21/35] ci: fix node version --- .github/actions/pnpm-node-install/action.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/pnpm-node-install/action.yaml b/.github/actions/pnpm-node-install/action.yaml index a7e2cd8d90..6cb04a483b 100644 --- a/.github/actions/pnpm-node-install/action.yaml +++ b/.github/actions/pnpm-node-install/action.yaml @@ -5,7 +5,7 @@ inputs: node-version: description: Node.js version required: true - default: 'lts' + default: 'lts/*' runs: using: composite @@ -15,7 +15,7 @@ runs: with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ inputs.node-version }} registry-url: 'https://registry.npmjs.org' From 23cfb3b2df85075a1e1d74629ce4ff36fa9c60f2 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:28:57 +0200 Subject: [PATCH 22/35] ci: fix permissions --- .github/workflows/ci.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index aca23b360e..60fdb46b13 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -19,7 +19,9 @@ concurrency: group: ci-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} -permissions: read-all +permissions: + contents: read + checks: write jobs: check-backend: From fb3cc2956e2e8f3cc6233e48296faa29e6dbd0de Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:33:28 +0200 Subject: [PATCH 23/35] ci: fix permissions #2 --- .github/workflows/ci.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 60fdb46b13..8dd832f5a3 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -20,8 +20,19 @@ concurrency: cancel-in-progress: ${{ github.ref_name != 'main' }} permissions: - contents: read + actions: read + artifact-metadata: read + attestations: read checks: write + contents: read + deployments: read + issues: read + discussions: read + packages: read + pages: read + pull-requests: read + security-events: read + statuses: read jobs: check-backend: From 3f582d033b4048a6776f754f1d107afa67632cc2 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:35:37 +0200 Subject: [PATCH 24/35] ci: fix permissions --- .github/workflows/ci.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8dd832f5a3..ebd40645e8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -26,11 +26,14 @@ permissions: checks: write contents: read deployments: read - issues: read discussions: read + id-token: read + issues: read + models: read packages: read pages: read pull-requests: read + repository-projects: read security-events: read statuses: read From f88c2dfcb4a7b03f1ac9c18b512a05cc99a8cdbd Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:36:11 +0200 Subject: [PATCH 25/35] ci: fix permissions --- .github/workflows/ci.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ebd40645e8..dc35a6870f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,7 +27,6 @@ permissions: contents: read deployments: read discussions: read - id-token: read issues: read models: read packages: read From ef9ab7d95fcf43aebe9a44ff5a66f1d6c60d9e1c Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:38:57 +0200 Subject: [PATCH 26/35] ci: fix permissions --- .github/workflows/ci.yaml | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index dc35a6870f..ff2fb93ab9 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -19,26 +19,14 @@ concurrency: group: ci-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} -permissions: - actions: read - artifact-metadata: read - attestations: read - checks: write - contents: read - deployments: read - discussions: read - issues: read - models: read - packages: read - pages: read - pull-requests: read - repository-projects: read - security-events: read - statuses: read +permissions: read-all jobs: check-backend: uses: ./.github/workflows/check-backend.yaml + permissions: + contents: read + checks: write secrets: inherit check-frontend: uses: ./.github/workflows/check-frontend.yaml From 522ba1855f29338aaa3301e28bafd2ba67979a35 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:42:23 +0200 Subject: [PATCH 27/35] ci: fix checks API endpoint name --- .github/actions/check-run/action.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/check-run/action.yaml b/.github/actions/check-run/action.yaml index 7f1c27ae2b..8b736e02ad 100644 --- a/.github/actions/check-run/action.yaml +++ b/.github/actions/check-run/action.yaml @@ -16,7 +16,7 @@ runs: id: create-check with: script: | - const check = await github.rest.checks.create({ + const check = await github.checks.create({ owner: context.repo.owner, repo: context.repo.repo, name: '${{ inputs.check_name }}', @@ -33,7 +33,7 @@ runs: with: script: | const conclusion = '${{ steps.run-command.outcome }}' === 'success' ? 'success' : 'failure'; - await github.rest.checks.update({ + await github.checks.update({ owner: context.repo.owner, repo: context.repo.repo, check_run_id: parseInt('${{ steps.create-check.outputs.result }}'), From 99be9d337b240f78e54b85305a6c9e19bc840c68 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:45:54 +0200 Subject: [PATCH 28/35] ci: fix check update --- .github/actions/check-run/action.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/actions/check-run/action.yaml b/.github/actions/check-run/action.yaml index 8b736e02ad..54ad451b15 100644 --- a/.github/actions/check-run/action.yaml +++ b/.github/actions/check-run/action.yaml @@ -16,7 +16,7 @@ runs: id: create-check with: script: | - const check = await github.checks.create({ + const check = await github.rest.checks.create({ owner: context.repo.owner, repo: context.repo.repo, name: '${{ inputs.check_name }}', @@ -33,10 +33,10 @@ runs: with: script: | const conclusion = '${{ steps.run-command.outcome }}' === 'success' ? 'success' : 'failure'; - await github.checks.update({ + await github.rest.checks.update({ owner: context.repo.owner, repo: context.repo.repo, - check_run_id: parseInt('${{ steps.create-check.outputs.result }}'), + check_run_id: '${{ steps.create-check.outputs.result }}', status: 'completed', conclusion: conclusion }); From b861f5191ceb349bce6e3b070e83e2e906079fbf Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:53:07 +0200 Subject: [PATCH 29/35] ci: fix check completion --- .github/actions/check-run/action.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/check-run/action.yaml b/.github/actions/check-run/action.yaml index 54ad451b15..ae6b883c8a 100644 --- a/.github/actions/check-run/action.yaml +++ b/.github/actions/check-run/action.yaml @@ -23,7 +23,7 @@ runs: head_sha: context.sha, status: 'in_progress' }); - return check.data.id.toString(); + return check.data.id; - name: Run command id: run-command shell: bash @@ -36,7 +36,7 @@ runs: await github.rest.checks.update({ owner: context.repo.owner, repo: context.repo.repo, - check_run_id: '${{ steps.create-check.outputs.result }}', + check_run_id: ${{ steps.create-check.outputs.result }}, status: 'completed', conclusion: conclusion }); From 3fab4ce34a85ed6eeca66092506dc41f995d8805 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 06:58:06 +0200 Subject: [PATCH 30/35] ci: frontend custom checks --- .github/workflows/check-backend.yaml | 6 +++--- .github/workflows/check-frontend.yaml | 25 ++++++++++++++++++------- .github/workflows/ci.yaml | 3 +++ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index 9c878327ba..c96bd447fe 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -22,15 +22,15 @@ jobs: - uses: ./.github/actions/check-run with: - check_name: 'Linting' + check_name: 'Linting: backend' command: uv run --no-project scripts/lint.py - uses: ./.github/actions/check-run with: - check_name: 'Formatting' + check_name: 'Formatting: backend' command: uv run --no-project scripts/format.py --check - uses: ./.github/actions/check-run with: - check_name: 'Type checking' + check_name: 'Type checking: backend' command: uv run --no-project scripts/type_check.py diff --git a/.github/workflows/check-frontend.yaml b/.github/workflows/check-frontend.yaml index a0a9cc8960..e9921ecd22 100644 --- a/.github/workflows/check-frontend.yaml +++ b/.github/workflows/check-frontend.yaml @@ -6,7 +6,9 @@ concurrency: group: check-frontend-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} -permissions: read-all +permissions: + contents: read + checks: write jobs: check-frontend: @@ -15,9 +17,18 @@ jobs: - uses: actions/checkout@v4 - uses: ./.github/actions/pnpm-node-install name: Install Node, pnpm and dependencies. - - name: Lint frontend & libs - run: pnpm lint - - name: Check frontend & libs formatting - run: pnpm format - - name: Typecheck frontend & libs - run: pnpm type-check + + - uses: ./.github/actions/check-run + with: + check_name: 'Linting: frontend' + command: pnpm lint + + - uses: ./.github/actions/check-run + with: + check_name: 'Formatting: frontend' + command: pnpm format + + - uses: ./.github/actions/check-run + with: + check_name: 'Type checking: frontend' + command: pnpm type-check diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ff2fb93ab9..54e486f454 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,6 +30,9 @@ jobs: secrets: inherit check-frontend: uses: ./.github/workflows/check-frontend.yaml + permissions: + contents: read + checks: write secrets: inherit tests: uses: ./.github/workflows/tests.yaml From fdc5f714ad951a672f81da4d3aad26aa8da78c9a Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 07:01:04 +0200 Subject: [PATCH 31/35] ci: fix tests workflow name --- .github/workflows/tests.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 903ea356c1..b4cf00d75d 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -14,6 +14,7 @@ jobs: strategy: matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] + name: python ${{ matrix.python-version }} env: BACKEND_DIR: ./backend steps: From 2c443a64324169f03bf96229a1362e0ecb8b9d22 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 07:10:24 +0200 Subject: [PATCH 32/35] ci: fix workflow names --- .github/workflows/check-backend.yaml | 1 + .github/workflows/check-frontend.yaml | 1 + .github/workflows/e2e-tests.yaml | 1 + 3 files changed, 3 insertions(+) diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index c96bd447fe..ab6de62c1f 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -13,6 +13,7 @@ permissions: jobs: check-backend: runs-on: ubuntu-latest + name: Run checks steps: - uses: actions/checkout@v4 - uses: ./.github/actions/uv-python-install diff --git a/.github/workflows/check-frontend.yaml b/.github/workflows/check-frontend.yaml index e9921ecd22..5d8764df24 100644 --- a/.github/workflows/check-frontend.yaml +++ b/.github/workflows/check-frontend.yaml @@ -13,6 +13,7 @@ permissions: jobs: check-frontend: runs-on: ubuntu-latest + name: Run checks steps: - uses: actions/checkout@v4 - uses: ./.github/actions/pnpm-node-install diff --git a/.github/workflows/e2e-tests.yaml b/.github/workflows/e2e-tests.yaml index cc539d79a6..1d154f66ed 100644 --- a/.github/workflows/e2e-tests.yaml +++ b/.github/workflows/e2e-tests.yaml @@ -14,6 +14,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] + name: ${{ matrix.os }} env: BACKEND_DIR: ./backend steps: From 1f4a0a7d5b8509889782772682d7637e88558ca0 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 07:10:34 +0200 Subject: [PATCH 33/35] ci: change check name --- .github/actions/check-run/action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/check-run/action.yaml b/.github/actions/check-run/action.yaml index ae6b883c8a..28cf2a378f 100644 --- a/.github/actions/check-run/action.yaml +++ b/.github/actions/check-run/action.yaml @@ -19,7 +19,7 @@ runs: const check = await github.rest.checks.create({ owner: context.repo.owner, repo: context.repo.repo, - name: '${{ inputs.check_name }}', + name: '${{ github.workflow }} / ${inputs.check_name }}', head_sha: context.sha, status: 'in_progress' }); From 712586b193631fdf8453eee52d594f1e4756be44 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 07:12:09 +0200 Subject: [PATCH 34/35] ci: fix check name --- .github/actions/check-run/action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/check-run/action.yaml b/.github/actions/check-run/action.yaml index 28cf2a378f..eeb1ff0b74 100644 --- a/.github/actions/check-run/action.yaml +++ b/.github/actions/check-run/action.yaml @@ -19,7 +19,7 @@ runs: const check = await github.rest.checks.create({ owner: context.repo.owner, repo: context.repo.repo, - name: '${{ github.workflow }} / ${inputs.check_name }}', + name: '${{ github.workflow }} / ${{inputs.check_name }}', head_sha: context.sha, status: 'in_progress' }); From 652b0f953e419a2f5efba93522e83a8ebe462033 Mon Sep 17 00:00:00 2001 From: Aleksandr Vishniakov Date: Mon, 24 Nov 2025 07:19:22 +0200 Subject: [PATCH 35/35] ci: fix check names --- .github/actions/check-run/action.yaml | 2 +- .github/workflows/check-backend.yaml | 2 +- .github/workflows/check-frontend.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/actions/check-run/action.yaml b/.github/actions/check-run/action.yaml index eeb1ff0b74..ae6b883c8a 100644 --- a/.github/actions/check-run/action.yaml +++ b/.github/actions/check-run/action.yaml @@ -19,7 +19,7 @@ runs: const check = await github.rest.checks.create({ owner: context.repo.owner, repo: context.repo.repo, - name: '${{ github.workflow }} / ${{inputs.check_name }}', + name: '${{ inputs.check_name }}', head_sha: context.sha, status: 'in_progress' }); diff --git a/.github/workflows/check-backend.yaml b/.github/workflows/check-backend.yaml index ab6de62c1f..e909b2494f 100644 --- a/.github/workflows/check-backend.yaml +++ b/.github/workflows/check-backend.yaml @@ -13,7 +13,7 @@ permissions: jobs: check-backend: runs-on: ubuntu-latest - name: Run checks + name: run checks steps: - uses: actions/checkout@v4 - uses: ./.github/actions/uv-python-install diff --git a/.github/workflows/check-frontend.yaml b/.github/workflows/check-frontend.yaml index 5d8764df24..5674c63343 100644 --- a/.github/workflows/check-frontend.yaml +++ b/.github/workflows/check-frontend.yaml @@ -13,7 +13,7 @@ permissions: jobs: check-frontend: runs-on: ubuntu-latest - name: Run checks + name: run checks steps: - uses: actions/checkout@v4 - uses: ./.github/actions/pnpm-node-install