aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools
diff options
context:
space:
mode:
authorDonald Stufft <donald@stufft.io>2014-09-04 21:04:06 -0400
committerDonald Stufft <donald@stufft.io>2014-09-25 20:55:27 -0400
commit9382fa0c05e533400613e1c7c0a777cabb463390 (patch)
tree7cd6f6aebf57ea3b4760cc359b4d4c266a0e04f0 /setuptools
parent84c9006110e53c84296a05741edb7b9edd305f12 (diff)
downloadexternal_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__.py0
-rwxr-xr-xsetuptools/command/egg_info.py8
-rw-r--r--setuptools/dist.py21
-rw-r--r--setuptools/tests/test_egg_info.py6
-rw-r--r--setuptools/tests/test_resources.py34
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')