diff --git a/client/src/telethon/_impl/mtsender/sender.py b/client/src/telethon/_impl/mtsender/sender.py index 0361c635..469b85db 100644 --- a/client/src/telethon/_impl/mtsender/sender.py +++ b/client/src/telethon/_impl/mtsender/sender.py @@ -158,9 +158,6 @@ class Request(Generic[Return]): state: RequestState result: Future[Return] - def __eq__(self, value: object) -> bool: - return self is value - @dataclass class Sender: @@ -441,17 +438,19 @@ class Sender: ) def _pop_request(self, msg_id: MsgId) -> Optional[Request[object]]: - for req in self._requests: + for i, req in enumerate(self._requests): if isinstance(req.state, Serialized) and req.state.msg_id == msg_id: raise RuntimeError("got response for unsent request") elif isinstance(req.state, Sent) and req.state.msg_id == msg_id: - self._requests.remove(req) + del self._requests[i] return req return None def _drain_requests(self, msg_id: MsgId) -> Iterator[Request[object]]: - for req in self._requests: + for i in reversed(range(len(self._requests))): + req = self._requests[i] + if isinstance(req.state, Serialized) and ( req.state.msg_id == msg_id or req.state.container_msg_id == msg_id ): @@ -459,8 +458,7 @@ class Sender: elif isinstance(req.state, Sent) and ( req.state.msg_id == msg_id or req.state.container_msg_id == msg_id ): - self._requests.remove(req) - yield req + yield self._requests.pop(i) @property def auth_key(self) -> Optional[bytes]: