Пользовательский итератор для Motor Async mongo engine для python
В предыдущем проекте с использованием PyMongo я создал подкласс объекта Cursor. Я изменил поведение итератора, чтобы он возвращал объект, полученный из dict, возвращенного итератором Cursor. Выглядело примерно так:
class EntityIterator(Cursor):
def __init__(self, entity_class, *args, **kwargs):
# initiate Cursor and set the class to return in iteration
super().__init__(app.mongo.db[entity_class.collection_name], *args, **kwargs)
self.entity_class = entity_class
def __next__(self):
# instead of normal dict, return an object derived from dict
return self.entity_class.new(super().next())
next = __next__
def __iter__(self):
return self
Теперь при итерации я получаю экземпляр нужного мне класса вместо обычного dict.
Теперь в документе Motor я обнаружил: "не инициируйте экземпляр курсора самостоятельно, вместо этого получите его из find() или aggregate". Но я хочу изменить поведение итерации, так что это меня не режет. Может быть, мне не хватает очевидного решения, но похоже, что это сделать нелегко.
Есть идеи, как я могу это сделать?
Спасибо!