diff options
author | Donald Stufft <donald@stufft.io> | 2014-09-04 21:04:06 -0400 |
---|---|---|
committer | Donald Stufft <donald@stufft.io> | 2014-09-25 20:55:27 -0400 |
commit | 9382fa0c05e533400613e1c7c0a777cabb463390 (patch) | |
tree | 7cd6f6aebf57ea3b4760cc359b4d4c266a0e04f0 /setuptools | |
parent | 84c9006110e53c84296a05741edb7b9edd305f12 (diff) | |
download | external_python_setuptools-9382fa0c05e533400613e1c7c0a777cabb463390.tar.gz external_python_setuptools-9382fa0c05e533400613e1c7c0a777cabb463390.tar.bz2 external_python_setuptools-9382fa0c05e533400613e1c7c0a777cabb463390.zip |
Implement PEP 440 by using the packaging library
Diffstat (limited to 'setuptools')
-rw-r--r-- | setuptools/_vendor/__init__.py | 0 | ||||
-rwxr-xr-x | setuptools/command/egg_info.py | 8 | ||||
-rw-r--r-- | setuptools/dist.py | 21 | ||||
-rw-r--r-- | setuptools/tests/test_egg_info.py | 6 | ||||
-rw-r--r-- | setuptools/tests/test_resources.py | 34 |
5 files changed, 43 insertions, 26 deletions
diff --git a/setuptools/_vendor/__init__.py b/setuptools/_vendor/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/setuptools/_vendor/__init__.py diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py index 72493d0b..cb67255b 100755 --- a/setuptools/command/egg_info.py +++ b/setuptools/command/egg_info.py @@ -15,6 +15,7 @@ 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) @@ -68,9 +69,14 @@ class egg_info(Command): self.vtags = self.tags() self.egg_version = self.tagged_version() + parsed_version = parse_version(self.egg_version) + try: + spec = ( + "%s==%s" if isinstance(parsed_version, Version) else "%s===%s" + ) list( - parse_requirements('%s==%s' % (self.egg_name, + parse_requirements(spec % (self.egg_name, self.egg_version)) ) except ValueError: diff --git a/setuptools/dist.py b/setuptools/dist.py index 8b36f67c..ae4ff554 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -15,6 +15,7 @@ from distutils.errors import (DistutilsOptionError, DistutilsPlatformError, 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): @@ -268,6 +269,26 @@ class Distribution(_Distribution): # Some people apparently take "version number" too literally :) self.metadata.version = str(self.metadata.version) + if self.metadata.version is not None: + try: + normalized_version = str(Version(self.metadata.version)) + if self.metadata.version != normalized_version: + warnings.warn( + "The version specified requires normalization, " + "consider using '%s' instead of '%s'." % ( + normalized_version, + self.metadata.version, + ) + ) + self.metadata.version = normalized_version + except (InvalidVersion, TypeError): + warnings.warn( + "The version specified (%r) is an invalid version, this " + "may not work as expected with newer versions of " + "setuptools, pip, and PyPI. Please see PEP 440 for more " + "details." % self.metadata.version + ) + def parse_command_line(self): """Process features after parsing command line options""" result = _Distribution.parse_command_line(self) diff --git a/setuptools/tests/test_egg_info.py b/setuptools/tests/test_egg_info.py index 7531e37c..4c4f9456 100644 --- a/setuptools/tests/test_egg_info.py +++ b/setuptools/tests/test_egg_info.py @@ -34,7 +34,7 @@ class TestEggInfo(unittest.TestCase): entries_f = open(fn, 'wb') entries_f.write(entries) entries_f.close() - + @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") def test_version_10_format(self): """ @@ -140,7 +140,7 @@ class TestSvnDummy(environment.ZippedEnvironment): @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") def test_svn_tags(self): - code, data = environment.run_setup_py(["egg_info", + code, data = environment.run_setup_py(["egg_info", "--tag-svn-revision"], pypath=self.old_cwd, data_stream=1) @@ -155,7 +155,7 @@ class TestSvnDummy(environment.ZippedEnvironment): infile.close() del infile - self.assertTrue("Version: 0.1.1-r1\n" in read_contents) + self.assertTrue("Version: 0.1.1.post1\n" in read_contents) @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") def test_no_tags(self): diff --git a/setuptools/tests/test_resources.py b/setuptools/tests/test_resources.py index 3baa3ab1..9051b414 100644 --- a/setuptools/tests/test_resources.py +++ b/setuptools/tests/test_resources.py @@ -16,6 +16,7 @@ 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): @@ -103,7 +104,7 @@ class DistroTests(TestCase): def checkFooPkg(self,d): self.assertEqual(d.project_name, "FooPkg") self.assertEqual(d.key, "foopkg") - self.assertEqual(d.version, "1.3-1") + self.assertEqual(d.version, "1.3.post1") self.assertEqual(d.py_version, "2.4") self.assertEqual(d.platform, "win32") self.assertEqual(d.parsed_version, parse_version("1.3-1")) @@ -120,9 +121,9 @@ class DistroTests(TestCase): self.assertEqual(d.platform, None) def testDistroParse(self): - d = dist_from_fn("FooPkg-1.3_1-py2.4-win32.egg") + d = dist_from_fn("FooPkg-1.3.post1-py2.4-win32.egg") self.checkFooPkg(d) - d = dist_from_fn("FooPkg-1.3_1-py2.4-win32.egg-info") + d = dist_from_fn("FooPkg-1.3.post1-py2.4-win32.egg-info") self.checkFooPkg(d) def testDistroMetadata(self): @@ -330,24 +331,15 @@ class RequirementsTests(TestCase): self.assertTrue(twist11 not in r) self.assertTrue(twist12 in r) - def testAdvancedContains(self): - r, = parse_requirements("Foo>=1.2,<=1.3,==1.9,>2.0,!=2.5,<3.0,==4.5") - for v in ('1.2','1.2.2','1.3','1.9','2.0.1','2.3','2.6','3.0c1','4.5'): - self.assertTrue(v in r, (v,r)) - for v in ('1.2c1','1.3.1','1.5','1.9.1','2.0','2.5','3.0','4.0'): - self.assertTrue(v not in r, (v,r)) - def testOptionsAndHashing(self): r1 = Requirement.parse("Twisted[foo,bar]>=1.2") r2 = Requirement.parse("Twisted[bar,FOO]>=1.2") - r3 = Requirement.parse("Twisted[BAR,FOO]>=1.2.0") self.assertEqual(r1,r2) - self.assertEqual(r1,r3) self.assertEqual(r1.extras, ("foo","bar")) self.assertEqual(r2.extras, ("bar","foo")) # extras are normalized self.assertEqual(hash(r1), hash(r2)) self.assertEqual( - hash(r1), hash(("twisted", ((">=",parse_version("1.2")),), + hash(r1), hash(("twisted", Specifier(">=1.2"), frozenset(["foo","bar"]))) ) @@ -420,7 +412,7 @@ class ParseTests(TestCase): self.assertNotEqual(safe_name("peak.web"), "peak-web") def testSafeVersion(self): - self.assertEqual(safe_version("1.2-1"), "1.2-1") + self.assertEqual(safe_version("1.2-1"), "1.2.post1") self.assertEqual(safe_version("1.2 alpha"), "1.2.alpha") self.assertEqual(safe_version("2.3.4 20050521"), "2.3.4.20050521") self.assertEqual(safe_version("Money$$$Maker"), "Money-Maker") @@ -454,12 +446,12 @@ class ParseTests(TestCase): c('0.4', '0.4.0') c('0.4.0.0', '0.4.0') c('0.4.0-0', '0.4-0') - c('0pl1', '0.0pl1') + c('0post1', '0.0post1') c('0pre1', '0.0c1') c('0.0.0preview1', '0c1') c('0.0c1', '0-rc1') c('1.2a1', '1.2.a.1') - c('1.2...a', '1.2a') + c('1.2.a', '1.2a') def testVersionOrdering(self): def c(s1,s2): @@ -472,16 +464,14 @@ class ParseTests(TestCase): c('2.3a1', '2.3') c('2.1-1', '2.1-2') c('2.1-1', '2.1.1') - c('2.1', '2.1pl4') + c('2.1', '2.1post4') c('2.1a0-20040501', '2.1') c('1.1', '02.1') - c('A56','B27') - c('3.2', '3.2.pl0') - c('3.2-1', '3.2pl1') - c('3.2pl1', '3.2pl1-1') + c('3.2', '3.2.post0') + c('3.2post1', '3.2post2') c('0.4', '4.0') c('0.0.4', '0.4.0') - c('0pl1', '0.4pl1') + c('0post1', '0.4post1') c('2.1.0-rc1','2.1.0') c('2.1dev','2.1a0') |