From 4034ab41829ba7da18af5dc2e8cc1544dbff8614 Mon Sep 17 00:00:00 2001 From: Emmanuel Leblond Date: Mon, 8 Jun 2015 18:40:28 +0200 Subject: [PATCH] Clean save_condition exception implementation and related tests --- mongoengine/document.py | 2 +- tests/document/instance.py | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/mongoengine/document.py b/mongoengine/document.py index f798780e..eedd01d2 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -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) diff --git a/tests/document/instance.py b/tests/document/instance.py index 3ccabacd..29692c20 100644 --- a/tests/document/instance.py +++ b/tests/document/instance.py @@ -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)