From fbd5599deb5433e08b43b2a9543fb1e3b0349129 Mon Sep 17 00:00:00 2001 From: Julius Park Date: Thu, 16 Sep 2021 15:21:40 -0700 Subject: [PATCH] PYTHON-2518 SON class should be compatible with Python 3's OrderedDict API (#730) --- bson/son.py | 3 --- test/test_son.py | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/bson/son.py b/bson/son.py index c6baaa98c..a72696129 100644 --- a/bson/son.py +++ b/bson/son.py @@ -62,9 +62,6 @@ class SON(dict): self.__keys.remove(key) dict.__delitem__(self, key) - def keys(self): - return list(self.__keys) - def copy(self): other = SON() other.update(self) diff --git a/test/test_son.py b/test/test_son.py index a8ac49060..edddd6b8b 100644 --- a/test/test_son.py +++ b/test/test_son.py @@ -23,7 +23,7 @@ sys.path[0:0] = [""] from bson.son import SON from test import unittest - +from collections import OrderedDict class TestSON(unittest.TestCase): def test_ordered_dict(self): @@ -189,5 +189,21 @@ class TestSON(unittest.TestCase): test_son.popitem() self.assertEqual(2, len(test_son)) + def test_keys(self): + # Test to make sure that set operations do not throw an error + d = SON().keys() + for i in [OrderedDict, dict]: + try: + d - i().keys() + except TypeError: + self.fail("SON().keys() is not returning an object compatible " + "with %s objects" % (str(i))) + # Test to verify correctness + d = SON({"k": "v"}).keys() + for i in [OrderedDict, dict]: + self.assertEqual(d | i({"k1": 0}).keys(), {"k", "k1"}) + for i in [OrderedDict, dict]: + self.assertEqual(d - i({"k": 0}).keys(), set()) + if __name__ == "__main__": unittest.main()