From 81ab3c40fd4b85ed1645d4d0bd61d837823fb0d8 Mon Sep 17 00:00:00 2001 From: William Zhou Date: Wed, 17 Mar 2021 17:28:50 -0700 Subject: [PATCH 1/6] use abc.sequence instead of abc.Iterable to typecheck for list types --- pymongo/collection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymongo/collection.py b/pymongo/collection.py index bf6d8beec3..63b292e5cd 100644 --- a/pymongo/collection.py +++ b/pymongo/collection.py @@ -686,7 +686,7 @@ def insert_many(self, documents, ordered=True, .. versionadded:: 3.0 """ - if not isinstance(documents, abc.Iterable) or not documents: + if not isinstance(documents, abc.Sequence) or not documents: raise TypeError("documents must be a non-empty list") inserted_ids = [] def gen(): From b55baccdf7c535866bda6089195cf886e2f22266 Mon Sep 17 00:00:00 2001 From: William Zhou Date: Thu, 18 Mar 2021 01:30:12 -0700 Subject: [PATCH 2/6] pass tests --- pymongo/collection.py | 2 +- test/test_collection.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pymongo/collection.py b/pymongo/collection.py index 63b292e5cd..728cd752dc 100644 --- a/pymongo/collection.py +++ b/pymongo/collection.py @@ -686,7 +686,7 @@ def insert_many(self, documents, ordered=True, .. versionadded:: 3.0 """ - if not isinstance(documents, abc.Sequence) or not documents: + if not isinstance(documents, abc.Iterable) or isinstance(documents, abc.Mapping) or not documents: raise TypeError("documents must be a non-empty list") inserted_ids = [] def gen(): diff --git a/test/test_collection.py b/test/test_collection.py index fe4bf28ad6..3e9d0856ac 100644 --- a/test/test_collection.py +++ b/test/test_collection.py @@ -876,7 +876,7 @@ def test_bad_dbref(self): id_only = {'ref': {'$id': ObjectId()}} self.assertRaises(InvalidDocument, self.db.test.insert_one, ref_only) self.assertRaises(InvalidDocument, self.db.test.insert_one, id_only) - +x @client_context.require_version_min(3, 1, 9, -1) def test_insert_bypass_document_validation(self): db = self.db From 6a0bb1c0456eab788224c7ac57202c57ba16bddb Mon Sep 17 00:00:00 2001 From: William Zhou Date: Thu, 18 Mar 2021 13:54:24 -0700 Subject: [PATCH 3/6] remove unwanted letter --- test/test_collection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_collection.py b/test/test_collection.py index 3e9d0856ac..fe4bf28ad6 100644 --- a/test/test_collection.py +++ b/test/test_collection.py @@ -876,7 +876,7 @@ def test_bad_dbref(self): id_only = {'ref': {'$id': ObjectId()}} self.assertRaises(InvalidDocument, self.db.test.insert_one, ref_only) self.assertRaises(InvalidDocument, self.db.test.insert_one, id_only) -x + @client_context.require_version_min(3, 1, 9, -1) def test_insert_bypass_document_validation(self): db = self.db From b884853ee100350a9ad23d1df03f43d73b6b9721 Mon Sep 17 00:00:00 2001 From: William Zhou Date: Thu, 18 Mar 2021 16:12:08 -0700 Subject: [PATCH 4/6] add test, lint --- pymongo/collection.py | 4 +++- test/test_collection.py | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/pymongo/collection.py b/pymongo/collection.py index 728cd752dc..04b9dd8ced 100644 --- a/pymongo/collection.py +++ b/pymongo/collection.py @@ -686,7 +686,9 @@ def insert_many(self, documents, ordered=True, .. versionadded:: 3.0 """ - if not isinstance(documents, abc.Iterable) or isinstance(documents, abc.Mapping) or not documents: + if not isinstance(documents, abc.Iterable) \ + or isinstance(documents, abc.Mapping) \ + or not documents: raise TypeError("documents must be a non-empty list") inserted_ids = [] def gen(): diff --git a/test/test_collection.py b/test/test_collection.py index fe4bf28ad6..9b7a48ef3e 100644 --- a/test/test_collection.py +++ b/test/test_collection.py @@ -23,6 +23,8 @@ from codecs import utf_8_decode from collections import defaultdict +import bson + sys.path[0:0] = [""] from bson import encode @@ -786,6 +788,26 @@ def test_insert_many(self): self.assertFalse(result.acknowledged) self.assertEqual(20, db.test.count_documents({})) + def test_insert_many_invalid(self): + db = self.db + db.test.drop() + + with self.assertRaisesRegex( + TypeError, "documents must be a non-empty list"): + db.test.insert_many({}) + + with self.assertRaisesRegex( + TypeError, "documents must be a non-empty list"): + db.test.insert_many([]) + + with self.assertRaisesRegex( + TypeError, "documents must be a non-empty list"): + db.test.insert_many(1) + + with self.assertRaisesRegex( + TypeError, "documents must be a non-empty list"): + db.test.insert_many(RawBSONDocument(bson.BSON.encode({'_id': 2}))) + def test_delete_one(self): self.db.test.drop() From c480b3c576efd66953b23043939b7c0bc8b5cfe9 Mon Sep 17 00:00:00 2001 From: William Zhou Date: Fri, 19 Mar 2021 16:22:48 -0700 Subject: [PATCH 5/6] address comments --- pymongo/collection.py | 6 +++--- test/test_collection.py | 3 --- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/pymongo/collection.py b/pymongo/collection.py index 04b9dd8ced..b7aca00d16 100644 --- a/pymongo/collection.py +++ b/pymongo/collection.py @@ -686,9 +686,9 @@ def insert_many(self, documents, ordered=True, .. versionadded:: 3.0 """ - if not isinstance(documents, abc.Iterable) \ - or isinstance(documents, abc.Mapping) \ - or not documents: + if (not isinstance(documents, abc.Iterable) + or isinstance(documents, abc.Mapping) + or not documents): raise TypeError("documents must be a non-empty list") inserted_ids = [] def gen(): diff --git a/test/test_collection.py b/test/test_collection.py index 9b7a48ef3e..ffb8a56d7a 100644 --- a/test/test_collection.py +++ b/test/test_collection.py @@ -23,8 +23,6 @@ from codecs import utf_8_decode from collections import defaultdict -import bson - sys.path[0:0] = [""] from bson import encode @@ -790,7 +788,6 @@ def test_insert_many(self): def test_insert_many_invalid(self): db = self.db - db.test.drop() with self.assertRaisesRegex( TypeError, "documents must be a non-empty list"): From 72c6c6d9c076a533be468aaa8aadb0141fa50621 Mon Sep 17 00:00:00 2001 From: William Zhou Date: Fri, 19 Mar 2021 16:24:59 -0700 Subject: [PATCH 6/6] fix import --- pymongo/collection.py | 2 +- test/test_collection.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pymongo/collection.py b/pymongo/collection.py index b7aca00d16..7be1191f5d 100644 --- a/pymongo/collection.py +++ b/pymongo/collection.py @@ -687,7 +687,7 @@ def insert_many(self, documents, ordered=True, .. versionadded:: 3.0 """ if (not isinstance(documents, abc.Iterable) - or isinstance(documents, abc.Mapping) + or isinstance(documents, abc.Mapping) or not documents): raise TypeError("documents must be a non-empty list") inserted_ids = [] diff --git a/test/test_collection.py b/test/test_collection.py index ffb8a56d7a..673816025a 100644 --- a/test/test_collection.py +++ b/test/test_collection.py @@ -803,7 +803,7 @@ def test_insert_many_invalid(self): with self.assertRaisesRegex( TypeError, "documents must be a non-empty list"): - db.test.insert_many(RawBSONDocument(bson.BSON.encode({'_id': 2}))) + db.test.insert_many(RawBSONDocument(encode({'_id': 2}))) def test_delete_one(self): self.db.test.drop()