Files
opentelemetry-python-contrib/tox.ini
Tobias Macey 7d42bd1130 Add support for wrapt 2.x (#4203)
* Add support for wrapt 2.x

- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages
- Replace ObjectProxy with BaseObjectProxy where iteration support is not needed
- Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy)
- Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg)
- Update CHANGELOG.md

This change maintains backward compatibility with wrapt 1.x while enabling
support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x,
while ObjectProxy is now a subclass that adds __iter__() support.

Fixes #3903
Related to #3930 and #4082

* Restructure wrapt test requirements

- Remove wrapt from base test-requirements.txt (installed via pyproject.toml)
- Remove Deprecated from base test-requirements.txt (version conflicts with wrapt 2.x)
- Create test-requirements-wrapt1.txt with wrapt<2.0.0 and Deprecated==1.2.14
- Create test-requirements-wrapt2.txt with wrapt>=2.0.0 and Deprecated>=1.2.18
- Update tox.ini to use requirements files instead of factor-based deps
- Add Deprecated to lint environment deps

This follows the pattern used by other packages (botocore, httpx) and
resolves dependency conflicts where Deprecated 1.2.14 requires wrapt<2.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: Resolve conflicts and add Wrapt 3 as upper bound

* Add wrapt 1.x/2.x test matrix for all ObjectProxy-using instrumentations

Extend the wrapt1/wrapt2 test matrix to all instrumentations that use
wrapt.ObjectProxy or wrapt.BaseObjectProxy: botocore, dbapi, grpc, pika,
aiopg, httpx, and asyncpg.

Changes:
- tox.ini: Add {wrapt1,wrapt2} factor to envlist for all 7 packages;
  update deps to reference per-version test-requirements files
- botocore/pyproject.toml: Add missing wrapt dependency (>= 1.0.0, < 3.0.0)
- All base test-requirements files: Remove pinned wrapt== and Deprecated==
- New test-requirements-wrapt1.txt / test-requirements-wrapt2.txt files for
  each package (using Deprecated>=1.2.18 for wrapt2 to avoid conflict with
  Deprecated==1.2.14 which requires wrapt<2)
- Regenerate GitHub Actions workflows (including new test_3.yml due to
  expanded job count)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix CI failures: ruff formatting and lint wrapt version pin

- utils.py: reformat multi-condition if statement to satisfy ruff line
  length requirement (fixes generate/precommit CI jobs)
- tox.ini: pin wrapt>=1.0.0,<2.0.0 for lint envs of botocore, dbapi,
  grpc, and sio-pika; with wrapt 1.x removed from base test-requirements,
  lint envs were getting wrapt 2.x which caused pylint no-member errors
  on __wrapped__ (a C-extension attribute not visible to static analysis)
  Also add Deprecated==1.2.14 to same lint envs for consistency

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix remaining CI failures: unused imports and uv.lock

- dbapi/__init__.py: remove unused bare 'import wrapt' (F401); the
  compat shim imports BaseObjectProxy directly from wrapt
- grpc/_aio_server.py: remove unused 'import wrapt' (F401) and fix
  import ordering (I001) flagged by ruff pre-commit hook
- uv.lock: regenerate after adding wrapt dependency to botocore
  pyproject.toml

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix aiopg lint wrapt pin, uv.lock format, and ruff blank lines

- tox.ini: pin wrapt>=1.0.0,<2.0.0 + Deprecated==1.2.14 for
  lint-instrumentation-aiopg; aiopg source uses __wrapped__ heavily and
  pylint's no-member error appeared when wrapt 2.x was installed
- uv.lock: regenerate using pre-commit hook (uv v0.9.30) to fix
  trailing-slash format on registry URLs
- httpx/test_httpx_integration.py: add blank line before try/except
  block (ruff I001/E303 formatting fix)
- pika/utils.py: add blank line before try/except block (same ruff fix)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix pylint E0611: disable no-name-in-module for BaseObjectProxy compat shim

