Skip to content

Commit 5704f12

Browse files
Roman Inflianskassentrivanaantonpirker
authored
Skip distributions with incomplete metadata (#2231)
In rare cases, `importlib.metadata` values may contain `None`, see python/cpython#91216 and python/importlib_metadata#371 Co-authored-by: Ivana Kellyerova <[email protected]> Co-authored-by: Anton Pirker <[email protected]>
1 parent 7a9b1b7 commit 5704f12

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

sentry_sdk/integrations/modules.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,18 @@ def _normalize_module_name(name):
2626
def _generate_installed_modules():
2727
# type: () -> Iterator[Tuple[str, str]]
2828
try:
29-
from importlib.metadata import distributions, version
30-
31-
for dist in distributions():
32-
yield _normalize_module_name(dist.metadata["Name"]), version(
33-
dist.metadata["Name"]
34-
)
29+
from importlib import metadata
30+
31+
for dist in metadata.distributions():
32+
name = dist.metadata["Name"]
33+
# `metadata` values may be `None`, see:
34+
# https://github.com/python/cpython/issues/91216
35+
# and
36+
# https://github.com/python/importlib_metadata/issues/371
37+
if name is not None:
38+
version = metadata.version(name)
39+
if version is not None:
40+
yield _normalize_module_name(name), version
3541

3642
except ImportError:
3743
# < py3.8

tests/integrations/modules/test_modules.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import pytest
12
import re
23
import sentry_sdk
34

@@ -55,12 +56,16 @@ def test_installed_modules():
5556
dist.metadata["Name"]
5657
)
5758
for dist in distributions()
59+
if dist.metadata["Name"] is not None
60+
and version(dist.metadata["Name"]) is not None
5861
}
5962
assert installed_distributions == importlib_distributions
6063

61-
if pkg_resources_available:
64+
elif pkg_resources_available:
6265
pkg_resources_distributions = {
6366
_normalize_distribution_name(dist.key): dist.version
6467
for dist in pkg_resources.working_set
6568
}
6669
assert installed_distributions == pkg_resources_distributions
70+
else:
71+
pytest.fail("Neither importlib nor pkg_resources is available")

0 commit comments

Comments
 (0)