From 1384e901b00ab8c802c47a3db7ddeb1df5604457 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 28 Jul 2015 12:55:39 +0200 Subject: [PATCH] Add VerNum.__index__() for Python 3 support On Python 3, some functions like range() don't try to call the __int__() method to cast an object to integer, but try instead the __index__() method. Add an __index__() method to mimick correctly the int type on Python 3. Change-Id: I8df116d80e201778714a59367600eaef644266ed --- migrate/tests/versioning/test_version.py | 7 +++++++ migrate/versioning/version.py | 3 +++ 2 files changed, 10 insertions(+) diff --git a/migrate/tests/versioning/test_version.py b/migrate/tests/versioning/test_version.py index 00ce695..df50072 100644 --- a/migrate/tests/versioning/test_version.py +++ b/migrate/tests/versioning/test_version.py @@ -69,6 +69,13 @@ class TestVerNum(fixture.Base): self.assertTrue(VerNum(2) >= 1) self.assertFalse(VerNum(1) >= 2) + def test_int_cast(self): + ver = VerNum(3) + # test __int__ + self.assertEqual(int(ver), 3) + # test __index__: range() doesn't call __int__ + self.assertEqual(list(range(ver, ver)), []) + class TestVersion(fixture.Pathed): diff --git a/migrate/versioning/version.py b/migrate/versioning/version.py index de7008f..3ab814c 100644 --- a/migrate/versioning/version.py +++ b/migrate/versioning/version.py @@ -65,6 +65,9 @@ class VerNum(object): def __int__(self): return int(self.value) + def __index__(self): + return int(self.value) + if six.PY3: def __hash__(self): return hash(self.value)