mirror of
https://github.com/esphome/aioesphomeapi.git
synced 2024-11-22 12:05:12 +01:00
Small speed up to writing outgoing packets (#785)
This commit is contained in:
parent
ac17f722c1
commit
b22258cca7
@ -5,7 +5,6 @@ from ..connection cimport APIConnection
|
||||
|
||||
|
||||
cdef bint TYPE_CHECKING
|
||||
cdef object WRITE_EXCEPTIONS
|
||||
|
||||
cdef class APIFrameHelper:
|
||||
|
||||
|
@ -19,7 +19,6 @@ SOCKET_ERRORS = (
|
||||
TimeoutError,
|
||||
)
|
||||
|
||||
WRITE_EXCEPTIONS = (RuntimeError, ConnectionResetError, OSError)
|
||||
|
||||
_int = int
|
||||
_bytes = bytes
|
||||
@ -189,9 +188,4 @@ class APIFrameHelper:
|
||||
if TYPE_CHECKING:
|
||||
assert self._writer is not None, "Writer is not set"
|
||||
|
||||
try:
|
||||
self._writer(data)
|
||||
except WRITE_EXCEPTIONS as err:
|
||||
raise SocketClosedAPIError(
|
||||
f"{self._log_name}: Error while writing data: {err}"
|
||||
) from err
|
||||
|
@ -13,6 +13,8 @@ cdef object HANDSHAKE_TIMEOUT
|
||||
|
||||
cdef bint TYPE_CHECKING
|
||||
|
||||
cdef object WRITE_EXCEPTIONS
|
||||
|
||||
cdef object DISCONNECT_REQUEST_MESSAGE
|
||||
cdef tuple DISCONNECT_RESPONSE_MESSAGES
|
||||
cdef tuple PING_REQUEST_MESSAGES
|
||||
@ -46,6 +48,7 @@ cdef object ReadFailedAPIError
|
||||
cdef object TimeoutAPIError
|
||||
cdef object SocketAPIError
|
||||
cdef object InvalidAuthAPIError
|
||||
cdef object SocketClosedAPIError
|
||||
|
||||
cdef object astuple
|
||||
|
||||
@ -57,8 +60,8 @@ cdef object CONNECTION_STATE_CLOSED
|
||||
|
||||
cdef object make_hello_request
|
||||
|
||||
cpdef handle_timeout(object fut)
|
||||
cpdef handle_complex_message(
|
||||
cpdef void handle_timeout(object fut)
|
||||
cpdef void handle_complex_message(
|
||||
object fut,
|
||||
list responses,
|
||||
object do_append,
|
||||
@ -130,7 +133,7 @@ cdef class APIConnection:
|
||||
|
||||
cdef void _set_connection_state(self, object state)
|
||||
|
||||
cpdef report_fatal_error(self, Exception err)
|
||||
cpdef void report_fatal_error(self, Exception err)
|
||||
|
||||
@cython.locals(handlers=set)
|
||||
cdef void _add_message_callback_without_remove(self, object on_message, tuple msg_types)
|
||||
|
@ -46,6 +46,7 @@ from .core import (
|
||||
ReadFailedAPIError,
|
||||
ResolveAPIError,
|
||||
SocketAPIError,
|
||||
SocketClosedAPIError,
|
||||
TimeoutAPIError,
|
||||
UnhandledAPIConnectionError,
|
||||
)
|
||||
@ -95,6 +96,8 @@ CONNECT_REQUEST_TIMEOUT = 30.0
|
||||
# to reboot and connect to the network/WiFi.
|
||||
TCP_CONNECT_TIMEOUT = 60.0
|
||||
|
||||
WRITE_EXCEPTIONS = (RuntimeError, ConnectionResetError, OSError)
|
||||
|
||||
|
||||
_int = int
|
||||
_bytes = bytes
|
||||
@ -667,12 +670,16 @@ class APIConnection:
|
||||
|
||||
try:
|
||||
self._frame_helper.write_packets(packets, debug_enabled)
|
||||
except SocketAPIError as err:
|
||||
except WRITE_EXCEPTIONS as err:
|
||||
# If writing packet fails, we don't know what state the frames
|
||||
# are in anymore and we have to close the connection
|
||||
_LOGGER.info("%s: Error writing packets: %s", self.log_name, err)
|
||||
self.report_fatal_error(err)
|
||||
raise
|
||||
wrapped_err = SocketClosedAPIError(
|
||||
f"{self.log_name}: Error writing packets: {err}"
|
||||
)
|
||||
wrapped_err.__cause__ = err
|
||||
self.report_fatal_error(wrapped_err)
|
||||
raise wrapped_err from err
|
||||
|
||||
def _add_message_callback_without_remove(
|
||||
self, on_message: Callable[[Any], None], msg_types: tuple[type[Any], ...]
|
||||
|
Loading…
Reference in New Issue
Block a user