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, либо что неправильно использую асинхронность. Как правильно вызвать асинхронный вызов?