Skip to content

Commit ea2c4c6

Browse files
Jackevansevoclaude
andcommitted
perf: Avoid scanning installed packages in package_version
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 28d4c31 commit ea2c4c6

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

‎sentry_sdk/utils.py‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1837,6 +1837,17 @@ def _get_installed_modules() -> "Dict[str, str]":
18371837

18381838

18391839
def package_version(package: str) -> "Optional[Tuple[int, ...]]":
1840+
try:
1841+
from importlib import metadata
1842+
1843+
package_metadata_version = metadata.version(package)
1844+
if package_metadata_version is None:
1845+
return None
1846+
return parse_version(package_metadata_version)
1847+
except ImportError:
1848+
# < py3.8, or no metadata found for this package
1849+
pass
1850+
18401851
normalized_package = _normalize_module_name(
18411852
_replace_hyphens_dots_and_underscores_with_dashes(package)
18421853
)

‎tests/test_utils.py‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,6 +1412,14 @@ def test_package_version_is_none():
14121412
assert package_version("non_existent_package") is None
14131413

14141414

1415+
def test_package_version_does_not_scan_installed_packages():
1416+
with mock.patch("sentry_sdk.utils._generate_installed_modules") as generate:
1417+
with mock.patch("sentry_sdk.utils._installed_modules", None):
1418+
assert package_version("pytest") is not None
1419+
1420+
generate.assert_not_called()
1421+
1422+
14151423
@pytest.mark.parametrize(
14161424
"kwargs, expected",
14171425
[

0 commit comments

Comments
 (0)