Skip to content

Commit 5735cf4

Browse files
committed
PYTHON-1104 - Fix lastWriteDate parsing.
1 parent 497e316 commit 5735cf4

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

pymongo/ismaster.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def me(self):
143143

144144
@property
145145
def last_write_date(self):
146-
return self._doc.get('lastWriteDate')
146+
return self._doc.get('lastWrite', {}).get('lastWriteDate')
147147

148148
@property
149149
def idle_write_period(self):

test/test_max_staleness.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import datetime
1818
import os
19+
import time
1920
import sys
2021

2122
sys.path[0:0] = [""]
@@ -26,10 +27,12 @@
2627
from pymongo.errors import ConfigurationError, ConnectionFailure
2728
from pymongo.ismaster import IsMaster
2829
from pymongo.server_description import ServerDescription
30+
from pymongo.server_selectors import writable_server_selector
2931
from pymongo.settings import TopologySettings
3032
from pymongo.topology import Topology
31-
from test import unittest
3233

34+
from test import client_context, unittest
35+
from test.utils import rs_or_single_client
3336

3437
# Location of JSON test specifications.
3538
_TEST_PATH = os.path.join(
@@ -110,7 +113,9 @@ def make_server_description(server, hosts):
110113
elif server_type == "Mongos":
111114
ismaster_response['msg'] = 'isdbgrid'
112115

113-
ismaster_response['lastWriteDate'] = make_last_write_date(server)
116+
ismaster_response['lastWrite'] = {
117+
'lastWriteDate': make_last_write_date(server)
118+
}
114119

115120
for field in 'maxWireVersion', 'tags', 'idleWritePeriodMillis':
116121
if field in server:
@@ -235,6 +240,27 @@ def test_max_staleness(self):
235240
"maxStalenessSeconds=1")
236241
self.assertEqual(1, client.read_preference.max_staleness)
237242

243+
@client_context.require_version_min(3, 3, 6) # SERVER-8858
244+
def test_last_write_date(self):
245+
# From max-staleness-tests.rst, "Parse lastWriteDate".
246+
client = rs_or_single_client(heartbeatFrequencyMS=500)
247+
client.pymongo_test.test.insert_one({})
248+
time.sleep(1)
249+
server = client._topology.select_server(writable_server_selector)
250+
last_write = server.description.last_write_date
251+
self.assertTrue(last_write)
252+
client.pymongo_test.test.insert_one({})
253+
time.sleep(1)
254+
server = client._topology.select_server(writable_server_selector)
255+
self.assertGreater(server.description.last_write_date, last_write)
256+
self.assertLess(server.description.last_write_date, last_write + 10)
257+
258+
@client_context.require_version_max(3, 3)
259+
def test_last_write_date_absent(self):
260+
# From max-staleness-tests.rst, "Absent lastWriteDate".
261+
client = rs_or_single_client()
262+
sd = client._topology.select_server(writable_server_selector)
263+
self.assertIsNone(sd.description.last_write_date)
238264

239265
if __name__ == "__main__":
240266
unittest.main()

0 commit comments

Comments
 (0)