@@ -88,7 +88,8 @@ envlist =
8888
8989 spellcheck
9090 tracecontext
91- pyright
91+ mypy,mypyinstalled
92+ typecheck
9293 docs
9394 docker-tests-{otlpexporter,opencensus}
9495 public-symbols-check
@@ -102,7 +103,8 @@ deps =
102103 coverage: pytest
103104 coverage: pytest-cov
104105
105- mypy,mypyinstalled: -r {toxinidir}/mypy-requirements.txt
106+ mypy,mypyinstalled: -c {toxinidir}/dev-requirements.txt
107+ mypy,mypyinstalled: mypy
106108
107109 api: -r {toxinidir}/opentelemetry-api/test-requirements.txt
108110
@@ -143,6 +145,7 @@ deps =
143145
144146 propagator-jaeger: -r {toxinidir}/propagator/opentelemetry-propagator-jaeger/test-requirements.txt
145147
148+ mypyinstalled: -e {toxinidir}/opentelemetry-api
146149
147150 getting-started: -r {toxinidir}/docs/getting_started/tests/requirements.txt
148151 getting-started: {env:CONTRIB_REPO}\# egg=opentelemetry-util-http&subdirectory=util/opentelemetry-util-http
@@ -158,7 +161,7 @@ setenv =
158161 ; i.e: CONTRIB_REPO_SHA=dde62cebffe519c35875af6d06fae053b3be65ec tox -e <env to test>
159162 CONTRIB_REPO_SHA ={env:CONTRIB_REPO_SHA:main}
160163 CONTRIB_REPO =git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@{env:CONTRIB_REPO_SHA}
161-
164+ mypy: MYPYPATH ={toxinidir}/opentelemetry-api/src/:{toxinidir}/opentelemetry-semantic-conventions/src/:{toxinidir}/opentelemetry-sdk/src/:{toxinidir}/tests/opentelemetry-test-utils/src/
162165commands_pre =
163166 ; In order to get a healthy coverage report,
164167 ; we have to install packages in editable mode.
@@ -227,7 +230,18 @@ commands =
227230
228231 coverage: {toxinidir}/scripts/coverage.sh
229232
230-
233+ mypy: mypy --version
234+ mypy: mypy --install-types --non-interactive --namespace-packages --explicit-package-bases opentelemetry-api/src/opentelemetry/
235+ mypy: mypy --install-types --non-interactive --namespace-packages --explicit-package-bases opentelemetry-sdk/src/opentelemetry/sdk/resources
236+ mypy: mypy --install-types --non-interactive --namespace-packages --explicit-package-bases opentelemetry-semantic-conventions/src/opentelemetry/semconv/
237+
238+ ; For test code, we don't want to enforce the full mypy strictness
239+ mypy: mypy --install-types --non-interactive --namespace-packages --config-file =mypy-relaxed.ini opentelemetry-api/tests/
240+
241+ ; Test that mypy can pick up typeinfo from an installed package (otherwise,
242+ ; implicit Any due to unfollowed import would result).
243+ mypyinstalled: mypy --install-types --non-interactive --namespace-packages opentelemetry-api/tests/mypysmoke.py --strict
244+
231245[testenv:spellcheck]
232246basepython: python3
233247recreate = True
@@ -335,10 +349,13 @@ commands =
335349[testenv:typecheck]
336350basepython: python3
337351deps =
338- -r {toxinidir}/pyright-requirements.txt
352+ -c {toxinidir}/dev-requirements.txt
353+ pyright
354+ psutil
339355 -e {toxinidir}/opentelemetry-api
340356 -e {toxinidir}/opentelemetry-semantic-conventions
341357 -e {toxinidir}/opentelemetry-sdk
358+ -e {toxinidir}/tests/opentelemetry-test-utils
342359commands =
343360 pyright --version
344361 pyright
0 commit comments