From ccc09ffaf33c6af10c8ab268c5d8d4485f14ae0e Mon Sep 17 00:00:00 2001 From: coder2020official Date: Sat, 21 May 2022 17:38:16 +0500 Subject: [PATCH 1/3] Aiohttp client session management improvements. --- telebot/asyncio_helper.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/telebot/asyncio_helper.py b/telebot/asyncio_helper.py index dde8c85..84837d9 100644 --- a/telebot/asyncio_helper.py +++ b/telebot/asyncio_helper.py @@ -1,6 +1,7 @@ import asyncio # for future uses import aiohttp from telebot import types +import ssl, certifi try: import ujson as json @@ -19,21 +20,23 @@ session = None FILE_URL = None -CONNECT_TIMEOUT = 15 -READ_TIMEOUT = 30 - -LONG_POLLING_TIMEOUT = 10 # Should be positive, short polling should be used for testing purposes only (https://core.telegram.org/bots/api#getupdates) -REQUEST_TIMEOUT = 10 +REQUEST_TIMEOUT = None MAX_RETRIES = 3 REQUEST_LIMIT = 50 class SessionManager: def __init__(self) -> None: - self.session = aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=REQUEST_LIMIT)) + self.ssl_context = ssl.create_default_context(cafile=certifi.where()) + self.session = aiohttp.ClientSession(connector=aiohttp.TCPConnector( + limit=REQUEST_LIMIT, ssl=self.ssl_context + )) + async def create_session(self): - self.session = aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=REQUEST_LIMIT)) + self.session = aiohttp.ClientSession(connector=aiohttp.TCPConnector( + limit=REQUEST_LIMIT, ssl=self.ssl_context + )) return self.session async def get_session(self): @@ -61,10 +64,11 @@ async def _process_request(token, url, method='get', params=None, files=None, re current_try +=1 try: async with session.request(method=method, url=API_URL.format(token, url), data=params, timeout=timeout, proxy=proxy) as resp: + got_result = True 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}")) + json_result = await _check_result(url, resp) if json_result: - got_result = True return json_result['result'] except (ApiTelegramException,ApiInvalidJSONException, ApiHTTPException) as e: raise e From 0c59d1187ecaaea1cc4a167623476e9d1ccd36b7 Mon Sep 17 00:00:00 2001 From: coder2020official Date: Sun, 22 May 2022 00:11:16 +0500 Subject: [PATCH 2/3] Update requirements.txt --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index b5086dc..53bf95b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ pytest requests==2.20.0 wheel==0.24.0 aiohttp>=3.8.0,<3.9.0 +certifi From 8da749ee051046717adf8c46efeac80531784272 Mon Sep 17 00:00:00 2001 From: coder2020official Date: Sun, 22 May 2022 01:02:55 +0500 Subject: [PATCH 3/3] Remove ssl --- requirements.txt | 3 +-- telebot/asyncio_helper.py | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index 53bf95b..d2b8256 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ pytest requests==2.20.0 wheel==0.24.0 -aiohttp>=3.8.0,<3.9.0 -certifi +aiohttp>=3.8.0,<3.9.0 \ No newline at end of file diff --git a/telebot/asyncio_helper.py b/telebot/asyncio_helper.py index 84837d9..63c1a53 100644 --- a/telebot/asyncio_helper.py +++ b/telebot/asyncio_helper.py @@ -1,7 +1,6 @@ import asyncio # for future uses import aiohttp from telebot import types -import ssl, certifi try: import ujson as json @@ -27,15 +26,14 @@ REQUEST_LIMIT = 50 class SessionManager: def __init__(self) -> None: - self.ssl_context = ssl.create_default_context(cafile=certifi.where()) self.session = aiohttp.ClientSession(connector=aiohttp.TCPConnector( - limit=REQUEST_LIMIT, ssl=self.ssl_context + limit=REQUEST_LIMIT )) async def create_session(self): self.session = aiohttp.ClientSession(connector=aiohttp.TCPConnector( - limit=REQUEST_LIMIT, ssl=self.ssl_context + limit=REQUEST_LIMIT )) return self.session