Refty / mongo-thingy

:leaves: Powerful schema-less ODM for MongoDB and Python (sync + async)
https://mongo-thingy.readthedocs.io
MIT License
68 stars 12 forks source link

PyMongo 3.6.0 support #15

Closed ramnes closed 6 years ago

ramnes commented 6 years ago

PyMongo 3.6.0 breaks several features of Mongo-Thingy:

============================================================================================== test session starts ===============================================================================================
platform linux -- Python 3.4.6, pytest-3.0.7, py-1.4.34, pluggy-0.4.0 -- /home/ramnes/mm/mongo-thingy/.venv/bin/python3.4
cachedir: .cache
rootdir: /home/ramnes/mm/mongo-thingy, inifile: setup.cfg
plugins: cov-2.4.0
collected 40 items 

tests/__init__.py::test_thingy_database PASSED
tests/__init__.py::test_thingy_collection PASSED
tests/__init__.py::test_thingy_names PASSED
tests/__init__.py::test_thingy_database_name PASSED
tests/__init__.py::test_thingy_collection_name PASSED
tests/__init__.py::test_thingy_database_from_collection PASSED
tests/__init__.py::test_thingy_collection_from_database PASSED
tests/__init__.py::test_thingy_database_from_name PASSED
tests/__init__.py::test_thingy_collection_from_name PASSED
tests/__init__.py::test_thingy_add_index PASSED
tests/__init__.py::test_thingy_count PASSED
tests/__init__.py::test_thingy_connect_disconnect[disconnect0-connect0] PASSED
tests/__init__.py::test_thingy_connect_disconnect[disconnect0-connect1] PASSED
tests/__init__.py::test_thingy_connect_disconnect[disconnect1-connect0] PASSED
tests/__init__.py::test_thingy_connect_disconnect[disconnect1-connect1] PASSED
tests/__init__.py::test_thingy_create_index PASSED
tests/__init__.py::test_thingy_create_indexes PASSED
tests/__init__.py::test_thingy_distinct PASSED
tests/__init__.py::test_thingy_find PASSED
tests/__init__.py::test_thingy_find_one PASSED
tests/__init__.py::test_thingy_find_one_and_replace PASSED
tests/__init__.py::test_thingy_id PASSED
tests/__init__.py::test_thingy_save PASSED
tests/__init__.py::test_thingy_save_force_insert PASSED
tests/__init__.py::test_thingy_delete PASSED
tests/__init__.py::test_create_indexes PASSED
tests/__init__.py::test_github_issue_6 PASSED
tests/cursor.py::test_cursor_bind PASSED
tests/cursor.py::test_cursor_getitem FAILED
tests/cursor.py::test_cursor_next PASSED
tests/cursor.py::test_cursor_view PASSED
tests/versioned.py::test_version_save PASSED
tests/versioned.py::test_version_indexes PASSED
tests/versioned.py::test_versioned_get_revisions FAILED
tests/versioned.py::test_versioned_author FAILED
tests/versioned.py::test_versioned_version PASSED
tests/versioned.py::test_versioned_revisions FAILED
tests/versioned.py::test_versioned_revisions_operation FAILED
tests/versioned.py::test_versioned_versioned PASSED
tests/versioned.py::test_versioned_revert FAILED

----------- coverage: platform linux, python 3.4.6-final-0 -----------
Name                        Stmts   Miss  Cover   Missing
---------------------------------------------------------
mongo_thingy/__init__.py       99      0   100%
mongo_thingy/cursor.py         26      1    96%   16
mongo_thingy/versioned.py      59      5    92%   35, 85-89
---------------------------------------------------------
TOTAL                         184      6    97%

FAIL Required test coverage of 100% not reached. Total coverage: 96.74%

==================================================================================================== FAILURES ====================================================================================================
______________________________________________________________________________________________ test_cursor_getitem _______________________________________________________________________________________________

collection = Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_cursor_getitem')

    def test_cursor_getitem(collection):
        class Foo(Thingy):
            _collection = collection

        collection.insert_many([{"bar": "baz"},
                                {"bar": "qux"}])
        cursor = Cursor(Foo, collection)

