From 93862100053e2e903da4163d36c02add5a07179b Mon Sep 17 00:00:00 2001 From: Jahongir Qurbonov Date: Mon, 15 Sep 2025 14:56:29 +0500 Subject: [PATCH] Refactor reconnection policy handling to support None as a valid state --- client/src/telethon/_impl/client/client/client.py | 4 ++-- client/src/telethon/_impl/client/client/net.py | 2 +- client/src/telethon/_impl/mtsender/sender.py | 14 ++++++++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/client/src/telethon/_impl/client/client/client.py b/client/src/telethon/_impl/client/client/client.py index 91564209..caa517fc 100644 --- a/client/src/telethon/_impl/client/client/client.py +++ b/client/src/telethon/_impl/client/client/client.py @@ -10,7 +10,7 @@ from typing_extensions import Self from ....version import __version__ as default_version from ...mtsender import Connector, Sender -from ...mtsender.reconnection import NoReconnect, ReconnectionPolicy +from ...mtsender.reconnection import ReconnectionPolicy from ...session import ( ChannelRef, ChatHashCache, @@ -248,7 +248,7 @@ class Client: update_queue_limit=update_queue_limit, base_logger=base_logger, connector=connector or (lambda ip, port: asyncio.open_connection(ip, port)), - reconnection_policy=reconnection_policy or NoReconnect(), + reconnection_policy=reconnection_policy, ) self._session = Session() diff --git a/client/src/telethon/_impl/client/client/net.py b/client/src/telethon/_impl/client/client/net.py index e790457d..14ead4f4 100644 --- a/client/src/telethon/_impl/client/client/net.py +++ b/client/src/telethon/_impl/client/client/net.py @@ -46,7 +46,7 @@ class Config: api_hash: str base_logger: logging.Logger connector: Connector - reconnection_policy: ReconnectionPolicy + reconnection_policy: Optional[ReconnectionPolicy] = None device_model: str = field(default_factory=default_device_model) system_version: str = field(default_factory=default_system_version) app_version: str = __version__ diff --git a/client/src/telethon/_impl/mtsender/sender.py b/client/src/telethon/_impl/mtsender/sender.py index e7933baa..db60b3ce 100644 --- a/client/src/telethon/_impl/mtsender/sender.py +++ b/client/src/telethon/_impl/mtsender/sender.py @@ -166,7 +166,7 @@ class Sender: addr: str mtp: Mtp _connector: Connector - _reconnection_policy: ReconnectionPolicy + _reconnection_policy: ReconnectionPolicy | None _logger: logging.Logger _reader: AsyncReader _writer: AsyncWriter @@ -190,7 +190,7 @@ class Sender: addr: str, *, connector: Connector, - reconnection_policy: ReconnectionPolicy, + reconnection_policy: ReconnectionPolicy | None = None, base_logger: logging.Logger, ) -> Self: ip, port = addr.split(":") @@ -304,6 +304,10 @@ class Sender: ) return except Exception as e: + if self._reconnection_policy is None: + self._logger.info("auto-reconnect disabled, not retrying") + raise + attempts += 1 self._logger.warning(f"auto-reconnect failed {attempts} time(s): {e!r}") await asyncio.sleep(1) @@ -387,7 +391,9 @@ class Sender: self._read_buffer.clear() self._mtp_buffer.clear() - if isinstance(error, struct.error) and self._reconnection_policy.should_retry( + if self._reconnection_policy is None: + self._logger.info("auto-reconnect disabled, not retrying") + elif isinstance(error, struct.error) and self._reconnection_policy.should_retry( 0 ): self._logger.info(f"read error occurred: {error}") @@ -564,7 +570,7 @@ async def connect( auth_key: Optional[bytes], base_logger: logging.Logger, connector: Connector, - reconnection_policy: ReconnectionPolicy, + reconnection_policy: ReconnectionPolicy | None = None, ) -> Sender: if auth_key is None: sender = await Sender.connect(