Description
We give a somewhat helpful error when the `documents` argument is not an iterable type (or an empty iterable):
>>> client.t.t.insert_many(1) |
Traceback (most recent call last):
|
File "<stdin>", line 1, in <module> |
File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 746, in insert_many |
raise TypeError("documents must be a non-empty list") |
TypeError: documents must be a non-empty list |
>>> client.t.t.insert_many([])
|
Traceback (most recent call last):
|
File "<stdin>", line 1, in <module> |
File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 746, in insert_many |
raise TypeError("documents must be a non-empty list") |
TypeError: documents must be a non-empty list |
>>> client.t.t.insert_many({})
|
Traceback (most recent call last):
|
File "<stdin>", line 1, in <module> |
File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 746, in insert_many |
raise TypeError("documents must be a non-empty list") |
TypeError: documents must be a non-empty list |
However when passing a single document (or RawBSONDocument) to `insert_many` we get this unhelpful error:
>>> client.t.t.insert_many({'_id':2}) |
Traceback (most recent call last):
|
File "<stdin>", line 1, in <module> |
File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 760, in insert_many |
blk.ops = [doc for doc in gen()] |
File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 760, in <listcomp> |
blk.ops = [doc for doc in gen()] |
File "/Users/shane/git/mongo-python-driver/pymongo/collection.py", line 751, in gen |
common.validate_is_document_type("document", document) |
File "/Users/shane/git/mongo-python-driver/pymongo/common.py", line 502, in validate_is_document_type |
raise TypeError("%s must be an instance of dict, bson.son.SON, " |
TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping |
>>> client.test.test.insert_many(RawBSONDocument(bson.BSON.encode({'_id':2}))) |
Traceback (most recent call last):
|
File "<stdin>", line 1, in <module> |
File "pymongo/collection.py", line 753, in insert_many |
blk.ops = [doc for doc in gen()] |
File "pymongo/collection.py", line 744, in gen |
common.validate_is_document_type("document", document) |
File "pymongo/common.py", line 453, in validate_is_document_type |
"collections.MutableMapping" % (option,)) |
TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping |
This issue caused some confusion in https://github.com/mongodb-labs/python-bsonjs/issues/14
We should make the error message more helpful by better indicating what the problem is, maybe something like this:
>>> client.t.t.insert_many({'_id': 2}) |
Traceback (most recent call last):
|
File "<stdin>", line 1, in <module> |
...
|
TypeError: documents must be a list, not a single document |
Attachments
Issue Links
- is duplicated by
-
PYTHON-2407 Improve error message when attempting to insert document using insert_many
-
- Closed
-