Skip to content

Commit 1dfd3bc

Browse files
committed
address copilot comments
1 parent 0de8870 commit 1dfd3bc

3 files changed

Lines changed: 36 additions & 6 deletions

File tree

.changelog/5672.added

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
`opentelemetry-sdk`: align resource detector schema url conflict behavor with other languages
1+
`opentelemetry-sdk`: align resource detector schema url conflict behavior with other languages

opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,10 +258,17 @@ def merge(self, other: "Resource") -> "Resource":
258258
def __eq__(self, other: object) -> bool:
259259
if not isinstance(other, Resource):
260260
return False
261-
return self._attributes == other._attributes and self._schema_url == other._schema_url
261+
return (
262+
self._attributes == other._attributes
263+
and self._schema_url == other._schema_url
264+
and self._schema_url_conflict == other._schema_url_conflict
265+
)
262266

263267
def __hash__(self) -> int:
264-
return hash(f"{dumps(self._attributes.copy(), sort_keys=True, default=_json_default)}|{self._schema_url}")
268+
return hash(
269+
f"{dumps(self._attributes.copy(), sort_keys=True, default=_json_default)}"
270+
f"|{self._schema_url}|{self._schema_url_conflict}"
271+
)
265272

266273
def to_json(self, indent: int | None = 4) -> str:
267274
return dumps(

opentelemetry-sdk/tests/resources/test_resources.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,14 @@ def test_resource_merge(self):
190190
right = Resource.create({}, schema_urls[0])
191191
self.assertEqual(left.merge(right).schema_url, schema_urls[0])
192192

193-
left = Resource.create({}, schema_urls[0])
194-
right = Resource.create({}, schema_urls[1])
193+
left = Resource({"a": "left", "shared": "left"}, schema_urls[0])
194+
right = Resource({"b": "right", "shared": "right"}, schema_urls[1])
195195
with self.assertLogs(level=WARNING) as log_entry:
196196
merged = left.merge(right)
197-
self.assertEqual(merged.attributes, left.attributes)
197+
self.assertEqual(
198+
merged.attributes,
199+
{"a": "left", "b": "right", "shared": "right"},
200+
)
198201
self.assertEqual(merged.schema_url, "")
199202
self.assertIn(schema_urls[0], log_entry.output[0])
200203
self.assertIn(schema_urls[1], log_entry.output[0])
@@ -207,6 +210,26 @@ def test_resource_merge(self):
207210
fourth = Resource.create({}, None)
208211
self.assertEqual(merged.merge(fourth).schema_url, "")
209212

213+
def test_conflict_eq_hash(self):
214+
left = Resource({"a": "1"}, "https://opentelemetry.io/schemas/1.2.0")
215+
right = Resource({"a": "1"}, "https://opentelemetry.io/schemas/1.3.0")
216+
with self.assertLogs(level=WARNING):
217+
cleared = left.merge(right)
218+
cleared_again = left.merge(right)
219+
220+
cases = (
221+
("cleared vs plain", cleared, Resource({"a": "1"}), False),
222+
("cleared vs cleared", cleared, cleared_again, True),
223+
)
224+
for name, first, second, expected in cases:
225+
with self.subTest(name):
226+
for check, actual in (
227+
("eq", first == second),
228+
("hash", hash(first) == hash(second)),
229+
):
230+
with self.subTest(check):
231+
self.assertEqual(actual, expected)
232+
210233
def test_resource_merge_empty_string(self):
211234
"""Verify Resource.merge behavior with the empty string.
212235

0 commit comments

Comments
 (0)