[tox]
requires =
  tox-uv>=1
isolated_build = True
skipsdist = True
skip_missing_interpreters = True
envlist =
    ; Environments are organized by individual package, allowing
    ; for specifying supported Python versions per package.

    ; instrumentation-openai
    py3{8,9,10,11,12,13}-test-instrumentation-openai-v2-{oldest,latest}
    pypy3-test-instrumentation-openai-v2-{oldest,latest}
    lint-instrumentation-openai-v2

    ; instrumentation-vertexai
    py3{8,9,10,11,12,13}-test-instrumentation-vertexai-{oldest,latest}
    # Disabling pypy3 as shapely does not have wheels and fails to compile
    # pypy3-test-instrumentation-vertexai-{oldest,latest}
    lint-instrumentation-vertexai

    ; instrumentation-google-genai
    py3{9,10,11,12,13}-test-instrumentation-google-genai-{oldest,latest}
    # Disabling pypy3 as shapely does not have wheels and fails to compile
    # pypy3-test-instrumentation-google-genai-{0,1}
    lint-instrumentation-google-genai

    ; opentelemetry-resource-detector-container
    py3{8,9,10,11,12,13}-test-resource-detector-container
    pypy3-test-resource-detector-container
    lint-resource-detector-container

    ; opentelemetry-resource-detector-azure
    py3{8,9,10,11,12,13}-test-resource-detector-azure-{0,1}
    pypy3-test-resource-detector-azure-{0,1}
    lint-resource-detector-azure

    ; opentelemetry-sdk-extension-aws
    py3{8,9,10,11,12,13}-test-sdk-extension-aws-{0,1}
    pypy3-test-sdk-extension-aws-{0,1}
    lint-sdk-extension-aws
    benchmark-sdk-extension-aws

    ; opentelemetry-distro
    py3{8,9,10,11,12,13}-test-distro
    pypy3-test-distro
    lint-distro

    ; opentelemetry-instrumentation
    py3{8,9,10,11,12,13}-test-opentelemetry-instrumentation
    pypy3-test-opentelemetry-instrumentation
    lint-opentelemetry-instrumentation

    ; opentelemetry-instrumentation-aiohttp-client
    py3{8,9,10,11,12,13}-test-instrumentation-aiohttp-client
    pypy3-test-instrumentation-aiohttp-client
    lint-instrumentation-aiohttp-client

    ; opentelemetry-instrumentation-aiohttp-server
    py3{8,9,10,11,12,13}-test-instrumentation-aiohttp-server
    pypy3-test-instrumentation-aiohttp-server
    lint-instrumentation-aiohttp-server

    ; opentelemetry-instrumentation-aiopg
    py3{8,9,10,11,12,13}-test-instrumentation-aiopg
    ; instrumentation-aiopg intentionally excluded from pypy3
    lint-instrumentation-aiopg

    ; opentelemetry-instrumentation-aws-lambda
    py3{8,9,10,11,12,13}-test-instrumentation-aws-lambda
    pypy3-test-instrumentation-aws-lambda
    lint-instrumentation-aws-lambda

    ; opentelemetry-instrumentation-botocore
    py3{8,9,10,11,12,13}-test-instrumentation-botocore-{0,1}
    ; FIXME: see https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1736
    ; pypy3-test-instrumentation-botocore
    lint-instrumentation-botocore

    ; opentelemetry-instrumentation-boto3sqs
    py3{8,9,10,11,12,13}-test-instrumentation-boto3sqs
    pypy3-test-instrumentation-boto3sqs
    lint-instrumentation-boto3sqs

    ; opentelemetry-instrumentation-django
    ; Only officially supported Python versions are tested for each Django
    ; major release. Updated list can be found at:
    ; https://docs.djangoproject.com/en/dev/faq/install/#what-python-version-can-i-use-with-django
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: django~=2.0
    ; 1: django~=3.0
    ; 2: django>=4.0b1,<5.0 backports.zoneinfo==0.2.1
    ; 3: django>=4.0b1,<5.0
    py3{8,9}-test-instrumentation-django-{0,1,2}
    py3{10,11,12}-test-instrumentation-django-{1,3}
    py313-test-instrumentation-django-3
    pypy3-test-instrumentation-django-{0,1}
    lint-instrumentation-django

    ; opentelemetry-instrumentation-dbapi
    py3{8,9,10,11,12,13}-test-instrumentation-dbapi
    pypy3-test-instrumentation-dbapi
    lint-instrumentation-dbapi

    ; opentelemetry-instrumentation-boto
    py3{8,9,10,11}-test-instrumentation-boto
    ; FIXME: see https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1736
    ; pypy3-test-instrumentation-boto
    lint-instrumentation-boto

    ; opentelemetry-instrumentation-asyncclick
    py3{8,9,10,11,12,13}-test-instrumentation-asyncclick
    pypy3-test-instrumentation-asyncclick
    lint-instrumentation-asyncclick

    ; opentelemetry-instrumentation-click
    py3{8,9,10,11,12,13}-test-instrumentation-click
    pypy3-test-instrumentation-click
    lint-instrumentation-click

    ; opentelemetry-instrumentation-elasticsearch
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: elasticsearch-dsl==6.4.0 elasticsearch==6.8.2
    ; 1: elasticsearch-dsl==7.4.1 elasticsearch==7.17.9
    ; 2: elasticsearch-dsl==8.13.1 elasticsearch==8.13.1
    py3{8,9,10,11,12,13}-test-instrumentation-elasticsearch-{0,1,2}
    pypy3-test-instrumentation-elasticsearch-{0,1,2}
    lint-instrumentation-elasticsearch

    ; opentelemetry-instrumentation-falcon
    ; py310 does not work with falcon 1
    ; py3{8,9} will be dropped for falcon 4
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: falcon ==1.4.1
    ; 1: falcon >=2.0.0,<3.0.0
    ; 2: falcon >=3.0.0,<3.1.2
    ; 3: falcon >=3.1.2,<4.0.0
    ; 4: falcon >=4.0.0,<5.0.0
    py3{8,9}-test-instrumentation-falcon-{0,1,2,3}
    py3{10,11,12}-test-instrumentation-falcon-{1,2,3,4}
    py313-test-instrumentation-falcon-4
    pypy3-test-instrumentation-falcon-{0,1,2,3,4}
    lint-instrumentation-falcon

    ; opentelemetry-instrumentation-fastapi
    py3{8,9,10,11,12,13}-test-instrumentation-fastapi
    pypy3-test-instrumentation-fastapi
    lint-instrumentation-fastapi

    ; opentelemetry-instrumentation-flask
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: Flask ==2.1.3 Werkzeug <3.0.0
    ; 1: Flask ==2.2.0 Werkzeug <3.0.0
    ; 2: Flask >=3.0.0 Werkzeug >=3.0.0
    py3{8,9,10,11,12,13}-test-instrumentation-flask-{0,1,2}
    pypy3-test-instrumentation-flask-{0,1}
    lint-instrumentation-flask

    ; opentelemetry-instrumentation-urllib
    py3{8,9,10,11,12,13}-test-instrumentation-urllib
    pypy3-test-instrumentation-urllib
    lint-instrumentation-urllib

    ; opentelemetry-instrumentation-urllib3
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: urllib3 >=1.0.0,<2.0.0
    ; 1: urllib3 >=2.0.0,<3.0.0
    py3{8,9,10,11,12,13}-test-instrumentation-urllib3-{0,1}
    pypy3-test-instrumentation-urllib3-{0,1}
    lint-instrumentation-urllib3

    ; opentelemetry-instrumentation-requests
    py3{8,9,10,11,12,13}-test-instrumentation-requests
    ;pypy3-test-instrumentation-requests
    lint-instrumentation-requests

    ; opentelemetry-instrumentation-starlette
    py3{8,9,10,11,12,13}-test-instrumentation-starlette-{oldest,latest}
    pypy3-test-instrumentation-starlette-{oldest,latest}
    lint-instrumentation-starlette

    ; opentelemetry-instrumentation-jinja2
    py3{8,9,10,11,12,13}-test-instrumentation-jinja2
    pypy3-test-instrumentation-jinja2
    lint-instrumentation-jinja2

    ; opentelemetry-instrumentation-logging
    py3{8,9,10,11,12,13}-test-instrumentation-logging
    pypy3-test-instrumentation-logging
    lint-instrumentation-logging

    ; opentelemetry-exporter-richconsole
    py3{8,9,10,11,12,13}-test-exporter-richconsole
    pypy3-test-exporter-richconsole
    lint-exporter-richconsole

    ; opentelemetry-exporter-prometheus-remote-write
    py3{8,9,10,11,12,13}-test-exporter-prometheus-remote-write
    pypy3-test-exporter-prometheus-remote-write
    lint-exporter-prometheus-remote-write

    ; opentelemetry-instrumentation-mysql
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: mysql-connector-python >=8.0.0,<9.0.0
    ; 1: mysql-connector-python ~=9.0.0
    py3{8,9,10,11,12,13}-test-instrumentation-mysql-{0,1}
    pypy3-test-instrumentation-mysql-{0,1}
    lint-instrumentation-mysql

    ; opentelemetry-instrumentation-mysqlclient
    py3{8,9,10,11,12,13}-test-instrumentation-mysqlclient
    pypy3-test-instrumentation-mysqlclient
    ; prerequisite: follow the instructions here
    ; https://github.com/PyMySQL/mysqlclient#install
    ; for your OS to install the required dependencies
    lint-instrumentation-mysqlclient

    ; opentelemetry-instrumentation-psycopg2
    py3{8,9,10,11,12,13}-test-instrumentation-psycopg2
    py3{8,9,10,11,12,13}-test-instrumentation-psycopg2-binary
    ; ext-psycopg2 intentionally excluded from pypy3
    lint-instrumentation-psycopg2

    ; opentelemetry-instrumentation-psycopg
    py3{8,9,10,11,12,13}-test-instrumentation-psycopg
    pypy3-test-instrumentation-psycopg
    lint-instrumentation-psycopg

    ; opentelemetry-instrumentation-pymemcache
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: pymemcache ==1.3.5
    ; 1: pymemcache >2.0.0,<3.0.0
    ; 2: pymemcache >3.0.0,<3.4.2
    ; 3: pymemcache ==3.4.2
    ; 4: pymemcache ==4.0.0
    py3{8,9,10,11,12,13}-test-instrumentation-pymemcache-{0,1,2,3,4}
    pypy3-test-instrumentation-pymemcache-{0,1,2,3,4}
    lint-instrumentation-pymemcache

    ; opentelemetry-instrumentation-pymongo
    py3{8,9,10,11,12,13}-test-instrumentation-pymongo
    pypy3-test-instrumentation-pymongo
    lint-instrumentation-pymongo

    ; opentelemetry-instrumentation-pymysql
    py3{8,9,10,11,12,13}-test-instrumentation-pymysql
    pypy3-test-instrumentation-pymysql
    lint-instrumentation-pymysql

    ; opentelemetry-instrumentation-pymssql
    py3{8,9,10,11,12,13}-test-instrumentation-pymssql
    ; pymssql has no support for pypy: see https://github.com/pymssql/pymssql/pull/517
    ; pypy3-test-instrumentation-pymssql
    lint-instrumentation-pymssql

    ; opentelemetry-instrumentation-pyramid
    ; TODO: add py313 when supported by pyramid
    py3{8,9,10,11,12}-test-instrumentation-pyramid
    pypy3-test-instrumentation-pyramid
    lint-instrumentation-pyramid

    ; opentelemetry-instrumentation-asgi
    py3{8,9,10,11,12,13}-test-instrumentation-asgi
    pypy3-test-instrumentation-asgi
    lint-instrumentation-asgi

    ; opentelemetry-instrumentation-asyncpg
    py3{8,9,10,11,12,13}-test-instrumentation-asyncpg
    ; ext-asyncpg intentionally excluded from pypy3
    lint-instrumentation-asyncpg

    ; opentelemetry-instrumentation-sqlite3
    py3{8,9,10,11,12,13}-test-instrumentation-sqlite3
    pypy3-test-instrumentation-sqlite3
    lint-instrumentation-sqlite3

    ; opentelemetry-instrumentation-wsgi
    py3{8,9,10,11,12,13}-test-instrumentation-wsgi
    pypy3-test-instrumentation-wsgi
    lint-instrumentation-wsgi

    ; opentelemetry-instrumentation-grpc
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: grpcio==1.62.0
    ; 1: grpcio==1.66.2
    py3{8,9,10,11,12}-test-instrumentation-grpc-{0,1}
    py313-test-instrumentation-grpc-1
    lint-instrumentation-grpc

    ; opentelemetry-instrumentation-sqlalchemy
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: sqlalchemy>=1.1,<1.2
    ; 1: sqlalchemy~=1.4 aiosqlite
    ; 2: sqlalchemy~=2.0.0
    py3{8,9,10,11,12,13}-test-instrumentation-sqlalchemy-{1,2}
    pypy3-test-instrumentation-sqlalchemy-{0,1,2}
    lint-instrumentation-sqlalchemy

    ; opentelemetry-instrumentation-redis
    py3{8,9,10,11,12,13}-test-instrumentation-redis
    pypy3-test-instrumentation-redis
    lint-instrumentation-redis

    ; opentelemetry-instrumentation-remoulade
    py3{8,9,10,11,12,13}-test-instrumentation-remoulade
    ; instrumentation-remoulade intentionally excluded from pypy3
    lint-instrumentation-remoulade

    ; opentelemetry-instrumentation-celery
    py3{8,9,10,11,12,13}-test-instrumentation-celery
    pypy3-test-instrumentation-celery
    lint-instrumentation-celery

    ; opentelemetry-instrumentation-system-metrics
    py3{8,9,10,11,12,13}-test-instrumentation-system-metrics
    pypy3-test-instrumentation-system-metrics
    lint-instrumentation-system-metrics

    ; opentelemetry-instrumentation-threading
    py3{8,9,10,11,12,13}-test-instrumentation-threading
    pypy3-test-instrumentation-threading
    lint-instrumentation-threading

    ; opentelemetry-instrumentation-tornado
    py3{8,9,10,11,12,13}-test-instrumentation-tornado
    pypy3-test-instrumentation-tornado
    lint-instrumentation-tornado

    ; opentelemetry-instrumentation-tortoiseorm
    py3{8,9,10,11,12,13}-test-instrumentation-tortoiseorm
    pypy3-test-instrumentation-tortoiseorm
    lint-instrumentation-tortoiseorm

    ; opentelemetry-instrumentation-httpx
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: httpx>=0.18.0,<0.19.0 respx~=0.17.0
    ; 1: httpx>=0.19.0 respx~=0.20.1
    py3{8,9,10,11,12}-test-instrumentation-httpx-{0,1}
    py313-test-instrumentation-httpx-1
    pypy3-test-instrumentation-httpx-{0,1}
    lint-instrumentation-httpx

    ; opentelemetry-util-http
    py3{8,9,10,11,12,13}-test-util-http
    pypy3-test-util-http
    lint-util-http

    ; opentelemetry-propagator-aws-xray
    py3{8,9,10,11,12,13}-test-propagator-aws-xray-{0,1}
    pypy3-test-propagator-aws-xray-{0,1}
    lint-propagator-aws-xray
    benchmark-propagator-aws-xray

    ; opentelemetry-propagator-ot-trace
    py3{8,9,10,11,12,13}-test-propagator-ot-trace
    pypy3-test-propagator-ot-trace
    lint-propagator-ot-trace

    ; opentelemetry-instrumentation-sio-pika
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: pika>=0.12.0,<1.0.0
    ; 1: pika>=1.0.0
    py3{8,9,10,11,12,13}-test-instrumentation-sio-pika-{0,1}
    pypy3-test-instrumentation-sio-pika-{0,1}
    lint-instrumentation-sio-pika

    ; opentelemetry-instrumentation-aio-pika
    ; The numbers at the end of the environment names
    ; below mean these dependencies are being used:
    ; 0: aio_pika==7.2.0
    ; 1: aio_pika==8.3.0
    ; 2: aio_pika==9.0.5
    ; 3: aio_pika==9.4.1
    py3{8,9,10,11,12,13}-test-instrumentation-aio-pika-{0,1,2,3}
    pypy3-test-instrumentation-aio-pika-{0,1,2,3}
    lint-instrumentation-aio-pika

    ; opentelemetry-instrumentation-aiokafka
    py3{8,9,10,11,12,13}-test-instrumentation-aiokafka
    pypy3-test-instrumentation-aiokafka
    lint-instrumentation-aiokafka

    ; opentelemetry-instrumentation-kafka-python
    py3{8,9,10,11}-test-instrumentation-kafka-python
    py3{8,9,10,11,12,13}-test-instrumentation-kafka-pythonng
    pypy3-test-instrumentation-kafka-python
    pypy3-test-instrumentation-kafka-pythonng
    lint-instrumentation-kafka-python

    ; opentelemetry-instrumentation-confluent-kafka
    py3{8,9,10,11,12,13}-test-instrumentation-confluent-kafka
    lint-instrumentation-confluent-kafka

    ; opentelemetry-instrumentation-asyncio
    py3{8,9,10,11,12,13}-test-instrumentation-asyncio
    lint-instrumentation-asyncio

    ; opentelemetry-instrumentation-cassandra
    py3{8,9,10,11,12,13}-test-instrumentation-cassandra
    pypy3-test-instrumentation-cassandra
    lint-instrumentation-cassandra

    ; opentelemetry-processor-baggage
    py3{8,9,10,11,12,13}-test-processor-baggage
    pypy3-test-processor-baggage
    ; requires snappy headers to be available on the system
    lint-processor-baggage

    spellcheck
    docker-tests
    docs
    generate
    generate-workflows
    shellcheck
    ruff
    typecheck

