Skip to content

Переход на корутины

Andrew Sumin edited this page Dec 7, 2018 · 7 revisions

Было:

def get_page(self):
    return {
        'request': self.GET(
            host, uri,
            fail_on_error=True
        )
    }

def get_page_requests_done(self, results):
    self.json.put(results['request'])

def get_page_requests_failed(self, name, data, response):
    raise HTTPError(500, '{} failed with data {}'.format(name, data))

Стало:

def get_page(self):
    result = yield self.get_url(
        host, uri,
        fail_fast=True,
        parse_on_error=True,
    )

    self.json.put(result)

def get_page_fail_fast(self, result):
    raise HTTPError(500, '{} failed with data {}'.format(result.name, result.data))
  1. вместо return dict нужно делать yield dict/list/чтоугодно из фьюч, как в нормальной торнаде
  2. *_page_requests_done не нужен
  3. fail_on_error переименован в fail_fast, теперь он работает гораздо более прямолинейно — кидает эксепшен и вызывает обработчик
  4. обработчик переименован из *_page_requests_failed в *_page_fail_fast
  5. методы self.GET, self.POST итп удалены и заменены на обычные get_url, post_url
  6. все аргументы get_url, post_url итп кроме host и uri — keyword-only, их можно передать только через kwargs (через позиционные нельзя)
  7. parse_on_error по умолчанию False parse_on_error по умолчанию True везде (раньше только в микрохендлере)
  8. появился кварг name, которым можно задать имя реквеста
Clone this wiki locally