Есть такой код:
def __init__(self):
uri = 'mongodb://{}/{}'.format(kwargs['metrika_db_host'], kwargs['metrika_db_name'])
client = motor.motor_tornado.MotorClient(uri)
self.db = client.get_default_database()
# падает с ошибкой TypeError: __init__() should return None, not 'generator'
colls = yield self.db.collection_names()
for c in colls:
print('c: ', c)
Я так понял, что init метод должен возвращать None и, видимо, colls = yield self.db.collection_names() возвращает объект Future который генератор.
Тем не менее, хочется, например, создать коллекции именно в __init__().
Как сделать сие?
Попробовал инициировать в методе __new__():
def __new__(cls, *args, **kwargs):
print(cls, args, kwargs)
uri = 'mongodb://{}/{}'.format(kwargs['metrika_db_host'], kwargs['metrika_db_name'])
client = motor.motor_tornado.MotorClient(uri)
print(client)
cls.db = client.get_default_database()
print(cls.db) # до этого момента все ок
colls = yield cls.db.collection_names() # зависает на этой строке
for c in colls:
print('c: ', c)
return BaseCrawl.__new__(cls)