mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-04-07 03:10:15 -04:00
dev-python/opentelemetry-instrumentation: fix wrapt-2.x support
Signed-off-by: Florian Albrechtskirchinger <falbrechtskirchinger@gmail.com>
This commit is contained in:
@@ -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))
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user