diff --git a/lib/_range.py b/lib/_range.py index fd15a76b..ef40ce7c 100644 --- a/lib/_range.py +++ b/lib/_range.py @@ -105,6 +105,10 @@ class Range(object): return False return self._bounds[1] == ']' + def __getitem__(self, key): + t = self._lower, self._upper + return t[key] + def __contains__(self, x): if self._bounds is None: return False diff --git a/tests/test_types_extras.py b/tests/test_types_extras.py index cda163b6..ff88bc84 100755 --- a/tests/test_types_extras.py +++ b/tests/test_types_extras.py @@ -1386,6 +1386,20 @@ class RangeTestCase(unittest.TestCase): r = Range(0, 4) self.assertEqual(loads(dumps(r)), r) + def test_getitem(self): + from psycopg2.extras import Range + r = Range(0, 4) + self.assertEqual(tuple(r), (0, 4)) + self.assertEqual(list(r), [0, 4]) + lower, upper = r + self.assertEqual(lower, 0) + self.assertEqual(upper, 4) + self.assertEqual(r[0], 0) + self.assertEqual(r[1], 4) + # String indexes are not allowed. + with self.assertRaises(TypeError): + r['abc'] + def skip_if_no_range(f): @wraps(f)