Skip to content

Commit 115464b

Browse files
authored
Merge pull request #2630 from Badiboy/chatgpt
Fix async retry
2 parents 829eb16 + 834e5ca commit 115464b

2 files changed

Lines changed: 17 additions & 15 deletions

File tree

‎telebot/apihelper.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def _get_multipart_header_formatter(urllib3_fields):
5353

5454
RETRY_ON_ERROR = False
5555
RETRY_TIMEOUT = 2
56-
MAX_RETRIES = 15
56+
MAX_RETRIES = 3
5757
RETRY_ENGINE = 1
5858

5959
CUSTOM_SERIALIZER = None

‎telebot/asyncio_helper.py‎

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
FILE_URL = None
2626

2727
REQUEST_TIMEOUT = 300
28+
RETRY_ON_ERROR = False
29+
RETRY_TIMEOUT = 2
2830
MAX_RETRIES = 3
2931

3032
REQUEST_LIMIT = 50
@@ -90,28 +92,28 @@ async def _process_request(token, url, method='get', params=None, files=None, **
9092
params = _prepare_data(params, files)
9193

9294
timeout = aiohttp.ClientTimeout(total=request_timeout)
93-
got_result = False
94-
current_try=0
95+
max_attempts = max(1, MAX_RETRIES if RETRY_ON_ERROR else 1)
96+
last_error = None
9597
session = await session_manager.get_session()
96-
while not got_result and current_try<MAX_RETRIES-1:
97-
current_try +=1
98+
for current_try in range(1, max_attempts + 1):
9899
try:
99100
async with session.request(method=method, url=API_URL.format(token, url), data=params, timeout=timeout, proxy=proxy) as resp:
100-
got_result = True
101101
logger.debug("Request: method={0} url={1} params={2} files={3} request_timeout={4} current_try={5}".format(method, url, params, files, request_timeout, current_try).replace(token, token.split(':')[0] + ":{TOKEN}"))
102102

103103
json_result = await _check_result(url, resp)
104104
if json_result:
105105
return json_result['result']
106-
except (ApiTelegramException,ApiInvalidJSONException, ApiHTTPException) as e:
107-
raise e
108-
except aiohttp.ClientError as e:
109-
logger.error('Aiohttp ClientError: {0}'.format(e.__class__.__name__))
110-
except Exception as e:
111-
logger.error(f'Unknown error: {e.__class__.__name__}')
112-
if not got_result:
113-
raise RequestTimeout("Request timeout. Request: method={0} url={1} params={2} files={3} request_timeout={4}".format(method, url, params, files, request_timeout, current_try))
114-
return None
106+
return None
107+
except (aiohttp.ClientError, asyncio.TimeoutError) as e:
108+
last_error = e
109+
logger.error('Aiohttp request error: {0} (try #{1})'.format(e.__class__.__name__, current_try))
110+
111+
if current_try == max_attempts:
112+
break
113+
114+
await asyncio.sleep(RETRY_TIMEOUT)
115+
116+
raise RequestTimeout("Request timeout. Request: method={0} url={1} params={2} files={3} request_timeout={4} current_try={5}".format(method, url, params, files, request_timeout, current_try)) from last_error
115117

116118
def _prepare_file(obj):
117119
"""

0 commit comments

Comments
 (0)