Merge pull request #626 from KonishchevDmitry/pr-not-unique-error-on-update
Raise NotUniqueError in Document.update() on pymongo.errors.DuplicateKeyError
This commit is contained in:
commit
a70dbac0e6
@ -459,6 +459,8 @@ class BaseQuerySet(object):
|
|||||||
return result
|
return result
|
||||||
elif result:
|
elif result:
|
||||||
return result['n']
|
return result['n']
|
||||||
|
except pymongo.errors.DuplicateKeyError, err:
|
||||||
|
raise NotUniqueError(u'Update failed (%s)' % unicode(err))
|
||||||
except pymongo.errors.OperationFailure, err:
|
except pymongo.errors.OperationFailure, err:
|
||||||
if unicode(err) == u'multi not coded yet':
|
if unicode(err) == u'multi not coded yet':
|
||||||
message = u'update() method requires MongoDB 1.1.3+'
|
message = u'update() method requires MongoDB 1.1.3+'
|
||||||
|
@ -15,7 +15,7 @@ from tests.fixtures import (PickleEmbedded, PickleTest, PickleSignalsTest,
|
|||||||
|
|
||||||
from mongoengine import *
|
from mongoengine import *
|
||||||
from mongoengine.errors import (NotRegistered, InvalidDocumentError,
|
from mongoengine.errors import (NotRegistered, InvalidDocumentError,
|
||||||
InvalidQueryError)
|
InvalidQueryError, NotUniqueError)
|
||||||
from mongoengine.queryset import NULLIFY, Q
|
from mongoengine.queryset import NULLIFY, Q
|
||||||
from mongoengine.connection import get_db
|
from mongoengine.connection import get_db
|
||||||
from mongoengine.base import get_document
|
from mongoengine.base import get_document
|
||||||
@ -990,6 +990,16 @@ class InstanceTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertRaises(InvalidQueryError, update_no_op_raises)
|
self.assertRaises(InvalidQueryError, update_no_op_raises)
|
||||||
|
|
||||||
|
def test_update_unique_field(self):
|
||||||
|
class Doc(Document):
|
||||||
|
name = StringField(unique=True)
|
||||||
|
|
||||||
|
doc1 = Doc(name="first").save()
|
||||||
|
doc2 = Doc(name="second").save()
|
||||||
|
|
||||||
|
self.assertRaises(NotUniqueError, lambda:
|
||||||
|
doc2.update(set__name=doc1.name))
|
||||||
|
|
||||||
def test_embedded_update(self):
|
def test_embedded_update(self):
|
||||||
"""
|
"""
|
||||||
Test update on `EmbeddedDocumentField` fields
|
Test update on `EmbeddedDocumentField` fields
|
||||||
|
Loading…
x
Reference in New Issue
Block a user