From fcbabbe35721669d3d954565a79b1787bffa31bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastien=20G=C3=A9rard?= Date: Tue, 20 Nov 2018 23:56:39 +0100 Subject: [PATCH] Fix but with save(write_concern=None) - introduced in 0.16.1 --- docs/changelog.rst | 5 +++++ mongoengine/document.py | 5 ++++- tests/queryset/queryset.py | 8 ++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 20252039..d9742d6f 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,6 +6,11 @@ Development =========== - (Fill this out as you fix issues and develop your features). +================= +Changes in 0.16.2 +================= +- Fix .save() that fails when called with write_concern=None (regression of 0.16.1) #1958 + ================= Changes in 0.16.1 ================= diff --git a/mongoengine/document.py b/mongoengine/document.py index 53814961..0945a8ed 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -299,7 +299,7 @@ class Document(six.with_metaclass(TopLevelDocumentMetaclass, BaseDocument)): return True def save(self, force_insert=False, validate=True, clean=True, - write_concern={'w': 1}, cascade=None, cascade_kwargs=None, + write_concern=None, cascade=None, cascade_kwargs=None, _refs=None, save_condition=None, signal_kwargs=None, **kwargs): """Save the :class:`~mongoengine.Document` to the database. If the document already exists, it will be updated, otherwise it will be @@ -361,6 +361,9 @@ class Document(six.with_metaclass(TopLevelDocumentMetaclass, BaseDocument)): if validate: self.validate(clean=clean) + if write_concern is None: + write_concern = {'w': 1} + doc = self.to_mongo() created = ('_id' not in doc or self._created or force_insert) diff --git a/tests/queryset/queryset.py b/tests/queryset/queryset.py index f4bc1dcd..9e251af7 100644 --- a/tests/queryset/queryset.py +++ b/tests/queryset/queryset.py @@ -400,13 +400,17 @@ class QuerySetTest(unittest.TestCase): self.Person.drop_collection() write_concern = {"fsync": True} - author = self.Person.objects.create(name='Test User') author.save(write_concern=write_concern) + # Ensure no regression of #1958 + author = self.Person(name='Test User2') + author.save(write_concern=None) # will default to {w: 1} + result = self.Person.objects.update( set__name='Ross', write_concern={"w": 1}) - self.assertEqual(result, 1) + + self.assertEqual(result, 2) result = self.Person.objects.update( set__name='Ross', write_concern={"w": 0}) self.assertEqual(result, None)