>       result = cursor[0]

Foo        = <class 'tests.cursor.test_cursor_getitem.<locals>.Foo'>
collection = Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_cursor_getitem')
cursor     = <mongo_thingy.cursor.Cursor object at 0x7ff86322f780>

tests/cursor.py:23: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
mongo_thingy/cursor.py:15: in __getitem__
    document = super(Cursor, self).__getitem__(index)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:607: in __getitem__
    clone = self.clone()
.venv/lib/python3.4/site-packages/pymongo/cursor.py:268: in clone
    return self._clone(True)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:276: in _clone
    base = self._clone_base(None)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <mongo_thingy.cursor.Cursor object at 0x7ff86322f780>, session = None

    def _clone_base(self, session):
        """Creates an empty Cursor object for information to be copied into.
            """
>       return self.__class__(self.__collection, session=session)
E       TypeError: __init__() missing 1 required positional argument: 'collection'

self       = <mongo_thingy.cursor.Cursor object at 0x7ff86322f780>
session    = None

.venv/lib/python3.4/site-packages/pymongo/cursor.py:293: TypeError
---------------------------------------------------------------------------------------------- Captured stderr call ----------------------------------------------------------------------------------------------
Exception ignored in: <bound method Cursor.__del__ of <mongo_thingy.cursor.Cursor object at 0x7ff86322f630>>
Traceback (most recent call last):
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 241, in __del__
    self.__die()
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 298, in __die
    already_killed = self.__killed
AttributeError: 'Cursor' object has no attribute '_Cursor__killed'
__________________________________________________________________________________________ test_versioned_get_revisions __________________________________________________________________________________________

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>

    def test_versioned_get_revisions(TestVersionedThingy):
        thingy = TestVersionedThingy({"bar": "baz"}).save()
        cursor = thingy.get_revisions()
        assert isinstance(cursor, Cursor)

>       version = cursor[0]

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>
cursor     = <mongo_thingy.versioned.RevisionCursor object at 0x7ff863c5d390>
thingy     = TestVersionedThingy({'bar': 'baz', '_id': ObjectId('5a86cbcd08255411f3cce174')})

tests/versioned.py:22: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
mongo_thingy/versioned.py:18: in __getitem__
    return super(RevisionCursor, self).__getitem__(index)
mongo_thingy/cursor.py:15: in __getitem__
    document = super(Cursor, self).__getitem__(index)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:607: in __getitem__
    clone = self.clone()
.venv/lib/python3.4/site-packages/pymongo/cursor.py:268: in clone
    return self._clone(True)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:276: in _clone
    base = self._clone_base(None)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:293: in _clone_base
    return self.__class__(self.__collection, session=session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <mongo_thingy.versioned.RevisionCursor object at 0x7ff863c5d1d0>
args = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),), kwargs = {'session': None}

    def __init__(self, *args, **kwargs):
        self.thingy = kwargs.pop("thingy", None)
>       super(RevisionCursor, self).__init__(*args, **kwargs)
E       TypeError: __init__() missing 1 required positional argument: 'collection'

__class__  = <class 'mongo_thingy.versioned.RevisionCursor'>
args       = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),)
kwargs     = {'session': None}
self       = <mongo_thingy.versioned.RevisionCursor object at 0x7ff863c5d1d0>

mongo_thingy/versioned.py:13: TypeError
_____________________________________________________________________________________________ test_versioned_author ______________________________________________________________________________________________

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>

    def test_versioned_author(TestVersionedThingy):
        thingy = TestVersionedThingy({"bar": "baz"}).save()
>       assert thingy.revisions[0].author is None

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>
thingy     = TestVersionedThingy({'bar': 'baz', '_id': ObjectId('5a86cbcd08255411f3cce177')})

tests/versioned.py:29: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
mongo_thingy/versioned.py:18: in __getitem__
    return super(RevisionCursor, self).__getitem__(index)
mongo_thingy/cursor.py:15: in __getitem__
    document = super(Cursor, self).__getitem__(index)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:607: in __getitem__
    clone = self.clone()
