mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-09-19 02:12:40 +03:00
Refactor reconnection policy handling to support None as a valid state
This commit is contained in:
parent
f77b2907ba
commit
9386210005
|
@ -10,7 +10,7 @@ from typing_extensions import Self
|
||||||
|
|
||||||
from ....version import __version__ as default_version
|
from ....version import __version__ as default_version
|
||||||
from ...mtsender import Connector, Sender
|
from ...mtsender import Connector, Sender
|
||||||
from ...mtsender.reconnection import NoReconnect, ReconnectionPolicy
|
from ...mtsender.reconnection import ReconnectionPolicy
|
||||||
from ...session import (
|
from ...session import (
|
||||||
ChannelRef,
|
ChannelRef,
|
||||||
ChatHashCache,
|
ChatHashCache,
|
||||||
|
@ -248,7 +248,7 @@ class Client:
|
||||||
update_queue_limit=update_queue_limit,
|
update_queue_limit=update_queue_limit,
|
||||||
base_logger=base_logger,
|
base_logger=base_logger,
|
||||||
connector=connector or (lambda ip, port: asyncio.open_connection(ip, port)),
|
connector=connector or (lambda ip, port: asyncio.open_connection(ip, port)),
|
||||||
reconnection_policy=reconnection_policy or NoReconnect(),
|
reconnection_policy=reconnection_policy,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._session = Session()
|
self._session = Session()
|
||||||
|
|
|
@ -46,7 +46,7 @@ class Config:
|
||||||
api_hash: str
|
api_hash: str
|
||||||
base_logger: logging.Logger
|
base_logger: logging.Logger
|
||||||
connector: Connector
|
connector: Connector
|
||||||
reconnection_policy: ReconnectionPolicy
|
reconnection_policy: Optional[ReconnectionPolicy] = None
|
||||||
device_model: str = field(default_factory=default_device_model)
|
device_model: str = field(default_factory=default_device_model)
|
||||||
system_version: str = field(default_factory=default_system_version)
|
system_version: str = field(default_factory=default_system_version)
|
||||||
app_version: str = __version__
|
app_version: str = __version__
|
||||||
|
|
|
@ -166,7 +166,7 @@ class Sender:
|
||||||
addr: str
|
addr: str
|
||||||
mtp: Mtp
|
mtp: Mtp
|
||||||
_connector: Connector
|
_connector: Connector
|
||||||
_reconnection_policy: ReconnectionPolicy
|
_reconnection_policy: ReconnectionPolicy | None
|
||||||
_logger: logging.Logger
|
_logger: logging.Logger
|
||||||
_reader: AsyncReader
|
_reader: AsyncReader
|
||||||
_writer: AsyncWriter
|
_writer: AsyncWriter
|
||||||
|
@ -190,7 +190,7 @@ class Sender:
|
||||||
addr: str,
|
addr: str,
|
||||||
*,
|
*,
|
||||||
connector: Connector,
|
connector: Connector,
|
||||||
reconnection_policy: ReconnectionPolicy,
|
reconnection_policy: ReconnectionPolicy | None = None,
|
||||||
base_logger: logging.Logger,
|
base_logger: logging.Logger,
|
||||||
) -> Self:
|
) -> Self:
|
||||||
ip, port = addr.split(":")
|
ip, port = addr.split(":")
|
||||||
|
@ -304,6 +304,10 @@ class Sender:
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
if self._reconnection_policy is None:
|
||||||
|
self._logger.info("auto-reconnect disabled, not retrying")
|
||||||
|
raise
|
||||||
|
|
||||||
attempts += 1
|
attempts += 1
|
||||||
self._logger.warning(f"auto-reconnect failed {attempts} time(s): {e!r}")
|
self._logger.warning(f"auto-reconnect failed {attempts} time(s): {e!r}")
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
|
@ -387,7 +391,9 @@ class Sender:
|
||||||
self._read_buffer.clear()
|
self._read_buffer.clear()
|
||||||
self._mtp_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
|
0
|
||||||
):
|
):
|
||||||
self._logger.info(f"read error occurred: {error}")
|
self._logger.info(f"read error occurred: {error}")
|
||||||
|
@ -564,7 +570,7 @@ async def connect(
|
||||||
auth_key: Optional[bytes],
|
auth_key: Optional[bytes],
|
||||||
base_logger: logging.Logger,
|
base_logger: logging.Logger,
|
||||||
connector: Connector,
|
connector: Connector,
|
||||||
reconnection_policy: ReconnectionPolicy,
|
reconnection_policy: ReconnectionPolicy | None = None,
|
||||||
) -> Sender:
|
) -> Sender:
|
||||||
if auth_key is None:
|
if auth_key is None:
|
||||||
sender = await Sender.connect(
|
sender = await Sender.connect(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user