From 1698f398eb11a85633a1aa3def93386322d648f3 Mon Sep 17 00:00:00 2001 From: Agustin Barto Date: Wed, 20 May 2020 18:56:13 -0300 Subject: [PATCH 1/3] Add _read_concern to copied properties. Add read_concern to aggregate. Add test to check the read_concern and read_preference values are kept after cloning. --- mongoengine/queryset/base.py | 6 ++++-- tests/queryset/test_queryset.py | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/mongoengine/queryset/base.py b/mongoengine/queryset/base.py index 39c44b29..b70fae64 100644 --- a/mongoengine/queryset/base.py +++ b/mongoengine/queryset/base.py @@ -789,6 +789,7 @@ class BaseQuerySet: "_snapshot", "_timeout", "_read_preference", + "_read_concern", "_iter", "_scalar", "_as_pymongo", @@ -1311,10 +1312,11 @@ class BaseQuerySet: final_pipeline = initial_pipeline + user_pipeline collection = self._collection - if self._read_preference is not None: + if self._read_preference is not None or self._read_concern is not None: collection = self._collection.with_options( - read_preference=self._read_preference + read_preference=self._read_preference, read_concern=self._read_concern ) + return collection.aggregate(final_pipeline, cursor={}, **kwargs) # JS functionality diff --git a/tests/queryset/test_queryset.py b/tests/queryset/test_queryset.py index 6b6000c9..88f51104 100644 --- a/tests/queryset/test_queryset.py +++ b/tests/queryset/test_queryset.py @@ -4021,6 +4021,32 @@ class TestQueryset(unittest.TestCase): Number.drop_collection() + def test_clone_retains_settings(self): + """Ensure that cloning retains the read_preference and read_concern + """ + + class Number(Document): + n = IntField() + + Number.drop_collection() + + qs = Number.objects + qs_clone = qs.clone() + assert qs._read_preference == qs_clone._read_preference + assert qs._read_concern == qs_clone._read_concern + + qs = Number.objects.read_preference(ReadPreference.PRIMARY_PREFERRED) + qs_clone = qs.clone() + assert qs._read_preference == ReadPreference.PRIMARY_PREFERRED + assert qs._read_preference == qs_clone._read_preference + + qs = Number.objects.read_concern({'level': 'majority'}) + qs_clone = qs.clone() + assert qs._read_concern.document == {'level': 'majority'} + assert qs._read_concern == qs_clone._read_concern + + Number.drop_collection() + def test_using(self): """Ensure that switching databases for a queryset is possible """ From 31498bd7dd1f7316a766aae7f511cd5e4ac4accd Mon Sep 17 00:00:00 2001 From: Agustin Barto Date: Wed, 20 May 2020 18:58:18 -0300 Subject: [PATCH 2/3] Update changelog --- docs/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 2dd5bcd5..acf20195 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,6 +6,7 @@ Changelog Development =========== - (Fill this out as you fix issues and develop your features). +- Fixed a bug that made the queryset drop the read_preference after clone(). Changes in 0.20.0 ================= From 49f9bca23b081c69ba6a8e0c26102f8cd677d778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastien=20G=C3=A9rard?= Date: Sat, 23 May 2020 23:08:56 +0200 Subject: [PATCH 3/3] fix black formatting --- tests/queryset/test_queryset.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/queryset/test_queryset.py b/tests/queryset/test_queryset.py index 88f51104..4900f3a3 100644 --- a/tests/queryset/test_queryset.py +++ b/tests/queryset/test_queryset.py @@ -4040,9 +4040,9 @@ class TestQueryset(unittest.TestCase): assert qs._read_preference == ReadPreference.PRIMARY_PREFERRED assert qs._read_preference == qs_clone._read_preference - qs = Number.objects.read_concern({'level': 'majority'}) + qs = Number.objects.read_concern({"level": "majority"}) qs_clone = qs.clone() - assert qs._read_concern.document == {'level': 'majority'} + assert qs._read_concern.document == {"level": "majority"} assert qs._read_concern == qs_clone._read_concern Number.drop_collection()