Skip to content

Commit def45fc

Browse files
emdnetojeremydvoss
authored andcommitted
add get_dist_dependency_conflicts back
Signed-off-by: emdneto <[email protected]>
1 parent b8018c5 commit def45fc

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

opentelemetry-instrumentation/src/opentelemetry/instrumentation/dependencies.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414

1515
from __future__ import annotations
1616

17+
import warnings
1718
from logging import getLogger
1819
from typing import Collection
1920

2021
from packaging.requirements import InvalidRequirement, Requirement
2122

2223
from opentelemetry.util._importlib_metadata import (
24+
Distribution,
2325
PackageNotFoundError,
2426
version,
2527
)
@@ -49,6 +51,30 @@ def __str__(self):
4951
return str(self.conflict)
5052

5153

54+
def get_dist_dependency_conflicts(
55+
dist: Distribution,
56+
) -> DependencyConflict | None:
57+
warnings.warn(
58+
"get_dist_dependency_conflicts is deprecated since 0.53b0 and will be removed in a future release.",
59+
DeprecationWarning,
60+
stacklevel=2,
61+
)
62+
instrumentation_deps = []
63+
extra = "extra"
64+
instruments = "instruments"
65+
instruments_marker = {extra: instruments}
66+
if dist.requires:
67+
for dep in dist.requires:
68+
if extra not in dep or instruments not in dep:
69+
continue
70+
71+
req = Requirement(dep)
72+
if req.marker.evaluate(instruments_marker):
73+
instrumentation_deps.append(req)
74+
75+
return get_dependency_conflicts(instrumentation_deps)
76+
77+
5278
def get_dependency_conflicts(
5379
deps: Collection[str | Requirement],
5480
) -> DependencyConflict | None:

opentelemetry-instrumentation/tests/test_dependencies.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
from opentelemetry.instrumentation.dependencies import (
2121
DependencyConflict,
2222
get_dependency_conflicts,
23+
get_dist_dependency_conflicts,
2324
)
2425
from opentelemetry.test.test_base import TestBase
26+
from opentelemetry.util._importlib_metadata import Distribution
2527

2628

2729
class TestDependencyConflicts(TestBase):
@@ -62,3 +64,41 @@ def test_get_dependency_conflicts_mismatched_version(self):
6264
str(conflict),
6365
f'DependencyConflict: requested: "pytest == 5000" but found: "pytest {pytest.__version__}"',
6466
)
67+
68+
def test_get_dist_dependency_conflicts(self):
69+
class MockDistribution(Distribution):
70+
def locate_file(self, path):
71+
pass
72+
73+
def read_text(self, filename):
74+
pass
75+
76+
@property
77+
def requires(self):
78+
return ['test-pkg ~= 1.0; extra == "instruments"']
79+
80+
dist = MockDistribution()
81+
82+
conflict = get_dist_dependency_conflicts(dist)
83+
self.assertTrue(conflict is not None)
84+
self.assertTrue(isinstance(conflict, DependencyConflict))
85+
self.assertEqual(
86+
str(conflict),
87+
'DependencyConflict: requested: "test-pkg~=1.0; extra == "instruments"" but found: "None"',
88+
)
89+
90+
def test_get_dist_dependency_conflicts_requires_none(self):
91+
class MockDistribution(Distribution):
92+
def locate_file(self, path):
93+
pass
94+
95+
def read_text(self, filename):
96+
pass
97+
98+
@property
99+
def requires(self):
100+
return None
101+
102+
dist = MockDistribution()
103+
conflict = get_dist_dependency_conflicts(dist)
104+
self.assertTrue(conflict is None)

0 commit comments

Comments
 (0)