diff --git a/pymongo/collection.py b/pymongo/collection.py index bf6d8beec3..7be1191f5d 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 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..673816025a 100644 --- a/test/test_collection.py +++ b/test/test_collection.py @@ -786,6 +786,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()