diff --git a/docs/changelog.rst b/docs/changelog.rst index 55fa4b25..5422f113 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -18,6 +18,7 @@ Development - Fix updating/modifying/deleting/reloading a document that's sharded by a field with ``db_field`` specified. #2125 - ``ListField`` now accepts an optional ``max_length`` parameter. #2110 - The codebase is now formatted using ``black``. #2109 +- In bulk write insert, the detailed error message would raise in exception. Changes in 0.18.2 ================= diff --git a/mongoengine/errors.py b/mongoengine/errors.py index 9852f2a1..b76243d3 100644 --- a/mongoengine/errors.py +++ b/mongoengine/errors.py @@ -12,6 +12,7 @@ __all__ = ( "InvalidQueryError", "OperationError", "NotUniqueError", + "BulkWriteError", "FieldDoesNotExist", "ValidationError", "SaveConditionError", @@ -51,6 +52,10 @@ class NotUniqueError(OperationError): pass +class BulkWriteError(OperationError): + pass + + class SaveConditionError(OperationError): pass diff --git a/mongoengine/queryset/base.py b/mongoengine/queryset/base.py index ba3ac95a..6d3fb41a 100644 --- a/mongoengine/queryset/base.py +++ b/mongoengine/queryset/base.py @@ -20,6 +20,7 @@ from mongoengine.common import _import_class from mongoengine.connection import get_db from mongoengine.context_managers import set_write_concern, switch_db from mongoengine.errors import ( + BulkWriteError, InvalidQueryError, LookUpError, NotUniqueError, @@ -355,8 +356,8 @@ class BaseQuerySet(object): except pymongo.errors.BulkWriteError as err: # inserting documents that already have an _id field will # give huge performance debt or raise - message = u"Document must not have _id value before bulk write (%s)" - raise NotUniqueError(message % six.text_type(err)) + message = u"Bulk write error: (%s)" + raise BulkWriteError(message % six.text_type(err.details)) except pymongo.errors.OperationFailure as err: message = "Could not save document (%s)" if re.match("^E1100[01] duplicate key", six.text_type(err)):