[tox] skip_missing_interpreters = True envlist = py{37,38,39,310,311}-core py{37,38,39,310,311}-ext-aiobotocore py{37,38,39,310,311}-ext-aiohttp py{37,38,39,310,311}-ext-botocore py{37,38,39,310,311}-ext-bottle py{37,38,39}-ext-django-2 py{37,38,39,310}-ext-django-3 ; Django4 is only for python 3.8+ py{38,39,310,311}-ext-django-4 py{37,38,39,310,311}-ext-flask py{37,38,39,310,311}-ext-flask_sqlalchemy py{37,38,39,310,311}-ext-httplib py{37,38,39,310,311}-ext-httpx py{37,38,39,310,311}-ext-pg8000 py{37,38,39,310,311}-ext-psycopg2 py{37,38,39,310,311}-ext-pymysql py{37,38,39,310,311}-ext-pynamodb py{37,38,39,310,311}-ext-requests py{37,38,39,310,311}-ext-sqlalchemy py{37,38,39,310,311}-ext-sqlalchemy_core py{37,38,39,310,311}-ext-sqlite3 [testenv] passenv = TOXENV CI CODECOV_* deps = ; Testing packages pytest > 3.0.0 pytest-benchmark coverage == 4.5.4 codecov ; Packages common to all test environments wrapt ; Python 3.5+ only deps py{37,38,39,310,311}: pytest-asyncio ext-aiobotocore: aiobotocore >= 0.10.0 ext-aiobotocore: pytest-asyncio ext-aiohttp: aiohttp >= 3.3.0 ext-aiohttp: pytest-aiohttp ext-httpx: httpx >= 0.20 ext-httpx: pytest-asyncio >= 0.19 ext-requests: requests ext-bottle: bottle >= 0.10 ext-bottle: webtest ext-flask: flask >= 0.10 ext-flask_sqlalchemy: flask >= 0.10 ext-flask_sqlalchemy: Flask-SQLAlchemy <= 2.5.1 ext-flask_sqlalchemy: sqlalchemy >=1.0.0,<2.0.0 ext-sqlalchemy: sqlalchemy >=1.0.0,<2.0.0 ext-sqlalchemy_core: sqlalchemy >=1.0.0,<2.0.0 ext-sqlalchemy_core: testing.postgresql ext-sqlalchemy_core: psycopg2 ext-django-2: Django >=2.0,<3.0 ext-django-3: Django >=3.0,<4.0 ext-django-4: Django >=4.0,<5.0 ext-django: django-fake-model py{37,38,39,310,311}-ext-pynamodb: pynamodb >=3.3.1 ext-psycopg2: psycopg2 ext-psycopg2: testing.postgresql ext-pg8000: pg8000 <= 1.20.0 ext-pg8000: testing.postgresql py{37,38,39,310,311}-ext-pymysql: pymysql >= 1.0.0 setenv = DJANGO_SETTINGS_MODULE = tests.ext.django.app.settings AWS_SECRET_ACCESS_KEY = fake_key AWS_ACCESS_KEY_ID=fake_id commands = coverage erase py{37,38,39,310,311}-core: coverage run --append --source aws_xray_sdk -m pytest --ignore tests/ext {posargs} ext-aiobotocore: coverage run --append --source aws_xray_sdk -m pytest tests/ext/aiobotocore {posargs} ext-aiohttp: coverage run --append --source aws_xray_sdk -m pytest tests/ext/aiohttp {posargs} ext-botocore: coverage run --append --source aws_xray_sdk -m pytest tests/ext/botocore {posargs} ext-bottle: coverage run --append --source aws_xray_sdk -m pytest tests/ext/bottle {posargs} ext-django: coverage run --append --source aws_xray_sdk -m pytest tests/ext/django {posargs} ext-flask: coverage run --append --source aws_xray_sdk -m pytest tests/ext/flask {posargs} ext-flask_sqlalchemy: coverage run --append --source aws_xray_sdk -m pytest tests/ext/flask_sqlalchemy {posargs} ext-httplib: coverage run --append --source aws_xray_sdk -m pytest tests/ext/httplib {posargs} ext-httpx: coverage run --append --source aws_xray_sdk -m pytest tests/ext/httpx {posargs} ext-pg8000: coverage run --append --source aws_xray_sdk -m pytest tests/ext/pg8000 {posargs} ext-psycopg2: coverage run --append --source aws_xray_sdk -m pytest tests/ext/psycopg2 {posargs} ext-pymysql: coverage run --append --source aws_xray_sdk -m pytest tests/ext/pymysql {posargs} ext-pynamodb: coverage run --append --source aws_xray_sdk -m pytest tests/ext/pynamodb {posargs} ext-requests: coverage run --append --source aws_xray_sdk -m pytest tests/ext/requests {posargs} ext-sqlalchemy: coverage run --append --source aws_xray_sdk -m pytest tests/ext/sqlalchemy {posargs} py{37,38,39,310,311}-ext-sqlalchemy_core: coverage run --append --source aws_xray_sdk -m pytest tests/ext/sqlalchemy_core {posargs} ext-sqlite3: coverage run --append --source aws_xray_sdk -m pytest tests/ext/sqlite3 {posargs} ; TODO: add additional logic to combine coverage from "core" and "ext" test runs ; codecov