Refactor reconnection policy handling to support None as a valid state

This commit is contained in:
Jahongir Qurbonov 2025-09-15 14:56:29 +05:00
parent f77b2907ba
commit 9386210005
No known key found for this signature in database
GPG Key ID: 256976CED13D5F2D
3 changed files with 13 additions and 7 deletions

View File

@ -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()

View File

@ -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__

View File

@ -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(