Merge pull request #1070 from touilleMan/save-condition-error
Use SaveConditionError instead of OperationError in save_condition
This commit is contained in:
commit
f8890ca841
@ -7,6 +7,7 @@ Changes in 0.10.1 - DEV
|
|||||||
- Fix infinite recursion with CASCADE delete rules under specific conditions. #1046
|
- Fix infinite recursion with CASCADE delete rules under specific conditions. #1046
|
||||||
- Fix CachedReferenceField bug when loading cached docs as DBRef but failing to save them. #1047
|
- Fix CachedReferenceField bug when loading cached docs as DBRef but failing to save them. #1047
|
||||||
- Fix ignored chained options #842
|
- Fix ignored chained options #842
|
||||||
|
- Document save's save_condition error raises `SaveConditionError` exception #1070
|
||||||
|
|
||||||
Changes in 0.10.0
|
Changes in 0.10.0
|
||||||
=================
|
=================
|
||||||
|
@ -16,7 +16,8 @@ from mongoengine.base import (
|
|||||||
ALLOW_INHERITANCE,
|
ALLOW_INHERITANCE,
|
||||||
get_document
|
get_document
|
||||||
)
|
)
|
||||||
from mongoengine.errors import InvalidQueryError, InvalidDocumentError
|
from mongoengine.errors import (InvalidQueryError, InvalidDocumentError,
|
||||||
|
SaveConditionError)
|
||||||
from mongoengine.python_support import IS_PYMONGO_3
|
from mongoengine.python_support import IS_PYMONGO_3
|
||||||
from mongoengine.queryset import (OperationError, NotUniqueError,
|
from mongoengine.queryset import (OperationError, NotUniqueError,
|
||||||
QuerySet, transform)
|
QuerySet, transform)
|
||||||
@ -294,6 +295,8 @@ class Document(BaseDocument):
|
|||||||
if the condition is satisfied in the current db record.
|
if the condition is satisfied in the current db record.
|
||||||
.. versionchanged:: 0.10
|
.. versionchanged:: 0.10
|
||||||
:class:`OperationError` exception raised if save_condition fails.
|
:class:`OperationError` exception raised if save_condition fails.
|
||||||
|
.. versionchanged:: 0.10.1
|
||||||
|
:class: save_condition failure now raises a `SaveConditionError`
|
||||||
"""
|
"""
|
||||||
signals.pre_save.send(self.__class__, document=self)
|
signals.pre_save.send(self.__class__, document=self)
|
||||||
|
|
||||||
@ -359,8 +362,8 @@ class Document(BaseDocument):
|
|||||||
last_error = collection.update(select_dict, update_query,
|
last_error = collection.update(select_dict, update_query,
|
||||||
upsert=upsert, **write_concern)
|
upsert=upsert, **write_concern)
|
||||||
if not upsert and last_error['nModified'] == 0:
|
if not upsert and last_error['nModified'] == 0:
|
||||||
raise OperationError('Race condition preventing'
|
raise SaveConditionError('Race condition preventing'
|
||||||
' document update detected')
|
' document update detected')
|
||||||
created = is_new_object(last_error)
|
created = is_new_object(last_error)
|
||||||
|
|
||||||
if cascade is None:
|
if cascade is None:
|
||||||
|
@ -41,6 +41,10 @@ class NotUniqueError(OperationError):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class SaveConditionError(OperationError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class FieldDoesNotExist(Exception):
|
class FieldDoesNotExist(Exception):
|
||||||
"""Raised when trying to set a field
|
"""Raised when trying to set a field
|
||||||
not declared in a :class:`~mongoengine.Document`
|
not declared in a :class:`~mongoengine.Document`
|
||||||
|
@ -17,7 +17,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, NotUniqueError,
|
InvalidQueryError, NotUniqueError,
|
||||||
FieldDoesNotExist)
|
FieldDoesNotExist, SaveConditionError)
|
||||||
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
|
||||||
@ -1021,7 +1021,7 @@ class InstanceTest(unittest.TestCase):
|
|||||||
flip(w1)
|
flip(w1)
|
||||||
self.assertTrue(w1.toggle)
|
self.assertTrue(w1.toggle)
|
||||||
self.assertEqual(w1.count, 1)
|
self.assertEqual(w1.count, 1)
|
||||||
self.assertRaises(OperationError,
|
self.assertRaises(SaveConditionError,
|
||||||
w1.save, save_condition={'save_id': UUID(42)})
|
w1.save, save_condition={'save_id': UUID(42)})
|
||||||
w1.reload()
|
w1.reload()
|
||||||
self.assertFalse(w1.toggle)
|
self.assertFalse(w1.toggle)
|
||||||
@ -1050,7 +1050,7 @@ class InstanceTest(unittest.TestCase):
|
|||||||
self.assertEqual(w1.count, 2)
|
self.assertEqual(w1.count, 2)
|
||||||
flip(w2)
|
flip(w2)
|
||||||
flip(w2)
|
flip(w2)
|
||||||
self.assertRaises(OperationError,
|
self.assertRaises(SaveConditionError,
|
||||||
w2.save, save_condition={'save_id': old_id})
|
w2.save, save_condition={'save_id': old_id})
|
||||||
w2.reload()
|
w2.reload()
|
||||||
self.assertFalse(w2.toggle)
|
self.assertFalse(w2.toggle)
|
||||||
@ -1063,7 +1063,7 @@ class InstanceTest(unittest.TestCase):
|
|||||||
self.assertTrue(w1.toggle)
|
self.assertTrue(w1.toggle)
|
||||||
self.assertEqual(w1.count, 3)
|
self.assertEqual(w1.count, 3)
|
||||||
flip(w1)
|
flip(w1)
|
||||||
self.assertRaises(OperationError,
|
self.assertRaises(SaveConditionError,
|
||||||
w1.save, save_condition={'count__gte': w1.count})
|
w1.save, save_condition={'count__gte': w1.count})
|
||||||
w1.reload()
|
w1.reload()
|
||||||
self.assertTrue(w1.toggle)
|
self.assertTrue(w1.toggle)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user