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

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

    ; opentelemetry-sdk-extension-aws
    py3{7,8,9,10,11}-test-sdkextension-aws
    pypy3-test-sdkextension-aws

    ; opentelemetry-distro
    py3{7,8,9,10,11}-test-distro
    pypy3-test-distro

    ; opentelemetry-instrumentation
    py3{7,8,9,10,11}-test-opentelemetry-instrumentation
    pypy3-test-opentelemetry-instrumentation

    py3{7,8,9,10,11}-test-instrumentation-aio-pika
    pypy3-test-instrumentation-aio-pika

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

    ; opentelemetry-instrumentation-aiohttp-server
    py3{6,7,8,9,10,11}-test-instrumentation-aiohttp-server
    pypy3-test-instrumentation-aiohttp-server

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

    ; opentelemetry-instrumentation-aws-lambda
    py3{7,8,9}-test-instrumentation-aws-lambda

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

    ; opentelemetry-instrumentation-boto3sqs
    py3{6,7,8,9,10,11}-test-instrumentation-boto3sqs
    ; FIXME: see https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1736
    ; pypy3-test-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
    py3{7}-test-instrumentation-django1
    py3{7,8,9}-test-instrumentation-django2
    py3{7,8,9,10,11}-test-instrumentation-django3
    py3{8,9,10,11}-test-instrumentation-django4
    pypy3-test-instrumentation-django{1,2,3}

    ; opentelemetry-instrumentation-dbapi
    py3{7,8,9,10,11}-test-instrumentation-dbapi
    pypy3-test-instrumentation-dbapi

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

    ; opentelemetry-instrumentation-elasticsearch
    py3{7,8,9,10,11}-test-instrumentation-elasticsearch{2,6}
    pypy3-test-instrumentation-elasticsearch{2,6}

    ; opentelemetry-instrumentation-elasticsearch5
    py3{7,8,9}-test-instrumentation-elasticsearch5
    pypy3-test-instrumentation-elasticsearch5

    ; opentelemetry-instrumentation-falcon
    ; py310 does not work with falcon 1
    py3{7,8,9}-test-instrumentation-falcon1
    py3{7,8,9,10,11}-test-instrumentation-falcon{2,3}
    pypy3-test-instrumentation-falcon{1,2,3}

    ; opentelemetry-instrumentation-fastapi
    py3{7,8,9,10,11}-test-instrumentation-fastapi
    pypy3-test-instrumentation-fastapi

    ; opentelemetry-instrumentation-flask
    py3{7,8,9,10,11}-test-instrumentation-flask{213,220}
    pypy3-test-instrumentation-flask{213,220}

    ; opentelemetry-instrumentation-urllib
    py3{7,8,9,10,11}-test-instrumentation-urllib
    pypy3-test-instrumentation-urllib

    ; opentelemetry-instrumentation-urllib3
    py3{7,8,9,10,11}-test-instrumentation-urllib3v{1,2}
    ;pypy3-test-instrumentation-urllib3v{1,2}

    ; opentelemetry-instrumentation-requests
    py3{7,8,9,10,11}-test-instrumentation-requests
    ;pypy3-test-instrumentation-requests

    ; opentelemetry-instrumentation-starlette.
    py3{7,8,9,10,11}-test-instrumentation-starlette
    pypy3-test-instrumentation-starlette

    ; opentelemetry-instrumentation-jinja2
    py3{7,8,9,10,11}-test-instrumentation-jinja2
    pypy3-test-instrumentation-jinja2

    ; opentelemetry-instrumentation-logging
    py3{7,8,9,10,11}-test-instrumentation-logging
    pypy3-test-instrumentation-logging

    ; opentelemetry-exporter-richconsole
    py3{7,8,9,10,11}-test-exporter-richconsole

    ; opentelemetry-exporter-prometheus-remote-write
    py3{6,7,8,9,10}-test-exporter-prometheus-remote-write

    ; opentelemetry-instrumentation-mysql
    py3{7,8,9,10,11}-test-instrumentation-mysql
    pypy3-test-instrumentation-mysql

    ; opentelemetry-instrumentation-mysqlclient
    py3{7,8,9,10,11}-test-instrumentation-mysqlclient
    pypy3-test-instrumentation-mysqlclient

    ; opentelemetry-instrumentation-psycopg2
    py3{7,8,9,10,11}-test-instrumentation-psycopg2
    ; ext-psycopg2 intentionally excluded from pypy3

    ; opentelemetry-instrumentation-pymemcache
    py3{7,8,9,10,11}-test-instrumentation-pymemcache{135,200,300,342,400}
    pypy3-test-instrumentation-pymemcache{135,200,300,342,400}

    ; opentelemetry-instrumentation-pymongo
    py3{7,8,9,10,11}-test-instrumentation-pymongo
    pypy3-test-instrumentation-pymongo

    ; opentelemetry-instrumentation-pymysql
    py3{7,8,9,10,11}-test-instrumentation-pymysql
    pypy3-test-instrumentation-pymysql

    ; opentelemetry-instrumentation-pyramid
    py3{7,8,9,10,11}-test-instrumentation-pyramid
    pypy3-test-instrumentation-pyramid

    ; opentelemetry-instrumentation-asgi
    py3{7,8,9,10,11}-test-instrumentation-asgi
    pypy3-test-instrumentation-asgi

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

    ; opentelemetry-instrumentation-sqlite3
    py3{7,8,9,10,11}-test-instrumentation-sqlite3
    pypy3-test-instrumentation-sqlite3

    ; opentelemetry-instrumentation-wsgi
    py3{7,8,9,10,11}-test-instrumentation-wsgi
    pypy3-test-instrumentation-wsgi

    ; opentelemetry-instrumentation-grpc
    py3{7,8,9,10,11}-test-instrumentation-grpc

    ; opentelemetry-instrumentation-sqlalchemy
    py3{7}-test-instrumentation-sqlalchemy{11}
    py3{7,8,9,10,11}-test-instrumentation-sqlalchemy{14}
    pypy3-test-instrumentation-sqlalchemy{11,14}

    ; opentelemetry-instrumentation-redis
    py3{7,8,9,10,11}-test-instrumentation-redis
    pypy3-test-instrumentation-redis

    ; opentelemetry-instrumentation-remoulade
    ; remoulade only supports 3.7 and above
    py3{7,8,9,10,11}-test-instrumentation-remoulade
    ; instrumentation-remoulade intentionally excluded from pypy3

    ; opentelemetry-instrumentation-celery
    ; celery tests don't run on 3.7 because our opentelemetry-api requires importlib-metadata >= 5.0.0
    ; but celery requires importlib-metadata < 5.0.0
    ; see https://github.com/celery/celery/issues/7783 for more details
    py3{8,9,10,11}-test-instrumentation-celery
    ; pypy3-test-instrumentation-celery

    ; opentelemetry-instrumentation-sklearn
    py3{7,8}-test-instrumentation-sklearn

    ; opentelemetry-instrumentation-system-metrics
    py3{6,7,8,9,10,11}-test-instrumentation-system-metrics
    ; instrumentation-system-metrics intentionally excluded from pypy3

    ; opentelemetry-instrumentation-tornado
    py3{7,8,9,10,11}-test-instrumentation-tornado
    pypy3-test-instrumentation-tornado

    ; opentelemetry-instrumentation-tortoiseorm
    py3{7,8,9,10,11}-test-instrumentation-tortoiseorm
    pypy3-test-instrumentation-tortoiseorm

    ; opentelemetry-instrumentation-httpx
    py3{7,8,9,10,11}-test-instrumentation-httpx{18,21}
    pypy3-test-instrumentation-httpx{18,21}

    ; opentelemetry-util-http
    py3{7,8,9,10,11}-test-util-http
    pypy3-test-util-http

    ; opentelemetry-propagator-aws-xray
    py3{7,8,9,10,11}-test-propagator-aws-xray
    pypy3-test-propagator-aws-xray

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

    ; opentelemetry-instrumentation-pika
    py3{7,8,9,10,11}-test-instrumentation-pika{0,1}
    pypy3-test-instrumentation-pika{0,1}

    ; opentelemetry-instrumentation-aio-pika
    py3{7,8,9,10,11}-test-instrumentation-aio-pika{7,8,9}
    pypy3-test-instrumentation-aio-pika{7,8,9}

    ; opentelemetry-instrumentation-kafka-python
    py3{7,8,9,10,11}-test-instrumentation-kafka-python
    pypy3-test-instrumentation-kafka-python

    ; opentelemetry-instrumentation-confluent-kafka
    ; // FIXME: Enable support for python 3.11 when https://github.com/confluentinc/confluent-kafka-python/issues/1452 is fixed
    py3{7,8,9,10}-test-instrumentation-confluent-kafka

    ; opentelemetry-instrumentation-cassandra
    py3{7,8,9,10,11}-test-instrumentation-cassandra
    pypy3-test-instrumentation-cassandra

    lint
    spellcheck
    docker-tests
    docs

    generate