.venv/lib/python3.4/site-packages/pymongo/cursor.py:268: in clone
    return self._clone(True)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:276: in _clone
    base = self._clone_base(None)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:293: in _clone_base
    return self.__class__(self.__collection, session=session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <mongo_thingy.versioned.RevisionCursor object at 0x7ff864330400>
args = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),), kwargs = {'session': None}

    def __init__(self, *args, **kwargs):
        self.thingy = kwargs.pop("thingy", None)
>       super(RevisionCursor, self).__init__(*args, **kwargs)
E       TypeError: __init__() missing 1 required positional argument: 'collection'

__class__  = <class 'mongo_thingy.versioned.RevisionCursor'>
args       = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),)
kwargs     = {'session': None}
self       = <mongo_thingy.versioned.RevisionCursor object at 0x7ff864330400>

mongo_thingy/versioned.py:13: TypeError
____________________________________________________________________________________________ test_versioned_revisions ____________________________________________________________________________________________

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>

    def test_versioned_revisions(TestVersionedThingy):
        thingy = TestVersionedThingy({"bar": "baz"}).save()
        thingy.bar = "qux"
        thingy.save()

>       assert thingy.revisions[0].document.get("bar") == "baz"

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>
thingy     = TestVersionedThingy({'bar': 'qux', '_id': ObjectId('5a86cbce08255411f3cce17d')})

tests/versioned.py:49: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
mongo_thingy/versioned.py:18: in __getitem__
    return super(RevisionCursor, self).__getitem__(index)
mongo_thingy/cursor.py:15: in __getitem__
    document = super(Cursor, self).__getitem__(index)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:607: in __getitem__
    clone = self.clone()
.venv/lib/python3.4/site-packages/pymongo/cursor.py:268: in clone
    return self._clone(True)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:276: in _clone
    base = self._clone_base(None)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:293: in _clone_base
    return self.__class__(self.__collection, session=session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <mongo_thingy.versioned.RevisionCursor object at 0x7ff863bf5588>
args = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),), kwargs = {'session': None}

    def __init__(self, *args, **kwargs):
        self.thingy = kwargs.pop("thingy", None)
>       super(RevisionCursor, self).__init__(*args, **kwargs)
E       TypeError: __init__() missing 1 required positional argument: 'collection'

__class__  = <class 'mongo_thingy.versioned.RevisionCursor'>
args       = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),)
kwargs     = {'session': None}
self       = <mongo_thingy.versioned.RevisionCursor object at 0x7ff863bf5588>

mongo_thingy/versioned.py:13: TypeError
_______________________________________________________________________________________ test_versioned_revisions_operation _______________________________________________________________________________________

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>

    def test_versioned_revisions_operation(TestVersionedThingy):
        thingy = TestVersionedThingy({"bar": "baz"}).save()
>       assert thingy.revisions[0].operation == "create"

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>
thingy     = TestVersionedThingy({'bar': 'baz', '_id': ObjectId('5a86cbce08255411f3cce181')})

tests/versioned.py:61: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
mongo_thingy/versioned.py:18: in __getitem__
    return super(RevisionCursor, self).__getitem__(index)
mongo_thingy/cursor.py:15: in __getitem__
    document = super(Cursor, self).__getitem__(index)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:607: in __getitem__
    clone = self.clone()
.venv/lib/python3.4/site-packages/pymongo/cursor.py:268: in clone
    return self._clone(True)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:276: in _clone
    base = self._clone_base(None)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:293: in _clone_base
    return self.__class__(self.__collection, session=session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <mongo_thingy.versioned.RevisionCursor object at 0x7ff863bdc898>
args = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),), kwargs = {'session': None}

    def __init__(self, *args, **kwargs):
        self.thingy = kwargs.pop("thingy", None)
>       super(RevisionCursor, self).__init__(*args, **kwargs)
E       TypeError: __init__() missing 1 required positional argument: 'collection'

__class__  = <class 'mongo_thingy.versioned.RevisionCursor'>
args       = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),)
kwargs     = {'session': None}
self       = <mongo_thingy.versioned.RevisionCursor object at 0x7ff863bdc898>

