Path: blob/master/ invest-robot-contest_TinkoffBotTwitch-main/venv/lib/python3.8/site-packages/aiohttp/base_protocol.py
7756 views
import asyncio1from typing import Optional, cast23from .tcp_helpers import tcp_nodelay456class BaseProtocol(asyncio.Protocol):7__slots__ = (8"_loop",9"_paused",10"_drain_waiter",11"_connection_lost",12"_reading_paused",13"transport",14)1516def __init__(self, loop: asyncio.AbstractEventLoop) -> None:17self._loop = loop # type: asyncio.AbstractEventLoop18self._paused = False19self._drain_waiter = None # type: Optional[asyncio.Future[None]]20self._connection_lost = False21self._reading_paused = False2223self.transport = None # type: Optional[asyncio.Transport]2425def pause_writing(self) -> None:26assert not self._paused27self._paused = True2829def resume_writing(self) -> None:30assert self._paused31self._paused = False3233waiter = self._drain_waiter34if waiter is not None:35self._drain_waiter = None36if not waiter.done():37waiter.set_result(None)3839def pause_reading(self) -> None:40if not self._reading_paused and self.transport is not None:41try:42self.transport.pause_reading()43except (AttributeError, NotImplementedError, RuntimeError):44pass45self._reading_paused = True4647def resume_reading(self) -> None:48if self._reading_paused and self.transport is not None:49try:50self.transport.resume_reading()51except (AttributeError, NotImplementedError, RuntimeError):52pass53self._reading_paused = False5455def connection_made(self, transport: asyncio.BaseTransport) -> None:56tr = cast(asyncio.Transport, transport)57tcp_nodelay(tr, True)58self.transport = tr5960def connection_lost(self, exc: Optional[BaseException]) -> None:61self._connection_lost = True62# Wake up the writer if currently paused.63self.transport = None64if not self._paused:65return66waiter = self._drain_waiter67if waiter is None:68return69self._drain_waiter = None70if waiter.done():71return72if exc is None:73waiter.set_result(None)74else:75waiter.set_exception(exc)7677async def _drain_helper(self) -> None:78if self._connection_lost:79raise ConnectionResetError("Connection lost")80if not self._paused:81return82waiter = self._drain_waiter83if waiter is None:84waiter = self._loop.create_future()85self._drain_waiter = waiter86await asyncio.shield(waiter)878889