PYTHON-1371 - The tailable cursor cannot get document through __getitem__(index) on MongoDB v3.4

Fix issue and add test case.
This commit is contained in:
caosiyang 2017-09-07 02:06:21 +08:00 committed by Shane Harvey
parent 74605b73f6
commit db57f671dc
3 changed files with 22 additions and 0 deletions

View File

@ -79,3 +79,4 @@ The following is a list of people who have contributed to
- Len Buckens (buckensl)
- ultrabug
- Shane Harvey (ShaneHarvey)
- Cao Siyang (caosiyang)

View File

@ -590,6 +590,7 @@ class Cursor(object):
clone = self.clone()
clone.skip(index + self.__skip)
clone.limit(-1) # use a hard limit
clone.__query_flags &= ~CursorType.TAILABLE_AWAIT # PYTHON-1371
for doc in clone:
return doc
raise IndexError("no such item for Cursor instance")

View File

@ -1133,6 +1133,26 @@ class TestCursor(IntegrationTest):
self.assertEqual(3, db.test.count())
# __getitem__(index)
for cursor in (db.test.find(cursor_type=CursorType.TAILABLE),
db.test.find(cursor_type=CursorType.TAILABLE_AWAIT)):
self.assertEqual(4, cursor[0]["x"])
self.assertEqual(5, cursor[1]["x"])
self.assertEqual(6, cursor[2]["x"])
cursor.rewind()
self.assertEqual([4], [doc["x"] for doc in cursor[0:1]])
cursor.rewind()
self.assertEqual([5], [doc["x"] for doc in cursor[1:2]])
cursor.rewind()
self.assertEqual([6], [doc["x"] for doc in cursor[2:3]])
cursor.rewind()
self.assertEqual([4, 5], [doc["x"] for doc in cursor[0:2]])
cursor.rewind()
self.assertEqual([5, 6], [doc["x"] for doc in cursor[1:3]])
cursor.rewind()
self.assertEqual([4, 5, 6], [doc["x"] for doc in cursor[0:3]])
def test_distinct(self):
self.db.drop_collection("test")