From c9728949537182fa804fa19053740587fc609535 Mon Sep 17 00:00:00 2001 From: "A. Jesse Jiryu Davis" Date: Mon, 2 Dec 2013 10:58:26 -0500 Subject: [PATCH] Implement rich comparison operators for MinKey and MaxKey, PYTHON-604. --- bson/max_key.py | 19 ++++++++++++++++--- bson/min_key.py | 21 +++++++++++++++++---- test/test_bson.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 7 deletions(-) diff --git a/bson/max_key.py b/bson/max_key.py index 534a2b0c1..b33d86e91 100644 --- a/bson/max_key.py +++ b/bson/max_key.py @@ -18,17 +18,30 @@ class MaxKey(object): """MongoDB internal MaxKey type. + + .. versionchanged:: 2.7 + ``MaxKey`` now implements comparison operators. """ _type_marker = 127 def __eq__(self, other): - if isinstance(other, MaxKey): - return True - return NotImplemented + return isinstance(other, MaxKey) def __ne__(self, other): return not self == other + def __le__(self, other): + return isinstance(other, MaxKey) + + def __lt__(self, dummy): + return False + + def __ge__(self, dummy): + return True + + def __gt__(self, other): + return not isinstance(other, MaxKey) + def __repr__(self): return "MaxKey()" diff --git a/bson/min_key.py b/bson/min_key.py index 561b0d772..261016d27 100644 --- a/bson/min_key.py +++ b/bson/min_key.py @@ -18,17 +18,30 @@ class MinKey(object): """MongoDB internal MinKey type. + + .. versionchanged:: 2.7 + ``MinKey`` now implements comparison operators. """ _type_marker = 255 def __eq__(self, other): - if isinstance(other, MinKey): - return True - return NotImplemented + return isinstance(other, MinKey) def __ne__(self, other): return not self == other + + def __le__(self, dummy): + return True + + def __lt__(self, other): + return not isinstance(other, MinKey) + + def __ge__(self, other): + return isinstance(other, MinKey) + + def __gt__(self, dummy): + return False def __repr__(self): - return "MinKey()" + return "MinKey()" \ No newline at end of file diff --git a/test/test_bson.py b/test/test_bson.py index 5f09c986d..151fe4496 100644 --- a/test/test_bson.py +++ b/test/test_bson.py @@ -597,6 +597,49 @@ class TestBSON(unittest.TestCase): self.fail('Traceback not captured') else: self.fail('InvalidBSON not raised') + + def test_minkey_maxkey_comparison(self): + # MinKey's <, <=, >, >=, !=, and ==. + self.assertTrue(MinKey() < None) + self.assertTrue(MinKey() < 1) + self.assertTrue(MinKey() <= 1) + self.assertTrue(MinKey() <= MinKey()) + self.assertFalse(MinKey() > None) + self.assertFalse(MinKey() > 1) + self.assertFalse(MinKey() >= 1) + self.assertTrue(MinKey() >= MinKey()) + self.assertTrue(MinKey() != 1) + self.assertFalse(MinKey() == 1) + self.assertTrue(MinKey() == MinKey()) + + # MinKey compared to MaxKey. + self.assertTrue(MinKey() < MaxKey()) + self.assertTrue(MinKey() <= MaxKey()) + self.assertFalse(MinKey() > MaxKey()) + self.assertFalse(MinKey() >= MaxKey()) + self.assertTrue(MinKey() != MaxKey()) + self.assertFalse(MinKey() == MaxKey()) + + # MaxKey's <, <=, >, >=, !=, and ==. + self.assertFalse(MaxKey() < None) + self.assertFalse(MaxKey() < 1) + self.assertFalse(MaxKey() <= 1) + self.assertTrue(MaxKey() <= MaxKey()) + self.assertTrue(MaxKey() > None) + self.assertTrue(MaxKey() > 1) + self.assertTrue(MaxKey() >= 1) + self.assertTrue(MaxKey() >= MaxKey()) + self.assertTrue(MaxKey() != 1) + self.assertFalse(MaxKey() == 1) + self.assertTrue(MaxKey() == MaxKey()) + + # MaxKey compared to MinKey. + self.assertFalse(MaxKey() < MinKey()) + self.assertFalse(MaxKey() <= MinKey()) + self.assertTrue(MaxKey() > MinKey()) + self.assertTrue(MaxKey() >= MinKey()) + self.assertTrue(MaxKey() != MinKey()) + self.assertFalse(MaxKey() == MinKey()) if __name__ == "__main__":