Clean save_condition exception implementation and related tests

This commit is contained in:
Emmanuel Leblond 2015-06-08 18:40:28 +02:00
parent 9c917c3bd3
commit 4034ab4182
2 changed files with 10 additions and 7 deletions

View File

@ -351,7 +351,7 @@ class Document(BaseDocument):
upsert = save_condition is None
last_error = collection.update(select_dict, update_query,
upsert=upsert, **write_concern)
if save_condition is not None and last_error['nModified'] == 0:
if not upsert and last_error['nModified'] == 0:
raise OperationError('Race condition preventing'
' document update detected')
created = is_new_object(last_error)

View File

@ -958,8 +958,9 @@ class InstanceTest(unittest.TestCase):
flip(w1)
self.assertTrue(w1.toggle)
self.assertEqual(w1.count, 1)
self.assertRaises(OperationError,
w1.save, save_condition={'save_id': UUID(42)})
self.assertRaisesRegexp(OperationError,
"Race condition preventing document update detected",
w1.save, save_condition={'save_id': UUID(42)})
w1.reload()
self.assertFalse(w1.toggle)
self.assertEqual(w1.count, 0)
@ -987,8 +988,9 @@ class InstanceTest(unittest.TestCase):
self.assertEqual(w1.count, 2)
flip(w2)
flip(w2)
self.assertRaises(OperationError,
w2.save, save_condition={'save_id': old_id})
self.assertRaisesRegexp(OperationError,
"Race condition preventing document update detected",
w2.save, save_condition={'save_id': old_id})
w2.reload()
self.assertFalse(w2.toggle)
self.assertEqual(w2.count, 2)
@ -1000,8 +1002,9 @@ class InstanceTest(unittest.TestCase):
self.assertTrue(w1.toggle)
self.assertEqual(w1.count, 3)
flip(w1)
self.assertRaises(OperationError,
w1.save, save_condition={'count__gte': w1.count})
self.assertRaisesRegexp(OperationError,
"Race condition preventing document update detected",
w1.save, save_condition={'count__gte': w1.count})
w1.reload()
self.assertTrue(w1.toggle)
self.assertEqual(w1.count, 3)