[testenv]
deps =
  -c dev-requirements.txt
  test: pytest
  test: pytest-benchmark
  coverage: pytest
  coverage: pytest-cov
  django1: django~=1.0
  django2: django~=2.0
  django3: django~=3.0
  django4: django>=4.0b1,<5.0
  elasticsearch2: elasticsearch-dsl>=2.0,<3.0
  elasticsearch2: elasticsearch>=2.0,<3.0
  elasticsearch5: elasticsearch-dsl>=5.0,<6.0
  elasticsearch5: elasticsearch>=5.0,<6.0
  elasticsearch6: elasticsearch-dsl>=6.0,<7.0
  elasticsearch6: elasticsearch>=6.0,<7.0
  ; FIXME: Elasticsearch >=7 causes CI workflow tests to hang, see open-telemetry/opentelemetry-python-contrib#620
  ; elasticsearch7: elasticsearch-dsl>=7.0,<8.0
  ; elasticsearch7: elasticsearch>=7.0,<8.0
  ; elasticsearch8: elasticsearch-dsl>=8.0,<9.0
  ; elasticsearch8: elasticsearch>=8.0,<9.0
  falcon1: falcon ==1.4.1
  falcon2: falcon >=2.0.0,<3.0.0
  falcon3: falcon >=3.0.0,<4.0.0
  flask213: Flask ==2.1.3
  flask220: Flask >=2.2.0
  grpc: pytest-asyncio
  sqlalchemy11: sqlalchemy>=1.1,<1.2
  sqlalchemy14: aiosqlite
  sqlalchemy14: sqlalchemy~=1.4
  pika0: pika>=0.12.0,<1.0.0
  pika1: pika>=1.0.0
  aio-pika7: aio_pika~=7.2.0
  aio-pika8: aio_pika>=8.0.0,<9.0.0
  aio-pika9: aio_pika>=9.0.0,<10.0.0
  pymemcache135: pymemcache ==1.3.5
  pymemcache200: pymemcache >2.0.0,<3.0.0
  pymemcache300: pymemcache >3.0.0,<3.4.2
  pymemcache342: pymemcache ==3.4.2
  pymemcache400: pymemcache ==4.0.0
  httpx18: httpx>=0.18.0,<0.19.0
  httpx18: respx~=0.17.0
  httpx21: httpx>=0.19.0
  httpx21: respx~=0.20.1
  urllib3v1: urllib3 >=1.0.0,<2.0.0
  urllib3v2: urllib3 >=2.0.0,<3.0.0

  ; FIXME: add coverage testing
  ; FIXME: add mypy testing

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}"

