From fac4f5df570f0288ede501e28d9ced4eb82422b9 Mon Sep 17 00:00:00 2001 From: William Zhou Date: Mon, 22 Mar 2021 11:13:42 -0700 Subject: [PATCH] PYTHON-1690: Fix error message when insert_many is given a single RawBSONDocument instead of a list (#580) (cherry picked from commit 94f4de1f2e58209e1e8c1db46975b76c3cee6abb) --- pymongo/collection.py | 4 +++- test/test_collection.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pymongo/collection.py b/pymongo/collection.py index 4adce0a384..4963304b0c 100644 --- a/pymongo/collection.py +++ b/pymongo/collection.py @@ -745,7 +745,9 @@ def insert_many(self, documents, ordered=True, .. versionadded:: 3.0 """ - if not isinstance(documents, abc.Iterable) 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 96a3e454ab..7e5e2fa6bf 100644 --- a/test/test_collection.py +++ b/test/test_collection.py @@ -826,6 +826,25 @@ 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 + + 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(encode({'_id': 2}))) + def test_delete_one(self): self.db.test.drop()