diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 066f95ea28..fcc79caef6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: - 'release/*' pull_request: env: - CORE_REPO_SHA: adad94bfa69520cb4cbabca714827fd14503baf0 + CORE_REPO_SHA: 65528f7534f1f5f2e8adc7520b6e696a84569c7d jobs: build: diff --git a/CHANGELOG.md b/CHANGELOG.md index 0aeacc2232..60a3f35757 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#720](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/720)) +### Changed +- `opentelemetry-instrumentation-jinja2` Allow instrumentation of newer Jinja2 versions. + ### Added - `opentelemetry-instrumentation-elasticsearch` Added `response_hook` and `request_hook` callbacks ([#670](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/670)) diff --git a/instrumentation/README.md b/instrumentation/README.md index 2117799389..84fdc2e8de 100644 --- a/instrumentation/README.md +++ b/instrumentation/README.md @@ -16,7 +16,7 @@ | [opentelemetry-instrumentation-flask](./opentelemetry-instrumentation-flask) | flask >= 1.0, < 3.0 | | [opentelemetry-instrumentation-grpc](./opentelemetry-instrumentation-grpc) | grpcio ~= 1.27 | | [opentelemetry-instrumentation-httpx](./opentelemetry-instrumentation-httpx) | httpx >= 0.18.0, < 0.19.0 | -| [opentelemetry-instrumentation-jinja2](./opentelemetry-instrumentation-jinja2) | jinja2~=2.7 | +| [opentelemetry-instrumentation-jinja2](./opentelemetry-instrumentation-jinja2) | jinja2 >= 2.7, < 4.0 | | [opentelemetry-instrumentation-logging](./opentelemetry-instrumentation-logging) | logging | | [opentelemetry-instrumentation-mysql](./opentelemetry-instrumentation-mysql) | mysql-connector-python ~= 8.0 | | [opentelemetry-instrumentation-pika](./opentelemetry-instrumentation-pika) | pika >= 1.1.0 | diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/package.py b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/package.py index 4e4c8c15b2..4f4894d338 100644 --- a/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/package.py +++ b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/package.py @@ -13,4 +13,4 @@ # limitations under the License. -_instruments = ("jinja2~=2.7",) +_instruments = ("jinja2 >= 2.7, < 4.0",) diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/tests/test_jinja2.py b/instrumentation/opentelemetry-instrumentation-jinja2/tests/test_jinja2.py index 00946abd8b..6591e0114f 100644 --- a/instrumentation/opentelemetry-instrumentation-jinja2/tests/test_jinja2.py +++ b/instrumentation/opentelemetry-instrumentation-jinja2/tests/test_jinja2.py @@ -16,6 +16,7 @@ from unittest import mock import jinja2 +from packaging import version from opentelemetry import trace as trace_api from opentelemetry.instrumentation.jinja2 import Jinja2Instrumentor @@ -31,8 +32,13 @@ def setUp(self): super().setUp() Jinja2Instrumentor().instrument() # prevent cache effects when using Template('code...') - # pylint: disable=protected-access - jinja2.environment._spontaneous_environments.clear() + if version.parse(jinja2.__version__) >= version.parse("3.0.0"): + # by clearing functools.lru_cache + jinja2.environment.get_spontaneous_environment.clear() + else: + # by clearing jinja2.utils.LRUCache + jinja2.environment._spontaneous_environments.clear() # pylint: disable=no-member + self.tracer = get_tracer(__name__) def tearDown(self):