changedir =
  test-distro: opentelemetry-distro/tests
  test-opentelemetry-instrumentation: opentelemetry-instrumentation/tests
  test-instrumentation-aio-pika: instrumentation/opentelemetry-instrumentation-aio-pika/tests
  test-instrumentation-aiohttp-client: instrumentation/opentelemetry-instrumentation-aiohttp-client/tests
  test-instrumentation-aiohttp-server: instrumentation/opentelemetry-instrumentation-aiohttp-server/tests
  test-instrumentation-aiopg: instrumentation/opentelemetry-instrumentation-aiopg/tests
  test-instrumentation-asgi: instrumentation/opentelemetry-instrumentation-asgi/tests
  test-instrumentation-asyncpg: instrumentation/opentelemetry-instrumentation-asyncpg/tests
  test-instrumentation-aws-lambda: instrumentation/opentelemetry-instrumentation-aws-lambda/tests
  test-instrumentation-boto: instrumentation/opentelemetry-instrumentation-boto/tests
  test-instrumentation-botocore: instrumentation/opentelemetry-instrumentation-botocore/tests
  test-instrumentation-boto3sqs: instrumentation/opentelemetry-instrumentation-boto3sqs/tests
  test-instrumentation-cassandra: instrumentation/opentelemetry-instrumentation-cassandra/tests
  test-instrumentation-celery: instrumentation/opentelemetry-instrumentation-celery/tests
  test-instrumentation-dbapi: instrumentation/opentelemetry-instrumentation-dbapi/tests
  test-instrumentation-django{1,2,3,4}: instrumentation/opentelemetry-instrumentation-django/tests
  test-instrumentation-elasticsearch{2,5,6}: instrumentation/opentelemetry-instrumentation-elasticsearch/tests
  test-instrumentation-falcon{1,2,3}: instrumentation/opentelemetry-instrumentation-falcon/tests
  test-instrumentation-fastapi: instrumentation/opentelemetry-instrumentation-fastapi/tests
  test-instrumentation-flask{213,220}: instrumentation/opentelemetry-instrumentation-flask/tests
  test-instrumentation-urllib: instrumentation/opentelemetry-instrumentation-urllib/tests
  test-instrumentation-urllib3v{1,2}: instrumentation/opentelemetry-instrumentation-urllib3/tests
  test-instrumentation-grpc: instrumentation/opentelemetry-instrumentation-grpc/tests
  test-instrumentation-jinja2: instrumentation/opentelemetry-instrumentation-jinja2/tests
  test-instrumentation-kafka-python: instrumentation/opentelemetry-instrumentation-kafka-python/tests
  test-instrumentation-confluent-kafka: instrumentation/opentelemetry-instrumentation-confluent-kafka/tests
  test-instrumentation-logging: instrumentation/opentelemetry-instrumentation-logging/tests
  test-instrumentation-mysql: instrumentation/opentelemetry-instrumentation-mysql/tests
  test-instrumentation-mysqlclient: instrumentation/opentelemetry-instrumentation-mysqlclient/tests
  test-instrumentation-pika{0,1}: instrumentation/opentelemetry-instrumentation-pika/tests
  test-instrumentation-aio-pika{7,8,9}: instrumentation/opentelemetry-instrumentation-aio-pika/tests
  test-instrumentation-psycopg2: instrumentation/opentelemetry-instrumentation-psycopg2/tests
  test-instrumentation-pymemcache{135,200,300,342,400}: instrumentation/opentelemetry-instrumentation-pymemcache/tests
  test-instrumentation-pymongo: instrumentation/opentelemetry-instrumentation-pymongo/tests
  test-instrumentation-pymysql: instrumentation/opentelemetry-instrumentation-pymysql/tests
  test-instrumentation-pyramid: instrumentation/opentelemetry-instrumentation-pyramid/tests
  test-instrumentation-redis: instrumentation/opentelemetry-instrumentation-redis/tests
  test-instrumentation-remoulade: instrumentation/opentelemetry-instrumentation-remoulade/tests
  test-instrumentation-requests: instrumentation/opentelemetry-instrumentation-requests/tests
  test-instrumentation-sklearn: instrumentation/opentelemetry-instrumentation-sklearn/tests
  test-instrumentation-sqlalchemy{11,14}: instrumentation/opentelemetry-instrumentation-sqlalchemy/tests
  test-instrumentation-sqlite3: instrumentation/opentelemetry-instrumentation-sqlite3/tests
  test-instrumentation-starlette: instrumentation/opentelemetry-instrumentation-starlette/tests
  test-instrumentation-system-metrics: instrumentation/opentelemetry-instrumentation-system-metrics/tests
  test-instrumentation-tornado: instrumentation/opentelemetry-instrumentation-tornado/tests
  test-instrumentation-tortoiseorm: instrumentation/opentelemetry-instrumentation-tortoiseorm/tests
  test-instrumentation-wsgi: instrumentation/opentelemetry-instrumentation-wsgi/tests
  test-instrumentation-httpx{18,21}: instrumentation/opentelemetry-instrumentation-httpx/tests
  test-util-http: util/opentelemetry-util-http/tests
  test-sdkextension-aws: sdk-extension/opentelemetry-sdk-extension-aws/tests
  test-resource-detector-container: resource/opentelemetry-resource-detector-container/tests
  test-propagator-aws: propagator/opentelemetry-propagator-aws-xray/tests
  test-propagator-ot-trace: propagator/opentelemetry-propagator-ot-trace/tests
  test-exporter-richconsole: exporter/opentelemetry-exporter-richconsole/tests
  test-exporter-prometheus-remote-write: exporter/opentelemetry-exporter-prometheus-remote-write/tests