pylint with wrapt 1.x installed reports E0611 ('No name BaseObjectProxy
in module wrapt') when it sees the try/except ImportError compat shim,
even though the except branch provides a fallback. Add a per-line
pylint disable comment to suppress this false positive.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix asyncpg test: use BaseObjectProxy compat shim for wrapt 2.x

In wrapt 2.x, BoundFunctionWrapper no longer subclasses ObjectProxy
(it subclasses BaseObjectProxy instead). Update the test to use
the compat shim so isinstance checks pass with both wrapt 1.x and 2.x.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review comments: add wrapt 2.0.0+ comments and fix CHANGELOG

- Add '# wrapt 2.0.0+' comment above BaseObjectProxy import in all
  try/except compat shim blocks to clarify why the pattern is used
- Fix CHANGELOG.md PR link from #XXXX to #4203

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>

* chore: Update changelog and workflows

* Apply suggestions from code review

Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>

* fix: Update workflows again

* Apply suggestions from code review

Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>

* Remove Deprecated version pins from test-requirements and tox.ini

Deprecated>=1.2.14 was pinned because Deprecated==1.2.14 requires
wrapt<2. Since pip automatically resolves compatible versions based
on the wrapt constraint in each test env, explicit Deprecated pins
are unnecessary. Remove them from all test-requirements-wrapt*.txt
files and from lint env deps in tox.ini.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove stale .orig file leftover from rebase

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Move lint env wrapt pins from tox.ini into test-requirements files

All dependencies should be managed via requirements.txt files rather
than inline in tox.ini. Move wrapt>=1.0.0,<2.0.0 pins for lint
environments into their respective test-requirements files:
- instrumentation-grpc/test-requirements-1.txt
- instrumentation-botocore/test-requirements-1.txt
- instrumentation-dbapi/test-requirements.txt
- instrumentation-aiopg/test-requirements.txt

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Apply suggestions from code review

* Update instrumentation/opentelemetry-instrumentation-botocore/test-requirements-1.txt

* Update instrumentation/opentelemetry-instrumentation-grpc/test-requirements-1.txt

* Update instrumentation/opentelemetry-instrumentation-dbapi/test-requirements.txt

* Update instrumentation/opentelemetry-instrumentation-aiopg/test-requirements.txt

* Address latest PR feedback: botocore compat shim, exact wrapt versions, lint env refs

- botocore/bedrock_utils.py: apply BaseObjectProxy compat shim to
  ConverseStreamWrapper and InvokeModelWithResponseStreamWrapper (both
  classes define __iter__ so BaseObjectProxy is correct)
- All test-requirements-wrapt1.txt: pin wrapt==1.17.3 (exact version)
- All test-requirements-wrapt2.txt: pin wrapt==2.1.2 (exact version)
- tox.ini lint envs: switch to -wrapt2.txt files so lint runs with
  wrapt 2.x; remove wrapt pin from base test-requirements files
  (grpc/test-requirements-1.txt, botocore/test-requirements-1.txt,
  dbapi/test-requirements.txt, aiopg/test-requirements.txt)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: add pylint disable=no-member for __wrapped__ and abstract-method usages

Add pylint: disable=no-member to all class definitions and usages of
__wrapped__ that are invisible to pylint when using wrapt's C extension
proxy types (BaseObjectProxy/ObjectProxy).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
2026-03-11 22:10:21 +01:00

1171 lines
64 KiB
INI

[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{9,10,11,12,13,14}-test-instrumentation-openai-v2-{oldest,latest}
pypy3-test-instrumentation-openai-v2-{oldest,latest}
lint-instrumentation-openai-v2
; instrumentation-openai-agents
py3{10,11,12,13,14}-test-instrumentation-openai_agents-v2-{oldest,latest}
lint-instrumentation-openai_agents-v2
; instrumentation-vertexai
py3{9,10,11,12,13,14}-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,14}-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
; instrumentation-anthropic
py3{9,10,11,12,13,14}-test-instrumentation-anthropic-{oldest,latest}
# Disabling pypy3 as jiter (anthropic dep) requires PyPy 3.11+
# pypy3-test-instrumentation-anthropic-{oldest,latest}
lint-instrumentation-anthropic
; instrumentation-claude-agent-sdk
py3{10,11,12,13}-test-instrumentation-claude-agent-sdk-{oldest,latest}
# Disabling pypy3 as jiter (anthropic dep) requires PyPy 3.11+
# pypy3-test-instrumentation-claude-agent-sdk-{oldest,latest}
lint-instrumentation-claude-agent-sdk
; opentelemetry-resource-detector-containerid
py3{9,10,11,12,13,14}-test-resource-detector-containerid
pypy3-test-resource-detector-containerid
lint-resource-detector-containerid
; opentelemetry-resource-detector-azure
py3{9,10,11,12,13,14}-test-resource-detector-azure-{0,1}
pypy3-test-resource-detector-azure-{0,1}
lint-resource-detector-azure
; opentelemetry-sdk-extension-aws
py3{9,10,11,12,13,14}-test-sdk-extension-aws-{0,1}
pypy3-test-sdk-extension-aws-{0,1}
lint-sdk-extension-aws
benchmark-sdk-extension-aws
; opentelemetry-distro
py3{9,10,11,12,13,14}-test-distro
pypy3-test-distro
lint-distro
; opentelemetry-instrumentation
py3{9,10,11,12,13,14}-test-opentelemetry-instrumentation-{wrapt1,wrapt2}
pypy3-test-opentelemetry-instrumentation-wrapt2
lint-opentelemetry-instrumentation
; opentelemetry-instrumentation-aiohttp-client
py3{9,10,11,12,13,14}-test-instrumentation-aiohttp-client
pypy3-test-instrumentation-aiohttp-client
lint-instrumentation-aiohttp-client
; opentelemetry-instrumentation-aiohttp-server
py3{9,10,11,12,13,14}-test-instrumentation-aiohttp-server
pypy3-test-instrumentation-aiohttp-server
lint-instrumentation-aiohttp-server
; opentelemetry-instrumentation-aiopg
py3{9,10,11,12,13,14}-test-instrumentation-aiopg-{wrapt1,wrapt2}
; instrumentation-aiopg intentionally excluded from pypy3
lint-instrumentation-aiopg
; opentelemetry-instrumentation-aws-lambda
py3{9,10,11,12,13,14}-test-instrumentation-aws-lambda
pypy3-test-instrumentation-aws-lambda
lint-instrumentation-aws-lambda
; opentelemetry-instrumentation-botocore
py3{9,10,11,12,13,14}-test-instrumentation-botocore-{0,1}-{wrapt1,wrapt2}
; FIXME: see https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1736
; pypy3-test-instrumentation-botocore
lint-instrumentation-botocore
; opentelemetry-instrumentation-boto3sqs
py3{9,10,11,12,13,14}-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>=5.2<6.0
py3{9}-test-instrumentation-django-{0,1,2}
py3{10,11,12}-test-instrumentation-django-{1,3}
py3{13,14}-test-instrumentation-django-3
pypy3-test-instrumentation-django-{0,1}
lint-instrumentation-django
; opentelemetry-instrumentation-dbapi
py3{9,10,11,12,13,14}-test-instrumentation-dbapi-{wrapt1,wrapt2}
pypy3-test-instrumentation-dbapi-wrapt2
lint-instrumentation-dbapi
; opentelemetry-instrumentation-boto
py3{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{9,10,11,12,13,14}-test-instrumentation-asyncclick
pypy3-test-instrumentation-asyncclick
lint-instrumentation-asyncclick
; opentelemetry-instrumentation-click
py3{9,10,11,12,13,14}-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{9,10,11,12,13,14}-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{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{9}-test-instrumentation-falcon-{0,1,2,3}
py3{10,11,12}-test-instrumentation-falcon-{1,2,3,4}
py3{13,14}-test-instrumentation-falcon-4
pypy3-test-instrumentation-falcon-{0,1,2,3,4}
lint-instrumentation-falcon
; opentelemetry-instrumentation-fastapi
py3{9,10,11,12,13,14}-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
; 3: Flask >=3.1.0 Werkzeug >=3.1.0
py3{9,10,11,12,13,14}-test-instrumentation-flask-{0,1,2,3}
pypy3-test-instrumentation-flask-{0,1}
lint-instrumentation-flask
; opentelemetry-instrumentation-urllib
py3{9,10,11,12,13,14}-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
; TODO #4200 Add py314 testing after replacing httpretty -- problem with https tests in 3.14
py3{9,10,11,12,13}-test-instrumentation-urllib3-{0,1}
pypy3-test-instrumentation-urllib3-{0,1}
lint-instrumentation-urllib3
; opentelemetry-instrumentation-requests
py3{9,10,11,12,13,14}-test-instrumentation-requests
;pypy3-test-instrumentation-requests
lint-instrumentation-requests
; opentelemetry-instrumentation-starlette
py3{9,10,11,12,13,14}-test-instrumentation-starlette-{oldest,latest}
pypy3-test-instrumentation-starlette-{oldest,latest}
lint-instrumentation-starlette
; opentelemetry-instrumentation-jinja2
py3{9,10,11,12,13,14}-test-instrumentation-jinja2
pypy3-test-instrumentation-jinja2
lint-instrumentation-jinja2
; opentelemetry-instrumentation-logging
py3{9,10,11,12,13,14}-test-instrumentation-logging
pypy3-test-instrumentation-logging
lint-instrumentation-logging
benchmark-instrumentation-logging
; opentelemetry-exporter-richconsole
py3{9,10,11,12,13,14}-test-exporter-richconsole
pypy3-test-exporter-richconsole
lint-exporter-richconsole
; opentelemetry-exporter-prometheus-remote-write
py3{9,10,11,12,13,14}-test-exporter-prometheus-remote-write
# excluded from pypy3 due to missing wheel
pypy310-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{9,10,11,12,13,14}-test-instrumentation-mysql-{0,1}
pypy3-test-instrumentation-mysql-{0,1}
lint-instrumentation-mysql
; opentelemetry-instrumentation-mysqlclient
py3{9,10,11,12,13,14}-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{9,10,11,12,13,14}-test-instrumentation-psycopg2
py3{9,10,11,12,13,14}-test-instrumentation-psycopg2-binary
; ext-psycopg2 intentionally excluded from pypy3
lint-instrumentation-psycopg2
; opentelemetry-instrumentation-psycopg
py3{9,10,11,12,13,14}-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{9,10,11,12,13,14}-test-instrumentation-pymemcache-{0,1,2,3,4}
pypy3-test-instrumentation-pymemcache-{0,1,2,3,4}
lint-instrumentation-pymemcache
; opentelemetry-instrumentation-pymongo
py3{9,10,11,12,13,14}-test-instrumentation-pymongo
pypy3-test-instrumentation-pymongo
lint-instrumentation-pymongo
; opentelemetry-instrumentation-pymysql
py3{9,10,11,12,13,14}-test-instrumentation-pymysql
pypy3-test-instrumentation-pymysql
lint-instrumentation-pymysql
; opentelemetry-instrumentation-pymssql
py3{9,10,11,12,13,14}-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
py3{9,10,11,12,13,14}-test-instrumentation-pyramid
pypy3-test-instrumentation-pyramid
lint-instrumentation-pyramid
; opentelemetry-instrumentation-asgi
py3{9,10,11,12,13,14}-test-instrumentation-asgi
pypy3-test-instrumentation-asgi
lint-instrumentation-asgi
; opentelemetry-instrumentation-asyncpg
py3{9,10,11,12,13,14}-test-instrumentation-asyncpg-{wrapt1,wrapt2}
; ext-asyncpg intentionally excluded from pypy3
lint-instrumentation-asyncpg
; opentelemetry-instrumentation-sqlite3
py3{9,10,11,12,13,14}-test-instrumentation-sqlite3
pypy3-test-instrumentation-sqlite3
lint-instrumentation-sqlite3
; opentelemetry-instrumentation-wsgi
py3{9,10,11,12,13,14}-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.75.1
; TODO #4201 simplify tests-requirements here to use latest|oldest testing pattern
py3{9,10,11,12}-test-instrumentation-grpc-{0,1}-{wrapt1,wrapt2}
py3{13,14}-test-instrumentation-grpc-1-{wrapt1,wrapt2}
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{9,10,11,12,13}-test-instrumentation-sqlalchemy-{1,2}
py314-test-instrumentation-sqlalchemy-2
pypy3-test-instrumentation-sqlalchemy-{0,1,2}
lint-instrumentation-sqlalchemy
; opentelemetry-instrumentation-redis
py3{9,10,11,12,13,14}-test-instrumentation-redis
pypy3-test-instrumentation-redis
lint-instrumentation-redis
; opentelemetry-instrumentation-remoulade
py3{9,10,11,12,13,14}-test-instrumentation-remoulade
; instrumentation-remoulade intentionally excluded from pypy3
lint-instrumentation-remoulade
; opentelemetry-instrumentation-celery
py3{9,10,11,12,13,14}-test-instrumentation-celery
pypy3-test-instrumentation-celery
lint-instrumentation-celery
; opentelemetry-instrumentation-system-metrics
py3{9,10,11,12,13,14}-test-instrumentation-system-metrics
pypy3-test-instrumentation-system-metrics
lint-instrumentation-system-metrics
; opentelemetry-instrumentation-threading
py3{9,10,11,12,13,14}-test-instrumentation-threading
pypy3-test-instrumentation-threading
lint-instrumentation-threading
; opentelemetry-instrumentation-tornado
py3{9,10,11,12,13,14}-test-instrumentation-tornado
pypy3-test-instrumentation-tornado
lint-instrumentation-tornado
; opentelemetry-instrumentation-tortoiseorm
py3{9,10,11,12,13,14}-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{9,10,11,12}-test-instrumentation-httpx-{0,1}-{wrapt1,wrapt2}
py3{13,14}-test-instrumentation-httpx-1-{wrapt1,wrapt2}
pypy3-test-instrumentation-httpx-{0,1}-wrapt2
lint-instrumentation-httpx
; opentelemetry-util-http
py3{9,10,11,12,13,14}-test-util-http
pypy3-test-util-http
lint-util-http
; opentelemetry-exporter-credential-provider-gcp
py3{9,10,11,12,13,14}-test-exporter-credential-provider-gcp
lint-exporter-credential-provider-gcp
; opentelemetry-util-genai
py3{9,10,11,12,13,14}-test-util-genai
pypy3-test-util-genai
lint-util-genai
; opentelemetry-propagator-aws-xray
py3{9,10,11,12,13,14}-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{9,10,11,12,13,14}-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{9,10,11,12,13,14}-test-instrumentation-sio-pika-{0,1}-{wrapt1,wrapt2}
pypy3-test-instrumentation-sio-pika-{0,1}-wrapt2
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{9,10,11,12,13,14}-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{9,10,11,12,13,14}-test-instrumentation-aiokafka
pypy3-test-instrumentation-aiokafka
lint-instrumentation-aiokafka
; opentelemetry-instrumentation-kafka-python
py3{9,10,11}-test-instrumentation-kafka-python
py3{9,10,11,12,13,14}-test-instrumentation-kafka-pythonng
pypy3-test-instrumentation-kafka-python
pypy3-test-instrumentation-kafka-pythonng
lint-instrumentation-kafka-python
; opentelemetry-instrumentation-confluent-kafka
py3{9,10,11,12,13,14}-test-instrumentation-confluent-kafka
lint-instrumentation-confluent-kafka
; opentelemetry-instrumentation-asyncio
py3{9,10,11,12,13,14}-test-instrumentation-asyncio
lint-instrumentation-asyncio
; opentelemetry-instrumentation-cassandra
py3{9,10,11,12,13,14}-test-instrumentation-cassandra-{driver,scylla}
pypy3-test-instrumentation-cassandra-scylla
lint-instrumentation-cassandra
; opentelemetry-processor-baggage
py3{9,10,11,12,13,14}-test-processor-baggage
pypy3-test-processor-baggage
; requires snappy headers to be available on the system
lint-processor-baggage
; opentelemetry-opamp-client
py3{9,10,11,12,13,14}-test-opamp-client-{latest,lowest}
; https://github.com/kevin1024/vcrpy/pull/775#issuecomment-1847849962
; pypy3-test-opamp-client
lint-opamp-client
spellcheck
docker-tests
docs
generate
generate-workflows
shellcheck
precommit
typecheck
[testenv]
test_deps =
opentelemetry-api@{env:CORE_REPO_API}
opentelemetry-semantic-conventions@{env:CORE_REPO_SEMCONV}
opentelemetry-sdk@{env:CORE_REPO_SDK}
opentelemetry-test-utils@{env:CORE_REPO_TEST_UTILS}
deps =
lint: -r dev-requirements.txt
coverage: pytest
coverage: pytest-cov
opentelemetry-instrumentation: {[testenv]test_deps}
opentelemetry-instrumentation-wrapt1: -r {toxinidir}/opentelemetry-instrumentation/test-requirements-wrapt1.txt
opentelemetry-instrumentation-wrapt2: -r {toxinidir}/opentelemetry-instrumentation/test-requirements-wrapt2.txt
lint-opentelemetry-instrumentation: -r {toxinidir}/opentelemetry-instrumentation/test-requirements-wrapt2.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
openai_agents-oldest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.oldest.txt
openai_agents-latest: {[testenv]test_deps}
openai_agents-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.latest.txt
lint-instrumentation-openai_agents-v2: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-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
anthropic-oldest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-anthropic/tests/requirements.oldest.txt
anthropic-latest: {[testenv]test_deps}
anthropic-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-anthropic/tests/requirements.latest.txt
lint-instrumentation-anthropic: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-anthropic/tests/requirements.oldest.txt
claude-agent-sdk-oldest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-claude-agent-sdk/tests/requirements.oldest.txt
claude-agent-sdk-latest: {[testenv]test_deps}
claude-agent-sdk-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-claude-agent-sdk/tests/requirements.latest.txt
lint-instrumentation-claude-agent-sdk: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-claude-agent-sdk/tests/requirements.oldest.txt
asgi: {[testenv]test_deps}
asgi: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi/test-requirements.txt
celery: {[testenv]test_deps}
py3{9}-test-instrumentation-celery: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-celery/test-requirements-0.txt
py3{10,11,12,13,14}-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-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/test-requirements-0-wrapt1.txt
sio-pika-0-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/test-requirements-0-wrapt2.txt
sio-pika-1-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/test-requirements-1-wrapt1.txt
sio-pika-1-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/test-requirements-1-wrapt2.txt
lint-instrumentation-sio-pika: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-pika/test-requirements-1-wrapt2.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-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/test-requirements-0-wrapt1.txt
grpc-0-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/test-requirements-0-wrapt2.txt
grpc-1-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/test-requirements-1-wrapt1.txt
grpc-1-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/test-requirements-1-wrapt2.txt
lint-instrumentation-grpc: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc/test-requirements-1-wrapt2.txt
wsgi: {[testenv]test_deps}
wsgi: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi/test-requirements.txt
asyncpg: {[testenv]test_deps}
asyncpg-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg/test-requirements-wrapt1.txt
asyncpg-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg/test-requirements-wrapt2.txt
lint-instrumentation-asyncpg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg/test-requirements-wrapt2.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
flask-3: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-flask/test-requirements-3.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-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/test-requirements-0-wrapt1.txt
botocore-0-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/test-requirements-0-wrapt2.txt
botocore-1-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/test-requirements-1-wrapt1.txt
botocore-1-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/test-requirements-1-wrapt2.txt
lint-instrumentation-botocore: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore/test-requirements-1-wrapt2.txt
cassandra: {[testenv]test_deps}
cassandra-driver: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-cassandra/test-requirements.txt
cassandra-scylla: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-cassandra/test-requirements-scylla.txt
lint-instrumentation-cassandra: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-cassandra/test-requirements.txt
dbapi: {[testenv]test_deps}
dbapi-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi/test-requirements-wrapt1.txt
dbapi-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi/test-requirements-wrapt2.txt
lint-instrumentation-dbapi: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi/test-requirements-wrapt2.txt
django: {[testenv]test_deps}
py3{9}-test-instrumentation-django-0: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-0.txt
py3{9}-test-instrumentation-django-1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-django/test-requirements-1.txt
py3{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,14}-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{9}-test-instrumentation-psycopg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg/test-requirements-0.txt
py3{10,11,12,13,14}-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
benchmark-instrumentation-logging: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-logging/benchmark-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-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg/test-requirements-wrapt1.txt
aiopg-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg/test-requirements-wrapt2.txt
lint-instrumentation-aiopg: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg/test-requirements-wrapt2.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-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/test-requirements-0-wrapt1.txt
httpx-0-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/test-requirements-0-wrapt2.txt
httpx-1-wrapt1: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/test-requirements-1-wrapt1.txt
httpx-1-wrapt2: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/test-requirements-1-wrapt2.txt
lint-instrumentation-httpx: -r {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx/test-requirements-1-wrapt2.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-containerid: {[testenv]test_deps}
resource-detector-containerid: -r {toxinidir}/resource/opentelemetry-resource-detector-containerid/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
opamp-client: {[testenv]test_deps}
opamp-client-lowest: -r {toxinidir}/opamp/opentelemetry-opamp-client/test-requirements.lowest.txt
opamp-client-latest: -r {toxinidir}/opamp/opentelemetry-opamp-client/test-requirements.latest.txt
lint-opamp-client: -r {toxinidir}/opamp/opentelemetry-opamp-client/test-requirements.lowest.txt
util-http: {[testenv]test_deps}
util-http: -r {toxinidir}/util/opentelemetry-util-http/test-requirements.txt
util-http: {toxinidir}/util/opentelemetry-util-http
exporter-credential-provider-gcp: -r {toxinidir}/exporter/opentelemetry-exporter-credential-provider-gcp/test-requirements.txt
exporter-credential-provider-gcp: {toxinidir}/exporter/opentelemetry-exporter-credential-provider-gcp
util-genai: {[testenv]test_deps}
util-genai: -r {toxinidir}/util/opentelemetry-util-genai/test-requirements.txt
util-genai: {toxinidir}/util/opentelemetry-util-genai
; FIXME: add coverage testing
allowlist_externals =
sh
pytest
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}
CORE_REPO_API={env:CORE_REPO_API:{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api}
CORE_REPO_SDK={env:CORE_REPO_SDK:{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk}
CORE_REPO_SEMCONV={env:CORE_REPO_SEMCONV:{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions}
CORE_REPO_TEST_UTILS={env:CORE_REPO_TEST_UTILS:{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils}
UV_CONFIG_FILE={toxinidir}/tox-uv.toml
PIP_CONSTRAINTS={toxinidir}/test-constraints.txt
UV_BUILD_CONSTRAINT={toxinidir}/test-constraints.txt
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"
benchmark-instrumentation-logging: pytest {toxinidir}/instrumentation/opentelemetry-instrumentation-logging/benchmarks {posargs} --benchmark-json=instrumentation-logging-benchmark.json
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-openai_agents-v2: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests {posargs}
lint-instrumentation-openai_agents-v2: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-openai-agents-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-anthropic: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-anthropic/tests --vcr-record=none {posargs}
lint-instrumentation-anthropic: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-anthropic"
test-instrumentation-claude-agent-sdk: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-claude-agent-sdk/tests --vcr-record=none {posargs}
lint-instrumentation-claude-agent-sdk: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-claude-agent-sdk"
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-exporter-credential-provider-gcp: pytest {toxinidir}/exporter/opentelemetry-exporter-credential-provider-gcp/tests {posargs}
lint-exporter-credential-provider-gcp: sh -c "cd exporter && pylint --rcfile ../.pylintrc opentelemetry-exporter-credential-provider-gcp"
test-util-genai: pytest {toxinidir}/util/opentelemetry-util-genai/tests {posargs}
lint-util-genai: sh -c "cd util && pylint --rcfile ../.pylintrc opentelemetry-util-genai"
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-containerid: pytest {toxinidir}/resource/opentelemetry-resource-detector-containerid/tests {posargs}
lint-resource-detector-containerid: sh -c "cd resource && pylint --rcfile ../.pylintrc opentelemetry-resource-detector-containerid"
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"
test-opamp-client: pytest {toxinidir}/opamp/opentelemetry-opamp-client/tests {posargs}
lint-opamp-client: sh -c "cd opamp && pylint --rcfile ../.pylintrc opentelemetry-opamp-client"
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
{toxinidir}/util/opentelemetry-util-genai
{toxinidir}/exporter/opentelemetry-exporter-credential-provider-gcp
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-dbapi
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-django
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-flask
-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-wsgi
-e {toxinidir}/util/opentelemetry-util-http
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
pytest
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:{precommit,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
protobuf==6.31.1
{[testenv]test_deps}
{toxinidir}/opentelemetry-instrumentation
{toxinidir}/util/opentelemetry-util-http
{toxinidir}/util/opentelemetry-util-genai[upload]
{toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai[instruments]
{toxinidir}/instrumentation-genai/opentelemetry-instrumentation-google-genai[instruments]
{toxinidir}/instrumentation-genai/opentelemetry-instrumentation-anthropic[instruments]
{toxinidir}/instrumentation-genai/opentelemetry-instrumentation-langchain[instruments]
{toxinidir}/instrumentation-genai/opentelemetry-instrumentation-claude-agent-sdk[instruments]
{toxinidir}/instrumentation/opentelemetry-instrumentation-aiokafka[instruments]
{toxinidir}/instrumentation/opentelemetry-instrumentation-asyncclick[instruments]
{toxinidir}/exporter/opentelemetry-exporter-credential-provider-gcp
{toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client[instruments]
{toxinidir}/opamp/opentelemetry-opamp-client
commands =
pyright