MCPcopy
hub / github.com/aio-libs/aiohttp / WebSocketDataQueue

Class WebSocketDataQueue

aiohttp/_websocket/reader_c.py:55–133  ·  view source on GitHub ↗

WebSocketDataQueue resumes and pauses an underlying stream. It is a destination for WebSocket data.

Source from the content-addressed store, hash-verified

53
54
55class WebSocketDataQueue:
56 """WebSocketDataQueue resumes and pauses an underlying stream.
57
58 It is a destination for WebSocket data.
59 """
60
61 def __init__(
62 self, protocol: BaseProtocol, limit: int, *, loop: asyncio.AbstractEventLoop
63 ) -> None:
64 self._size = 0
65 self._protocol = protocol
66 self._limit = limit * 2
67 self._loop = loop
68 self._eof = False
69 self._waiter: asyncio.Future[None] | None = None
70 self._exception: BaseException | None = None
71 self._buffer: deque[tuple[WSMessage | WSMessageTextBytes, int]] = deque()
72 self._get_buffer = self._buffer.popleft
73 self._put_buffer = self._buffer.append
74
75 def is_eof(self) -> bool:
76 return self._eof
77
78 def exception(self) -> BaseException | None:
79 return self._exception
80
81 def set_exception(
82 self,
83 exc: BaseException,
84 exc_cause: builtins.BaseException = _EXC_SENTINEL,
85 ) -> None:
86 self._eof = True
87 self._exception = exc
88 if (waiter := self._waiter) is not None:
89 self._waiter = None
90 set_exception(waiter, exc, exc_cause)
91
92 def _release_waiter(self) -> None:
93 if (waiter := self._waiter) is None:
94 return
95 self._waiter = None
96 if not waiter.done():
97 waiter.set_result(None)
98
99 def feed_eof(self) -> None:
100 self._eof = True
101 self._release_waiter()
102 self._exception = None # Break cyclic references
103
104 def feed_data(
105 self, data: "WSMessage | WSMessageTextBytes", size: "cython_int"
106 ) -> None:
107 self._size += size
108 self._put_buffer((data, size))
109 self._release_waiter()
110 if self._size > self._limit and not self._protocol._reading_paused:
111 self._protocol.pause_reading()
112

Callers 10

test_concurrent_messagesFunction · 0.90
outFunction · 0.90
out_low_limitFunction · 0.90
bufferFunction · 0.90
_ws_connectMethod · 0.50
_post_startMethod · 0.50

Calls

no outgoing calls

Tested by 8

test_concurrent_messagesFunction · 0.72
outFunction · 0.72
out_low_limitFunction · 0.72
bufferFunction · 0.72

Used in the wild real call sites across dependent graphs

searching dependent graphs…