diff --git a/dev-python/opentelemetry-instrumentation/files/opentelemetry-instrumentation-0.61_beta0-wrapt-2.patch b/dev-python/opentelemetry-instrumentation/files/opentelemetry-instrumentation-0.61_beta0-wrapt-2.patch new file mode 100644 index 0000000000..a929419928 --- /dev/null +++ b/dev-python/opentelemetry-instrumentation/files/opentelemetry-instrumentation-0.61_beta0-wrapt-2.patch @@ -0,0 +1,123 @@ +index e38932e28..37e6c674f 100644 +--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py ++++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py +@@ -20,7 +20,11 @@ from importlib import import_module + from re import escape, sub + from typing import Any, Dict, Generator, Sequence + +-from wrapt import ObjectProxy ++try: ++ # wrapt 2.0.0+ ++ from wrapt import BaseObjectProxy # pylint: disable=no-name-in-module ++except ImportError: ++ from wrapt import ObjectProxy as BaseObjectProxy + + from opentelemetry import context, trace + +@@ -108,7 +112,11 @@ def unwrap(obj: object, attr: str): + ) from exc + + func = getattr(obj, attr, None) +- if func and isinstance(func, ObjectProxy) and hasattr(func, "__wrapped__"): ++ if ( ++ func ++ and isinstance(func, BaseObjectProxy) ++ and hasattr(func, "__wrapped__") ++ ): + setattr(obj, attr, func.__wrapped__) + + +diff --git a/opentelemetry-instrumentation/tests/test_utils.py b/opentelemetry-instrumentation/tests/test_utils.py +index 5ddd45d69..11a3598bd 100644 +--- a/opentelemetry-instrumentation/tests/test_utils.py ++++ b/opentelemetry-instrumentation/tests/test_utils.py +@@ -15,7 +15,13 @@ + import unittest + from http import HTTPStatus + +-from wrapt import ObjectProxy, wrap_function_wrapper ++from wrapt import wrap_function_wrapper ++ ++try: ++ # wrapt 2.0.0+ ++ from wrapt import BaseObjectProxy # pylint: disable=no-name-in-module ++except ImportError: ++ from wrapt import ObjectProxy as BaseObjectProxy + + from opentelemetry.context import ( + _SUPPRESS_HTTP_INSTRUMENTATION_KEY, +@@ -263,23 +269,23 @@ class UnwrapTestCase(unittest.TestCase): + def test_can_unwrap_object_attribute(self): + self._wrap_method() + instance = WrappedClass() +- self.assertTrue(isinstance(instance.method, ObjectProxy)) ++ self.assertTrue(isinstance(instance.method, BaseObjectProxy)) + + unwrap(WrappedClass, "method") +- self.assertFalse(isinstance(instance.method, ObjectProxy)) ++ self.assertFalse(isinstance(instance.method, BaseObjectProxy)) + + def test_can_unwrap_object_attribute_as_string(self): + self._wrap_method() + instance = WrappedClass() +- self.assertTrue(isinstance(instance.method, ObjectProxy)) ++ self.assertTrue(isinstance(instance.method, BaseObjectProxy)) + + unwrap("tests.test_utils.WrappedClass", "method") +- self.assertFalse(isinstance(instance.method, ObjectProxy)) ++ self.assertFalse(isinstance(instance.method, BaseObjectProxy)) + + def test_raises_import_error_if_path_not_well_formed(self): + self._wrap_method() + instance = WrappedClass() +- self.assertTrue(isinstance(instance.method, ObjectProxy)) ++ self.assertTrue(isinstance(instance.method, BaseObjectProxy)) + + with self.assertRaisesRegex( + ImportError, "Cannot parse '' as dotted import path" +@@ -287,23 +293,23 @@ class UnwrapTestCase(unittest.TestCase): + unwrap("", "method") + + unwrap(WrappedClass, "method") +- self.assertFalse(isinstance(instance.method, ObjectProxy)) ++ self.assertFalse(isinstance(instance.method, BaseObjectProxy)) + + def test_raises_import_error_if_cannot_find_module(self): + self._wrap_method() + instance = WrappedClass() +- self.assertTrue(isinstance(instance.method, ObjectProxy)) ++ self.assertTrue(isinstance(instance.method, BaseObjectProxy)) + + with self.assertRaisesRegex(ImportError, "No module named 'does'"): + unwrap("does.not.exist.WrappedClass", "method") + + unwrap(WrappedClass, "method") +- self.assertFalse(isinstance(instance.method, ObjectProxy)) ++ self.assertFalse(isinstance(instance.method, BaseObjectProxy)) + + def test_raises_import_error_if_cannot_find_object(self): + self._wrap_method() + instance = WrappedClass() +- self.assertTrue(isinstance(instance.method, ObjectProxy)) ++ self.assertTrue(isinstance(instance.method, BaseObjectProxy)) + + with self.assertRaisesRegex( + ImportError, "Cannot import 'NotWrappedClass' from" +@@ -311,7 +317,7 @@ class UnwrapTestCase(unittest.TestCase): + unwrap("tests.test_utils.NotWrappedClass", "method") + + unwrap(WrappedClass, "method") +- self.assertFalse(isinstance(instance.method, ObjectProxy)) ++ self.assertFalse(isinstance(instance.method, BaseObjectProxy)) + + # pylint: disable=no-self-use + def test_does_nothing_if_cannot_find_attribute(self): +@@ -320,6 +326,6 @@ class UnwrapTestCase(unittest.TestCase): + + def test_does_nothing_if_attribute_is_not_from_wrapt(self): + instance = WrappedClass() +- self.assertFalse(isinstance(instance.method, ObjectProxy)) ++ self.assertFalse(isinstance(instance.method, BaseObjectProxy)) + unwrap(WrappedClass, "method") +- self.assertFalse(isinstance(instance.method, ObjectProxy)) ++ self.assertFalse(isinstance(instance.method, BaseObjectProxy)) diff --git a/dev-python/opentelemetry-instrumentation/opentelemetry-instrumentation-0.61_beta0.ebuild b/dev-python/opentelemetry-instrumentation/opentelemetry-instrumentation-0.61_beta0.ebuild index c7a1b33a1d..20f9279de6 100644 --- a/dev-python/opentelemetry-instrumentation/opentelemetry-instrumentation-0.61_beta0.ebuild +++ b/dev-python/opentelemetry-instrumentation/opentelemetry-instrumentation-0.61_beta0.ebuild @@ -41,17 +41,18 @@ RDEPEND=" >=dev-python/wrapt-1.0.0[${PYTHON_USEDEP}] " +PATCHES=( + "${FILESDIR}/${P}-wrapt-2.patch" +) + EPYTEST_PLUGINS=() distutils_enable_tests pytest -EPYTEST_DESELECT=( - # TODO Investigate test failures - opentelemetry-instrumentation/tests/test_utils.py::UnwrapTestCase::test_can_unwrap_object_attribute - opentelemetry-instrumentation/tests/test_utils.py::UnwrapTestCase::test_can_unwrap_object_attribute_as_string - opentelemetry-instrumentation/tests/test_utils.py::UnwrapTestCase::test_raises_import_error_if_cannot_find_module - opentelemetry-instrumentation/tests/test_utils.py::UnwrapTestCase::test_raises_import_error_if_cannot_find_object - opentelemetry-instrumentation/tests/test_utils.py::UnwrapTestCase::test_raises_import_error_if_path_not_well_formed -) +src_prepare() { + # Apply patch at root of the monorepo (only needed till 0.62b0 release) + cd .. || die + distutils-r1_src_prepare +} python_test() { cp -a "${BUILD_DIR}"/{install,test} || die