From bc54a5379cd10ca52d0957c29a3a6908e11fc454 Mon Sep 17 00:00:00 2001 From: Badiboy Date: Sat, 16 Jan 2021 23:50:25 +0300 Subject: [PATCH] Added short live sessions --- telebot/apihelper.py | 23 ++++++++++++++++++----- telebot/version.py | 2 +- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/telebot/apihelper.py b/telebot/apihelper.py index 98ed5eb..849bf55 100644 --- a/telebot/apihelper.py +++ b/telebot/apihelper.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- import time -import datetime +from datetime import datetime try: import ujson as json @@ -29,6 +29,7 @@ FILE_URL = None CONNECT_TIMEOUT = 3.5 READ_TIMEOUT = 9999 +SESSION_TIME_TO_LIVE = None # In seconds. None - live forever, 0 - one-time RETRY_ON_ERROR = False RETRY_TIMEOUT = 2 @@ -40,7 +41,19 @@ ENABLE_MIDDLEWARE = False def _get_req_session(reset=False): - return util.per_thread('req_session', lambda: session if session else requests.session(), reset) + if SESSION_TIME_TO_LIVE: + # If session TTL is set - check time passed + creation_date = util.per_thread('req_session_time', lambda: datetime(2021, 1, 1), reset) + if (datetime.now() - creation_date).total_seconds() > SESSION_TIME_TO_LIVE: + # Force session reset + reset = True + + if SESSION_TIME_TO_LIVE == 0: + # Session is one-time use + return requests.sessions.Session() + else: + # Session lives some time or forever once created. Default + return util.per_thread('req_session', lambda: session if session else requests.sessions.Session(), reset) def _make_request(token, method_name, method='get', params=None, files=None): @@ -713,7 +726,7 @@ def get_method_by_type(data_type): def kick_chat_member(token, chat_id, user_id, until_date=None): method_url = 'kickChatMember' payload = {'chat_id': chat_id, 'user_id': user_id} - if isinstance(until_date, datetime.datetime): + if isinstance(until_date, datetime): payload['until_date'] = until_date.timestamp() else: payload['until_date'] = until_date @@ -755,7 +768,7 @@ def restrict_chat_member( permissions_json = json.dumps(permissions) payload = {'chat_id': chat_id, 'user_id': user_id, 'permissions': permissions_json} if until_date is not None: - if isinstance(until_date, datetime.datetime): + if isinstance(until_date, datetime): payload['until_date'] = until_date.timestamp() else: payload['until_date'] = until_date @@ -1255,7 +1268,7 @@ def send_poll( if open_period is not None: payload['open_period'] = open_period if close_date is not None: - if isinstance(close_date, datetime.datetime): + if isinstance(close_date, datetime): payload['close_date'] = close_date.timestamp() else: payload['close_date'] = close_date diff --git a/telebot/version.py b/telebot/version.py index 308e7a3..fdd20d3 100644 --- a/telebot/version.py +++ b/telebot/version.py @@ -1,3 +1,3 @@ # Versions should comply with PEP440. # This line is parsed in setup.py: -__version__ = '3.7.5.u3' +__version__ = '3.7.5.u4'