mongo_thingy/versioned.py:13: TypeError
_____________________________________________________________________________________________ test_versioned_revert ______________________________________________________________________________________________

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>

    def test_versioned_revert(TestVersionedThingy):
        thingy = TestVersionedThingy({"bar": "baz"}).save()
        assert thingy.version == 1

        thingy.revert()
        assert thingy.version == 2
        assert thingy.bar is None

>       thingy.revert()

TestVersionedThingy = <class 'tests.conftest.TestVersionedThingy.<locals>.TestVersionedThingy'>
thingy     = TestVersionedThingy({'_id': ObjectId('5a86cbce08255411f3cce187')})

tests/versioned.py:90: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
mongo_thingy/versioned.py:74: in revert
    previous_version = self.revisions[-2].document
mongo_thingy/versioned.py:18: in __getitem__
    return super(RevisionCursor, self).__getitem__(index)
mongo_thingy/cursor.py:15: in __getitem__
    document = super(Cursor, self).__getitem__(index)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:607: in __getitem__
    clone = self.clone()
.venv/lib/python3.4/site-packages/pymongo/cursor.py:268: in clone
    return self._clone(True)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:276: in _clone
    base = self._clone_base(None)
.venv/lib/python3.4/site-packages/pymongo/cursor.py:293: in _clone_base
    return self.__class__(self.__collection, session=session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <mongo_thingy.versioned.RevisionCursor object at 0x7ff86425bfd0>
args = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),), kwargs = {'session': None}

    def __init__(self, *args, **kwargs):
        self.thingy = kwargs.pop("thingy", None)
>       super(RevisionCursor, self).__init__(*args, **kwargs)
E       TypeError: __init__() missing 1 required positional argument: 'collection'

__class__  = <class 'mongo_thingy.versioned.RevisionCursor'>
args       = (Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'mongo_thingy_tests'), 'test_revision'),)
kwargs     = {'session': None}
self       = <mongo_thingy.versioned.RevisionCursor object at 0x7ff86425bfd0>

mongo_thingy/versioned.py:13: TypeError
====================================================================================== 6 failed, 34 passed in 2.61 seconds =======================================================================================
Exception ignored in: <bound method RevisionCursor.__del__ of <mongo_thingy.versioned.RevisionCursor object at 0x7ff863c5d1d0>>
Traceback (most recent call last):
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 241, in __del__
    self.__die()
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 298, in __die
    already_killed = self.__killed
AttributeError: 'RevisionCursor' object has no attribute '_Cursor__killed'
Exception ignored in: <bound method RevisionCursor.__del__ of <mongo_thingy.versioned.RevisionCursor object at 0x7ff864330400>>
Traceback (most recent call last):
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 241, in __del__
    self.__die()
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 298, in __die
    already_killed = self.__killed
AttributeError: 'RevisionCursor' object has no attribute '_Cursor__killed'
Exception ignored in: <bound method RevisionCursor.__del__ of <mongo_thingy.versioned.RevisionCursor object at 0x7ff863bf5588>>
Traceback (most recent call last):
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 241, in __del__
    self.__die()
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 298, in __die
    already_killed = self.__killed
AttributeError: 'RevisionCursor' object has no attribute '_Cursor__killed'
Exception ignored in: <bound method RevisionCursor.__del__ of <mongo_thingy.versioned.RevisionCursor object at 0x7ff863bdc898>>
Traceback (most recent call last):
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 241, in __del__
    self.__die()
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 298, in __die
    already_killed = self.__killed
AttributeError: 'RevisionCursor' object has no attribute '_Cursor__killed'
Exception ignored in: <bound method RevisionCursor.__del__ of <mongo_thingy.versioned.RevisionCursor object at 0x7ff86425bfd0>>
Traceback (most recent call last):
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 241, in __del__
  File "/home/ramnes/mm/mongo-thingy/.venv/lib/python3.4/site-packages/pymongo/cursor.py", line 298, in __die
AttributeError: 'RevisionCursor' object has no attribute '_Cursor__killed'