Basic support for min and maxWireVersion PYTHON-587
This commit is contained in:
parent
b62750971c
commit
ce7ce38ffd
@ -27,6 +27,8 @@
|
||||
.. autoattribute:: tz_aware
|
||||
.. autoattribute:: max_bson_size
|
||||
.. autoattribute:: max_message_size
|
||||
.. autoattribute:: min_wire_version
|
||||
.. autoattribute:: max_wire_version
|
||||
.. autoattribute:: read_preference
|
||||
.. autoattribute:: tag_sets
|
||||
.. autoattribute:: secondary_acceptable_latency_ms
|
||||
|
||||
@ -27,6 +27,8 @@
|
||||
.. autoattribute:: tz_aware
|
||||
.. autoattribute:: max_bson_size
|
||||
.. autoattribute:: max_message_size
|
||||
.. autoattribute:: min_wire_version
|
||||
.. autoattribute:: max_wire_version
|
||||
.. autoattribute:: read_preference
|
||||
.. autoattribute:: tag_sets
|
||||
.. autoattribute:: secondary_acceptable_latency_ms
|
||||
|
||||
@ -27,6 +27,8 @@
|
||||
.. autoattribute:: tz_aware
|
||||
.. autoattribute:: max_bson_size
|
||||
.. autoattribute:: max_message_size
|
||||
.. autoattribute:: min_wire_version
|
||||
.. autoattribute:: max_wire_version
|
||||
.. autoattribute:: auto_start_request
|
||||
.. autoattribute:: read_preference
|
||||
.. autoattribute:: tag_sets
|
||||
|
||||
@ -27,6 +27,8 @@
|
||||
.. autoattribute:: tz_aware
|
||||
.. autoattribute:: max_bson_size
|
||||
.. autoattribute:: max_message_size
|
||||
.. autoattribute:: min_wire_version
|
||||
.. autoattribute:: max_wire_version
|
||||
.. autoattribute:: auto_start_request
|
||||
.. autoattribute:: read_preference
|
||||
.. autoattribute:: tag_sets
|
||||
|
||||
@ -39,6 +39,8 @@ if sys.platform.startswith('java'):
|
||||
# Defaults until we connect to a server and get updated limits.
|
||||
MAX_BSON_SIZE = 16 * (1024 ** 2)
|
||||
MAX_MESSAGE_SIZE = 2 * MAX_BSON_SIZE
|
||||
MIN_WIRE_VERSION = 0
|
||||
MAX_WIRE_VERSION = 0
|
||||
|
||||
|
||||
def raise_config_error(key, dummy):
|
||||
|
||||
@ -85,6 +85,9 @@ class MongoClient(common.BaseObject):
|
||||
|
||||
__max_bson_size = common.MAX_BSON_SIZE
|
||||
__max_message_size = common.MAX_MESSAGE_SIZE
|
||||
__min_wire_version = common.MIN_WIRE_VERSION
|
||||
# TODO: write commands with _connect=False
|
||||
__max_wire_version = common.MAX_WIRE_VERSION
|
||||
|
||||
def __init__(self, host=None, port=None, max_pool_size=100,
|
||||
document_class=dict, tz_aware=False, _connect=True,
|
||||
@ -595,6 +598,26 @@ class MongoClient(common.BaseObject):
|
||||
"""
|
||||
return self.__max_message_size
|
||||
|
||||
@property
|
||||
def min_wire_version(self):
|
||||
"""The minWireVersion reported by the server.
|
||||
|
||||
Returns ``0`` when connected to server versions prior to MongoDB 2.6.
|
||||
|
||||
.. versionadded:: 2.7
|
||||
"""
|
||||
return self.__min_wire_version
|
||||
|
||||
@property
|
||||
def max_wire_version(self):
|
||||
"""The maxWireVersion reported by the server.
|
||||
|
||||
Returns ``0`` when connected to server versions prior to MongoDB 2.6.
|
||||
|
||||
.. versionadded:: 2.7
|
||||
"""
|
||||
return self.__max_wire_version
|
||||
|
||||
def __simple_command(self, sock_info, dbname, spec):
|
||||
"""Send a command to the server.
|
||||
"""
|
||||
@ -639,6 +662,10 @@ class MongoClient(common.BaseObject):
|
||||
self.__max_bson_size = response["maxBsonObjectSize"]
|
||||
if "maxMessageSizeBytes" in response:
|
||||
self.__max_message_size = response["maxMessageSizeBytes"]
|
||||
if "minWireVersion" in response:
|
||||
self.__min_wire_version = response["minWireVersion"]
|
||||
if "maxWireVersion" in response:
|
||||
self.__max_wire_version = response["maxWireVersion"]
|
||||
|
||||
# Replica Set?
|
||||
if not self.__direct:
|
||||
|
||||
@ -422,6 +422,10 @@ class Member(object):
|
||||
'maxBsonObjectSize', common.MAX_BSON_SIZE)
|
||||
self.max_message_size = ismaster_response.get(
|
||||
'maxMessageSizeBytes', 2 * self.max_bson_size)
|
||||
self.min_wire_version = ismaster_response.get('minWireVersion',
|
||||
common.MIN_WIRE_VERSION)
|
||||
self.max_wire_version = ismaster_response.get('maxWireVersion',
|
||||
common.MAX_WIRE_VERSION)
|
||||
|
||||
def clone_with(self, ismaster_response, ping_time_sample):
|
||||
"""Get a clone updated with ismaster response and a single ping time.
|
||||
@ -1017,6 +1021,32 @@ class MongoReplicaSetClient(common.BaseObject):
|
||||
return rs_state.primary_member.max_message_size
|
||||
return common.MAX_MESSAGE_SIZE
|
||||
|
||||
@property
|
||||
def min_wire_version(self):
|
||||
"""The minWireVersion reported by the server.
|
||||
|
||||
Returns ``0`` when connected to server versions prior to MongoDB 2.6.
|
||||
|
||||
.. versionadded:: 2.7
|
||||
"""
|
||||
rs_state = self.__rs_state
|
||||
if rs_state.primary_member:
|
||||
return rs_state.primary_member.min_wire_version
|
||||
return common.MIN_WIRE_VERSION
|
||||
|
||||
@property
|
||||
def max_wire_version(self):
|
||||
"""The maxWireVersion reported by the server.
|
||||
|
||||
Returns ``0`` when connected to server versions prior to MongoDB 2.6.
|
||||
|
||||
.. versionadded:: 2.7
|
||||
"""
|
||||
rs_state = self.__rs_state
|
||||
if rs_state.primary_member:
|
||||
return rs_state.primary_member.max_wire_version
|
||||
return common.MAX_WIRE_VERSION
|
||||
|
||||
@property
|
||||
def auto_start_request(self):
|
||||
"""Is auto_start_request enabled?
|
||||
|
||||
@ -97,6 +97,8 @@ class TestClient(unittest.TestCase, TestRequestMixin):
|
||||
self.assertEqual(dict, c.get_document_class())
|
||||
self.assertIsInstance(c.tz_aware, bool)
|
||||
self.assertIsInstance(c.max_bson_size, int)
|
||||
self.assertIsInstance(c.min_wire_version, int)
|
||||
self.assertIsInstance(c.max_wire_version, int)
|
||||
self.assertEqual(None, c.host)
|
||||
self.assertEqual(None, c.port)
|
||||
|
||||
@ -104,6 +106,12 @@ class TestClient(unittest.TestCase, TestRequestMixin):
|
||||
self.assertEqual(host, c.host)
|
||||
self.assertEqual(port, c.port)
|
||||
|
||||
if version.at_least(c, (2, 5, 4, -1)):
|
||||
self.assertTrue(c.max_wire_version > 0)
|
||||
else:
|
||||
self.assertEqual(c.max_wire_version, 0)
|
||||
self.assertTrue(c.min_wire_version >= 0)
|
||||
|
||||
bad_host = "somedomainthatdoesntexist.org"
|
||||
c = MongoClient(bad_host, port, connectTimeoutMS=1, _connect=False)
|
||||
self.assertRaises(ConnectionFailure, c.pymongo_test.test.find_one)
|
||||
|
||||
@ -129,6 +129,8 @@ class TestReplicaSetClient(TestReplicaSetClientBase, TestRequestMixin):
|
||||
self.assertIsInstance(c.auto_start_request, bool)
|
||||
self.assertIsInstance(c.tz_aware, bool)
|
||||
self.assertIsInstance(c.max_bson_size, int)
|
||||
self.assertIsInstance(c.min_wire_version, int)
|
||||
self.assertIsInstance(c.max_wire_version, int)
|
||||
self.assertIsInstance(c.seeds, set)
|
||||
self.assertIsInstance(c.hosts, frozenset)
|
||||
self.assertIsInstance(c.arbiters, frozenset)
|
||||
@ -140,6 +142,12 @@ class TestReplicaSetClient(TestReplicaSetClientBase, TestRequestMixin):
|
||||
self.assertTrue(c.primary)
|
||||
self.assertTrue(c.secondaries)
|
||||
|
||||
if version.at_least(c, (2, 5, 4, -1)):
|
||||
self.assertTrue(c.max_wire_version > 0)
|
||||
else:
|
||||
self.assertEqual(c.max_wire_version, 0)
|
||||
self.assertTrue(c.min_wire_version >= 0)
|
||||
|
||||
c = self._get_client(_connect=False)
|
||||
c.pymongo_test.test.update({}, {}) # Auto-connect for write.
|
||||
self.assertTrue(c.primary)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user