summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--setuptools/_normalization.py29
-rw-r--r--setuptools/command/dist_info.py4
-rw-r--r--setuptools/command/egg_info.py10
3 files changed, 33 insertions, 10 deletions
diff --git a/setuptools/_normalization.py b/setuptools/_normalization.py
index 7012ffea..8ba7c802 100644
--- a/setuptools/_normalization.py
+++ b/setuptools/_normalization.py
@@ -1,3 +1,7 @@
+"""
+Helpers for normalization as expected in wheel/sdist/module file names
+and core metadata
+"""
import re
import warnings
from inspect import cleandoc
@@ -71,6 +75,7 @@ def best_effort_version(version: str) -> str:
>>> best_effort_version("ubuntu lts")
'ubuntu.lts'
"""
+ # See pkg_resources.safe_version
try:
return safe_version(version)
except packaging.version.InvalidVersion:
@@ -87,4 +92,26 @@ def best_effort_version(version: str) -> str:
"""
warnings.warn(cleandoc(msg), SetuptoolsDeprecationWarning)
v = version.replace(' ', '.')
- return safe_name(v).strip("_")
+ return safe_name(v)
+
+
+def filename_component(value: str) -> str:
+ """Normalize each component of a filename (e.g. distribution/version part of wheel)
+ Note: ``value`` needs to be already normalized.
+ >>> filename_component("my-pkg")
+ 'my_pkg'
+ """
+ return value.replace("-", "_").strip("_")
+
+
+def safer_name(value: str) -> str:
+ """Like ``safe_name`` but can be used as filename component for wheel"""
+ # See bdist_wheel.safer_name
+ return filename_component(safe_name(value))
+
+
+def safer_best_effort_version(value: str) -> str:
+ """Like ``best_effort_version`` but can be used as filename component for wheel"""
+ # See bdist_wheel.safer_verion
+ # TODO: Replace with only safe_version in the future (no need for best effort)
+ return filename_component(best_effort_version(value))
diff --git a/setuptools/command/dist_info.py b/setuptools/command/dist_info.py
index d5344471..71acdc18 100644
--- a/setuptools/command/dist_info.py
+++ b/setuptools/command/dist_info.py
@@ -70,8 +70,8 @@ class dist_info(Command):
egg_info.finalize_options()
self.egg_info = egg_info
- name = _normalization.safe_name(dist.get_name()).replace(".", "_")
- version = _normalization.best_effort_version(dist.get_version())
+ name = _normalization.safer_name(dist.get_name())
+ version = _normalization.safer_best_effort_version(dist.get_version())
self.name = f"{name}-{version}"
self.dist_info_dir = os.path.join(self.output_dir, f"{self.name}.dist-info")
diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py
index 2314b448..30ecf1dd 100644
--- a/setuptools/command/egg_info.py
+++ b/setuptools/command/egg_info.py
@@ -234,7 +234,7 @@ class egg_info(InfoCommon, Command):
self.egg_base = (dirs or {}).get('', os.curdir)
self.ensure_dirname('egg_base')
- self.egg_info = _filename_component(self.egg_name) + '.egg-info'
+ self.egg_info = _normalization.filename_component(self.egg_name) + '.egg-info'
if self.egg_base != os.curdir:
self.egg_info = os.path.join(self.egg_base, self.egg_info)
if '-' in self.egg_name:
@@ -778,17 +778,13 @@ def get_pkg_info_revision():
def _egg_basename(egg_name, egg_version, py_version=PY_MAJOR, platform=None):
"""Compute filename of the output egg. Private API."""
- name = _filename_component(egg_name)
- version = _filename_component(egg_version)
+ name = _normalization.filename_component(egg_name)
+ version = _normalization.filename_component(egg_version)
egg = f"{name}-{version}-py{py_version}"
if platform:
egg += f"-{platform}"
return egg
-def _filename_component(value):
- return value.replace("-", "_")
-
-
class EggInfoDeprecationWarning(SetuptoolsDeprecationWarning):
"""Deprecated behavior warning for EggInfo, bypassing suppression."""