commands_pre =
; Install without -e to test the actual installation
  py3{7,8,9,10,11}: python -m pip install -U pip setuptools wheel
; Install common packages for all the tests. These are not needed in all the
; cases but it saves a lot of boilerplate in this file.
  test: pip install "opentelemetry-api[test] @ {env:CORE_REPO}#egg=opentelemetry-api&subdirectory=opentelemetry-api"
  test: pip install "opentelemetry-semantic-conventions[test] @ {env:CORE_REPO}#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions"
  test: pip install "opentelemetry-sdk[test] @ {env:CORE_REPO}#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk"
  test: pip install "opentelemetry-test-utils[test] @ {env:CORE_REPO}#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils"
  test: pip install {toxinidir}/opentelemetry-instrumentation

  distro: pip install {toxinidir}/opentelemetry-distro

  celery: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-celery[test]

  pika{0,1}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-pika[test]

  aio-pika{7,8,9}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika[test]

  kafka-python: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python[test]

  confluent-kafka: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-confluent-kafka[test]

  grpc: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test]

  falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid,tornado,starlette,fastapi,aiohttp,asgi,requests,urllib,urllib3v{1,2},wsgi: pip install {toxinidir}/util/opentelemetry-util-http[test]
  wsgi,falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi[test]
  asgi,django{3,4},starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi[test]

  asyncpg: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg[test]

  aws-lambda: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aws-lambda[test]

  boto: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore[test]
  boto: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-boto[test]

  boto3sqs: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-boto3sqs[test]

  falcon{1,2,3}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon[test]

  flask{213,220}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-flask[test]

  urllib: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib[test]

  urllib3v{1,2}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib3[test]

  botocore: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore[test]

  cassandra: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-cassandra[test]

  dbapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi[test]

  django{1,2,3,4}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-django[test]

  fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi[test]

  mysql: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql[test]

  mysqlclient: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-mysqlclient[test]

  pymemcache{135,200,300,342,400}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache[test]

  pymongo: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-pymongo[test]

  psycopg2: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2[test]

  pymysql: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-pymysql[test]

  pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-pyramid[test]

  sqlite3: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlite3[test]

  redis: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-redis[test]

  remoulade: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-remoulade[test]

  requests: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-requests[test]

  starlette: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-starlette[test]

  system-metrics: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-system-metrics[test]

  tornado: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-tornado[test]

  tortoiseorm: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-tortoiseorm[test]

  jinja2: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-jinja2[test]

  logging: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-logging[test]

  aio-pika: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika[test]

  aiohttp-client: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client[test]

  aiohttp-server: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-server[test]

  aiopg: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg[test]

  richconsole: pip install flaky {toxinidir}/exporter/opentelemetry-exporter-richconsole[test]

  prometheus: pip install {toxinidir}/exporter/opentelemetry-exporter-prometheus-remote-write[test]

  sklearn: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-sklearn[test]

  sqlalchemy{11,14}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy[test]

  elasticsearch{2,5,6}: pip install {toxinidir}/opentelemetry-instrumentation[test] {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch[test]

  httpx{18,21}: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx[test]

  sdkextension-aws: pip install {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws[test]

  resource-detector-container: pip install {toxinidir}/resource/opentelemetry-resource-detector-container[test]

  http: pip install {toxinidir}/util/opentelemetry-util-http[test]
; In order to get a health coverage report,
  propagator-ot-trace: pip install {toxinidir}/propagator/opentelemetry-propagator-ot-trace[test]

  propagator-aws-xray: pip install requests {toxinidir}/propagator/opentelemetry-propagator-aws-xray[test]

; we have to install packages in editable mode.
  coverage: python {toxinidir}/scripts/eachdist.py install --editable

commands =
  test: pytest {posargs}
  coverage: {toxinidir}/scripts/coverage.sh

[testenv:docs]
deps =
  -c {toxinidir}/dev-requirements.txt
  -r {toxinidir}/docs-requirements.txt
  pytest

commands_pre =
  python -m pip install "{env:CORE_REPO}#egg=opentelemetry-api&subdirectory=opentelemetry-api"
  python -m pip install "{env:CORE_REPO}#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions"
  python -m pip install "{env:CORE_REPO}#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk"
  python -m pip install {toxinidir}/opentelemetry-instrumentation
  python -m pip install {toxinidir}/util/opentelemetry-util-http

changedir = docs

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

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

commands =
  codespell

[testenv:lint]
basepython: python3.9
recreate = False
deps =
  -c dev-requirements.txt
  flaky
  pylint
  flake8
  isort
  black
  readme_renderer
  httpretty

commands_pre =
  python -m pip install "{env:CORE_REPO}#egg=opentelemetry-api&subdirectory=opentelemetry-api"
  python -m pip install "{env:CORE_REPO}#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions"
  python -m pip install "{env:CORE_REPO}#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk"
  python -m pip install "{env:CORE_REPO}#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils"
  python -m pip install -e {toxinidir}/util/opentelemetry-util-http[test]
  python -m pip install -e {toxinidir}/opentelemetry-instrumentation[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-boto3sqs[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-django[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-starlette[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-falcon[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-boto[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-flask[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-cassandra[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-celery[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pika[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aio-pika[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-sklearn[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-redis[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-remoulade[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-jinja2[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-confluent-kafka[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-logging[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-server[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlite3[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pyramid[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-requests[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-urllib3[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymysql[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-mysqlclient[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymongo[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-tornado[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-tortoiseorm[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aws-lambda[test]
  python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-system-metrics[test]
  python -m pip install -e {toxinidir}/exporter/opentelemetry-exporter-richconsole[test]
  python -m pip install -e {toxinidir}/exporter/opentelemetry-exporter-prometheus-remote-write[test]
  python -m pip install -e {toxinidir}/sdk-extension/opentelemetry-sdk-extension-aws[test]
  python -m pip install -e {toxinidir}/resource/opentelemetry-resource-detector-container[test]
  python -m pip install -e {toxinidir}/propagator/opentelemetry-propagator-aws-xray[test]
  python -m pip install -e {toxinidir}/propagator/opentelemetry-propagator-ot-trace[test]
  python -m pip install -e {toxinidir}/opentelemetry-distro[test]

commands =
  python scripts/eachdist.py lint --check-only

[testenv:docker-tests]
basepython: python3.10
deps =
  pip >= 20.3.3
  pytest
  asyncpg==0.27.0
  docker-compose >= 1.25.2
  mysql-connector-python ~=  8.0
  pymongo >= 3.1, < 5.0
  PyMySQL ~= 0.10.1
  psycopg2 ~= 2.9.5
  aiopg >= 0.13.0, < 1.3.0
  sqlalchemy ~= 1.4
  redis ~= 4.3
  celery[pytest] >= 4.0, < 6.0
  protobuf~=3.13
  requests==2.25.0
  pyodbc~=4.0.30
  flaky==3.7.0
  remoulade>=0.50
  mysqlclient~=2.1.1
  pyyaml==5.3.1

changedir =
  tests/opentelemetry-docker-tests/tests

commands_pre =
  pip install "{env:CORE_REPO}#egg=opentelemetry-api&subdirectory=opentelemetry-api" \
              "{env:CORE_REPO}#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions" \
              "{env:CORE_REPO}#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk" \
              "{env:CORE_REPO}#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils" \
              -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-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-psycopg2 \
              -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymongo \
              -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymysql \
              -e {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy \
              -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg \
              -e {toxinidir}/instrumentation/opentelemetry-instrumentation-redis \
              -e {toxinidir}/instrumentation/opentelemetry-instrumentation-remoulade \
              "{env:CORE_REPO}#egg=opentelemetry-exporter-opencensus&subdirectory=exporter/opentelemetry-exporter-opencensus"
  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

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