Skip to content

Request Rescheduler

Решедулеры нужны для того, чтобы отложить запрос к апи, который не удался по техническим причинам - например, ошибки серверов вконтакте.

Вызываются они из валидаторов респонсов

Решедулер должен имплементировать всего один метод - асинхронный reschedule, который получает на вход:

  • ctx_api - апи с которым выполнялся запрос
  • method - метод
  • data - переданные параметры
  • recent_response - ответ (например: None)

Пример

import asyncio
from typing import TYPE_CHECKING, Any, Union

from vkbottle import ABCRequestRescheduler

if TYPE_CHECKING:
    from vkbottle.api import ABCAPI, API

class SomeRequestRescheduler(ABCRequestRescheduler):
    def __init__(self, delay: int = 1):
        self.delay = delay

    async def reschedule(
        self,
        ctx_api: Union["ABCAPI", "API"],
        method: str,
        data: dict,
        recent_response: Any,
    ) -> dict:
        await asyncio.sleep(self.delay)
        return await ctx_api.request(method, data)