Refactor Request class equality check and optimize request removal in Sender class

This commit is contained in:
Jahongir Qurbonov 2025-06-01 20:00:42 +05:00
parent 1c2aafce2a
commit d590271ebd
No known key found for this signature in database
GPG Key ID: 256976CED13D5F2D

View File

@ -158,9 +158,6 @@ class Request(Generic[Return]):
state: RequestState state: RequestState
result: Future[Return] result: Future[Return]
def __eq__(self, value: object) -> bool:
return self is value
@dataclass @dataclass
class Sender: class Sender:
@ -441,17 +438,19 @@ class Sender:
) )
def _pop_request(self, msg_id: MsgId) -> Optional[Request[object]]: 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: if isinstance(req.state, Serialized) and req.state.msg_id == msg_id:
raise RuntimeError("got response for unsent request") raise RuntimeError("got response for unsent request")
elif isinstance(req.state, Sent) and req.state.msg_id == msg_id: elif isinstance(req.state, Sent) and req.state.msg_id == msg_id:
self._requests.remove(req) del self._requests[i]
return req return req
return None return None
def _drain_requests(self, msg_id: MsgId) -> Iterator[Request[object]]: 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 ( if isinstance(req.state, Serialized) and (
req.state.msg_id == msg_id or req.state.container_msg_id == msg_id 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 ( elif isinstance(req.state, Sent) and (
req.state.msg_id == msg_id or req.state.container_msg_id == msg_id req.state.msg_id == msg_id or req.state.container_msg_id == msg_id
): ):
self._requests.remove(req) yield self._requests.pop(i)
yield req
@property @property
def auth_key(self) -> Optional[bytes]: def auth_key(self) -> Optional[bytes]: