Skip to content

Fix distribution name normalization (PEP-0503) #2144

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 25, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 22 additions & 16 deletions tests/integrations/modules/test_modules.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
import re
import sentry_sdk

from sentry_sdk.integrations.modules import (
ModulesIntegration,
_get_installed_modules,
_normalize_module_name,
)


def _normalize_distribution_name(name):
# type: (str) -> str
"""Normalize distribution name according to PEP-0503.

See:
https://peps.python.org/pep-0503/#normalized-names
for more details.
"""
return re.sub(r"[-_.]+", "-", name).lower()


def test_basic(sentry_init, capture_events):
sentry_init(integrations=[ModulesIntegration()])
events = capture_events()
Expand All @@ -33,28 +44,23 @@ def test_installed_modules():
except ImportError:
pkg_resources_available = False

installed_modules = _get_installed_modules()

# This one package is reported differently by importlib
# and pkg_resources, but we don't really care, so let's
# just ignore it
installed_modules.pop("typing-extensions", None)
installed_modules.pop("typing_extensions", None)
installed_distributions = {
_normalize_distribution_name(dist): version
for dist, version in _get_installed_modules().items()
}

if importlib_available:
importlib_modules = {
_normalize_module_name(dist.metadata["Name"]): version(
importlib_distributions = {
_normalize_distribution_name(dist.metadata["Name"]): version(
dist.metadata["Name"]
)
for dist in distributions()
}
importlib_modules.pop("typing-extensions", None)
assert installed_modules == importlib_modules
assert installed_distributions == importlib_distributions

if pkg_resources_available:
pkg_resources_modules = {
_normalize_module_name(dist.key): dist.version
pkg_resources_distributions = {
_normalize_distribution_name(dist.key): dist.version
for dist in pkg_resources.working_set
}
pkg_resources_modules.pop("typing-extensions", None)
assert installed_modules == pkg_resources_modules
assert installed_distributions == pkg_resources_distributions