From 71e22b4d5b70e18c4b8c969fff6ca5e059f95ce1 Mon Sep 17 00:00:00 2001 From: Ivana Kellyer Date: Mon, 17 Feb 2025 15:15:25 +0100 Subject: [PATCH] Sync toxgen with master (#4061) --- .github/workflows/test-integrations-ai.yml | 8 +- .github/workflows/test-integrations-dbs.yml | 6 +- .github/workflows/test-integrations-flags.yml | 62 +- .../workflows/test-integrations-gevent.yml | 2 +- .../workflows/test-integrations-graphql.yml | 62 +- .github/workflows/test-integrations-misc.yml | 68 +- .../workflows/test-integrations-network.yml | 6 +- .github/workflows/test-integrations-tasks.yml | 6 +- .github/workflows/test-integrations-web-1.yml | 6 +- .github/workflows/test-integrations-web-2.yml | 8 +- scripts/populate_tox/tox.jinja | 57 +- tox.ini | 594 +++++++++--------- 12 files changed, 344 insertions(+), 541 deletions(-) diff --git a/.github/workflows/test-integrations-ai.yml b/.github/workflows/test-integrations-ai.yml index 85c5475aff..a0f3e26a04 100644 --- a/.github/workflows/test-integrations-ai.yml +++ b/.github/workflows/test-integrations-ai.yml @@ -29,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7","3.9","3.11","3.12","3.13"] + python-version: ["3.7","3.9","3.11","3.12"] os: [ubuntu-22.04] steps: - uses: actions/checkout@v4.2.2 @@ -70,7 +70,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml @@ -91,7 +91,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8","3.9","3.11","3.12","3.13"] + python-version: ["3.8","3.9","3.11","3.12"] os: [ubuntu-22.04] steps: - uses: actions/checkout@v4.2.2 @@ -132,7 +132,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-dbs.yml b/.github/workflows/test-integrations-dbs.yml index 12359c93b4..92778617f4 100644 --- a/.github/workflows/test-integrations-dbs.yml +++ b/.github/workflows/test-integrations-dbs.yml @@ -93,7 +93,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml @@ -114,7 +114,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7","3.8","3.9","3.10","3.11","3.12"] + python-version: ["3.7","3.8","3.9","3.10","3.11","3.12","3.13"] os: [ubuntu-22.04] services: postgres: @@ -178,7 +178,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-flags.yml b/.github/workflows/test-integrations-flags.yml index 8694bc40a9..6e4033389e 100644 --- a/.github/workflows/test-integrations-flags.yml +++ b/.github/workflows/test-integrations-flags.yml @@ -22,60 +22,6 @@ env: CACHED_BUILD_PATHS: | ${{ github.workspace }}/dist-serverless jobs: - test-flags-latest: - name: Flags (latest) - timeout-minutes: 30 - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - python-version: ["3.8","3.12","3.13"] - os: [ubuntu-22.04] - steps: - - uses: actions/checkout@v4.2.2 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - allow-prereleases: true - - name: Setup Test Env - run: | - pip install "coverage[toml]" tox - - name: Erase coverage - run: | - coverage erase - - name: Test launchdarkly latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-launchdarkly-latest" - - name: Test openfeature latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-openfeature-latest" - - name: Test unleash latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-unleash-latest" - - name: Generate coverage XML - if: ${{ !cancelled() }} - run: | - coverage combine .coverage-sentry-* - coverage xml - - name: Upload coverage to Codecov - if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: coverage.xml - # make sure no plugins alter our coverage reports - plugin: noop - verbose: true - - name: Upload test results to Codecov - if: ${{ !cancelled() }} - uses: codecov/test-results-action@v1 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: .junitxml - verbose: true test-flags-pinned: name: Flags (pinned) timeout-minutes: 30 @@ -83,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8","3.12","3.13"] + python-version: ["3.7","3.8","3.9","3.12","3.13"] os: [ubuntu-22.04] steps: - uses: actions/checkout@v4.2.2 @@ -105,6 +51,10 @@ jobs: run: | set -x # print commands that are executed ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-openfeature" + - name: Test statsig pinned + run: | + set -x # print commands that are executed + ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-statsig" - name: Test unleash pinned run: | set -x # print commands that are executed @@ -116,7 +66,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-gevent.yml b/.github/workflows/test-integrations-gevent.yml index 2517c18cce..bb371d1717 100644 --- a/.github/workflows/test-integrations-gevent.yml +++ b/.github/workflows/test-integrations-gevent.yml @@ -54,7 +54,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-graphql.yml b/.github/workflows/test-integrations-graphql.yml index 7b6571619a..2fdd46422b 100644 --- a/.github/workflows/test-integrations-graphql.yml +++ b/.github/workflows/test-integrations-graphql.yml @@ -22,64 +22,6 @@ env: CACHED_BUILD_PATHS: | ${{ github.workspace }}/dist-serverless jobs: - test-graphql-latest: - name: GraphQL (latest) - timeout-minutes: 30 - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - python-version: ["3.7","3.8","3.12","3.13"] - os: [ubuntu-22.04] - steps: - - uses: actions/checkout@v4.2.2 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - allow-prereleases: true - - name: Setup Test Env - run: | - pip install "coverage[toml]" tox - - name: Erase coverage - run: | - coverage erase - - name: Test ariadne latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-ariadne-latest" - - name: Test gql latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-gql-latest" - - name: Test graphene latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-graphene-latest" - - name: Test strawberry latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-strawberry-latest" - - name: Generate coverage XML - if: ${{ !cancelled() }} - run: | - coverage combine .coverage-sentry-* - coverage xml - - name: Upload coverage to Codecov - if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: coverage.xml - # make sure no plugins alter our coverage reports - plugin: noop - verbose: true - - name: Upload test results to Codecov - if: ${{ !cancelled() }} - uses: codecov/test-results-action@v1 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: .junitxml - verbose: true test-graphql-pinned: name: GraphQL (pinned) timeout-minutes: 30 @@ -87,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7","3.8","3.11","3.12"] + python-version: ["3.7","3.8","3.9","3.10","3.11","3.12","3.13"] os: [ubuntu-22.04] steps: - uses: actions/checkout@v4.2.2 @@ -124,7 +66,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-misc.yml b/.github/workflows/test-integrations-misc.yml index 013a21646c..b70d37702d 100644 --- a/.github/workflows/test-integrations-misc.yml +++ b/.github/workflows/test-integrations-misc.yml @@ -22,72 +22,6 @@ env: CACHED_BUILD_PATHS: | ${{ github.workspace }}/dist-serverless jobs: - test-misc-latest: - name: Misc (latest) - timeout-minutes: 30 - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - python-version: ["3.7","3.8","3.12","3.13"] - os: [ubuntu-22.04] - steps: - - uses: actions/checkout@v4.2.2 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - allow-prereleases: true - - name: Setup Test Env - run: | - pip install "coverage[toml]" tox - - name: Erase coverage - run: | - coverage erase - - name: Test loguru latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-loguru-latest" - - name: Test opentelemetry latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-opentelemetry-latest" - - name: Test potel latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-potel-latest" - - name: Test pure_eval latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-pure_eval-latest" - - name: Test trytond latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-trytond-latest" - - name: Test typer latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-typer-latest" - - name: Generate coverage XML - if: ${{ !cancelled() }} - run: | - coverage combine .coverage-sentry-* - coverage xml - - name: Upload coverage to Codecov - if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: coverage.xml - # make sure no plugins alter our coverage reports - plugin: noop - verbose: true - - name: Upload test results to Codecov - if: ${{ !cancelled() }} - uses: codecov/test-results-action@v1 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: .junitxml - verbose: true test-misc-pinned: name: Misc (pinned) timeout-minutes: 30 @@ -140,7 +74,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-network.yml b/.github/workflows/test-integrations-network.yml index a6cafb2b66..bea1a553bd 100644 --- a/.github/workflows/test-integrations-network.yml +++ b/.github/workflows/test-integrations-network.yml @@ -29,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8","3.9","3.11","3.12","3.13"] + python-version: ["3.9","3.12","3.13"] os: [ubuntu-22.04] steps: - uses: actions/checkout@v4.2.2 @@ -62,7 +62,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml @@ -116,7 +116,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-tasks.yml b/.github/workflows/test-integrations-tasks.yml index 1b232c4d64..a727058bbc 100644 --- a/.github/workflows/test-integrations-tasks.yml +++ b/.github/workflows/test-integrations-tasks.yml @@ -84,7 +84,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml @@ -105,7 +105,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7","3.8","3.9","3.10","3.11","3.12"] + python-version: ["3.7","3.8","3.9","3.10","3.11","3.12","3.13"] os: [ubuntu-22.04] steps: - uses: actions/checkout@v4.2.2 @@ -160,7 +160,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-web-1.yml b/.github/workflows/test-integrations-web-1.yml index 1b3163c7ba..0f4399d439 100644 --- a/.github/workflows/test-integrations-web-1.yml +++ b/.github/workflows/test-integrations-web-1.yml @@ -84,7 +84,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml @@ -105,7 +105,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7","3.8","3.9","3.10","3.11","3.12"] + python-version: ["3.7","3.8","3.9","3.10","3.11","3.12","3.13"] os: [ubuntu-22.04] services: postgres: @@ -160,7 +160,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/.github/workflows/test-integrations-web-2.yml b/.github/workflows/test-integrations-web-2.yml index fdd6c5ede3..9706cbca3e 100644 --- a/.github/workflows/test-integrations-web-2.yml +++ b/.github/workflows/test-integrations-web-2.yml @@ -29,7 +29,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7","3.8","3.9","3.11","3.12","3.13"] + python-version: ["3.8","3.9","3.11","3.12","3.13"] os: [ubuntu-22.04] steps: - uses: actions/checkout@v4.2.2 @@ -90,7 +90,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml @@ -111,7 +111,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7","3.8","3.9","3.11","3.12","3.13"] + python-version: ["3.7","3.8","3.9","3.10","3.11","3.12","3.13"] os: [ubuntu-22.04] steps: - uses: actions/checkout@v4.2.2 @@ -172,7 +172,7 @@ jobs: coverage xml - name: Upload coverage to Codecov if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.1.2 + uses: codecov/codecov-action@v5.3.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml diff --git a/scripts/populate_tox/tox.jinja b/scripts/populate_tox/tox.jinja index 15119b4768..fea23895f2 100644 --- a/scripts/populate_tox/tox.jinja +++ b/scripts/populate_tox/tox.jinja @@ -16,10 +16,10 @@ requires = virtualenv<20.26.3 envlist = # === Common === - {py3.6,py3.7,py3.8,py3.9,py3.10,py3.11,py3.12,py3.13}-common + {py3.7,py3.8,py3.9,py3.10,py3.11,py3.12,py3.13}-common # === Gevent === - {py3.6,py3.8,py3.10,py3.11,py3.12}-gevent + {py3.8,py3.10,py3.11,py3.12}-gevent # === Integrations === # General format is {pythonversion}-{integrationname}-v{frameworkversion} @@ -65,17 +65,17 @@ envlist = {py3.8,py3.11}-beam-latest # Boto3 - {py3.6,py3.7}-boto3-v{1.12} + {py3.7}-boto3-v{1.12} {py3.7,py3.11,py3.12}-boto3-v{1.23} {py3.11,py3.12}-boto3-v{1.34} {py3.11,py3.12,py3.13}-boto3-latest # Chalice - {py3.6,py3.9}-chalice-v{1.16} + {py3.7,py3.9}-chalice-v{1.16} {py3.8,py3.12,py3.13}-chalice-latest # Cloud Resource Context - {py3.6,py3.12,py3.13}-cloud_resource_context + {py3.7,py3.12,py3.13}-cloud_resource_context # Cohere {py3.9,py3.11,py3.12}-cohere-v5 @@ -83,13 +83,13 @@ envlist = # Django # - Django 1.x - {py3.6,py3.7}-django-v{1.11} + {py3.7}-django-v{1.11} # - Django 2.x - {py3.6,py3.7}-django-v{2.0} - {py3.6,py3.9}-django-v{2.2} + {py3.7}-django-v{2.0} + {py3.7,py3.9}-django-v{2.2} # - Django 3.x - {py3.6,py3.9}-django-v{3.0} - {py3.6,py3.9,py3.11}-django-v{3.2} + {py3.7,py3.9}-django-v{3.0} + {py3.7,py3.9,py3.11}-django-v{3.2} # - Django 4.x {py3.8,py3.11,py3.12}-django-v{4.0,4.1,4.2} # - Django 5.x @@ -104,8 +104,8 @@ envlist = {py3.7}-gcp # HTTPX - {py3.6,py3.9}-httpx-v{0.16,0.18} - {py3.6,py3.10}-httpx-v{0.20,0.22} + {py3.7,py3.9}-httpx-v{0.16,0.18} + {py3.7,py3.10}-httpx-v{0.20,0.22} {py3.7,py3.11,py3.12}-httpx-v{0.23,0.24} {py3.9,py3.11,py3.12}-httpx-v{0.25,0.27} {py3.9,py3.12,py3.13}-httpx-latest @@ -136,7 +136,7 @@ envlist = {py3.8,py3.9,py3.10,py3.11,py3.12,py3.13}-potel # pure_eval - {py3.6,py3.12,py3.13}-pure_eval + {py3.7,py3.12,py3.13}-pure_eval # Quart {py3.7,py3.11}-quart-v{0.16} @@ -148,24 +148,23 @@ envlist = {py3.10,py3.11}-ray-latest # Redis - {py3.6,py3.8}-redis-v{3} + {py3.7,py3.8}-redis-v{3} {py3.7,py3.8,py3.11}-redis-v{4} {py3.7,py3.11,py3.12}-redis-v{5} {py3.7,py3.12,py3.13}-redis-latest # Requests - {py3.6,py3.8,py3.12,py3.13}-requests + {py3.7,py3.8,py3.12,py3.13}-requests # RQ (Redis Queue) - {py3.6}-rq-v{0.6} - {py3.6,py3.9}-rq-v{0.13,1.0} - {py3.6,py3.11}-rq-v{1.5,1.10} + {py3.7,py3.9}-rq-v{0.13,1.0} + {py3.7,py3.11}-rq-v{1.5,1.10} {py3.7,py3.11,py3.12}-rq-v{1.15,1.16} {py3.7,py3.12,py3.13}-rq-latest # Sanic - {py3.6,py3.7}-sanic-v{0.8} - {py3.6,py3.8}-sanic-v{20} + {py3.7}-sanic-v{0.8} + {py3.8}-sanic-v{20} {py3.8,py3.11,py3.12}-sanic-v{24.6} {py3.9,py3.12,py3.13}-sanic-latest @@ -200,16 +199,16 @@ deps = # See https://github.com/pytest-dev/pytest/issues/9621 # and https://github.com/pytest-dev/pytest-forked/issues/67 # for justification of the upper bound on pytest - {py3.6,py3.7}-common: pytest<7.0.0 + py3.7-common: pytest<7.0.0 {py3.8,py3.9,py3.10,py3.11,py3.12,py3.13}-common: pytest # === Gevent === - {py3.6,py3.7,py3.8,py3.9,py3.10,py3.11}-gevent: gevent>=22.10.0, <22.11.0 + {py3.7,py3.8,py3.9,py3.10,py3.11}-gevent: gevent>=22.10.0, <22.11.0 {py3.12}-gevent: gevent # See https://github.com/pytest-dev/pytest/issues/9621 # and https://github.com/pytest-dev/pytest-forked/issues/67 # for justification of the upper bound on pytest - {py3.6,py3.7}-gevent: pytest<7.0.0 + py3.7-gevent: pytest<7.0.0 {py3.8,py3.9,py3.10,py3.11,py3.12}-gevent: pytest # === Integrations === @@ -397,7 +396,7 @@ deps = # Redis redis: fakeredis!=1.7.4 redis: pytest<8.0.0 - {py3.6,py3.7}-redis: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 + py3.7-redis: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 {py3.7,py3.8,py3.9,py3.10,py3.11,py3.12,py3.13}-redis: pytest-asyncio redis-v3: redis~=3.0 redis-v4: redis~=4.0 @@ -409,13 +408,11 @@ deps = # RQ (Redis Queue) # https://github.com/jamesls/fakeredis/issues/245 - rq-v{0.6}: fakeredis<1.0 - rq-v{0.6}: redis<3.2.2 rq-v{0.13,1.0,1.5,1.10}: fakeredis>=1.0,<1.7.4 rq-v{1.15,1.16}: fakeredis - {py3.6,py3.7}-rq-v{1.15,1.16}: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 + py3.7-rq-v{1.15,1.16}: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 rq-latest: fakeredis - {py3.6,py3.7}-rq-latest: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 + py3.7-rq-latest: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 rq-v0.6: rq~=0.6.0 rq-v0.13: rq~=0.13.0 rq-v1.0: rq~=1.0.0 @@ -430,7 +427,6 @@ deps = sanic: aiohttp sanic-v{24.6}: sanic_testing sanic-latest: sanic_testing - {py3.6}-sanic: aiocontextvars==0.2.1 sanic-v0.8: sanic~=0.8.0 sanic-v20: sanic~=20.0 sanic-v24.6: sanic~=24.6.0 @@ -462,9 +458,9 @@ setenv = PYTHONDONTWRITEBYTECODE=1 OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES COVERAGE_FILE=.coverage-sentry-{envname} - py3.6: COVERAGE_RCFILE=.coveragerc36 django: DJANGO_SETTINGS_MODULE=tests.integrations.django.myapp.settings + py3.12-django: PIP_CONSTRAINT=constraints.txt common: TESTPATH=tests gevent: TESTPATH=tests @@ -542,7 +538,6 @@ extras = pymongo: pymongo basepython = - py3.6: python3.6 py3.7: python3.7 py3.8: python3.8 py3.9: python3.9 diff --git a/tox.ini b/tox.ini index 72e8e055cd..ebc6df8227 100644 --- a/tox.ini +++ b/tox.ini @@ -2,6 +2,13 @@ # in multiple virtualenvs. This configuration file will run the # test suite on all supported python versions. To use it, "pip install tox" # and then run "tox" from this directory. +# +# This file has been generated from a template +# by "scripts/populate_tox/populate_tox.py". Any changes to the file should +# be made in the template (if you want to change a hardcoded part of the file) +# or in the script (if you want to change the auto-generated part). +# The file (and all resulting CI YAMLs) then need to be regenerated via +# "scripts/generate-test-files.sh". [tox] requires = @@ -36,10 +43,6 @@ envlist = {py3.8,py3.11,py3.12}-anthropic-v{0.16,0.28,0.40} {py3.7,py3.11,py3.12}-anthropic-latest - # Ariadne - {py3.8,py3.11}-ariadne-v{0.20} - {py3.8,py3.12,py3.13}-ariadne-latest - # Arq {py3.7,py3.11}-arq-v{0.23} {py3.7,py3.12,py3.13}-arq-latest @@ -67,25 +70,10 @@ envlist = {py3.11,py3.12}-boto3-v{1.34} {py3.11,py3.12,py3.13}-boto3-latest - # Bottle - {py3.7,py3.9}-bottle-v{0.12} - {py3.7,py3.12,py3.13}-bottle-latest - - # Celery - {py3.8}-celery-v{4} - {py3.8}-celery-v{5.0} - {py3.8,py3.10}-celery-v{5.1,5.2} - {py3.8,py3.11,py3.12}-celery-v{5.3,5.4,5.5} - {py3.8,py3.12,py3.13}-celery-latest - # Chalice {py3.7,py3.9}-chalice-v{1.16} {py3.8,py3.12,py3.13}-chalice-latest - # Clickhouse Driver - {py3.8,py3.11}-clickhouse_driver-v{0.2.0} - {py3.8,py3.12,py3.13}-clickhouse_driver-latest - # Cloud Resource Context {py3.7,py3.12,py3.13}-cloud_resource_context @@ -108,45 +96,13 @@ envlist = {py3.10,py3.11,py3.12}-django-v{5.0,5.1} {py3.10,py3.12,py3.13}-django-latest - # dramatiq - {py3.7,py3.9}-dramatiq-v{1.13} - {py3.7,py3.10,py3.11}-dramatiq-v{1.15} - {py3.8,py3.11,py3.12}-dramatiq-v{1.17} - {py3.8,py3.11,py3.12}-dramatiq-latest - - # Falcon - {py3.7}-falcon-v{1,1.4,2} - {py3.7,py3.11,py3.12}-falcon-v{3} - {py3.8,py3.11,py3.12}-falcon-v{4} - {py3.7,py3.11,py3.12}-falcon-latest - # FastAPI {py3.7,py3.10}-fastapi-v{0.79} {py3.8,py3.12,py3.13}-fastapi-latest - # Flask - {py3.7,py3.8}-flask-v{1} - {py3.8,py3.11,py3.12}-flask-v{2} - {py3.10,py3.11,py3.12}-flask-v{3} - {py3.10,py3.12,py3.13}-flask-latest - # GCP {py3.7}-gcp - # GQL - {py3.7,py3.11}-gql-v{3.4} - {py3.7,py3.12,py3.13}-gql-latest - - # Graphene - {py3.7,py3.11}-graphene-v{3.3} - {py3.7,py3.12,py3.13}-graphene-latest - - # gRPC - {py3.7,py3.9}-grpc-v{1.39} - {py3.7,py3.10}-grpc-v{1.49} - {py3.7,py3.11}-grpc-v{1.59} - {py3.8,py3.11,py3.12}-grpc-latest - # HTTPX {py3.7,py3.9}-httpx-v{0.16,0.18} {py3.7,py3.10}-httpx-v{0.20,0.22} @@ -154,34 +110,18 @@ envlist = {py3.9,py3.11,py3.12}-httpx-v{0.25,0.27} {py3.9,py3.12,py3.13}-httpx-latest - # Huey - {py3.7,py3.11,py3.12}-huey-v{2.0} - {py3.7,py3.12,py3.13}-huey-latest - - # Huggingface Hub - {py3.9,py3.12,py3.13}-huggingface_hub-{v0.22} - {py3.9,py3.12,py3.13}-huggingface_hub-latest - # Langchain {py3.9,py3.11,py3.12}-langchain-v0.1 {py3.9,py3.11,py3.12}-langchain-v0.3 {py3.9,py3.11,py3.12}-langchain-latest {py3.9,py3.11,py3.12}-langchain-notiktoken - # LaunchDarkly - {py3.8,py3.12,py3.13}-launchdarkly-v9.8.0 - {py3.8,py3.12,py3.13}-launchdarkly-latest - # Litestar {py3.8,py3.11}-litestar-v{2.0} {py3.8,py3.11,py3.12}-litestar-v{2.6} {py3.8,py3.11,py3.12}-litestar-v{2.12} {py3.8,py3.11,py3.12}-litestar-latest - # Loguru - {py3.7,py3.11,py3.12}-loguru-v{0.5} - {py3.7,py3.12,py3.13}-loguru-latest - # OpenAI {py3.9,py3.11,py3.12}-openai-v1.0 {py3.9,py3.11,py3.12}-openai-v1.22 @@ -189,10 +129,6 @@ envlist = {py3.9,py3.11,py3.12}-openai-latest {py3.9,py3.11,py3.12}-openai-notiktoken - # OpenFeature - {py3.8,py3.12,py3.13}-openfeature-v0.7 - {py3.8,py3.12,py3.13}-openfeature-latest - # OpenTelemetry (OTel) {py3.7,py3.9,py3.12,py3.13}-opentelemetry @@ -202,19 +138,6 @@ envlist = # pure_eval {py3.7,py3.12,py3.13}-pure_eval - # PyMongo (Mongo DB) - {py3.7}-pymongo-v{3.7} - {py3.7,py3.9}-pymongo-v{3.12} - {py3.7,py3.11}-pymongo-v{4.0} - {py3.7,py3.11,py3.12}-pymongo-v{4.3,4.7} - {py3.7,py3.12,py3.13}-pymongo-latest - - # Pyramid - {py3.7,py3.11}-pyramid-v{1.6} - {py3.7,py3.11,py3.12}-pyramid-v{1.10} - {py3.7,py3.11,py3.12}-pyramid-v{2.0} - {py3.7,py3.11,py3.12}-pyramid-latest - # Quart {py3.7,py3.11}-quart-v{0.16} {py3.8,py3.11,py3.12}-quart-v{0.19} @@ -230,10 +153,6 @@ envlist = {py3.7,py3.11,py3.12}-redis-v{5} {py3.7,py3.12,py3.13}-redis-latest - # Redis Cluster - {py3.7,py3.8}-redis_py_cluster_legacy-v{1,2} - # no -latest, not developed anymore - # Requests {py3.7,py3.8,py3.12,py3.13}-requests @@ -249,48 +168,128 @@ envlist = {py3.8,py3.11,py3.12}-sanic-v{24.6} {py3.9,py3.12,py3.13}-sanic-latest - # Spark - {py3.8,py3.10,py3.11}-spark-v{3.1,3.3,3.5} - {py3.8,py3.10,py3.11,py3.12}-spark-latest - - # Starlette - {py3.7,py3.10}-starlette-v{0.19} - {py3.7,py3.11}-starlette-v{0.24,0.28} - {py3.8,py3.11,py3.12}-starlette-v{0.32,0.36,0.40} - {py3.8,py3.12,py3.13}-starlette-latest - - # Starlite - {py3.8,py3.11}-starlite-v{1.48,1.51} - # 1.51.14 is the last starlite version; the project continues as litestar - - # SQL Alchemy - {py3.7,py3.9}-sqlalchemy-v{1.2,1.4} - {py3.7,py3.11}-sqlalchemy-v{2.0} - {py3.7,py3.12,py3.13}-sqlalchemy-latest - - # Strawberry - {py3.8,py3.11}-strawberry-v{0.209} - {py3.8,py3.11,py3.12}-strawberry-v{0.222} - {py3.8,py3.12,py3.13}-strawberry-latest - - # Tornado - {py3.8,py3.11,py3.12}-tornado-v{6.0} - {py3.8,py3.11,py3.12}-tornado-v{6.2} - {py3.8,py3.11,py3.12}-tornado-latest - - # Trytond - {py3.7,py3.8}-trytond-v{5} - {py3.7,py3.11}-trytond-v{6} - {py3.8,py3.11,py3.12}-trytond-v{7} - {py3.8,py3.12,py3.13}-trytond-latest - - # Typer - {py3.7,py3.12,py3.13}-typer-v{0.15} - {py3.7,py3.12,py3.13}-typer-latest - - # Unleash + # === Integrations - Auto-generated === + # These come from the populate_tox.py script. Eventually we should move all + # integration tests there. + + # ~~~ DBs ~~~ + {py3.7,py3.11,py3.12}-clickhouse_driver-v0.2.9 + + {py3.7}-pymongo-v3.7.2 + {py3.7,py3.10,py3.11}-pymongo-v3.13.0 + {py3.7,py3.9,py3.10}-pymongo-v4.0.2 + {py3.9,py3.12,py3.13}-pymongo-v4.11.1 + + {py3.7}-redis_py_cluster_legacy-v2.0.0 + {py3.7,py3.8}-redis_py_cluster_legacy-v2.1.3 + + {py3.7}-sqlalchemy-v1.3.9 + {py3.7,py3.11,py3.12}-sqlalchemy-v1.4.54 + {py3.7,py3.10,py3.11}-sqlalchemy-v2.0.9 + {py3.7,py3.12,py3.13}-sqlalchemy-v2.0.38 + + + # ~~~ Flags ~~~ + {py3.8,py3.12,py3.13}-launchdarkly-v9.8.1 + {py3.8,py3.12,py3.13}-launchdarkly-v9.9.0 + + {py3.8,py3.12,py3.13}-openfeature-v0.7.5 + {py3.9,py3.12,py3.13}-openfeature-v0.8.0 + + {py3.7,py3.12,py3.13}-statsig-v0.55.3 + {py3.7,py3.12,py3.13}-statsig-v0.56.0 + {py3.8,py3.12,py3.13}-unleash-v6.0.1 - {py3.8,py3.12,py3.13}-unleash-latest + {py3.8,py3.12,py3.13}-unleash-v6.1.0 + + + # ~~~ GraphQL ~~~ + {py3.8,py3.10,py3.11}-ariadne-v0.20.1 + {py3.8,py3.11,py3.12}-ariadne-v0.22 + {py3.8,py3.11,py3.12}-ariadne-v0.24.0 + {py3.8,py3.11,py3.12}-ariadne-v0.25.2 + + {py3.7,py3.9,py3.10}-gql-v3.4.1 + {py3.7,py3.11,py3.12}-gql-v3.5.0 + + {py3.7,py3.9,py3.10}-graphene-v3.3 + {py3.8,py3.12,py3.13}-graphene-v3.4.3 + + {py3.8,py3.10,py3.11}-strawberry-v0.209.8 + {py3.8,py3.11,py3.12}-strawberry-v0.226.2 + {py3.8,py3.11,py3.12}-strawberry-v0.243.1 + {py3.9,py3.12,py3.13}-strawberry-v0.260.2 + + + # ~~~ Network ~~~ + {py3.7,py3.8}-grpc-v1.32.0 + {py3.7,py3.9,py3.10}-grpc-v1.44.0 + {py3.7,py3.10,py3.11}-grpc-v1.58.3 + {py3.8,py3.12,py3.13}-grpc-v1.70.0 + + + # ~~~ Tasks ~~~ + {py3.7,py3.8}-celery-v4.4.7 + {py3.7,py3.8}-celery-v5.0.5 + {py3.8,py3.11,py3.12}-celery-v5.4.0 + + {py3.7}-dramatiq-v1.9.0 + {py3.7,py3.8,py3.9}-dramatiq-v1.12.3 + {py3.7,py3.10,py3.11}-dramatiq-v1.15.0 + {py3.8,py3.12,py3.13}-dramatiq-v1.17.1 + + {py3.8,py3.9}-spark-v3.0.3 + {py3.8,py3.9}-spark-v3.2.4 + {py3.8,py3.10,py3.11}-spark-v3.4.4 + {py3.8,py3.10,py3.11}-spark-v3.5.4 + + + # ~~~ Web 1 ~~~ + {py3.7,py3.8}-flask-v1.1.4 + {py3.8,py3.12,py3.13}-flask-v2.3.3 + {py3.8,py3.12,py3.13}-flask-v3.0.3 + {py3.9,py3.12,py3.13}-flask-v3.1.0 + + {py3.7,py3.9,py3.10}-starlette-v0.16.0 + {py3.7,py3.10,py3.11}-starlette-v0.26.1 + {py3.8,py3.11,py3.12}-starlette-v0.36.3 + {py3.9,py3.12,py3.13}-starlette-v0.45.3 + + + # ~~~ Web 2 ~~~ + {py3.7}-bottle-v0.12.25 + {py3.7,py3.8,py3.9}-bottle-v0.13.2 + + {py3.7}-falcon-v2.0.0 + {py3.7,py3.11,py3.12}-falcon-v3.1.3 + {py3.8,py3.11,py3.12}-falcon-v4.0.2 + + {py3.7,py3.8,py3.9}-pyramid-v1.10.8 + {py3.7,py3.10,py3.11}-pyramid-v2.0.2 + + {py3.8,py3.10,py3.11}-starlite-v1.48.1 + {py3.8,py3.10,py3.11}-starlite-v1.49.0 + {py3.8,py3.10,py3.11}-starlite-v1.50.2 + {py3.8,py3.10,py3.11}-starlite-v1.51.16 + + {py3.7,py3.8}-tornado-v6.0.4 + {py3.7,py3.8,py3.9}-tornado-v6.1 + {py3.7,py3.9,py3.10}-tornado-v6.2 + {py3.8,py3.10,py3.11}-tornado-v6.4.2 + + + # ~~~ Misc ~~~ + {py3.7,py3.12,py3.13}-loguru-v0.7.3 + + {py3.7}-trytond-v5.0.9 + {py3.7,py3.8}-trytond-v5.8.16 + {py3.8,py3.10,py3.11}-trytond-v6.8.17 + {py3.8,py3.11,py3.12}-trytond-v7.0.9 + {py3.8,py3.11,py3.12}-trytond-v7.4.6 + + {py3.7,py3.11,py3.12}-typer-v0.15.1 + + [testenv] deps = @@ -338,13 +337,6 @@ deps = anthropic-v0.40: anthropic~=0.40.0 anthropic-latest: anthropic - # Ariadne - ariadne-v0.20: ariadne~=0.20.0 - ariadne-latest: ariadne - ariadne: fastapi - ariadne: flask - ariadne: httpx - # Arq arq-v0.23: arq~=0.23.0 arq-v0.23: pydantic<2 @@ -375,40 +367,18 @@ deps = boto3-v1.34: boto3~=1.34.0 boto3-latest: boto3 - # Bottle - bottle: Werkzeug<2.1.0 - bottle-v0.12: bottle~=0.12.0 - bottle-latest: bottle - - # Celery - celery: redis - celery: newrelic - celery-v4: Celery~=4.0 - celery-v5.0: Celery~=5.0.0 - celery-v5.1: Celery~=5.1.0 - celery-v5.2: Celery~=5.2.0 - celery-v5.3: Celery~=5.3.0 - celery-v5.4: Celery~=5.4.0 - # TODO: update when stable is out - celery-v5.5: Celery==5.5.0rc4 - celery-latest: Celery - # Chalice chalice: pytest-chalice==0.0.5 chalice-v1.16: chalice~=1.16.0 chalice-latest: chalice - # Clickhouse Driver - clickhouse_driver-v0.2.0: clickhouse_driver~=0.2.0 - clickhouse_driver-latest: clickhouse_driver - # Cohere cohere-v5: cohere~=5.3.3 cohere-latest: cohere # Django django: psycopg2-binary - django-v{1.11,2.0,2.2,3.0,3.1,3.2}: djangorestframework>=3.0.0,<4.0.0 + django-v{1.11,2.0,2.1,2.2,3.0,3.1,3.2}: djangorestframework>=3.0.0,<4.0.0 django-v{2.0,2.2,3.0,3.2,4.0,4.1,4.2,5.0,5.1}: channels[daphne] django-v{2.2,3.0}: six django-v{1.11,2.0,2.2,3.0,3.2}: Werkzeug<2.1.0 @@ -435,20 +405,6 @@ deps = django-v5.1: Django==5.1rc1 django-latest: Django - # dramatiq - dramatiq-v1.13: dramatiq>=1.13,<1.14 - dramatiq-v1.15: dramatiq>=1.15,<1.16 - dramatiq-v1.17: dramatiq>=1.17,<1.18 - dramatiq-latest: dramatiq - - # Falcon - falcon-v1.4: falcon~=1.4.0 - falcon-v1: falcon~=1.0 - falcon-v2: falcon~=2.0 - falcon-v3: falcon~=3.0 - falcon-v4: falcon~=4.0 - falcon-latest: falcon - # FastAPI fastapi: httpx # (this is a dependency of httpx) @@ -459,38 +415,6 @@ deps = fastapi-v{0.79}: fastapi~=0.79.0 fastapi-latest: fastapi - # Flask - flask: flask-login - flask-v{1,2.0}: Werkzeug<2.1.0 - flask-v{1,2.0}: markupsafe<2.1.0 - flask-v{3}: Werkzeug - flask-v1: Flask~=1.0 - flask-v2: Flask~=2.0 - flask-v3: Flask~=3.0 - flask-latest: Flask - - # GQL - gql-v{3.4}: gql[all]~=3.4.0 - gql-latest: gql[all] - - # Graphene - graphene: blinker - graphene: fastapi - graphene: flask - graphene: httpx - graphene-v{3.3}: graphene~=3.3.0 - graphene-latest: graphene - - # gRPC - grpc: protobuf - grpc: mypy-protobuf - grpc: types-protobuf - grpc: pytest-asyncio - grpc-v1.39: grpcio~=1.39.0 - grpc-v1.49: grpcio~=1.49.1 - grpc-v1.59: grpcio~=1.59.0 - grpc-latest: grpcio - # HTTPX httpx-v0.16: pytest-httpx==0.10.0 httpx-v0.18: pytest-httpx==0.12.0 @@ -512,14 +436,6 @@ deps = httpx-v0.27: httpx~=0.27.0 httpx-latest: httpx - # Huey - huey-v2.0: huey~=2.0.0 - huey-latest: huey - - # Huggingface Hub - huggingface_hub-v0.22: huggingface_hub~=0.22.2 - huggingface_hub-latest: huggingface_hub - # Langchain langchain-v0.1: openai~=1.0.0 langchain-v0.1: langchain~=0.1.11 @@ -545,10 +461,6 @@ deps = litestar-v2.12: litestar~=2.12.0 litestar-latest: litestar - # Loguru - loguru-v0.5: loguru~=0.5.0 - loguru-latest: loguru - # OpenAI openai: pytest-asyncio openai-v1.0: openai~=1.0.0 @@ -563,18 +475,6 @@ deps = openai-latest: tiktoken~=0.6.0 openai-notiktoken: openai - # OpenFeature - openfeature-v0.7: openfeature-sdk~=0.7.1 - openfeature-latest: openfeature-sdk - - # LaunchDarkly - launchdarkly-v9.8.0: launchdarkly-server-sdk~=9.8.0 - launchdarkly-latest: launchdarkly-server-sdk - - # Unleash - unleash-v6.0.1: UnleashClient~=6.0.1 - unleash-latest: UnleashClient - # OpenTelemetry (OTel) opentelemetry: opentelemetry-distro @@ -584,22 +484,6 @@ deps = # pure_eval pure_eval: pure_eval - # PyMongo (MongoDB) - pymongo: mockupdb - pymongo-v3.1: pymongo~=3.1.0 - pymongo-v3.13: pymongo~=3.13.0 - pymongo-v4.0: pymongo~=4.0.0 - pymongo-v4.3: pymongo~=4.3.0 - pymongo-v4.7: pymongo~=4.7.0 - pymongo-latest: pymongo - - # Pyramid - pyramid: Werkzeug<2.1.0 - pyramid-v1.6: pyramid~=1.6.0 - pyramid-v1.10: pyramid~=1.10.0 - pyramid-v2.0: pyramid~=2.0.0 - pyramid-latest: pyramid - # Quart quart: quart-auth quart: pytest-asyncio @@ -620,26 +504,23 @@ deps = # Redis redis: fakeredis!=1.7.4 redis: pytest<8.0.0 - {py3.6,py3.7}-redis: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 + py3.7-redis: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 {py3.7,py3.8,py3.9,py3.10,py3.11,py3.12,py3.13}-redis: pytest-asyncio redis-v3: redis~=3.0 redis-v4: redis~=4.0 redis-v5: redis~=5.0 redis-latest: redis - # Redis Cluster - redis_py_cluster_legacy-v1: redis-py-cluster~=1.0 - redis_py_cluster_legacy-v2: redis-py-cluster~=2.0 - # Requests requests: requests>=2.0 # RQ (Redis Queue) + # https://github.com/jamesls/fakeredis/issues/245 rq-v{0.13,1.0,1.5,1.10}: fakeredis>=1.0,<1.7.4 rq-v{1.15,1.16}: fakeredis py3.7-rq-v{1.15,1.16}: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 - py3.7-rq-latest: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 rq-latest: fakeredis + py3.7-rq-latest: fakeredis!=2.26.0 # https://github.com/cunla/fakeredis-py/issues/341 rq-v0.6: rq~=0.6.0 rq-v0.13: rq~=0.13.0 rq-v1.0: rq~=1.0.0 @@ -659,74 +540,174 @@ deps = sanic-v24.6: sanic~=24.6.0 sanic-latest: sanic - # Spark - spark-v3.1: pyspark~=3.1.0 - spark-v3.3: pyspark~=3.3.0 - spark-v3.5: pyspark~=3.5.0 - # TODO: update to ~=4.0.0 once stable is out - spark-v4.0: pyspark==4.0.0.dev2 - spark-latest: pyspark + # === Integrations - Auto-generated === + # These come from the populate_tox.py script. Eventually we should move all + # integration tests there. + + # ~~~ DBs ~~~ + clickhouse_driver-v0.2.9: clickhouse-driver==0.2.9 + + pymongo-v3.7.2: pymongo==3.7.2 + pymongo-v3.13.0: pymongo==3.13.0 + pymongo-v4.0.2: pymongo==4.0.2 + pymongo-v4.11.1: pymongo==4.11.1 + pymongo: mockupdb + + redis_py_cluster_legacy-v2.0.0: redis-py-cluster==2.0.0 + redis_py_cluster_legacy-v2.1.3: redis-py-cluster==2.1.3 - # Starlette + sqlalchemy-v1.3.9: sqlalchemy==1.3.9 + sqlalchemy-v1.4.54: sqlalchemy==1.4.54 + sqlalchemy-v2.0.9: sqlalchemy==2.0.9 + sqlalchemy-v2.0.38: sqlalchemy==2.0.38 + + + # ~~~ Flags ~~~ + launchdarkly-v9.8.1: launchdarkly-server-sdk==9.8.1 + launchdarkly-v9.9.0: launchdarkly-server-sdk==9.9.0 + + openfeature-v0.7.5: openfeature-sdk==0.7.5 + openfeature-v0.8.0: openfeature-sdk==0.8.0 + + statsig-v0.55.3: statsig==0.55.3 + statsig-v0.56.0: statsig==0.56.0 + statsig: typing_extensions + + unleash-v6.0.1: UnleashClient==6.0.1 + unleash-v6.1.0: UnleashClient==6.1.0 + + + # ~~~ GraphQL ~~~ + ariadne-v0.20.1: ariadne==0.20.1 + ariadne-v0.22: ariadne==0.22 + ariadne-v0.24.0: ariadne==0.24.0 + ariadne-v0.25.2: ariadne==0.25.2 + ariadne: fastapi + ariadne: flask + ariadne: httpx + + gql-v3.4.1: gql[all]==3.4.1 + gql-v3.5.0: gql[all]==3.5.0 + + graphene-v3.3: graphene==3.3 + graphene-v3.4.3: graphene==3.4.3 + graphene: blinker + graphene: fastapi + graphene: flask + graphene: httpx + py3.6-graphene: aiocontextvars + + strawberry-v0.209.8: strawberry-graphql[fastapi,flask]==0.209.8 + strawberry-v0.226.2: strawberry-graphql[fastapi,flask]==0.226.2 + strawberry-v0.243.1: strawberry-graphql[fastapi,flask]==0.243.1 + strawberry-v0.260.2: strawberry-graphql[fastapi,flask]==0.260.2 + strawberry: httpx + + + # ~~~ Network ~~~ + grpc-v1.32.0: grpcio==1.32.0 + grpc-v1.44.0: grpcio==1.44.0 + grpc-v1.58.3: grpcio==1.58.3 + grpc-v1.70.0: grpcio==1.70.0 + grpc: protobuf + grpc: mypy-protobuf + grpc: types-protobuf + grpc: pytest-asyncio + + + # ~~~ Tasks ~~~ + celery-v4.4.7: celery==4.4.7 + celery-v5.0.5: celery==5.0.5 + celery-v5.4.0: celery==5.4.0 + celery: newrelic + celery: redis + py3.7-celery: importlib-metadata<5.0 + + dramatiq-v1.9.0: dramatiq==1.9.0 + dramatiq-v1.12.3: dramatiq==1.12.3 + dramatiq-v1.15.0: dramatiq==1.15.0 + dramatiq-v1.17.1: dramatiq==1.17.1 + + spark-v3.0.3: pyspark==3.0.3 + spark-v3.2.4: pyspark==3.2.4 + spark-v3.4.4: pyspark==3.4.4 + spark-v3.5.4: pyspark==3.5.4 + + + # ~~~ Web 1 ~~~ + flask-v1.1.4: flask==1.1.4 + flask-v2.3.3: flask==2.3.3 + flask-v3.0.3: flask==3.0.3 + flask-v3.1.0: flask==3.1.0 + flask: flask-login + flask: werkzeug + flask-v1.1.4: werkzeug<2.1.0 + flask-v1.1.4: markupsafe<2.1.0 + + starlette-v0.16.0: starlette==0.16.0 + starlette-v0.26.1: starlette==0.26.1 + starlette-v0.36.3: starlette==0.36.3 + starlette-v0.45.3: starlette==0.45.3 starlette: pytest-asyncio starlette: python-multipart starlette: requests - # (this is a dependency of httpx) starlette: anyio<4.0.0 starlette: jinja2 - starlette-v{0.19,0.24,0.28,0.32,0.36}: httpx<0.28.0 - starlette-v0.40: httpx - starlette-latest: httpx - starlette-v0.19: starlette~=0.19.0 - starlette-v0.24: starlette~=0.24.0 - starlette-v0.28: starlette~=0.28.0 - starlette-v0.32: starlette~=0.32.0 - starlette-v0.36: starlette~=0.36.0 - starlette-v0.40: starlette~=0.40.0 - starlette-latest: starlette - - # Starlite + starlette: httpx + starlette-v0.16.0: httpx<0.28.0 + starlette-v0.26.1: httpx<0.28.0 + starlette-v0.36.3: httpx<0.28.0 + py3.6-starlette: aiocontextvars + + + # ~~~ Web 2 ~~~ + bottle-v0.12.25: bottle==0.12.25 + bottle-v0.13.2: bottle==0.13.2 + bottle: werkzeug<2.1.0 + + falcon-v2.0.0: falcon==2.0.0 + falcon-v3.1.3: falcon==3.1.3 + falcon-v4.0.2: falcon==4.0.2 + + pyramid-v1.10.8: pyramid==1.10.8 + pyramid-v2.0.2: pyramid==2.0.2 + pyramid: werkzeug<2.1.0 + + starlite-v1.48.1: starlite==1.48.1 + starlite-v1.49.0: starlite==1.49.0 + starlite-v1.50.2: starlite==1.50.2 + starlite-v1.51.16: starlite==1.51.16 starlite: pytest-asyncio starlite: python-multipart starlite: requests starlite: cryptography starlite: pydantic<2.0.0 starlite: httpx<0.28 - starlite-v{1.48}: starlite~=1.48.0 - starlite-v{1.51}: starlite~=1.51.0 - - # SQLAlchemy - sqlalchemy-v1.2: sqlalchemy~=1.2.0 - sqlalchemy-v1.4: sqlalchemy~=1.4.0 - sqlalchemy-v2.0: sqlalchemy~=2.0.0 - sqlalchemy-latest: sqlalchemy - - # Strawberry - strawberry: fastapi - strawberry: flask - strawberry: httpx - strawberry-v0.209: strawberry-graphql[fastapi,flask]~=0.209.0 - strawberry-v0.222: strawberry-graphql[fastapi,flask]~=0.222.0 - strawberry-latest: strawberry-graphql[fastapi,flask] - - # Tornado - # Tornado <6.4.1 is incompatible with Pytest ≥8.2 - # See https://github.com/tornadoweb/tornado/pull/3382. - tornado-{v6.0,v6.2}: pytest<8.2 - tornado-v6.0: tornado~=6.0.0 - tornado-v6.2: tornado~=6.2.0 - tornado-latest: tornado - - # Trytond + + tornado-v6.0.4: tornado==6.0.4 + tornado-v6.1: tornado==6.1 + tornado-v6.2: tornado==6.2 + tornado-v6.4.2: tornado==6.4.2 + tornado: pytest + tornado-v6.0.4: pytest<8.2 + tornado-v6.1: pytest<8.2 + tornado-v6.2: pytest<8.2 + py3.6-tornado: aiocontextvars + + + # ~~~ Misc ~~~ + loguru-v0.7.3: loguru==0.7.3 + + trytond-v5.0.9: trytond==5.0.9 + trytond-v5.8.16: trytond==5.8.16 + trytond-v6.8.17: trytond==6.8.17 + trytond-v7.0.9: trytond==7.0.9 + trytond-v7.4.6: trytond==7.4.6 trytond: werkzeug - trytond-v5: trytond~=5.0 - trytond-v6: trytond~=6.0 - trytond-v7: trytond~=7.0 - trytond-latest: trytond - # Typer - typer-v0.15: typer~=0.15.0 - typer-latest: typer + typer-v0.15.1: typer==0.15.1 + + setenv = PYTHONDONTWRITEBYTECODE=1 @@ -784,9 +765,10 @@ setenv = rq: TESTPATH=tests/integrations/rq sanic: TESTPATH=tests/integrations/sanic spark: TESTPATH=tests/integrations/spark + sqlalchemy: TESTPATH=tests/integrations/sqlalchemy starlette: TESTPATH=tests/integrations/starlette starlite: TESTPATH=tests/integrations/starlite - sqlalchemy: TESTPATH=tests/integrations/sqlalchemy + statsig: TESTPATH=tests/integrations/statsig strawberry: TESTPATH=tests/integrations/strawberry tornado: TESTPATH=tests/integrations/tornado trytond: TESTPATH=tests/integrations/trytond