Tornado и использование AsyncHTTPClient

Код максимально минимизировала

Точка входа:

def main():
    application = tornado.web.Application([
        (r"/([^/]+)", FiscalServiceView),
    ])
    application.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()


if __name__ == '__main__':
    main()

Вьюха:

class FiscalServiceView(BaseView, ABC):

@gen.coroutine
def get(self, fiscal_number):
    country_code = fiscal_number[0:2].lower()
    number = fiscal_number[2:]

    module = import_module(f'fiscal_service.countries.{country_code}')
    self.write(module.Source().gather(number))

Source страны имплементирует абстрактный класс, у которого есть 2 метода:

@abstractmethod
@gen.coroutine
def gather(self, request):
    """
    Gather legal data by fiscal number.
    """

@staticmethod
@gen.coroutine
def fetch_json(url: str) -> HTTPResponse:
    client = AsyncHTTPClient(force_instance=True, defaults=dict(
        user_agent='здесь указан агент',
    ))
    yield client.fetch(url)

И, собственно, сам сорс, который безуспешно пытается вызвать http запрос:

class Source(AbstractSource):

@gen.coroutine
def gather(self, number):
    response = self.fetch_json(f'https://www.uid.admin.ch/Detail.aspx?uid_id={number}')

Получаю ошибку либо о том, что нет у response нет параметра body, либо что неправильно использую асинхронность. Как правильно вызвать асинхронный вызов?


Ответы (0 шт):