diff options
author | Donald Stufft <donald@stufft.io> | 2014-12-14 13:22:29 -0500 |
---|---|---|
committer | Donald Stufft <donald@stufft.io> | 2014-12-14 13:22:29 -0500 |
commit | e27bb7d12b73046f4805025fd2a53fc6bb3b1dfa (patch) | |
tree | 23f54ef02062fcad8601db8b4978a55a6135e620 | |
parent | 5bf45c863a9b88a2c62fdaaeb75538c426ab5d41 (diff) | |
download | external_python_setuptools-e27bb7d12b73046f4805025fd2a53fc6bb3b1dfa.tar.gz external_python_setuptools-e27bb7d12b73046f4805025fd2a53fc6bb3b1dfa.tar.bz2 external_python_setuptools-e27bb7d12b73046f4805025fd2a53fc6bb3b1dfa.zip |
Add more compatability shims to SetuptoolsVersion
* Enables indexing the SetuptoolsVersion objects, triggering the
legacy behavior warning.
* Enables comparing the SetuptoolsVersion object to a tuple, again
triggering the legacy behavior warning.
-rw-r--r-- | pkg_resources.py | 40 | ||||
-rw-r--r-- | setuptools/tests/test_resources.py | 21 |
2 files changed, 61 insertions, 0 deletions
diff --git a/pkg_resources.py b/pkg_resources.py index e1109608..5df5a3e6 100644 --- a/pkg_resources.py +++ b/pkg_resources.py @@ -81,6 +81,46 @@ packaging = setuptools._vendor.packaging class _SetuptoolsVersionMixin(object): + + def __lt__(self, other): + if isinstance(other, tuple): + return tuple(self) < other + else: + return super(_SetuptoolsVersionMixin, self).__lt__(other) + + def __le__(self, other): + if isinstance(other, tuple): + return tuple(self) <= other + else: + return super(_SetuptoolsVersionMixin, self).__le__(other) + + def __eq__(self, other): + if isinstance(other, tuple): + return tuple(self) == other + else: + return super(_SetuptoolsVersionMixin, self).__eq__(other) + + def __ge__(self, other): + if isinstance(other, tuple): + return tuple(self) >= other + else: + return super(_SetuptoolsVersionMixin, self).__ge__(other) + + def __gt__(self, other): + if isinstance(other, tuple): + return tuple(self) > other + else: + return super(_SetuptoolsVersionMixin, self).__gt__(other) + + def __ne__(self, other): + if isinstance(other, tuple): + return tuple(self) != other + else: + return super(_SetuptoolsVersionMixin, self).__ne__(other) + + def __getitem__(self, key): + return tuple(self)[key] + def __iter__(self): component_re = re.compile(r'(\d+ | [a-z]+ | \.| -)', re.VERBOSE) replace = { diff --git a/setuptools/tests/test_resources.py b/setuptools/tests/test_resources.py index 23872e5d..13f80aa4 100644 --- a/setuptools/tests/test_resources.py +++ b/setuptools/tests/test_resources.py @@ -507,6 +507,27 @@ class ParseTests(TestCase): self.assertTrue(buildout(parse_version("1.0"))) self.assertFalse(buildout(parse_version("1.0a1"))) + def testVersionIndexable(self): + """ + Some projects were doing things like parse_version("v")[0], so we'll + support indexing the same as we support iterating. + """ + self.assertEqual(parse_version("1.0")[0], "00000001") + + def testVersionTupleSort(self): + """ + Some projects expected to be able to sort tuples against the return + value of parse_version. So again we'll add a warning enabled shim to + make this possible. + """ + self.assertTrue(parse_version("1.0") < tuple(parse_version("2.0"))) + self.assertTrue(parse_version("1.0") <= tuple(parse_version("2.0"))) + self.assertTrue(parse_version("1.0") == tuple(parse_version("1.0"))) + self.assertTrue(parse_version("3.0") > tuple(parse_version("2.0"))) + self.assertTrue(parse_version("3.0") >= tuple(parse_version("2.0"))) + self.assertTrue(parse_version("3.0") != tuple(parse_version("2.0"))) + self.assertFalse(parse_version("3.0") != tuple(parse_version("3.0"))) + class ScriptHeaderTests(TestCase): non_ascii_exe = '/Users/José/bin/python' |