From 711d62be815ba5bb1971d3c6ba37e57fcbfa1a22 Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 17 Feb 2026 16:22:55 +0000 Subject: [PATCH 1/8] Integrations separate CI workflows --- .github/workflows/integration-aiohttp.yml | 60 +++++++++++++++++++++ .github/workflows/integration-django.yml | 60 +++++++++++++++++++++ .github/workflows/integration-falcon.yml | 60 +++++++++++++++++++++ .github/workflows/integration-fastapi.yml | 60 +++++++++++++++++++++ .github/workflows/integration-flask.yml | 60 +++++++++++++++++++++ .github/workflows/integration-requests.yml | 60 +++++++++++++++++++++ .github/workflows/integration-starlette.yml | 60 +++++++++++++++++++++ .github/workflows/integration-werkzeug.yml | 60 +++++++++++++++++++++ .github/workflows/python-test.yml | 2 +- 9 files changed, 481 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/integration-aiohttp.yml create mode 100644 .github/workflows/integration-django.yml create mode 100644 .github/workflows/integration-falcon.yml create mode 100644 .github/workflows/integration-fastapi.yml create mode 100644 .github/workflows/integration-flask.yml create mode 100644 .github/workflows/integration-requests.yml create mode 100644 .github/workflows/integration-starlette.yml create mode 100644 .github/workflows/integration-werkzeug.yml diff --git a/.github/workflows/integration-aiohttp.yml b/.github/workflows/integration-aiohttp.yml new file mode 100644 index 00000000..61137ceb --- /dev/null +++ b/.github/workflows/integration-aiohttp.yml @@ -0,0 +1,60 @@ +name: Integration aiohttp + +on: + push: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + id-token: write + +jobs: + integration-aiohttp: + name: "Integration aiohttp" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/aiohttp + + - name: Upload coverage + uses: codecov/codecov-action@v5 diff --git a/.github/workflows/integration-django.yml b/.github/workflows/integration-django.yml new file mode 100644 index 00000000..938e8cab --- /dev/null +++ b/.github/workflows/integration-django.yml @@ -0,0 +1,60 @@ +name: Integration django + +on: + push: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + id-token: write + +jobs: + integration-django: + name: "Integration django" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/django + + - name: Upload coverage + uses: codecov/codecov-action@v5 diff --git a/.github/workflows/integration-falcon.yml b/.github/workflows/integration-falcon.yml new file mode 100644 index 00000000..20b23585 --- /dev/null +++ b/.github/workflows/integration-falcon.yml @@ -0,0 +1,60 @@ +name: Integration falcon + +on: + push: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + id-token: write + +jobs: + integration-falcon: + name: "Integration falcon" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/falcon + + - name: Upload coverage + uses: codecov/codecov-action@v5 diff --git a/.github/workflows/integration-fastapi.yml b/.github/workflows/integration-fastapi.yml new file mode 100644 index 00000000..455c610d --- /dev/null +++ b/.github/workflows/integration-fastapi.yml @@ -0,0 +1,60 @@ +name: Integration fastapi + +on: + push: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + id-token: write + +jobs: + integration-fastapi: + name: "Integration fastapi" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/fastapi + + - name: Upload coverage + uses: codecov/codecov-action@v5 diff --git a/.github/workflows/integration-flask.yml b/.github/workflows/integration-flask.yml new file mode 100644 index 00000000..dd6f05a4 --- /dev/null +++ b/.github/workflows/integration-flask.yml @@ -0,0 +1,60 @@ +name: Integration flask + +on: + push: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + id-token: write + +jobs: + integration-flask: + name: "Integration flask" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/flask + + - name: Upload coverage + uses: codecov/codecov-action@v5 diff --git a/.github/workflows/integration-requests.yml b/.github/workflows/integration-requests.yml new file mode 100644 index 00000000..ea7b960d --- /dev/null +++ b/.github/workflows/integration-requests.yml @@ -0,0 +1,60 @@ +name: Integration requests + +on: + push: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + id-token: write + +jobs: + integration-requests: + name: "Integration requests" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/requests + + - name: Upload coverage + uses: codecov/codecov-action@v5 diff --git a/.github/workflows/integration-starlette.yml b/.github/workflows/integration-starlette.yml new file mode 100644 index 00000000..7d038df0 --- /dev/null +++ b/.github/workflows/integration-starlette.yml @@ -0,0 +1,60 @@ +name: Integration starlette + +on: + push: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + id-token: write + +jobs: + integration-starlette: + name: "Integration starlette" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/starlette + + - name: Upload coverage + uses: codecov/codecov-action@v5 diff --git a/.github/workflows/integration-werkzeug.yml b/.github/workflows/integration-werkzeug.yml new file mode 100644 index 00000000..cf7b7456 --- /dev/null +++ b/.github/workflows/integration-werkzeug.yml @@ -0,0 +1,60 @@ +name: Integration werkzeug + +on: + push: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + id-token: write + +jobs: + integration-werkzeug: + name: "Integration werkzeug" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/werkzeug + + - name: Upload coverage + uses: codecov/codecov-action@v5 diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index 96988733..eb9ac809 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -53,7 +53,7 @@ jobs: - name: Test env: PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest + run: poetry run pytest --ignore=tests/integration/contrib - name: Static type check run: poetry run mypy From 2d72e1a97d6d1c2972a5a9694571f2e7e51d2774 Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 17 Feb 2026 21:35:14 +0000 Subject: [PATCH 2/8] Integration reusable workflow --- .github/workflows/build-docs.yml | 2 +- .github/workflows/integration-aiohttp.yml | 55 ++--------------- .github/workflows/integration-django.yml | 55 ++--------------- .github/workflows/integration-falcon.yml | 55 ++--------------- .github/workflows/integration-fastapi.yml | 55 ++--------------- .github/workflows/integration-flask.yml | 55 ++--------------- .github/workflows/integration-requests.yml | 55 ++--------------- .github/workflows/integration-reusable.yml | 66 +++++++++++++++++++++ .github/workflows/integration-starlette.yml | 55 ++--------------- .github/workflows/integration-werkzeug.yml | 55 ++--------------- .github/workflows/python-test.yml | 4 +- 11 files changed, 101 insertions(+), 411 deletions(-) create mode 100644 .github/workflows/integration-reusable.yml diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 3dc5f2b5..fa332708 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -18,7 +18,7 @@ jobs: - name: Get full Python version id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + run: echo "version=$(python -c \"import sys; print('-'.join(str(v) for v in sys.version_info))\")" >> "$GITHUB_OUTPUT" - name: Set up poetry uses: Gr1N/setup-poetry@v9 diff --git a/.github/workflows/integration-aiohttp.yml b/.github/workflows/integration-aiohttp.yml index 61137ceb..768186c0 100644 --- a/.github/workflows/integration-aiohttp.yml +++ b/.github/workflows/integration-aiohttp.yml @@ -5,56 +5,9 @@ on: pull_request: types: [opened, synchronize] -permissions: - contents: read - id-token: write - jobs: integration-aiohttp: - name: "Integration aiohttp" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/aiohttp - - - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: ./.github/workflows/integration-reusable.yml + with: + integration: aiohttp + secrets: inherit diff --git a/.github/workflows/integration-django.yml b/.github/workflows/integration-django.yml index 938e8cab..1c7a0bd2 100644 --- a/.github/workflows/integration-django.yml +++ b/.github/workflows/integration-django.yml @@ -5,56 +5,9 @@ on: pull_request: types: [opened, synchronize] -permissions: - contents: read - id-token: write - jobs: integration-django: - name: "Integration django" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/django - - - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: ./.github/workflows/integration-reusable.yml + with: + integration: django + secrets: inherit diff --git a/.github/workflows/integration-falcon.yml b/.github/workflows/integration-falcon.yml index 20b23585..fbf44417 100644 --- a/.github/workflows/integration-falcon.yml +++ b/.github/workflows/integration-falcon.yml @@ -5,56 +5,9 @@ on: pull_request: types: [opened, synchronize] -permissions: - contents: read - id-token: write - jobs: integration-falcon: - name: "Integration falcon" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/falcon - - - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: ./.github/workflows/integration-reusable.yml + with: + integration: falcon + secrets: inherit diff --git a/.github/workflows/integration-fastapi.yml b/.github/workflows/integration-fastapi.yml index 455c610d..0014a0c9 100644 --- a/.github/workflows/integration-fastapi.yml +++ b/.github/workflows/integration-fastapi.yml @@ -5,56 +5,9 @@ on: pull_request: types: [opened, synchronize] -permissions: - contents: read - id-token: write - jobs: integration-fastapi: - name: "Integration fastapi" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/fastapi - - - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: ./.github/workflows/integration-reusable.yml + with: + integration: fastapi + secrets: inherit diff --git a/.github/workflows/integration-flask.yml b/.github/workflows/integration-flask.yml index dd6f05a4..e976ab29 100644 --- a/.github/workflows/integration-flask.yml +++ b/.github/workflows/integration-flask.yml @@ -5,56 +5,9 @@ on: pull_request: types: [opened, synchronize] -permissions: - contents: read - id-token: write - jobs: integration-flask: - name: "Integration flask" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/flask - - - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: ./.github/workflows/integration-reusable.yml + with: + integration: flask + secrets: inherit diff --git a/.github/workflows/integration-requests.yml b/.github/workflows/integration-requests.yml index ea7b960d..a315efb7 100644 --- a/.github/workflows/integration-requests.yml +++ b/.github/workflows/integration-requests.yml @@ -5,56 +5,9 @@ on: pull_request: types: [opened, synchronize] -permissions: - contents: read - id-token: write - jobs: integration-requests: - name: "Integration requests" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/requests - - - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: ./.github/workflows/integration-reusable.yml + with: + integration: requests + secrets: inherit diff --git a/.github/workflows/integration-reusable.yml b/.github/workflows/integration-reusable.yml new file mode 100644 index 00000000..0b4d267c --- /dev/null +++ b/.github/workflows/integration-reusable.yml @@ -0,0 +1,66 @@ +name: Integration reusable + +on: + workflow_call: + inputs: + integration: + description: Integration name under tests/integration/contrib + required: true + type: string + +permissions: + contents: read + id-token: write + +jobs: + test: + name: "Integration ${{ inputs.integration }}" + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: echo "version=$(python -c \"import sys; print('-'.join(str(v) for v in sys.version_info))\")" >> "$GITHUB_OUTPUT" + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/${{ inputs.integration }} + + - name: Upload coverage + uses: codecov/codecov-action@v5 + with: + flags: integration-${{ inputs.integration }},python-${{ matrix.python-version }} + name: integration-${{ inputs.integration }}-python-${{ matrix.python-version }} diff --git a/.github/workflows/integration-starlette.yml b/.github/workflows/integration-starlette.yml index 7d038df0..d6cd32cb 100644 --- a/.github/workflows/integration-starlette.yml +++ b/.github/workflows/integration-starlette.yml @@ -5,56 +5,9 @@ on: pull_request: types: [opened, synchronize] -permissions: - contents: read - id-token: write - jobs: integration-starlette: - name: "Integration starlette" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/starlette - - - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: ./.github/workflows/integration-reusable.yml + with: + integration: starlette + secrets: inherit diff --git a/.github/workflows/integration-werkzeug.yml b/.github/workflows/integration-werkzeug.yml index cf7b7456..427efe04 100644 --- a/.github/workflows/integration-werkzeug.yml +++ b/.github/workflows/integration-werkzeug.yml @@ -5,56 +5,9 @@ on: pull_request: types: [opened, synchronize] -permissions: - contents: read - id-token: write - jobs: integration-werkzeug: - name: "Integration werkzeug" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/werkzeug - - - name: Upload coverage - uses: codecov/codecov-action@v5 + uses: ./.github/workflows/integration-reusable.yml + with: + integration: werkzeug + secrets: inherit diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index eb9ac809..5164685d 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -26,7 +26,7 @@ jobs: - name: Get full Python version id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + run: echo "version=$(python -c \"import sys; print('-'.join(str(v) for v in sys.version_info))\")" >> "$GITHUB_OUTPUT" - name: Set up poetry uses: Gr1N/setup-poetry@v9 @@ -78,7 +78,7 @@ jobs: - name: Get full Python version id: full-python-version - run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + run: echo "version=$(python -c \"import sys; print('-'.join(str(v) for v in sys.version_info))\")" >> "$GITHUB_OUTPUT" - name: Set up poetry uses: Gr1N/setup-poetry@v9 From 5bce5d4f8a218e5a657259fd94a41d131358135d Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 17 Feb 2026 21:39:57 +0000 Subject: [PATCH 3/8] Add small things --- .github/workflows/integration-aiohttp.yml | 5 ++++- .github/workflows/integration-django.yml | 5 ++++- .github/workflows/integration-falcon.yml | 5 ++++- .github/workflows/integration-fastapi.yml | 5 ++++- .github/workflows/integration-flask.yml | 5 ++++- .github/workflows/integration-requests.yml | 5 ++++- .github/workflows/integration-starlette.yml | 5 ++++- .github/workflows/integration-werkzeug.yml | 5 ++++- 8 files changed, 32 insertions(+), 8 deletions(-) diff --git a/.github/workflows/integration-aiohttp.yml b/.github/workflows/integration-aiohttp.yml index 768186c0..0ed0368f 100644 --- a/.github/workflows/integration-aiohttp.yml +++ b/.github/workflows/integration-aiohttp.yml @@ -5,9 +5,12 @@ on: pull_request: types: [opened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: integration-aiohttp: uses: ./.github/workflows/integration-reusable.yml with: integration: aiohttp - secrets: inherit diff --git a/.github/workflows/integration-django.yml b/.github/workflows/integration-django.yml index 1c7a0bd2..2f6ef95c 100644 --- a/.github/workflows/integration-django.yml +++ b/.github/workflows/integration-django.yml @@ -5,9 +5,12 @@ on: pull_request: types: [opened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: integration-django: uses: ./.github/workflows/integration-reusable.yml with: integration: django - secrets: inherit diff --git a/.github/workflows/integration-falcon.yml b/.github/workflows/integration-falcon.yml index fbf44417..74301a14 100644 --- a/.github/workflows/integration-falcon.yml +++ b/.github/workflows/integration-falcon.yml @@ -5,9 +5,12 @@ on: pull_request: types: [opened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: integration-falcon: uses: ./.github/workflows/integration-reusable.yml with: integration: falcon - secrets: inherit diff --git a/.github/workflows/integration-fastapi.yml b/.github/workflows/integration-fastapi.yml index 0014a0c9..b854f944 100644 --- a/.github/workflows/integration-fastapi.yml +++ b/.github/workflows/integration-fastapi.yml @@ -5,9 +5,12 @@ on: pull_request: types: [opened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: integration-fastapi: uses: ./.github/workflows/integration-reusable.yml with: integration: fastapi - secrets: inherit diff --git a/.github/workflows/integration-flask.yml b/.github/workflows/integration-flask.yml index e976ab29..743f35c6 100644 --- a/.github/workflows/integration-flask.yml +++ b/.github/workflows/integration-flask.yml @@ -5,9 +5,12 @@ on: pull_request: types: [opened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: integration-flask: uses: ./.github/workflows/integration-reusable.yml with: integration: flask - secrets: inherit diff --git a/.github/workflows/integration-requests.yml b/.github/workflows/integration-requests.yml index a315efb7..c8bf8302 100644 --- a/.github/workflows/integration-requests.yml +++ b/.github/workflows/integration-requests.yml @@ -5,9 +5,12 @@ on: pull_request: types: [opened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: integration-requests: uses: ./.github/workflows/integration-reusable.yml with: integration: requests - secrets: inherit diff --git a/.github/workflows/integration-starlette.yml b/.github/workflows/integration-starlette.yml index d6cd32cb..15f72cc4 100644 --- a/.github/workflows/integration-starlette.yml +++ b/.github/workflows/integration-starlette.yml @@ -5,9 +5,12 @@ on: pull_request: types: [opened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: integration-starlette: uses: ./.github/workflows/integration-reusable.yml with: integration: starlette - secrets: inherit diff --git a/.github/workflows/integration-werkzeug.yml b/.github/workflows/integration-werkzeug.yml index 427efe04..d520637c 100644 --- a/.github/workflows/integration-werkzeug.yml +++ b/.github/workflows/integration-werkzeug.yml @@ -5,9 +5,12 @@ on: pull_request: types: [opened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: integration-werkzeug: uses: ./.github/workflows/integration-reusable.yml with: integration: werkzeug - secrets: inherit From 20e714e7643256babca97572974811caccec88c5 Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 17 Feb 2026 21:47:54 +0000 Subject: [PATCH 4/8] Github output fix --- .github/workflows/build-docs.yml | 2 +- .github/workflows/integration-reusable.yml | 2 +- .github/workflows/python-test.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index fa332708..d7686db9 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -18,7 +18,7 @@ jobs: - name: Get full Python version id: full-python-version - run: echo "version=$(python -c \"import sys; print('-'.join(str(v) for v in sys.version_info))\")" >> "$GITHUB_OUTPUT" + run: python -c "import sys; print(f\"version={'-'.join(str(v) for v in sys.version_info)}\")" >> "$GITHUB_OUTPUT" - name: Set up poetry uses: Gr1N/setup-poetry@v9 diff --git a/.github/workflows/integration-reusable.yml b/.github/workflows/integration-reusable.yml index 0b4d267c..82c0b08c 100644 --- a/.github/workflows/integration-reusable.yml +++ b/.github/workflows/integration-reusable.yml @@ -30,7 +30,7 @@ jobs: - name: Get full Python version id: full-python-version - run: echo "version=$(python -c \"import sys; print('-'.join(str(v) for v in sys.version_info))\")" >> "$GITHUB_OUTPUT" + run: python -c "import sys; print(f\"version={'-'.join(str(v) for v in sys.version_info)}\")" >> "$GITHUB_OUTPUT" - name: Set up poetry uses: Gr1N/setup-poetry@v9 diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index 5164685d..fe067047 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -26,7 +26,7 @@ jobs: - name: Get full Python version id: full-python-version - run: echo "version=$(python -c \"import sys; print('-'.join(str(v) for v in sys.version_info))\")" >> "$GITHUB_OUTPUT" + run: python -c "import sys; print(f\"version={'-'.join(str(v) for v in sys.version_info)}\")" >> "$GITHUB_OUTPUT" - name: Set up poetry uses: Gr1N/setup-poetry@v9 @@ -78,7 +78,7 @@ jobs: - name: Get full Python version id: full-python-version - run: echo "version=$(python -c \"import sys; print('-'.join(str(v) for v in sys.version_info))\")" >> "$GITHUB_OUTPUT" + run: python -c "import sys; print(f\"version={'-'.join(str(v) for v in sys.version_info)}\")" >> "$GITHUB_OUTPUT" - name: Set up poetry uses: Gr1N/setup-poetry@v9 From 80aa54b4319817c1e7e7315a18a4e904060742ca Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 17 Feb 2026 21:56:30 +0000 Subject: [PATCH 5/8] Permissions fix --- .github/workflows/integration-aiohttp.yml | 4 ++++ .github/workflows/integration-django.yml | 4 ++++ .github/workflows/integration-falcon.yml | 4 ++++ .github/workflows/integration-fastapi.yml | 4 ++++ .github/workflows/integration-flask.yml | 4 ++++ .github/workflows/integration-requests.yml | 4 ++++ .github/workflows/integration-starlette.yml | 4 ++++ .github/workflows/integration-werkzeug.yml | 4 ++++ 8 files changed, 32 insertions(+) diff --git a/.github/workflows/integration-aiohttp.yml b/.github/workflows/integration-aiohttp.yml index 0ed0368f..f4fa22d5 100644 --- a/.github/workflows/integration-aiohttp.yml +++ b/.github/workflows/integration-aiohttp.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + id-token: write + jobs: integration-aiohttp: uses: ./.github/workflows/integration-reusable.yml diff --git a/.github/workflows/integration-django.yml b/.github/workflows/integration-django.yml index 2f6ef95c..26303b55 100644 --- a/.github/workflows/integration-django.yml +++ b/.github/workflows/integration-django.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + id-token: write + jobs: integration-django: uses: ./.github/workflows/integration-reusable.yml diff --git a/.github/workflows/integration-falcon.yml b/.github/workflows/integration-falcon.yml index 74301a14..d582fbe9 100644 --- a/.github/workflows/integration-falcon.yml +++ b/.github/workflows/integration-falcon.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + id-token: write + jobs: integration-falcon: uses: ./.github/workflows/integration-reusable.yml diff --git a/.github/workflows/integration-fastapi.yml b/.github/workflows/integration-fastapi.yml index b854f944..4cc0d3d5 100644 --- a/.github/workflows/integration-fastapi.yml +++ b/.github/workflows/integration-fastapi.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + id-token: write + jobs: integration-fastapi: uses: ./.github/workflows/integration-reusable.yml diff --git a/.github/workflows/integration-flask.yml b/.github/workflows/integration-flask.yml index 743f35c6..d6a44b96 100644 --- a/.github/workflows/integration-flask.yml +++ b/.github/workflows/integration-flask.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + id-token: write + jobs: integration-flask: uses: ./.github/workflows/integration-reusable.yml diff --git a/.github/workflows/integration-requests.yml b/.github/workflows/integration-requests.yml index c8bf8302..a4620346 100644 --- a/.github/workflows/integration-requests.yml +++ b/.github/workflows/integration-requests.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + id-token: write + jobs: integration-requests: uses: ./.github/workflows/integration-reusable.yml diff --git a/.github/workflows/integration-starlette.yml b/.github/workflows/integration-starlette.yml index 15f72cc4..47b44a9c 100644 --- a/.github/workflows/integration-starlette.yml +++ b/.github/workflows/integration-starlette.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + id-token: write + jobs: integration-starlette: uses: ./.github/workflows/integration-reusable.yml diff --git a/.github/workflows/integration-werkzeug.yml b/.github/workflows/integration-werkzeug.yml index d520637c..4fc1fcd6 100644 --- a/.github/workflows/integration-werkzeug.yml +++ b/.github/workflows/integration-werkzeug.yml @@ -9,6 +9,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + id-token: write + jobs: integration-werkzeug: uses: ./.github/workflows/integration-reusable.yml From 78b5fc614bf4cbc2c51f919e10c97f6cc33308fa Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 17 Feb 2026 22:24:51 +0000 Subject: [PATCH 6/8] One integration workflow --- .github/workflows/integration-aiohttp.yml | 20 ---- .github/workflows/integration-django.yml | 20 ---- .github/workflows/integration-falcon.yml | 20 ---- .github/workflows/integration-fastapi.yml | 20 ---- .github/workflows/integration-flask.yml | 20 ---- .github/workflows/integration-requests.yml | 20 ---- .github/workflows/integration-reusable.yml | 66 ------------ .github/workflows/integration-starlette.yml | 20 ---- .github/workflows/integration-tests.yml | 111 ++++++++++++++++++++ .github/workflows/integration-werkzeug.yml | 20 ---- 10 files changed, 111 insertions(+), 226 deletions(-) delete mode 100644 .github/workflows/integration-aiohttp.yml delete mode 100644 .github/workflows/integration-django.yml delete mode 100644 .github/workflows/integration-falcon.yml delete mode 100644 .github/workflows/integration-fastapi.yml delete mode 100644 .github/workflows/integration-flask.yml delete mode 100644 .github/workflows/integration-requests.yml delete mode 100644 .github/workflows/integration-reusable.yml delete mode 100644 .github/workflows/integration-starlette.yml create mode 100644 .github/workflows/integration-tests.yml delete mode 100644 .github/workflows/integration-werkzeug.yml diff --git a/.github/workflows/integration-aiohttp.yml b/.github/workflows/integration-aiohttp.yml deleted file mode 100644 index f4fa22d5..00000000 --- a/.github/workflows/integration-aiohttp.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Integration aiohttp - -on: - push: - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - id-token: write - -jobs: - integration-aiohttp: - uses: ./.github/workflows/integration-reusable.yml - with: - integration: aiohttp diff --git a/.github/workflows/integration-django.yml b/.github/workflows/integration-django.yml deleted file mode 100644 index 26303b55..00000000 --- a/.github/workflows/integration-django.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Integration django - -on: - push: - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - id-token: write - -jobs: - integration-django: - uses: ./.github/workflows/integration-reusable.yml - with: - integration: django diff --git a/.github/workflows/integration-falcon.yml b/.github/workflows/integration-falcon.yml deleted file mode 100644 index d582fbe9..00000000 --- a/.github/workflows/integration-falcon.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Integration falcon - -on: - push: - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - id-token: write - -jobs: - integration-falcon: - uses: ./.github/workflows/integration-reusable.yml - with: - integration: falcon diff --git a/.github/workflows/integration-fastapi.yml b/.github/workflows/integration-fastapi.yml deleted file mode 100644 index 4cc0d3d5..00000000 --- a/.github/workflows/integration-fastapi.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Integration fastapi - -on: - push: - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - id-token: write - -jobs: - integration-fastapi: - uses: ./.github/workflows/integration-reusable.yml - with: - integration: fastapi diff --git a/.github/workflows/integration-flask.yml b/.github/workflows/integration-flask.yml deleted file mode 100644 index d6a44b96..00000000 --- a/.github/workflows/integration-flask.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Integration flask - -on: - push: - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - id-token: write - -jobs: - integration-flask: - uses: ./.github/workflows/integration-reusable.yml - with: - integration: flask diff --git a/.github/workflows/integration-requests.yml b/.github/workflows/integration-requests.yml deleted file mode 100644 index a4620346..00000000 --- a/.github/workflows/integration-requests.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Integration requests - -on: - push: - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - id-token: write - -jobs: - integration-requests: - uses: ./.github/workflows/integration-reusable.yml - with: - integration: requests diff --git a/.github/workflows/integration-reusable.yml b/.github/workflows/integration-reusable.yml deleted file mode 100644 index 82c0b08c..00000000 --- a/.github/workflows/integration-reusable.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Integration reusable - -on: - workflow_call: - inputs: - integration: - description: Integration name under tests/integration/contrib - required: true - type: string - -permissions: - contents: read - id-token: write - -jobs: - test: - name: "Integration ${{ inputs.integration }}" - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] - fail-fast: false - steps: - - uses: actions/checkout@v6 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - - name: Get full Python version - id: full-python-version - run: python -c "import sys; print(f\"version={'-'.join(str(v) for v in sys.version_info)}\")" >> "$GITHUB_OUTPUT" - - - name: Set up poetry - uses: Gr1N/setup-poetry@v9 - with: - poetry-version: "2.3.1" - - - name: Configure poetry - run: poetry config virtualenvs.in-project true - - - name: Set up cache - uses: actions/cache@v5 - id: cache - with: - path: .venv - key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - - - name: Ensure cache is healthy - if: steps.cache.outputs.cache-hit == 'true' - run: timeout 10s poetry run pip --version || rm -rf .venv - - - name: Install dependencies - run: poetry install --all-extras - - - name: Test - env: - PYTEST_ADDOPTS: "--color=yes" - run: poetry run pytest tests/integration/contrib/${{ inputs.integration }} - - - name: Upload coverage - uses: codecov/codecov-action@v5 - with: - flags: integration-${{ inputs.integration }},python-${{ matrix.python-version }} - name: integration-${{ inputs.integration }}-python-${{ matrix.python-version }} diff --git a/.github/workflows/integration-starlette.yml b/.github/workflows/integration-starlette.yml deleted file mode 100644 index 47b44a9c..00000000 --- a/.github/workflows/integration-starlette.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Integration starlette - -on: - push: - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - id-token: write - -jobs: - integration-starlette: - uses: ./.github/workflows/integration-reusable.yml - with: - integration: starlette diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml new file mode 100644 index 00000000..927f0831 --- /dev/null +++ b/.github/workflows/integration-tests.yml @@ -0,0 +1,111 @@ +name: CI / Integrations + +on: + push: + pull_request: + types: [opened, synchronize] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + id-token: write + +jobs: + integration: + name: "Integration / ${{ matrix.target.label }} / py${{ matrix.python-version }}" + runs-on: ubuntu-latest + strategy: + matrix: + target: + - integration: aiohttp + spec: ">=3.8,<4.0" + label: "aiohttp-3.x" + - integration: aiohttp + spec: ">=3.11,<4.0" + label: "aiohttp-3.11+" + - integration: django + spec: ">=4.0,<5.0" + label: "django-4.x" + - integration: django + spec: ">=5.0,<6.0" + label: "django-5.x" + - integration: falcon + spec: ">=4.0,<5.0" + label: "falcon-4.x" + - integration: fastapi + spec: ">=0.111,<0.120" + label: "fastapi-0.11x" + - integration: fastapi + spec: ">=0.120,<0.129" + label: "fastapi-0.12x" + - integration: flask + spec: ">=2.0,<3.0" + label: "flask-2.x" + - integration: flask + spec: ">=3.0,<4.0" + label: "flask-3.x" + - integration: requests + spec: "" + label: "requests-default" + - integration: starlette + spec: ">=0.40.0,<0.50.0" + label: "starlette-0.4x" + - integration: starlette + spec: ">=0.50.0,<0.60.0" + label: "starlette-0.5x" + - integration: werkzeug + spec: "" + label: "werkzeug-default" + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] + fail-fast: false + steps: + - uses: actions/checkout@v6 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + run: python -c "import sys; print(f\"version={'-'.join(str(v) for v in sys.version_info)}\")" >> "$GITHUB_OUTPUT" + + - name: Set up poetry + uses: Gr1N/setup-poetry@v9 + with: + poetry-version: "2.3.1" + + - name: Configure poetry + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v5 + id: cache + with: + path: .venv + key: venv-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: timeout 10s poetry run pip --version || rm -rf .venv + + - name: Install dependencies + run: poetry install --all-extras + + - name: Install framework variant + if: matrix.target.spec != '' + run: poetry run pip install "${{ matrix.target.integration }}${{ matrix.target.spec }}" + + - name: Test + env: + PYTEST_ADDOPTS: "--color=yes" + run: poetry run pytest tests/integration/contrib/${{ matrix.target.integration }} + + - name: Upload coverage + uses: codecov/codecov-action@v5 + with: + flags: integration,${{ matrix.target.integration }},${{ matrix.target.label }},py${{ matrix.python-version }} + name: integration-${{ matrix.target.integration }}-${{ matrix.target.label }}-py${{ matrix.python-version }} diff --git a/.github/workflows/integration-werkzeug.yml b/.github/workflows/integration-werkzeug.yml deleted file mode 100644 index 4fc1fcd6..00000000 --- a/.github/workflows/integration-werkzeug.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Integration werkzeug - -on: - push: - pull_request: - types: [opened, synchronize] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -permissions: - contents: read - id-token: write - -jobs: - integration-werkzeug: - uses: ./.github/workflows/integration-reusable.yml - with: - integration: werkzeug From 2b50cfb1123ae96e678d97c7e368e06fb68bff33 Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 17 Feb 2026 22:45:23 +0000 Subject: [PATCH 7/8] Workflows naming normalization --- .github/workflows/build-docs.yml | 5 +++-- .github/workflows/integration-tests.yml | 6 +++--- .github/workflows/python-publish.yml | 5 +++-- .github/workflows/python-test.yml | 10 +++++----- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index d7686db9..65177bf8 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -1,4 +1,4 @@ -name: Build documentation +name: CI / Docs on: push: @@ -6,7 +6,8 @@ on: types: [opened, synchronize] jobs: - build: + docs_build: + name: "Build" runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 927f0831..610c711e 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -1,4 +1,4 @@ -name: CI / Integrations +name: CI / Integrations / Tests on: push: @@ -14,8 +14,8 @@ permissions: id-token: write jobs: - integration: - name: "Integration / ${{ matrix.target.label }} / py${{ matrix.python-version }}" + integration_matrix: + name: "${{ matrix.target.label }} / py${{ matrix.python-version }}" runs-on: ubuntu-latest strategy: matrix: diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 89f824e9..478232ef 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -1,7 +1,7 @@ # This workflow will upload a Python Package using Twine when a release is created # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries -name: Publish python packages +name: CI / Publish on: workflow_dispatch: @@ -10,7 +10,8 @@ on: - published jobs: - publish: + publish_pypi: + name: "PyPI" runs-on: ubuntu-latest permissions: id-token: write diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index fe067047..acc90632 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -1,7 +1,7 @@ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -name: Test python code +name: CI / Core / Tests on: push: @@ -9,8 +9,8 @@ on: types: [opened, synchronize] jobs: - test: - name: "Tests" + core_tests: + name: "py${{ matrix.python-version }}" runs-on: ubuntu-latest strategy: matrix: @@ -64,8 +64,8 @@ jobs: - name: Upload coverage uses: codecov/codecov-action@v5 - static-checks: - name: "Static checks" + static_checks: + name: "Core / Static Checks" runs-on: ubuntu-latest steps: - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" From 66973dfd191ef42e1d02f395b054f6716196515d Mon Sep 17 00:00:00 2001 From: p1c2u Date: Tue, 17 Feb 2026 22:53:07 +0000 Subject: [PATCH 8/8] Integrations versions tighten --- poetry.lock | 40 +++++++++++++++++++++++++++++++++------- pyproject.toml | 10 +++++----- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/poetry.lock b/poetry.lock index aaa3b9a2..6ac0a440 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.1 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -11,6 +11,7 @@ files = [ {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, ] +markers = {main = "extra == \"aiohttp\""} [[package]] name = "aiohttp" @@ -141,6 +142,7 @@ files = [ {file = "aiohttp-3.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:c6b8568a3bb5819a0ad087f16d40e5a3fb6099f39ea1d5625a3edc1e923fc538"}, {file = "aiohttp-3.13.3.tar.gz", hash = "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88"}, ] +markers = {main = "extra == \"aiohttp\""} [package.dependencies] aiohappyeyeballs = ">=2.5.0" @@ -179,6 +181,7 @@ files = [ {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, ] +markers = {main = "extra == \"aiohttp\""} [package.dependencies] frozenlist = ">=1.1.0" @@ -195,6 +198,7 @@ files = [ {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, ] +markers = {main = "extra == \"fastapi\""} [[package]] name = "annotated-types" @@ -207,6 +211,7 @@ files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] +markers = {main = "extra == \"fastapi\""} [[package]] name = "anyio" @@ -219,6 +224,7 @@ files = [ {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] +markers = {main = "extra == \"starlette\" or extra == \"fastapi\""} [package.dependencies] exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} @@ -254,6 +260,7 @@ files = [ {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, ] +markers = {main = "extra == \"django\""} [package.dependencies] typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} @@ -284,11 +291,11 @@ description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version < \"3.11\"" files = [ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] +markers = {main = "extra == \"aiohttp\" and python_version < \"3.11\"", dev = "python_version < \"3.11\""} [[package]] name = "attrs" @@ -423,6 +430,7 @@ files = [ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, ] +markers = {main = "extra == \"flask\""} [[package]] name = "certifi" @@ -676,6 +684,7 @@ files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] +markers = {main = "extra == \"flask\""} [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -691,7 +700,7 @@ files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "platform_system == \"Windows\""} +markers = {main = "extra == \"flask\" and platform_system == \"Windows\""} [[package]] name = "comm" @@ -936,6 +945,7 @@ files = [ {file = "django-4.2.27-py3-none-any.whl", hash = "sha256:f393a394053713e7d213984555c5b7d3caeee78b2ccb729888a0774dff6c11a8"}, {file = "django-4.2.27.tar.gz", hash = "sha256:b865fbe0f4a3d1ee36594c5efa42b20db3c8bbb10dff0736face1c6e4bda5b92"}, ] +markers = {main = "extra == \"django\""} [package.dependencies] asgiref = ">=3.6.0,<4" @@ -979,11 +989,11 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] +markers = {main = "(extra == \"starlette\" or extra == \"fastapi\") and python_version < \"3.11\"", dev = "python_version < \"3.11\""} [package.extras] test = ["pytest (>=6)"] @@ -1053,6 +1063,7 @@ files = [ {file = "falcon-4.2.0-py3-none-any.whl", hash = "sha256:1d64afeca0dc03e7bed0202681dab4844544d8f6855c23e13f11a6eb10ac50ff"}, {file = "falcon-4.2.0.tar.gz", hash = "sha256:c13e86e49696d6655411fe09473c34997e49ff45e8cdf7576297b0ca71ceac3d"}, ] +markers = {main = "extra == \"falcon\""} [package.extras] test = ["pytest"] @@ -1068,6 +1079,7 @@ files = [ {file = "fastapi-0.128.0-py3-none-any.whl", hash = "sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d"}, {file = "fastapi-0.128.0.tar.gz", hash = "sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a"}, ] +markers = {main = "extra == \"fastapi\""} [package.dependencies] annotated-doc = ">=0.0.2" @@ -1120,6 +1132,7 @@ files = [ {file = "flask-3.1.2-py3-none-any.whl", hash = "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c"}, {file = "flask-3.1.2.tar.gz", hash = "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87"}, ] +markers = {main = "extra == \"flask\""} [package.dependencies] blinker = ">=1.9.0" @@ -1246,6 +1259,7 @@ files = [ {file = "frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191"}, {file = "frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68"}, ] +markers = {main = "extra == \"aiohttp\""} [[package]] name = "ghp-import" @@ -1381,6 +1395,7 @@ files = [ {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] +markers = {main = "extra == \"aiohttp\" or extra == \"starlette\" or extra == \"fastapi\" or extra == \"requests\""} [[package]] name = "iniconfig" @@ -1506,6 +1521,7 @@ files = [ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, ] +markers = {main = "extra == \"flask\""} [[package]] name = "jedi" @@ -1538,6 +1554,7 @@ files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] +markers = {main = "extra == \"flask\""} [package.dependencies] MarkupSafe = ">=2.0" @@ -1559,7 +1576,7 @@ files = [ [package.dependencies] attrs = ">=22.2.0" -jsonschema-specifications = ">=2023.03.6" +jsonschema-specifications = ">=2023.3.6" referencing = ">=0.28.4" rpds-py = ">=0.7.1" @@ -2238,6 +2255,7 @@ files = [ {file = "multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56"}, {file = "multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"}, ] +markers = {main = "extra == \"aiohttp\""} [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} @@ -2641,6 +2659,7 @@ files = [ {file = "propcache-0.2.0-py3-none-any.whl", hash = "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036"}, {file = "propcache-0.2.0.tar.gz", hash = "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70"}, ] +markers = {main = "extra == \"aiohttp\""} [[package]] name = "psutil" @@ -2741,6 +2760,7 @@ files = [ {file = "pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d"}, {file = "pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49"}, ] +markers = {main = "extra == \"fastapi\""} [package.dependencies] annotated-types = ">=0.6.0" @@ -2882,6 +2902,7 @@ files = [ {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51"}, {file = "pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e"}, ] +markers = {main = "extra == \"fastapi\""} [package.dependencies] typing-extensions = ">=4.14.1" @@ -3575,6 +3596,7 @@ files = [ {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] +markers = {main = "extra == \"starlette\" or extra == \"fastapi\""} [[package]] name = "sqlparse" @@ -3587,6 +3609,7 @@ files = [ {file = "sqlparse-0.5.4-py3-none-any.whl", hash = "sha256:99a9f0314977b76d776a0fcb8554de91b9bb8a18560631d6bc48721d07023dcb"}, {file = "sqlparse-0.5.4.tar.gz", hash = "sha256:4396a7d3cf1cd679c1be976cf3dc6e0a51d0111e87787e7a8d780e7d5a998f9e"}, ] +markers = {main = "extra == \"django\""} [package.extras] dev = ["build"] @@ -3623,6 +3646,7 @@ files = [ {file = "starlette-0.49.3-py3-none-any.whl", hash = "sha256:b579b99715fdc2980cf88c8ec96d3bf1ce16f5a8051a7c2b84ef9b1cdecaea2f"}, {file = "starlette-0.49.3.tar.gz", hash = "sha256:1c14546f299b5901a1ea0e34410575bc33bbd741377a10484a54445588d00284"}, ] +markers = {main = "extra == \"starlette\" or extra == \"fastapi\""} [package.dependencies] anyio = ">=3.6.2,<5" @@ -3761,6 +3785,7 @@ files = [ {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, ] +markers = {main = "extra == \"fastapi\""} [package.dependencies] typing-extensions = ">=4.12.0" @@ -3772,11 +3797,11 @@ description = "Provider of IANA time zone data" optional = false python-versions = ">=2" groups = ["main", "dev"] -markers = "sys_platform == \"win32\"" files = [ {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, ] +markers = {main = "extra == \"django\" and sys_platform == \"win32\"", dev = "sys_platform == \"win32\""} [[package]] name = "unidecode" @@ -4019,6 +4044,7 @@ files = [ {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, ] +markers = {main = "extra == \"aiohttp\""} [package.dependencies] idna = ">=2.0" @@ -4037,4 +4063,4 @@ starlette = ["aioitertools", "starlette"] [metadata] lock-version = "2.1" python-versions = "^3.10.0" -content-hash = "40e6e65d85b49d9f1472356977c779c5a6f62c0d46c3d731e98e2710b470b109" +content-hash = "7406e65fe1dffaca3447d925af289102178051f23a5d9e8a3098203b79b260ae" diff --git a/pyproject.toml b/pyproject.toml index d77055d0..2f79b107 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,11 +60,11 @@ include = [ [tool.poetry.dependencies] python = "^3.10.0" -django = {version = ">=3.0", optional = true} -falcon = {version = ">=3.0", optional = true} -flask = {version = "*", optional = true} +django = {version = ">=4.0", optional = true} +falcon = {version = ">=4.0", optional = true} +flask = {version = ">=2.0", optional = true} aiohttp = {version = ">=3.0", optional = true} -starlette = {version = ">=0.26.1,<0.50.0", optional = true} +starlette = {version = ">=0.40.0,<0.60.0", optional = true} isodate = "*" more-itertools = "*" openapi-schema-validator = "^0.6.0" @@ -75,7 +75,7 @@ jsonschema-path = {version = "^0.4.0b8", allow-prereleases = true} jsonschema = "^4.23.0" multidict = {version = "^6.0.4", optional = true} aioitertools = {version = ">=0.11,<0.14", optional = true} -fastapi = {version = ">=0.111,<0.129", optional = true} +fastapi = {version = ">=0.111,<0.130", optional = true} typing-extensions = "^4.8.0" [tool.poetry.extras]