Пользовательский итератор для 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". Но я хочу изменить поведение итерации, так что это меня не режет. Может быть, мне не хватает очевидного решения, но похоже, что это сделать нелегко.

Есть идеи, как я могу это сделать?

Спасибо!

0 ответов

Другие вопросы по тегам