Change raise_last to a client-wide switch

This commit is contained in:
Tulir Asokan 2020-10-01 11:45:34 +03:00
parent 15bdad4ea5
commit 1f860eb1bb
2 changed files with 14 additions and 5 deletions

View File

@ -160,6 +160,12 @@ class TelegramBaseClient(abc.ABC):
was for 21s, it would ``raise FloodWaitError`` instead. Values was for 21s, it would ``raise FloodWaitError`` instead. Values
larger than a day (like ``float('inf')``) will be changed to a day. larger than a day (like ``float('inf')``) will be changed to a day.
raise_last_call_error (`bool`, optional):
When API calls fail in a way that causes Telethon to retry
automatically, should the RPC error of the last attempt be raised
instead of a generic ValueError. This is mostly useful for
detecting when Telegram has internal issues.
device_model (`str`, optional): device_model (`str`, optional):
"Device model" to be sent when creating the initial connection. "Device model" to be sent when creating the initial connection.
Defaults to 'PC (n)bit' derived from ``platform.uname().machine``, or its direct value if unknown. Defaults to 'PC (n)bit' derived from ``platform.uname().machine``, or its direct value if unknown.
@ -216,6 +222,7 @@ class TelegramBaseClient(abc.ABC):
auto_reconnect: bool = True, auto_reconnect: bool = True,
sequential_updates: bool = False, sequential_updates: bool = False,
flood_sleep_threshold: int = 60, flood_sleep_threshold: int = 60,
raise_last_call_error: bool = False,
device_model: str = None, device_model: str = None,
system_version: str = None, system_version: str = None,
app_version: str = None, app_version: str = None,
@ -306,6 +313,8 @@ class TelegramBaseClient(abc.ABC):
) )
) )
self._raise_last_call_error = raise_last_call_error
self._request_retries = request_retries self._request_retries = request_retries
self._connection_retries = connection_retries self._connection_retries = connection_retries
self._retry_delay = retry_delay or 0 self._retry_delay = retry_delay or 0

View File

@ -26,10 +26,10 @@ def _fmt_flood(delay, request, *, early=False, td=datetime.timedelta):
class UserMethods: class UserMethods:
async def __call__(self: 'TelegramClient', request, ordered=False, raise_last=False): async def __call__(self: 'TelegramClient', request, ordered=False):
return await self._call(self._sender, request, ordered=ordered, raise_last=raise_last) return await self._call(self._sender, request, ordered=ordered)
async def _call(self: 'TelegramClient', sender, request, ordered=False, raise_last=False): async def _call(self: 'TelegramClient', sender, request, ordered=False):
requests = (request if utils.is_list_like(request) else (request,)) requests = (request if utils.is_list_like(request) else (request,))
for r in requests: for r in requests:
if not isinstance(r, TLRequest): if not isinstance(r, TLRequest):
@ -52,7 +52,7 @@ class UserMethods:
request_index = 0 request_index = 0
last_error = None last_error = None
self._last_request = time.time() self._last_request = time.time()
for attempt in retry_range(self._request_retries): for attempt in retry_range(self._request_retries):
try: try:
future = sender.send(request, ordered=ordered) future = sender.send(request, ordered=ordered)
@ -118,7 +118,7 @@ class UserMethods:
raise raise
await self._switch_dc(e.new_dc) await self._switch_dc(e.new_dc)
if raise_last and last_error is not None: if self._raise_last_call_error and last_error is not None:
raise last_error raise last_error
raise ValueError('Request was unsuccessful {} time(s)' raise ValueError('Request was unsuccessful {} time(s)'
.format(attempt)) .format(attempt))