diff options
| -rw-r--r-- | setuptools/_normalization.py | 29 | ||||
| -rw-r--r-- | setuptools/command/dist_info.py | 4 | ||||
| -rw-r--r-- | setuptools/command/egg_info.py | 10 |
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.""" |
