]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Factor out the distribution file-system safe name functions from install_distinfo...
authorJeremy Kloth <jeremy.kloth@gmail.com>
Mon, 12 Sep 2011 17:12:42 +0000 (11:12 -0600)
committerJeremy Kloth <jeremy.kloth@gmail.com>
Mon, 12 Sep 2011 17:12:42 +0000 (11:12 -0600)
Lib/packaging/command/install_distinfo.py
Lib/packaging/dist.py
Lib/packaging/metadata.py

index 1f48eedab73b051dc4dc556be93aafb83ccd1aa4..c1f85eddf0c3c16d2a496a96a71e01359557a4e6 100644 (file)
@@ -63,9 +63,7 @@ class install_distinfo(Command):
 
         metadata = self.distribution.metadata
 
-        basename = "%s-%s.dist-info" % (
-            to_filename(safe_name(metadata['Name'])),
-            to_filename(safe_version(metadata['Version'])))
+        basename = metadata.get_fullname(filesafe=True) + ".dist-info"
 
         self.distinfo_dir = os.path.join(self.distinfo_dir, basename)
 
@@ -145,31 +143,3 @@ class install_distinfo(Command):
 
     def get_outputs(self):
         return self.outfiles
-
-
-# The following functions are taken from setuptools' pkg_resources module.
-
-def safe_name(name):
-    """Convert an arbitrary string to a standard distribution name
-
-    Any runs of non-alphanumeric/. characters are replaced with a single '-'.
-    """
-    return re.sub('[^A-Za-z0-9.]+', '-', name)
-
-
-def safe_version(version):
-    """Convert an arbitrary string to a standard version string
-
-    Spaces become dots, and all other non-alphanumeric characters become
-    dashes, with runs of multiple dashes condensed to a single dash.
-    """
-    version = version.replace(' ', '.')
-    return re.sub('[^A-Za-z0-9.]+', '-', version)
-
-
-def to_filename(name):
-    """Convert a project or version name to its filename-escaped form
-
-    Any '-' characters are currently replaced with '_'.
-    """
-    return name.replace('-', '_')
index f1441d14cb820fec4cf3ab5f3c4e98a5d542a521..de718ccdacd28611f063666998d8a7650abb9512 100644 (file)
@@ -228,8 +228,8 @@ Common commands: (see '--help-commands' for more)
             d = self.command_options[command] = {}
         return d
 
-    def get_fullname(self):
-        return self.metadata.get_fullname()
+    def get_fullname(self, filesafe=False):
+        return self.metadata.get_fullname(filesafe)
 
     def dump_option_dicts(self, header=None, commands=None, indent=""):
         from pprint import pformat
index dbb53b265c369c6584d684afee00cfcbbb0ab75b..a3db51c1124f7f48a4b38a15aa663fe1edf9f44b 100644 (file)
@@ -182,6 +182,7 @@ _UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description')
 
 _MISSING = object()
 
+_FILESAFE = re.compile('[^A-Za-z0-9.]+')
 
 class Metadata:
     """The metadata of a release.
@@ -285,9 +286,18 @@ class Metadata:
     #
     # Public API
     #
-    def get_fullname(self):
-        """Return the distribution name with version"""
-        return '%s-%s' % (self['Name'], self['Version'])
+    def get_fullname(self, filesafe=False):
+        """Return the distribution name with version.
+
+        If filesafe is true, return a filename-escaped form."""
+        name, version = self['Name'], self['Version']
+        if filesafe:
+            # For both name and version any runs of non-alphanumeric or '.'
+            # characters are replaced with a single '-'.  Additionally any
+            # spaces in the version string become '.'
+            name = _FILESAFE.sub('-', name)
+            version = _FILESAFE.sub('-', version.replace(' ', '.'))
+        return '%s-%s' % (name, version)
 
     def is_metadata_field(self, name):
         """return True if name is a valid metadata key"""