diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2014-09-27 16:13:48 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2014-09-27 16:13:48 -0400 |
commit | 7d9c21a893431798ba77edd62b5490ff4ce47ecf (patch) | |
tree | 7dd192c676041fafe6f31425d5fe2d018895e704 | |
parent | a9541756f6a12c91704feffec4ddfee859f12c30 (diff) | |
download | external_python_setuptools-7d9c21a893431798ba77edd62b5490ff4ce47ecf.tar.gz external_python_setuptools-7d9c21a893431798ba77edd62b5490ff4ce47ecf.tar.bz2 external_python_setuptools-7d9c21a893431798ba77edd62b5490ff4ce47ecf.zip |
Prefer packaging library if available.
-rw-r--r-- | pkg_resources.py | 24 | ||||
-rwxr-xr-x | setup.py | 3 | ||||
-rwxr-xr-x | setuptools/command/egg_info.py | 11 | ||||
-rw-r--r-- | setuptools/dist.py | 14 | ||||
-rw-r--r-- | setuptools/tests/test_resources.py | 10 |
5 files changed, 45 insertions, 17 deletions
diff --git a/pkg_resources.py b/pkg_resources.py index f2e8b850..6f21b0bf 100644 --- a/pkg_resources.py +++ b/pkg_resources.py @@ -14,6 +14,8 @@ The package resource API is designed to work with normal filesystem packages, method. """ +from __future__ import absolute_import + import sys import os import io @@ -73,13 +75,15 @@ try: except ImportError: pass -# Import packaging.version.parse as parse_version for a compat shim with the -# old parse_version that used to be defined in this file. -from setuptools._vendor.packaging.version import parse as parse_version +try: + import packaging.version +except ImportError: + # fallback to vendored version + import setuptools._vendor.packaging.version + packaging = setuptools._vendor.packaging -from setuptools._vendor.packaging.version import ( - Version, InvalidVersion, Specifier, -) +# For compatibility, expose packaging.version.parse as parse_version +parse_version = packaging.version.parse _state_vars = {} @@ -1156,8 +1160,8 @@ def safe_version(version): """ try: # normalize the version - return str(Version(version)) - except InvalidVersion: + return str(packaging.version.Version(version)) + except packaging.version.InvalidVersion: version = version.replace(' ','.') return re.sub('[^A-Za-z0-9.]+', '-', version) @@ -2395,7 +2399,7 @@ class Distribution(object): def as_requirement(self): """Return a ``Requirement`` that matches this distribution exactly""" - if isinstance(self.parsed_version, Version): + if isinstance(self.parsed_version, packaging.version.Version): spec = "%s==%s" % (self.project_name, self.parsed_version) else: spec = "%s===%s" % (self.project_name, self.parsed_version) @@ -2661,7 +2665,7 @@ class Requirement: """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" self.unsafe_name, project_name = project_name, safe_name(project_name) self.project_name, self.key = project_name, project_name.lower() - self.specifier = Specifier( + self.specifier = packaging.version.Specifier( ",".join(["".join([x, y]) for x, y in specs]) ) self.specs = specs @@ -198,6 +198,9 @@ setup_params = dict( Topic :: System :: Systems Administration Topic :: Utilities """).strip().splitlines(), + install_requires=[ + "packaging>=14.2,<15.0.dev0", + ], extras_require={ "ssl:sys_platform=='win32'": "wincertstore==0.2", "certs": "certifi==1.0.1", diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py index de43bf0c..43df87dc 100755 --- a/setuptools/command/egg_info.py +++ b/setuptools/command/egg_info.py @@ -10,12 +10,18 @@ import os import re import sys +try: + import packaging.version +except ImportError: + # fallback to vendored version + import setuptools._vendor.packaging.version + packaging = setuptools._vendor.packaging + from setuptools import Command from setuptools.command.sdist import sdist from setuptools.compat import basestring, PY3, StringIO from setuptools import svn_utils from setuptools.command.sdist import walk_revctrl -from setuptools._vendor.packaging.version import Version from pkg_resources import ( parse_requirements, safe_name, parse_version, safe_version, yield_lines, EntryPoint, iter_entry_points, to_filename) @@ -72,8 +78,9 @@ class egg_info(Command): parsed_version = parse_version(self.egg_version) try: + is_version = isinstance(parsed_version, packaging.version.Version) spec = ( - "%s==%s" if isinstance(parsed_version, Version) else "%s===%s" + "%s==%s" if is_version else "%s===%s" ) list( parse_requirements(spec % (self.egg_name, self.egg_version)) diff --git a/setuptools/dist.py b/setuptools/dist.py index ae4ff554..a3a37ee4 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -13,11 +13,18 @@ from distutils.core import Distribution as _Distribution from distutils.errors import (DistutilsOptionError, DistutilsPlatformError, DistutilsSetupError) +try: + import packaging.version +except ImportError: + # fallback to vendored version + import setuptools._vendor.packaging.version + packaging = setuptools._vendor.packaging + from setuptools.depends import Require from setuptools.compat import basestring, PY2 -from setuptools._vendor.packaging.version import Version, InvalidVersion import pkg_resources + def _get_unpatched(cls): """Protect against re-patching the distutils if reloaded @@ -271,7 +278,8 @@ class Distribution(_Distribution): if self.metadata.version is not None: try: - normalized_version = str(Version(self.metadata.version)) + ver = packaging.version.Version(self.metadata.version) + normalized_version = str(ver) if self.metadata.version != normalized_version: warnings.warn( "The version specified requires normalization, " @@ -281,7 +289,7 @@ class Distribution(_Distribution): ) ) self.metadata.version = normalized_version - except (InvalidVersion, TypeError): + except (packaging.version.InvalidVersion, TypeError): warnings.warn( "The version specified (%r) is an invalid version, this " "may not work as expected with newer versions of " diff --git a/setuptools/tests/test_resources.py b/setuptools/tests/test_resources.py index 9051b414..8336a85d 100644 --- a/setuptools/tests/test_resources.py +++ b/setuptools/tests/test_resources.py @@ -8,6 +8,13 @@ import tempfile import shutil from unittest import TestCase +try: + import packaging.version +except ImportError: + # fallback to vendored version + import setuptools._vendor.packaging.version + packaging = setuptools._vendor.packaging + import pkg_resources from pkg_resources import (parse_requirements, VersionConflict, parse_version, Distribution, EntryPoint, Requirement, safe_version, safe_name, @@ -16,7 +23,6 @@ from pkg_resources import (parse_requirements, VersionConflict, parse_version, from setuptools.command.easy_install import (get_script_header, is_sh, nt_quote_arg) from setuptools.compat import StringIO, iteritems, PY3 -from setuptools._vendor.packaging.version import Specifier from .py26compat import skipIf def safe_repr(obj, short=False): @@ -339,7 +345,7 @@ class RequirementsTests(TestCase): self.assertEqual(r2.extras, ("bar","foo")) # extras are normalized self.assertEqual(hash(r1), hash(r2)) self.assertEqual( - hash(r1), hash(("twisted", Specifier(">=1.2"), + hash(r1), hash(("twisted", packaging.version.Specifier(">=1.2"), frozenset(["foo","bar"]))) ) |