Allow setting read_concern

This commit is contained in:
Agustin
2020-01-24 13:11:07 -03:00
parent b2c3acd025
commit 8e17e42e26
3 changed files with 82 additions and 6 deletions

View File

@@ -7,6 +7,7 @@ from decimal import Decimal
from bson import DBRef, ObjectId
import pymongo
from pymongo.read_concern import ReadConcern
from pymongo.read_preferences import ReadPreference
from pymongo.results import UpdateResult
import pytest
@@ -4658,6 +4659,54 @@ class TestQueryset(unittest.TestCase):
)
assert_read_pref(bars, ReadPreference.SECONDARY_PREFERRED)
def test_read_concern(self):
class Bar(Document):
txt = StringField()
meta = {"indexes": ["txt"]}
Bar.drop_collection()
bar = Bar.objects.create(txt="xyz")
bars = list(Bar.objects.read_concern(None))
assert bars == [bar]
bars = Bar.objects.read_concern(ReadConcern(level='local'))
assert bars._read_concern == ReadConcern(level='local')
assert (
bars._cursor.collection.read_concern
== ReadConcern(level='local')
)
# Make sure that `.read_concern(...)` does accept string values.
with pytest.raises(TypeError):
Bar.objects.read_concern('local')
def assert_read_concern(qs, expected_read_concern):
assert qs._read_concern == expected_read_concern
assert qs._cursor.collection.read_concern == expected_read_concern
# Make sure read concern is respected after a `.skip(...)`.
bars = Bar.objects.skip(1).read_concern(ReadConcern('majority'))
assert_read_concern(bars, ReadConcern('majority'))
# Make sure read concern is respected after a `.limit(...)`.
bars = Bar.objects.limit(1).read_concern(ReadConcern('majority'))
assert_read_concern(bars, ReadConcern('majority'))
# Make sure read concern is respected after an `.order_by(...)`.
bars = Bar.objects.order_by("txt").read_concern(
ReadConcern('majority')
)
assert_read_concern(bars, ReadConcern('majority'))
# Make sure read concern is respected after a `.hint(...)`.
bars = Bar.objects.hint([("txt", 1)]).read_concern(
ReadConcern('majority')
)
assert_read_concern(bars, ReadConcern('majority'))
def test_json_simple(self):
class Embedded(EmbeddedDocument):
string = StringField()