mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-08-09 05:19:41 +00:00
Retry up to five times before giving up on a request
This commit is contained in:
@@ -282,7 +282,7 @@ class TelegramBareClient:
|
||||
|
||||
# region Invoking Telegram requests
|
||||
|
||||
def invoke(self, request, updates=None, call_receive=True):
|
||||
def invoke(self, request, call_receive=True, retries=5):
|
||||
"""Invokes (sends) a MTProtoRequest and returns (receives) its result.
|
||||
|
||||
If 'updates' is not None, all read update object will be put
|
||||
@@ -298,6 +298,9 @@ class TelegramBareClient:
|
||||
if not self._sender:
|
||||
raise ValueError('You must be connected to invoke requests!')
|
||||
|
||||
if retries <= 0:
|
||||
raise ValueError('Number of retries reached 0.')
|
||||
|
||||
try:
|
||||
# Ensure that we start with no previous errors (i.e. resending)
|
||||
request.confirm_received.clear()
|
||||
@@ -314,20 +317,24 @@ class TelegramBareClient:
|
||||
while not request.confirm_received.is_set():
|
||||
self._sender.receive(update_state=self.updates)
|
||||
|
||||
if request.rpc_error:
|
||||
raise request.rpc_error
|
||||
return request.result
|
||||
|
||||
except ConnectionResetError:
|
||||
self._logger.debug('Server disconnected us. Reconnecting and '
|
||||
'resending request...')
|
||||
self.reconnect()
|
||||
return self.invoke(request)
|
||||
|
||||
except FloodWaitError:
|
||||
self.disconnect()
|
||||
raise
|
||||
|
||||
if request.rpc_error:
|
||||
raise request.rpc_error
|
||||
if request.result is None:
|
||||
return self.invoke(
|
||||
request, call_receive=call_receive, retries=(retries - 1)
|
||||
)
|
||||
else:
|
||||
return request.result
|
||||
|
||||
# Let people use client(SomeRequest()) instead client.invoke(...)
|
||||
__call__ = invoke
|
||||
|
||||
|
Reference in New Issue
Block a user