Сохранение экземпляра MotorEngine с помощью Tornado

У меня проблемы с сохранением экземпляра MotorEngine с помощью обработчика торнадо. Ниже приведены выдержки из кода, которые я сократил для краткости.

если я заменю motorengine импорт с mongoengine экземпляр сохраняется должным образом.

# model
from motorengine.document import Document
from motorengine.fields import *

class Test(Document):
    nameTest = StringField(required=True)
    numberTest = DecimalField(required=True)
    boolTest = BooleanField(required=True)

# handler
class TestHandler(BaseHandler):

    @tornado.gen.coroutine
    def post(self, *args, **kwargs):
        response = self._service.save_test()
        print(response)
        self.write('')
        self.finish()

# save method
from models import Test

def save_test(self):
        yield Test.objects.create(nameTest="foobar", boolTest=False, numberTest=123)

Есть ли явные ошибки в моем коде? Асинхронное программирование не моя сильная сторона.

:РЕДАКТИРОВАТЬ:

Согласно ответу Бена, это код, который работает

# handler
@tornado.gen.coroutine
def post(self, *args, **kwargs):
    yield self._service.save_test()

# save method
@tornado.gen.coroutine
def save_test(self):
    yield Test.objects.create(nameTest="foobar", boolTest=False, numberTest=123)

1 ответ

Решение

save_test (и любая функция, которая использует yield таким образом) должен иметь @gen.coroutine декоратор, и когда вы вызываете его (или любую другую сопрограмму) в post() ты должен использовать yield save_test()

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