Skip to content

Commit 5398e3b

Browse files
aafrecctaarranz
authored andcommitted
Het collection now uses secondary-read-preference
1 parent 4af31ee commit 5398e3b

File tree

4 files changed

+30
-21
lines changed

4 files changed

+30
-21
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ __pycache__
88
coverage.xml
99
*.py[co]
1010
*.egg-info
11+
.venv

odata_server/utils/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,11 @@ def get_collection(
448448
orderby = parse_orderby(qs.get("$orderby", ""))
449449

450450
# Get the results
451-
mongo_collection = db.get_collection(RootEntitySet.mongo_collection)
451+
mongo_collection = db.get_collection(
452+
RootEntitySet.mongo_collection,
453+
).with_options(
454+
read_concern=pymongo.ReadPreference.SECONDARY_PREFERRED,
455+
)
452456
if prefix:
453457
seq_filter = {"Seq": filters.pop("Seq")} if "Seq" in filters else None
454458
pipeline = [

tests/test_flask.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,21 +252,23 @@ def test_get_entity_collection_api_orderby(self):
252252
)
253253
for orderby_expr, expected in test_data:
254254
with self.subTest(orderby=orderby_expr):
255-
mongo.get_collection().find().sort().skip().limit.return_value = iter(
255+
mongo.get_collection().with_options().find().sort().skip().limit.return_value = iter(
256256
()
257257
)
258258
mongo.reset_mock()
259259
response = self.app.get("/Products?$orderby={}".format(orderby_expr))
260-
mongo.get_collection().find().max_time_ms().sort.assert_called_once_with(
260+
mongo.get_collection().with_options().find().max_time_ms().sort.assert_called_once_with(
261261
expected
262262
)
263263
self.assertEqual(response.status_code, 200)
264264

265265
def test_get_entity_collection_api_empty_filter(self):
266-
mongo.get_collection().find().skip().limit.return_value = iter(())
266+
mongo.get_collection().with_options().find().skip().limit.return_value = iter(
267+
()
268+
)
267269
mongo.reset_mock()
268270
response = self.app.get("/Products?$filter=")
269-
mongo.get_collection().find.assert_called_once_with(
271+
mongo.get_collection().with_options().find.assert_called_once_with(
270272
{"uuid": {"$exists": True}}, ANY
271273
)
272274
self.assertEqual(response.status_code, 200)
@@ -279,7 +281,7 @@ def test_get_entity_collection_api_basic_filters(self):
279281
)
280282
for label, filter_expr in test_data:
281283
with self.subTest(msg=label):
282-
mongo.get_collection().find().max_time_ms().skip().limit.return_value = iter(
284+
mongo.get_collection().with_options().find().max_time_ms().skip().limit.return_value = iter(
283285
()
284286
)
285287
response = self.app.get("/Products?$filter={}".format(filter_expr))

tests/test_utils.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,11 @@ def test_process_expand_fields(self):
117117
navprop = edm.NavigationProperty(
118118
{
119119
"Name": prop,
120-
"Type": prop_type
121-
if prop in ("prop1", "prop2")
122-
else "Collection({})".format(prop_type),
120+
"Type": (
121+
prop_type
122+
if prop in ("prop1", "prop2")
123+
else "Collection({})".format(prop_type)
124+
),
123125
}
124126
)
125127
navprop.entity_type = edm.EntityType(
@@ -144,9 +146,9 @@ def test_process_expand_fields(self):
144146
"A": navprop.entity_type.NavigationProperties[0]
145147
}
146148
navprop.entity_type.navproperties["A"].iscollection = False
147-
navprop.entity_type.navproperties[
148-
"A"
149-
].entity_type = entity_set.entity_type
149+
navprop.entity_type.navproperties["A"].entity_type = (
150+
entity_set.entity_type
151+
)
150152
navprop.entity_type.virtual_entities = {"A"}
151153
navprop.iscollection = prop in ("prop3", "prop4")
152154
entity_set.entity_type.navproperties[prop] = navprop
@@ -482,7 +484,7 @@ def test_process_collection_filters(self):
482484
)
483485
def test_get_collection(self, parse_qs):
484486
mongo = unittest.mock.Mock()
485-
mongo.get_collection().find().skip().limit.return_value = iter(
487+
mongo.get_collection().with_options().find().skip().limit.return_value = iter(
486488
(
487489
{
488490
"ID": 1,
@@ -531,7 +533,7 @@ def test_get_collection(self, parse_qs):
531533
)
532534
def test_get_collection_orderby(self, parse_qs):
533535
mongo = unittest.mock.Mock()
534-
mongo.get_collection().find().sort().skip().limit.return_value = iter(
536+
mongo.get_collection().with_options().find().sort().skip().limit.return_value = iter(
535537
(
536538
{
537539
"ID": 1,
@@ -576,15 +578,15 @@ def test_get_collection_orderby(self, parse_qs):
576578
)
577579
def test_get_collection_count(self, parse_qs):
578580
mongo = unittest.mock.Mock()
579-
mongo.get_collection().find().skip().limit.return_value = iter(
581+
mongo.get_collection().with_options().find().skip().limit.return_value = iter(
580582
(
581583
{
582584
"ID": 1,
583585
"uuid": "abc",
584586
},
585587
)
586588
)
587-
mongo.get_collection().count_documents.return_value = 1
589+
mongo.get_collection().with_options().count_documents.return_value = 1
588590
RootEntitySet = edm.EntitySet(
589591
{
590592
"Name": "Products",
@@ -622,7 +624,7 @@ def test_get_collection_count(self, parse_qs):
622624
)
623625
def test_get_collection_mongo_prefix_entity(self, parse_qs):
624626
mongo = unittest.mock.Mock()
625-
mongo.get_collection().aggregate.return_value = iter(
627+
mongo.get_collection().with_options().aggregate.return_value = iter(
626628
(
627629
{
628630
"ID": 1,
@@ -671,7 +673,7 @@ def test_get_collection_mongo_prefix_entity(self, parse_qs):
671673
)
672674
def test_get_collection_mongo_prefix_entity_orderby(self, parse_qs):
673675
mongo = unittest.mock.Mock()
674-
mongo.get_collection().aggregate.return_value = iter(
676+
mongo.get_collection().with_options().aggregate.return_value = iter(
675677
(
676678
{
677679
"ID": 1,
@@ -720,7 +722,7 @@ def test_get_collection_mongo_prefix_entity_orderby(self, parse_qs):
720722
)
721723
def test_get_collection_mongo_prefix_entity_seq_filter(self, parse_qs):
722724
mongo = unittest.mock.Mock()
723-
mongo.get_collection().aggregate.return_value = iter(
725+
mongo.get_collection().with_options().aggregate.return_value = iter(
724726
(
725727
{
726728
"ID": 1,
@@ -765,7 +767,7 @@ def test_get_collection_mongo_prefix_entity_seq_filter(self, parse_qs):
765767
)
766768
def test_get_collection_mongo_prefix_entity_count(self, parse_qs):
767769
mongo = unittest.mock.Mock()
768-
mongo.get_collection().aggregate.side_effect = (
770+
mongo.get_collection().with_options().aggregate.side_effect = (
769771
iter(
770772
(
771773
{
@@ -813,7 +815,7 @@ def test_get_collection_mongo_prefix_entity_count(self, parse_qs):
813815
)
814816
def test_get_collection_mongo_prefix_collection(self, parse_qs):
815817
mongo = unittest.mock.Mock()
816-
mongo.get_collection().aggregate.return_value = iter(
818+
mongo.get_collection().with_options().aggregate.return_value = iter(
817819
(
818820
{
819821
"ID": 1,

0 commit comments

Comments
 (0)