[testenv]
test_deps =
  opentelemetry-api@{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api
  opentelemetry-semantic-conventions@{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions
  opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk
  opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils

deps =
  lint: -r dev-requirements.txt
  coverage: pytest
  coverage: pytest-cov

  opentelemetry-instrumentation: {[testenv]test_deps}
  opentelemetry-instrumentation: -r {toxinidir}/opentelemetry-instrumentation/test-requirements.txt

  distro: {[testenv]test_deps}
  distro: -r {toxinidir}/opentelemetry-distro/test-requirements.txt

  # packages that are released individually should provide a test-requirements.txt with the lowest version of OTel API
  # and SDK supported to test we are honoring it
  openai-oldest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/requirements.oldest.txt
  # and the latest version of OTel API and SDK
  openai-latest: {[testenv]test_deps}
  openai-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/requirements.latest.txt
  lint-instrumentation-openai-v2: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/requirements.oldest.txt

  vertexai-oldest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/requirements.oldest.txt
  vertexai-latest: {[testenv]test_deps}
  vertexai-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/requirements.latest.txt
  lint-instrumentation-vertexai: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/requirements.oldest.txt

  google-genai-oldest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/requirements.oldest.txt
  google-genai-latest: {[testenv]test_deps}
  google-genai-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/requirements.latest.txt
  lint-instrumentation-google-genai: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/requirements.oldest.txt

  asgi: {[testenv]test_deps}
  asgi: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi/test-requirements.txt

  celery: {[testenv]test_deps}
  py3{8,9}-test-instrumentation-celery: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-0.txt
  py3{10,11,12,13}-test-instrumentation-celery: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-1.txt
  pypy3-test-instrumentation-celery: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-1.txt
  lint-instrumentation-celery: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-1.txt

  asyncclick: {[testenv]test_deps}
  asyncclick: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncclick/test-requirements.txt

  click: {[testenv]test_deps}
  click: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-click/test-requirements.txt

  sio-pika: {[testenv]test_deps}
  sio-pika-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/test-requirements-0.txt
  sio-pika-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/test-requirements-1.txt
  lint-instrumentation-sio-pika: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/test-requirements-1.txt

  aio-pika: {[testenv]test_deps}
  aio-pika-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika/test-requirements-0.txt
  aio-pika-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika/test-requirements-1.txt
  aio-pika-2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika/test-requirements-2.txt
  aio-pika-3: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika/test-requirements-3.txt
  lint-instrumentation-aio-pika: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika/test-requirements-3.txt

  aiokafka: {[testenv]test_deps}
  aiokafka: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aiokafka/test-requirements.txt

  kafka-python: {[testenv]test_deps}
  kafka-python: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python/test-requirements.txt

  kafka-pythonng: {[testenv]test_deps}
  kafka-pythonng: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python/test-requirements-ng.txt

  confluent-kafka: {[testenv]test_deps}
  confluent-kafka: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-confluent-kafka/test-requirements.txt

  grpc: {[testenv]test_deps}
  grpc-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/test-requirements-0.txt
  grpc-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/test-requirements-1.txt
  lint-instrumentation-grpc: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/test-requirements-1.txt

  wsgi: {[testenv]test_deps}
  wsgi: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi/test-requirements.txt

  asyncpg: {[testenv]test_deps}
  asyncpg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg/test-requirements.txt

  aws-lambda: {[testenv]test_deps}
  aws-lambda: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aws-lambda/test-requirements.txt

  boto: {[testenv]test_deps}
  boto: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-boto/test-requirements.txt

  boto3sqs: {[testenv]test_deps}
  boto3sqs: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-boto3sqs/test-requirements.txt

  falcon: {[testenv]test_deps}
  falcon-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon/test-requirements-0.txt
  falcon-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon/test-requirements-1.txt
  falcon-2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon/test-requirements-2.txt
  falcon-3: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon/test-requirements-3.txt
  falcon-4: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon/test-requirements-4.txt
  lint-instrumentation-falcon: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon/test-requirements-4.txt

  flask: {[testenv]test_deps}
  flask-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-flask/test-requirements-0.txt
  flask-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-flask/test-requirements-1.txt
  flask-2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-flask/test-requirements-2.txt
  lint-instrumentation-flask: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-flask/test-requirements-2.txt

  urllib: {[testenv]test_deps}
  urllib: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib/test-requirements.txt

  urllib3: {[testenv]test_deps}
  urllib3-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib3/test-requirements-0.txt
  urllib3-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib3/test-requirements-1.txt
  lint-instrumentation-urllib3: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib3/test-requirements-1.txt

  botocore: {[testenv]test_deps}
  botocore-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/test-requirements-0.txt
  botocore-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/test-requirements-1.txt
  lint-instrumentation-botocore: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/test-requirements-1.txt

  cassandra: {[testenv]test_deps}
  cassandra: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-cassandra/test-requirements.txt

  dbapi: {[testenv]test_deps}
  dbapi: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi/test-requirements.txt

  django: {[testenv]test_deps}
  py3{8,9}-test-instrumentation-django-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-0.txt
  py3{8,9}-test-instrumentation-django-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-1.txt
  py3{8,9}-test-instrumentation-django-2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-2.txt
  py3{10,11,12}-test-instrumentation-django-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-1.txt
  py3{10,11,12,13}-test-instrumentation-django-3: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-3.txt
  pypy3-test-instrumentation-django-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-0.txt
  pypy3-test-instrumentation-django-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-1.txt
  lint-instrumentation-django: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-3.txt

  fastapi: {[testenv]test_deps}
  fastapi: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi/test-requirements.txt

  mysql: {[testenv]test_deps}
  mysql-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql/test-requirements-0.txt
  mysql-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql/test-requirements-1.txt
  lint-instrumentation-mysql: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql/test-requirements-1.txt

  mysqlclient: {[testenv]test_deps}
  mysqlclient: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-mysqlclient/test-requirements.txt

  pymemcache: {[testenv]test_deps}
  pymemcache-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache/test-requirements-0.txt
  pymemcache-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache/test-requirements-1.txt
  pymemcache-2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache/test-requirements-2.txt
  pymemcache-3: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache/test-requirements-3.txt
  pymemcache-4: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache/test-requirements-4.txt
  lint-instrumentation-pymemcache: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache/test-requirements-4.txt

  pymongo: {[testenv]test_deps}
  pymongo: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymongo/test-requirements.txt

  psycopg: {[testenv]test_deps}
  py3{8,9}-test-instrumentation-psycopg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-0.txt
  py3{10,11,12,13}-test-instrumentation-psycopg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-1.txt
  pypy3-test-instrumentation-psycopg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-1.txt
  lint-instrumentation-psycopg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-1.txt

  psycopg2: {[testenv]test_deps}
  psycopg2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2/test-requirements.txt

  psycopg2-binary: {[testenv]test_deps}
  psycopg2-binary: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2/test-requirements-binary.txt

  pymysql: {[testenv]test_deps}
  pymysql: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymysql/test-requirements.txt

  pymssql: {[testenv]test_deps}
  pymssql: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pymssql/test-requirements.txt

  pyramid: {[testenv]test_deps}
  pyramid: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pyramid/test-requirements.txt

  sqlite3: {[testenv]test_deps}
  sqlite3: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlite3/test-requirements.txt

  redis: {[testenv]test_deps}
  redis: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-redis/test-requirements.txt

  remoulade: {[testenv]test_deps}
  remoulade: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-remoulade/test-requirements.txt

  requests: {[testenv]test_deps}
  requests: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-requests/test-requirements.txt

  starlette: {[testenv]test_deps}
  starlette-{oldest,lint}: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-starlette/test-requirements.oldest.txt
  starlette-latest: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-starlette/test-requirements.latest.txt

  system-metrics: {[testenv]test_deps}
  system-metrics: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-system-metrics/test-requirements.txt

  threading: {[testenv]test_deps}
  threading: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-threading/test-requirements.txt

  tornado: {[testenv]test_deps}
  tornado: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-tornado/test-requirements.txt

  tortoiseorm: {[testenv]test_deps}
  tortoiseorm: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-tortoiseorm/test-requirements.txt

  jinja2: {[testenv]test_deps}
  jinja2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-jinja2/test-requirements.txt

  logging: {[testenv]test_deps}
  logging: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-logging/test-requirements.txt

  aiohttp-client: {[testenv]test_deps}
  aiohttp-client: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client/test-requirements.txt

  aiohttp-server: {[testenv]test_deps}
  aiohttp-server: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-server/test-requirements.txt

  aiopg: {[testenv]test_deps}
  aiopg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg/test-requirements.txt

  richconsole: {[testenv]test_deps}
  richconsole: -r {toxinidir}/exporter/opentelemetry-exporter-richconsole/test-requirements.txt

  prometheus: {[testenv]test_deps}
  prometheus: -r {toxinidir}/exporter/opentelemetry-exporter-prometheus-remote-write/test-requirements.txt

  sqlalchemy: {[testenv]test_deps}
  sqlalchemy-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy/test-requirements-0.txt
  sqlalchemy-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy/test-requirements-1.txt
  sqlalchemy-2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy/test-requirements-2.txt
  lint-instrumentation-sqlalchemy: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy/test-requirements-2.txt

  elasticsearch: {[testenv]test_deps}
  elasticsearch-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch/test-requirements-0.txt
  elasticsearch-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch/test-requirements-1.txt
  elasticsearch-2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch/test-requirements-2.txt
  lint-instrumentation-elasticsearch: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch/test-requirements-2.txt

  asyncio: {[testenv]test_deps}
  asyncio: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncio/test-requirements.txt

  httpx: {[testenv]test_deps}
  httpx-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/test-requirements-0.txt
  httpx-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/test-requirements-1.txt
  lint-instrumentation-httpx: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/test-requirements-1.txt

  # packages that are released individually should provide a test-requirements.txt with the lowest version of OTel API
  # and SDK supported to test we are honoring it
  sdk-extension-aws-0: -r {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws/test-requirements-0.txt
  # and the latest version of OTel API and SDK
  sdk-extension-aws-1: {[testenv]test_deps}
  sdk-extension-aws-1: -r {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws/test-requirements-1.txt
  lint-sdk-extension-aws: -r {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws/test-requirements-0.txt
  benchmark-sdk-extension-aws: -r {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws/benchmark-requirements.txt

  resource-detector-container: {[testenv]test_deps}
  resource-detector-container: -r {toxinidir}/resource/opentelemetry-resource-detector-container/test-requirements.txt

  # packages that are released individually should provide a test-requirements.txt with the lowest version of OTel API
  # and SDK supported to test we are honoring it
  resource-detector-azure-0: -r {toxinidir}/resource/opentelemetry-resource-detector-azure/test-requirements-0.txt
  # and the latest version of OTel API and SDK
  resource-detector-azure-1: {[testenv]test_deps}
  resource-detector-azure-1: -r {toxinidir}/resource/opentelemetry-resource-detector-azure/test-requirements-1.txt
  lint-resource-detector-azure: -r {toxinidir}/resource/opentelemetry-resource-detector-azure/test-requirements-0.txt

  propagator-ot-trace: {[testenv]test_deps}
  propagator-ot-trace: -r {toxinidir}/propagator/opentelemetry-propagator-ot-trace/test-requirements.txt

  # packages that are released individually should provide a test-requirements.txt with the lowest version of OTel API
  # and SDK supported to test we are honoring it
  propagator-aws-xray-0: -r {toxinidir}/propagator/opentelemetry-propagator-aws-xray/test-requirements-0.txt
  # and the latest version of OTel API and SDK
  propagator-aws-xray-1: {[testenv]test_deps}
  propagator-aws-xray-1: -r {toxinidir}/propagator/opentelemetry-propagator-aws-xray/test-requirements-1.txt
  lint-propagator-aws-xray: -r {toxinidir}/propagator/opentelemetry-propagator-aws-xray/test-requirements-0.txt
  benchmark-propagator-aws-xray: -r {toxinidir}/propagator/opentelemetry-propagator-aws-xray/benchmark-requirements.txt

  processor-baggage: {[testenv]test_deps}
  processor-baggage: -r {toxinidir}/processor/opentelemetry-processor-baggage/test-requirements.txt

  util-http: {[testenv]test_deps}
  util-http: -r {toxinidir}/util/opentelemetry-util-http/test-requirements.txt
  util-http: {toxinidir}/util/opentelemetry-util-http
  ; FIXME: add coverage testing
allowlist_externals =
  sh

setenv =
  ; override CORE_REPO_SHA via env variable when testing other branches/commits than main
  ; i.e: CORE_REPO_SHA=dde62cebffe519c35875af6d06fae053b3be65ec tox -e <env to test>
  CORE_REPO_SHA={env:CORE_REPO_SHA:main}
  CORE_REPO=git+https://github.com/open-telemetry/opentelemetry-python.git@{env:CORE_REPO_SHA}
  UV_CONFIG_FILE={toxinidir}/tox-uv.toml

commands_pre =
; In order to get a health coverage report,
; we have to install packages in editable mode.
  coverage: python {toxinidir}/scripts/eachdist.py install --editable

commands =
  test-distro: pytest {toxinidir}/opentelemetry-distro/tests {posargs}
  lint-distro: pylint {toxinidir}/opentelemetry-distro

  test-opentelemetry-instrumentation: pytest {toxinidir}/opentelemetry-instrumentation/tests {posargs}
  lint-opentelemetry-instrumentation: pylint {toxinidir}/opentelemetry-instrumentation

  test-instrumentation-aiohttp-client: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client/tests {posargs}
  lint-instrumentation-aiohttp-client: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-aiohttp-client"

  test-instrumentation-aiohttp-server: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-server/tests {posargs}
  lint-instrumentation-aiohttp-server: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-aiohttp-server"

  test-instrumentation-aiopg: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg/tests {posargs}
  lint-instrumentation-aiopg: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-aiopg"

  test-instrumentation-asgi: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi/tests {posargs}
  lint-instrumentation-asgi: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-asgi"

  test-instrumentation-asyncclick: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncclick/tests {posargs}
  lint-instrumentation-asyncclick: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-asyncclick"

  test-instrumentation-asyncpg: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg/tests {posargs}
  lint-instrumentation-asyncpg: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-asyncpg"

  test-instrumentation-aws-lambda: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-aws-lambda/tests {posargs}
  lint-instrumentation-aws-lambda: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-aws-lambda"

  test-instrumentation-boto: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-boto/tests {posargs}
  lint-instrumentation-boto: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-boto"

  test-instrumentation-botocore: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/tests {posargs}
  lint-instrumentation-botocore: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-botocore"

  test-instrumentation-boto3sqs: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-boto3sqs/tests {posargs}
  lint-instrumentation-boto3sqs: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-boto3sqs"

  test-instrumentation-cassandra: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-cassandra/tests {posargs}
  lint-instrumentation-cassandra: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-cassandra"

  test-instrumentation-celery: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/tests {posargs}
  lint-instrumentation-celery: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-celery"

  test-instrumentation-click: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-click/tests {posargs}
  lint-instrumentation-click: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-click"

  test-instrumentation-dbapi: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi/tests {posargs}
  lint-instrumentation-dbapi: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-dbapi"

  test-instrumentation-django: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-django/tests {posargs}
  lint-instrumentation-django: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-django"

  test-instrumentation-elasticsearch: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch/tests {posargs}
  lint-instrumentation-elasticsearch: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-elasticsearch"

  test-instrumentation-falcon: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon/tests {posargs}
  lint-instrumentation-falcon: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-falcon"

  test-instrumentation-fastapi: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi/tests {posargs}
  lint-instrumentation-fastapi: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-fastapi"

  test-instrumentation-flask: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-flask/tests {posargs}
  lint-instrumentation-flask: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-flask"

  test-instrumentation-urllib: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib/tests {posargs}
  lint-instrumentation-urllib: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-urllib"

  test-instrumentation-urllib3: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib3/tests {posargs}
  lint-instrumentation-urllib3: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-urllib3"

  test-instrumentation-grpc: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/tests {posargs}
  lint-instrumentation-grpc: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-grpc"

  test-instrumentation-jinja2: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-jinja2/tests {posargs}
  lint-instrumentation-jinja2: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-jinja2"

  test-instrumentation-aiokafka: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-aiokafka/tests {posargs}
  lint-instrumentation-aiokafka: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-aiokafka"

  test-instrumentation-kafka-python: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python/tests {posargs}
  lint-instrumentation-kafka-python: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-kafka-python"

  ; Test only for kafka-pythonng instrumentation as the only difference between kafka-python and kafka-pythonng is the version of kafka-python
  test-instrumentation-kafka-pythonng: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python/tests {posargs}

  test-instrumentation-confluent-kafka: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-confluent-kafka/tests {posargs}
  lint-instrumentation-confluent-kafka: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-confluent-kafka"

  test-instrumentation-logging: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-logging/tests {posargs}
  lint-instrumentation-logging: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-logging"

  test-instrumentation-mysql: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql/tests {posargs}
  lint-instrumentation-mysql: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-mysql"

  test-instrumentation-mysqlclient: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-mysqlclient/tests {posargs}
  lint-instrumentation-mysqlclient: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-mysqlclient"

  test-instrumentation-openai-v2: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests {posargs}
  lint-instrumentation-openai-v2: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-openai-v2"

  test-instrumentation-vertexai: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests --vcr-record=none {posargs}
  lint-instrumentation-vertexai: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-vertexai"

  test-instrumentation-google-genai: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-google-genai/tests --vcr-record=none {posargs}
  lint-instrumentation-google-genai: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-google-genai"

  test-instrumentation-sio-pika: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/tests {posargs}
  lint-instrumentation-sio-pika: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-pika"

  test-instrumentation-aio-pika: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika/tests {posargs}
  lint-instrumentation-aio-pika: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-aio-pika"

  test-instrumentation-psycopg: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/tests {posargs}
  lint-instrumentation-psycopg: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-psycopg"

  test-instrumentation-psycopg2: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2/tests {posargs}
  lint-instrumentation-psycopg2: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-psycopg2"

   ; Test only for psycopg2-binary instrumentation as the only difference between psycopg2 and psycopg2-binary is the install method
  test-instrumentation-psycopg2-binary: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2/tests {posargs}

  test-instrumentation-pymemcache: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache/tests {posargs}
  lint-instrumentation-pymemcache: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-pymemcache"

  test-instrumentation-pymongo: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-pymongo/tests {posargs}
  lint-instrumentation-pymongo: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-pymongo"

  test-instrumentation-pymysql: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-pymysql/tests {posargs}
  lint-instrumentation-pymysql: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-pymysql"

  test-instrumentation-pymssql: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-pymssql/tests {posargs}
  lint-instrumentation-pymssql: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-pymssql"

  test-instrumentation-pyramid: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-pyramid/tests {posargs}
  lint-instrumentation-pyramid: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-pyramid"

  test-instrumentation-redis: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-redis/tests {posargs}
  lint-instrumentation-redis: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-redis"

  test-instrumentation-remoulade: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-remoulade/tests {posargs}
  lint-instrumentation-remoulade: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-remoulade"

  test-instrumentation-requests: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-requests/tests {posargs}
  lint-instrumentation-requests: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-requests"

  test-instrumentation-sqlalchemy: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests {posargs}
  lint-instrumentation-sqlalchemy: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-sqlalchemy"

  test-instrumentation-sqlite3: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlite3/tests {posargs}
  lint-instrumentation-sqlite3: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-sqlite3"

  test-instrumentation-starlette: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-starlette/tests {posargs}
  lint-instrumentation-starlette: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-starlette"

  test-instrumentation-system-metrics: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-system-metrics/tests {posargs}
  lint-instrumentation-system-metrics: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-system-metrics"

  test-instrumentation-threading: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-threading/tests {posargs}
  lint-instrumentation-threading: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-threading"

  test-instrumentation-tornado: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-tornado/tests {posargs}
  lint-instrumentation-tornado: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-tornado"

  test-instrumentation-tortoiseorm: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-tortoiseorm/tests {posargs}
  lint-instrumentation-tortoiseorm: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-tortoiseorm"

  test-instrumentation-wsgi: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi/tests {posargs}
  lint-instrumentation-wsgi: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-wsgi"

  test-instrumentation-httpx: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/tests {posargs}
  lint-instrumentation-httpx: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-httpx"

  test-instrumentation-asyncio: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncio/tests {posargs}
  lint-instrumentation-asyncio: sh -c "cd instrumentation && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-asyncio"

  test-util-http: pytest {toxinidir}/util/opentelemetry-util-http/tests {posargs}
  lint-util-http: sh -c "cd util && pylint --rcfile ../.pylintrc opentelemetry-util-http"

  test-sdk-extension-aws: pytest {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws/tests {posargs}
  lint-sdk-extension-aws: sh -c "cd sdk-extension && pylint --rcfile ../.pylintrc opentelemetry-sdk-extension-aws"
  benchmark-sdk-extension-aws: pytest {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws/benchmarks {posargs} --benchmark-json=sdk-extension-aws-benchmark.json

  test-resource-detector-container: pytest {toxinidir}/resource/opentelemetry-resource-detector-container/tests {posargs}
  lint-resource-detector-container: sh -c "cd resource && pylint --rcfile ../.pylintrc opentelemetry-resource-detector-container"

  test-resource-detector-azure: pytest {toxinidir}/resource/opentelemetry-resource-detector-azure/tests {posargs}
  lint-resource-detector-azure: sh -c "cd resource && pylint --rcfile ../.pylintrc opentelemetry-resource-detector-azure"

  test-processor-baggage: pytest {toxinidir}/processor/opentelemetry-processor-baggage/tests {posargs}
  lint-processor-baggage: sh -c "cd processor && pylint --rcfile ../.pylintrc opentelemetry-processor-baggage"

  test-propagator-aws-xray: pytest {toxinidir}/propagator/opentelemetry-propagator-aws-xray/tests {posargs}
  lint-propagator-aws-xray: sh -c "cd propagator && pylint --rcfile ../.pylintrc opentelemetry-propagator-aws-xray"
  benchmark-propagator-aws-xray: pytest {toxinidir}/propagator/opentelemetry-propagator-aws-xray/benchmarks {posargs} --benchmark-json=propagator-aws-xray-benchmark.json

  test-propagator-ot-trace: pytest {toxinidir}/propagator/opentelemetry-propagator-ot-trace/tests {posargs}
  lint-propagator-ot-trace: sh -c "cd propagator && pylint --rcfile ../.pylintrc opentelemetry-propagator-ot-trace"

  test-exporter-richconsole: pytest {toxinidir}/exporter/opentelemetry-exporter-richconsole/tests {posargs}
  lint-exporter-richconsole: sh -c "cd exporter && pylint --rcfile ../.pylintrc opentelemetry-exporter-richconsole"

  test-exporter-prometheus-remote-write: pytest {toxinidir}/exporter/opentelemetry-exporter-prometheus-remote-write/tests {posargs}
  lint-exporter-prometheus-remote-write: sh -c "cd exporter && pylint --rcfile ../.pylintrc opentelemetry-exporter-prometheus-remote-write"

  coverage: {toxinidir}/scripts/coverage.sh

[testenv:docs]
deps =
  -c {toxinidir}/dev-requirements.txt
  -r {toxinidir}/docs-requirements.txt
  pytest
  {[testenv]test_deps}
  {toxinidir}/opentelemetry-instrumentation
  {toxinidir}/util/opentelemetry-util-http

changedir = docs

commands =
  sphinx-build -E -a -W -b html -T . _build/html

[testenv:spellcheck]
basepython: python3
recreate = True
deps =
  codespell==2.2.6

commands =
  codespell

[testenv:docker-tests]
basepython: python3
deps =
  {[testenv]test_deps}
  -r {toxinidir}/tests/opentelemetry-docker-tests/tests/test-requirements.txt
  -e {toxinidir}/opentelemetry-instrumentation
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-celery
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pika
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiokafka
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-confluent-kafka
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-mysqlclient
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymongo
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymysql
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymssql
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-redis
  -e {toxinidir}/instrumentation/opentelemetry-instrumentation-remoulade
  opentelemetry-exporter-opencensus@{env:CORE_REPO}\#egg=opentelemetry-exporter-opencensus&subdirectory=exporter/opentelemetry-exporter-opencensus

changedir =
  tests/opentelemetry-docker-tests/tests

commands_pre =
  sh -c "sudo apt update -y && sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev unixodbc"
  python -c "import pyodbc; print(pyodbc.drivers())"
  docker-compose up -d
  python check_availability.py

commands =
  pytest {posargs}

commands_post =
  docker-compose down -v

[testenv:generate]
deps =
  -r {toxinidir}/gen-requirements.txt

allowlist_externals =
  {toxinidir}/scripts/generate_instrumentation_bootstrap.py
  {toxinidir}/scripts/generate_instrumentation_readme.py
  {toxinidir}/scripts/generate_instrumentation_metapackage.py

commands =
  {toxinidir}/scripts/generate_instrumentation_bootstrap.py
  {toxinidir}/scripts/generate_instrumentation_readme.py
  {toxinidir}/scripts/generate_instrumentation_metapackage.py

[testenv:generate-workflows]
recreate = True
deps =
  {toxinidir}/.github/workflows/generate_workflows_lib

commands =
  python {toxinidir}/.github/workflows/generate_workflows.py

[testenv:shellcheck]

commands_pre =
  sh -c "sudo apt update -y && sudo apt install --assume-yes shellcheck"

commands =
  sh -c "find {toxinidir} -name \*.sh | xargs shellcheck --severity=warning"

[testenv:ruff]
basepython: python3
deps =
  -c {toxinidir}/dev-requirements.txt
  pre-commit
commands =
  pre-commit run --color=always --all-files {posargs}

[testenv:typecheck]
deps =
  -c {toxinidir}/dev-requirements.txt
  pyright
  {[testenv]test_deps}
  {toxinidir}/opentelemetry-instrumentation
  {toxinidir}/util/opentelemetry-util-http
  {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai[instruments]
  {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-google-genai[instruments]
  {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncclick[instruments]
  
commands =
  pyright
