diff --git a/doc/contributors.rst b/doc/contributors.rst index bc60133f4..6c0b59a6e 100644 --- a/doc/contributors.rst +++ b/doc/contributors.rst @@ -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) diff --git a/pymongo/cursor.py b/pymongo/cursor.py index 137f71e19..bfc229a08 100644 --- a/pymongo/cursor.py +++ b/pymongo/cursor.py @@ -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") diff --git a/test/test_cursor.py b/test/test_cursor.py index f11407d8d..520e8261c 100644 --- a/test/test_cursor.py +++ b/test/test_cursor.py @@ -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")