Allow setting read_concern
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user