Skip to content

Commit b172a1f

Browse files
committed
PYTHON-913 - Suppress read preference warning under MongoClient.
1 parent 8e9bd73 commit b172a1f

File tree

6 files changed

+40
-15
lines changed

6 files changed

+40
-15
lines changed

pymongo/database.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ def _command(self, command, value=1,
327327

328328
# Warn if must_use_master will override read_preference.
329329
if (extra_opts['read_preference'] != ReadPreference.PRIMARY and
330-
extra_opts['_must_use_master']):
330+
extra_opts['_must_use_master'] and self.connection._rs_client):
331331
warnings.warn("%s does not support %s read preference "
332332
"and will be routed to the primary instead." %
333333
(command_name,

pymongo/master_slave_connection.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@
4242

4343

4444
class MasterSlaveConnection(BaseObject):
45+
46+
_rs_client = True
47+
4548
def __init__(self, master, slaves=[], document_class=dict, tz_aware=False):
4649
"""Create a new Master-Slave connection.
4750

pymongo/mongo_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class MongoClient(common.BaseObject):
8787

8888
HOST = "localhost"
8989
PORT = 27017
90+
_rs_client = False
9091

9192
def __init__(self, host=None, port=None, max_pool_size=100,
9293
document_class=dict, tz_aware=False, _connect=True,

pymongo/mongo_replica_set_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ class MongoReplicaSetClient(common.BaseObject):
433433

434434
# For tests.
435435
_refresh_timeout_sec = 5
436+
_rs_client = True
436437

437438
def __init__(self, hosts_or_uri=None, max_pool_size=100,
438439
document_class=dict, tz_aware=False, _connect=True, **kwargs):

test/test_database.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -694,20 +694,6 @@ def test_mongos_response(self):
694694
else:
695695
self.fail('OperationFailure not raised')
696696

697-
def test_command_read_pref_warning(self):
698-
ctx = catch_warnings()
699-
try:
700-
warnings.simplefilter("error", UserWarning)
701-
self.assertRaises(UserWarning, self.client.pymongo_test.command,
702-
'ping', read_preference=ReadPreference.SECONDARY)
703-
try:
704-
self.client.pymongo_test.command('dbStats',
705-
read_preference=ReadPreference.SECONDARY_PREFERRED)
706-
except UserWarning:
707-
self.fail("Shouldn't have raised UserWarning.")
708-
finally:
709-
ctx.exit()
710-
711697
def test_command_max_time_ms(self):
712698
if not version.at_least(self.client, (2, 5, 3, -1)):
713699
raise SkipTest("MaxTimeMS requires MongoDB >= 2.5.3")

test/test_read_preferences.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
from bson.son import SON
2626
from pymongo.cursor import _QUERY_OPTIONS
27+
from pymongo.master_slave_connection import MasterSlaveConnection
28+
from pymongo.mongo_client import MongoClient
2729
from pymongo.mongo_replica_set_client import MongoReplicaSetClient
2830
from pymongo.read_preferences import (ReadPreference, modes, MovingAverage,
2931
secondary_ok_commands)
@@ -278,6 +280,38 @@ def _test_fn(self, obedient, fn):
278280
"Some members not used for NEAREST: %s" % (
279281
unused))
280282

283+
def test_command_read_pref_warning(self):
284+
ctx = catch_warnings()
285+
try:
286+
warnings.simplefilter("error", UserWarning)
287+
warnings.simplefilter("ignore", DeprecationWarning)
288+
self.assertRaises(UserWarning, self.c.pymongo_test.command,
289+
'ping', read_preference=ReadPreference.SECONDARY)
290+
try:
291+
self.c.pymongo_test.command('dbStats',
292+
read_preference=ReadPreference.SECONDARY_PREFERRED)
293+
except UserWarning:
294+
self.fail("Shouldn't have raised UserWarning.")
295+
296+
primary = MongoClient(host, port)
297+
try:
298+
primary.pymongo_test.command('ping',
299+
read_preference=ReadPreference.SECONDARY_PREFERRED)
300+
except UserWarning:
301+
self.fail("Shouldn't have raised UserWarning.")
302+
303+
secondary = MongoClient(*next(iter(self.c.secondaries)))
304+
msclient = MasterSlaveConnection(primary, [secondary])
305+
self.assertRaises(UserWarning, msclient.pymongo_test.command,
306+
'ping', read_preference=ReadPreference.SECONDARY)
307+
try:
308+
msclient.pymongo_test.command('dbStats',
309+
read_preference=ReadPreference.SECONDARY_PREFERRED)
310+
except UserWarning:
311+
self.fail("Shouldn't have raised UserWarning.")
312+
finally:
313+
ctx.exit()
314+
281315
def test_command(self):
282316
# Test generic 'command' method. Some commands obey read preference,
283317
# most don't.

0 commit comments

Comments
 (0)