Пользовательский итератор для Motor Asyn c mon go движок для python - PullRequest
0 голосов
/ 01 марта 2020

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

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

Спасибо!

...