mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-08-01 10:49:58 +03:00
Add option to raise last error instead of generic ValueError
Fixes #1568
This commit is contained in:
parent
10b2b60415
commit
15bdad4ea5
|
@ -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):
|
async def __call__(self: 'TelegramClient', request, ordered=False, raise_last=False):
|
||||||
return await self._call(self._sender, request, ordered=ordered)
|
return await self._call(self._sender, request, ordered=ordered, raise_last=raise_last)
|
||||||
|
|
||||||
async def _call(self: 'TelegramClient', sender, request, ordered=False):
|
async def _call(self: 'TelegramClient', sender, request, ordered=False, raise_last=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):
|
||||||
|
@ -50,6 +50,7 @@ class UserMethods:
|
||||||
raise errors.FloodWaitError(request=r, capture=diff)
|
raise errors.FloodWaitError(request=r, capture=diff)
|
||||||
|
|
||||||
request_index = 0
|
request_index = 0
|
||||||
|
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):
|
||||||
|
@ -82,12 +83,14 @@ class UserMethods:
|
||||||
except (errors.ServerError, errors.RpcCallFailError,
|
except (errors.ServerError, errors.RpcCallFailError,
|
||||||
errors.RpcMcgetFailError, errors.InterdcCallErrorError,
|
errors.RpcMcgetFailError, errors.InterdcCallErrorError,
|
||||||
errors.InterdcCallRichErrorError) as e:
|
errors.InterdcCallRichErrorError) as e:
|
||||||
|
last_error = e
|
||||||
self._log[__name__].warning(
|
self._log[__name__].warning(
|
||||||
'Telegram is having internal issues %s: %s',
|
'Telegram is having internal issues %s: %s',
|
||||||
e.__class__.__name__, e)
|
e.__class__.__name__, e)
|
||||||
|
|
||||||
await asyncio.sleep(2)
|
await asyncio.sleep(2)
|
||||||
except (errors.FloodWaitError, errors.SlowModeWaitError, errors.FloodTestPhoneWaitError) as e:
|
except (errors.FloodWaitError, errors.SlowModeWaitError, errors.FloodTestPhoneWaitError) as e:
|
||||||
|
last_error = e
|
||||||
if utils.is_list_like(request):
|
if utils.is_list_like(request):
|
||||||
request = request[request_index]
|
request = request[request_index]
|
||||||
|
|
||||||
|
@ -106,6 +109,7 @@ class UserMethods:
|
||||||
raise
|
raise
|
||||||
except (errors.PhoneMigrateError, errors.NetworkMigrateError,
|
except (errors.PhoneMigrateError, errors.NetworkMigrateError,
|
||||||
errors.UserMigrateError) as e:
|
errors.UserMigrateError) as e:
|
||||||
|
last_error = e
|
||||||
self._log[__name__].info('Phone migrated to %d', e.new_dc)
|
self._log[__name__].info('Phone migrated to %d', e.new_dc)
|
||||||
should_raise = isinstance(e, (
|
should_raise = isinstance(e, (
|
||||||
errors.PhoneMigrateError, errors.NetworkMigrateError
|
errors.PhoneMigrateError, errors.NetworkMigrateError
|
||||||
|
@ -114,6 +118,8 @@ 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:
|
||||||
|
raise last_error
|
||||||
raise ValueError('Request was unsuccessful {} time(s)'
|
raise ValueError('Request was unsuccessful {} time(s)'
|
||||||
.format(attempt))
|
.format(attempt))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user