Skip to content

Commit 33f3243

Browse files
committed
Fix dist-info naming discrepancy in relation to bdist_wheel
1 parent 5e7b76f commit 33f3243

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

setuptools/_normalization.py

+28-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
"""
2+
Helpers for normalization as expected in wheel/sdist/module file names
3+
and core metadata
4+
"""
15
import re
26
import warnings
37
from inspect import cleandoc
@@ -71,6 +75,7 @@ def best_effort_version(version: str) -> str:
7175
>>> best_effort_version("ubuntu lts")
7276
'ubuntu.lts'
7377
"""
78+
# See pkg_resources.safe_version
7479
try:
7580
return safe_version(version)
7681
except packaging.version.InvalidVersion:
@@ -87,4 +92,26 @@ def best_effort_version(version: str) -> str:
8792
"""
8893
warnings.warn(cleandoc(msg), SetuptoolsDeprecationWarning)
8994
v = version.replace(' ', '.')
90-
return safe_name(v).strip("_")
95+
return safe_name(v)
96+
97+
98+
def filename_component(value: str) -> str:
99+
"""Normalize each component of a filename (e.g. distribution/version part of wheel)
100+
Note: ``value`` needs to be already normalized.
101+
>>> filename_component("my-pkg")
102+
'my_pkg'
103+
"""
104+
return value.replace("-", "_").strip("_")
105+
106+
107+
def safer_name(value: str) -> str:
108+
"""Like ``safe_name`` but can be used as filename component for wheel"""
109+
# See bdist_wheel.safer_name
110+
return filename_component(safe_name(value))
111+
112+
113+
def safer_best_effort_version(value: str) -> str:
114+
"""Like ``best_effort_version`` but can be used as filename component for wheel"""
115+
# See bdist_wheel.safer_verion
116+
# TODO: Replace with only safe_version in the future (no need for best effort)
117+
return filename_component(best_effort_version(value))

setuptools/command/dist_info.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ def finalize_options(self):
7070
egg_info.finalize_options()
7171
self.egg_info = egg_info
7272

73-
name = _normalization.safe_name(dist.get_name()).replace(".", "_")
74-
version = _normalization.best_effort_version(dist.get_version())
73+
name = _normalization.safer_name(dist.get_name())
74+
version = _normalization.safer_best_effort_version(dist.get_version())
7575
self.name = f"{name}-{version}"
7676
self.dist_info_dir = os.path.join(self.output_dir, f"{self.name}.dist-info")
7777

setuptools/command/egg_info.py

+3-7
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ def finalize_options(self):
234234
self.egg_base = (dirs or {}).get('', os.curdir)
235235

236236
self.ensure_dirname('egg_base')
237-
self.egg_info = _filename_component(self.egg_name) + '.egg-info'
237+
self.egg_info = _normalization.filename_component(self.egg_name) + '.egg-info'
238238
if self.egg_base != os.curdir:
239239
self.egg_info = os.path.join(self.egg_base, self.egg_info)
240240
if '-' in self.egg_name:
@@ -778,17 +778,13 @@ def get_pkg_info_revision():
778778

779779
def _egg_basename(egg_name, egg_version, py_version=PY_MAJOR, platform=None):
780780
"""Compute filename of the output egg. Private API."""
781-
name = _filename_component(egg_name)
782-
version = _filename_component(egg_version)
781+
name = _normalization.filename_component(egg_name)
782+
version = _normalization.filename_component(egg_version)
783783
egg = f"{name}-{version}-py{py_version}"
784784
if platform:
785785
egg += f"-{platform}"
786786
return egg
787787

788788

789-
def _filename_component(value):
790-
return value.replace("-", "_")
791-
792-
793789
class EggInfoDeprecationWarning(SetuptoolsDeprecationWarning):
794790
"""Deprecated behavior warning for EggInfo, bypassing suppression."""

0 commit comments

Comments
 (0)