From 790618a24ecd2935a7513b0a9ddf9f5409bd16e9 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Wed, 23 Dec 2020 13:33:34 +0100 Subject: [PATCH 01/11] added venv and egg-info to gitignore fixed emoji and added some more emoji for every level added support for use_emoji from initializer added support for disabling notification under certain level --- .gitignore | 4 +++- telegram_handler/formatters.py | 16 ++++++++++++---- telegram_handler/handlers.py | 10 ++++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 4b3f0e8..3bf63b4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ .cache/ .idea/ .coverage -htmlcov/ \ No newline at end of file +htmlcov/ +venv/ +/python_telegram_handler.egg-info/ diff --git a/telegram_handler/formatters.py b/telegram_handler/formatters.py index d63aaa9..4a02744 100644 --- a/telegram_handler/formatters.py +++ b/telegram_handler/formatters.py @@ -26,9 +26,11 @@ def formatException(self, *args, **kwargs): class EMOJI: - WHITE_CIRCLE = '\xE2\x9A\xAA' - BLUE_CIRCLE = '\xF0\x9F\x94\xB5' - RED_CIRCLE = '\xF0\x9F\x94\xB4' + WHITE_CIRCLE = '\U000026AA' + BLUE_CIRCLE = '\U0001F535' + YELLOW_CIRCLE = '🟡' + RED_CIRCLE = '\U0001F534' + BLACK_CIRCLE = '⚫️' class HtmlFormatter(TelegramFormatter): @@ -52,13 +54,19 @@ def format(self, record): record.name = escape_html(str(record.name)) if record.msg: record.msg = escape_html(record.getMessage()) + if record.message: + record.message = escape_html(record.message) if self.use_emoji: if record.levelno == logging.DEBUG: record.levelname += ' ' + EMOJI.WHITE_CIRCLE elif record.levelno == logging.INFO: record.levelname += ' ' + EMOJI.BLUE_CIRCLE - else: + elif record.levelno == logging.WARNING: + record.levelname += ' ' + EMOJI.YELLOW_CIRCLE + elif record.levelno == logging.ERROR: record.levelname += ' ' + EMOJI.RED_CIRCLE + else: + record.levelname += ' ' + EMOJI.BLACK_CIRCLE if hasattr(self, '_style'): return self._style.format(record) diff --git a/telegram_handler/handlers.py b/telegram_handler/handlers.py index f471806..25a99f0 100644 --- a/telegram_handler/handlers.py +++ b/telegram_handler/handlers.py @@ -20,10 +20,12 @@ class TelegramHandler(logging.Handler): last_response = None def __init__(self, token, chat_id=None, level=logging.NOTSET, timeout=2, disable_notification=False, - disable_web_page_preview=False, proxies=None): + disable_notification_logging_level=logging.ERROR, + disable_web_page_preview=False, proxies=None, **kwargs): self.token = token self.disable_web_page_preview = disable_web_page_preview self.disable_notification = disable_notification + self.disable_notification_logging_level = disable_notification_logging_level self.timeout = timeout self.proxies = proxies self.chat_id = chat_id or self.get_chat_id() @@ -34,7 +36,7 @@ def __init__(self, token, chat_id=None, level=logging.NOTSET, timeout=2, disable super(TelegramHandler, self).__init__(level=level) - self.setFormatter(HtmlFormatter()) + self.setFormatter(HtmlFormatter(use_emoji=kwargs.get('use_emoji', True))) @classmethod def format_url(cls, token, method): @@ -82,11 +84,11 @@ def send_document(self, text, document, **kwargs): def emit(self, record): text = self.format(record) - + disable_notification = (record.levelno < self.disable_notification_logging_level) or self.disable_notification data = { 'chat_id': self.chat_id, 'disable_web_page_preview': self.disable_web_page_preview, - 'disable_notification': self.disable_notification, + 'disable_notification': disable_notification, } if getattr(self.formatter, 'parse_mode', None): From 9c8fbb5c1e070e991ba70d3e890333fe55def9d7 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Wed, 23 Dec 2020 18:08:23 +0100 Subject: [PATCH 02/11] added support for kwargs (disable_notification and logging level) (unable to set this parameter in yaml overriding) --- telegram_handler/handlers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/telegram_handler/handlers.py b/telegram_handler/handlers.py index 25a99f0..15fa3d8 100644 --- a/telegram_handler/handlers.py +++ b/telegram_handler/handlers.py @@ -24,11 +24,12 @@ def __init__(self, token, chat_id=None, level=logging.NOTSET, timeout=2, disable disable_web_page_preview=False, proxies=None, **kwargs): self.token = token self.disable_web_page_preview = disable_web_page_preview - self.disable_notification = disable_notification + self.disable_notification = kwargs.get('custom_disable_notification', disable_notification) self.disable_notification_logging_level = disable_notification_logging_level self.timeout = timeout self.proxies = proxies self.chat_id = chat_id or self.get_chat_id() + level = kwargs.get('custom_logging_level', level) if not self.chat_id: level = logging.NOTSET logger.error('Did not get chat id. Setting handler logging level to NOTSET.') From 3138b3aeb9c80bfa7f27b5ee6392bb282dde4a1b Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Thu, 24 Dec 2020 16:51:31 +0100 Subject: [PATCH 03/11] added support for unicode and fixed test_formatters.py --- telegram_handler/formatters.py | 4 ++-- telegram_handler/handlers.py | 3 ++- tests/test_formatters.py | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/telegram_handler/formatters.py b/telegram_handler/formatters.py index 4a02744..fd319ff 100644 --- a/telegram_handler/formatters.py +++ b/telegram_handler/formatters.py @@ -28,9 +28,9 @@ def formatException(self, *args, **kwargs): class EMOJI: WHITE_CIRCLE = '\U000026AA' BLUE_CIRCLE = '\U0001F535' - YELLOW_CIRCLE = '🟡' + YELLOW_CIRCLE = '\U0001f7e1' RED_CIRCLE = '\U0001F534' - BLACK_CIRCLE = '⚫️' + BLACK_CIRCLE = '\u26AB' class HtmlFormatter(TelegramFormatter): diff --git a/telegram_handler/handlers.py b/telegram_handler/handlers.py index 15fa3d8..b50cc50 100644 --- a/telegram_handler/handlers.py +++ b/telegram_handler/handlers.py @@ -85,7 +85,8 @@ def send_document(self, text, document, **kwargs): def emit(self, record): text = self.format(record) - disable_notification = (record.levelno < self.disable_notification_logging_level) or self.disable_notification + disable_notification = (record.levelno is None or record.levelno < self.disable_notification_logging_level) or \ + self.disable_notification data = { 'chat_id': self.chat_id, 'disable_web_page_preview': self.disable_web_page_preview, diff --git a/tests/test_formatters.py b/tests/test_formatters.py index 27aecf0..7ef4bc8 100644 --- a/tests/test_formatters.py +++ b/tests/test_formatters.py @@ -42,7 +42,9 @@ def test_html_formatter_emoji(): emoji_level_map = { formatters.EMOJI.WHITE_CIRCLE: [logging.DEBUG], formatters.EMOJI.BLUE_CIRCLE: [logging.INFO], - formatters.EMOJI.RED_CIRCLE: [logging.WARNING, logging.ERROR] + formatters.EMOJI.YELLOW_CIRCLE: [logging.WARNING], + formatters.EMOJI.RED_CIRCLE: [logging.ERROR], + formatters.EMOJI.BLACK_CIRCLE: [logging.CRITICAL] } for emoji, levels in emoji_level_map.items(): From cc22cd717bfaac92544683657c79acadd8182b86 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Mon, 4 Jan 2021 12:18:21 +0100 Subject: [PATCH 04/11] added default level to logging.WARNING --- telegram_handler/handlers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram_handler/handlers.py b/telegram_handler/handlers.py index b50cc50..5106701 100644 --- a/telegram_handler/handlers.py +++ b/telegram_handler/handlers.py @@ -19,7 +19,7 @@ class TelegramHandler(logging.Handler): API_ENDPOINT = 'https://api.telegram.org' last_response = None - def __init__(self, token, chat_id=None, level=logging.NOTSET, timeout=2, disable_notification=False, + def __init__(self, token, chat_id=None, level=logging.WARNING, timeout=2, disable_notification=False, disable_notification_logging_level=logging.ERROR, disable_web_page_preview=False, proxies=None, **kwargs): self.token = token From 2e229964a02f340403f43ca01219089ec617b6c0 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Tue, 5 Jan 2021 10:40:30 +0100 Subject: [PATCH 05/11] trial with python-telegram-bot library v.13 and message queue to avoid flood limits --- requirements-dev.txt | 3 ++- telegram_handler/TelegramBotQueue.py | 24 ++++++++++++++++++++++++ telegram_handler/handlers.py | 8 +++++--- 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 telegram_handler/TelegramBotQueue.py diff --git a/requirements-dev.txt b/requirements-dev.txt index c22fcf4..58dfb10 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,4 +2,5 @@ requests mock pytest pytest-cov -tox \ No newline at end of file +tox +python-telegram-bot \ No newline at end of file diff --git a/telegram_handler/TelegramBotQueue.py b/telegram_handler/TelegramBotQueue.py new file mode 100644 index 0000000..872046d --- /dev/null +++ b/telegram_handler/TelegramBotQueue.py @@ -0,0 +1,24 @@ +import telegram +from telegram.ext import MessageQueue +from telegram.ext.messagequeue import queuedmessage + + +class MQBot(telegram.bot.Bot): + '''A subclass of Bot which delegates send method handling to MQ''' + def __init__(self, *args, is_queued_def=True, mqueue=None, **kwargs): + super(MQBot, self).__init__(*args, **kwargs) + # below 2 attributes should be provided for decorator usage + self._is_messages_queued_default = is_queued_def + self._msg_queue = mqueue or MessageQueue() + + def __del__(self): + try: + self._msg_queue.stop() + except: + pass + + @queuedmessage + def send_message(self, *args, **kwargs): + '''Wrapped method would accept new `queued` and `isgroup` + OPTIONAL arguments''' + return super(MQBot, self).send_message(*args, **kwargs) \ No newline at end of file diff --git a/telegram_handler/handlers.py b/telegram_handler/handlers.py index 5106701..0a6e00c 100644 --- a/telegram_handler/handlers.py +++ b/telegram_handler/handlers.py @@ -3,6 +3,7 @@ import requests +from telegram_handler.TelegramBotQueue import MQBot from telegram_handler.formatters import HtmlFormatter logger = logging.getLogger(__name__) @@ -38,6 +39,7 @@ def __init__(self, token, chat_id=None, level=logging.WARNING, timeout=2, disabl super(TelegramHandler, self).__init__(level=level) self.setFormatter(HtmlFormatter(use_emoji=kwargs.get('use_emoji', True))) + self.bot = MQBot(token=self.token) @classmethod def format_url(cls, token, method): @@ -97,9 +99,9 @@ def emit(self, record): data['parse_mode'] = self.formatter.parse_mode if len(text) < MAX_MESSAGE_LEN: - response = self.send_message(text, **data) + response = self.bot.send_message(text=text, **data) else: - response = self.send_document(text[:1000], document=BytesIO(text.encode()), **data) + response = self.bot.send_document(text=text[:1000], document=BytesIO(text.encode()), **data) - if response and not response.get('ok', False): + if not response: logger.warning('Telegram responded with ok=false status! {}'.format(response)) From 5a1b3d0a020167e3bb04d4bc9bfba1a8f6ee4396 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Tue, 5 Jan 2021 15:36:14 +0100 Subject: [PATCH 06/11] edited tests and patching correctly send message --- telegram_handler/TelegramBotQueue.py | 6 ++-- telegram_handler/__init__.py | 3 +- telegram_handler/handlers.py | 15 ++++++-- tests/test_handlers.py | 51 ++++++++++++++++------------ 4 files changed, 46 insertions(+), 29 deletions(-) diff --git a/telegram_handler/TelegramBotQueue.py b/telegram_handler/TelegramBotQueue.py index 872046d..55e8b58 100644 --- a/telegram_handler/TelegramBotQueue.py +++ b/telegram_handler/TelegramBotQueue.py @@ -5,11 +5,11 @@ class MQBot(telegram.bot.Bot): '''A subclass of Bot which delegates send method handling to MQ''' - def __init__(self, *args, is_queued_def=True, mqueue=None, **kwargs): + def __init__(self, *args, **kwargs): super(MQBot, self).__init__(*args, **kwargs) # below 2 attributes should be provided for decorator usage - self._is_messages_queued_default = is_queued_def - self._msg_queue = mqueue or MessageQueue() + self._is_messages_queued_default = kwargs.get('is_queued_def', True) + self._msg_queue = kwargs.get('mqueue') or MessageQueue() def __del__(self): try: diff --git a/telegram_handler/__init__.py b/telegram_handler/__init__.py index 9cb97d3..be62d98 100644 --- a/telegram_handler/__init__.py +++ b/telegram_handler/__init__.py @@ -1,5 +1,4 @@ -from telegram_handler.formatters import * -from telegram_handler.handlers import * +from telegram_handler.handlers import TelegramHandler def main(): # pragma: no cover diff --git a/telegram_handler/handlers.py b/telegram_handler/handlers.py index 0a6e00c..debc6a6 100644 --- a/telegram_handler/handlers.py +++ b/telegram_handler/handlers.py @@ -75,6 +75,7 @@ def request(self, method, **kwargs): return response + """ def send_message(self, text, **kwargs): data = {'text': text} data.update(kwargs) @@ -84,6 +85,7 @@ def send_document(self, text, document, **kwargs): data = {'caption': text} data.update(kwargs) return self.request('sendDocument', data=data, files={'document': ('traceback.txt', document, 'text/plain')}) + """ def emit(self, record): text = self.format(record) @@ -98,10 +100,19 @@ def emit(self, record): if getattr(self.formatter, 'parse_mode', None): data['parse_mode'] = self.formatter.parse_mode + kwargs = dict() + if self.timeout is not None: + kwargs.setdefault('timeout', self.timeout) + if self.proxies is not None: + kwargs.setdefault('proxies', self.proxies) + if len(text) < MAX_MESSAGE_LEN: - response = self.bot.send_message(text=text, **data) + response = self.bot.send_message(text=text, api_kwargs=kwargs, **data) else: - response = self.bot.send_document(text=text[:1000], document=BytesIO(text.encode()), **data) + del data['disable_web_page_preview'] + response = self.bot.send_document(caption=text[:1000], api_kwargs=kwargs, document=BytesIO(text.encode()), + filename="traceback.txt", + **data) if not response: logger.warning('Telegram responded with ok=false status! {}'.format(response)) diff --git a/tests/test_handlers.py b/tests/test_handlers.py index 49e7a55..ca10a34 100644 --- a/tests/test_handlers.py +++ b/tests/test_handlers.py @@ -4,6 +4,10 @@ import mock import pytest import requests +from _pytest.monkeypatch import MonkeyPatch + +message_queue_patch = MonkeyPatch() +message_queue_patch.setattr("telegram_handler.TelegramBotQueue.MQBot.__init__", lambda *_, **kwargs: None) import telegram_handler.handlers @@ -52,21 +56,22 @@ def handler(): def test_emit(handler): record = logging.makeLogRecord({'msg': 'hello'}) - with mock.patch('requests.post') as patch: + with mock.patch('telegram_handler.TelegramBotQueue.MQBot.send_message') as patch: handler.emit(record) assert patch.called assert patch.call_count == 1 - assert patch.call_args[1]['json']['chat_id'] == 'bar' - assert 'hello' in patch.call_args[1]['json']['text'] - assert patch.call_args[1]['json']['parse_mode'] == 'HTML' + assert patch.call_args[1]['chat_id'] == 'bar' + assert 'hello' in patch.call_args[1]['text'] + assert patch.call_args[1]['parse_mode'] == 'HTML' + def test_emit_big_message(handler): message = '*' * telegram_handler.handlers.MAX_MESSAGE_LEN record = logging.makeLogRecord({'msg': message}) - with mock.patch('requests.post') as patch: + with mock.patch('telegram_handler.TelegramBotQueue.MQBot.send_document') as patch: handler.emit(record) assert patch.called @@ -76,25 +81,25 @@ def test_emit_big_message(handler): def test_emit_http_exception(handler): record = logging.makeLogRecord({'msg': 'hello'}) - with mock.patch('requests.post') as patch: - response = requests.Response() - response.status_code = 500 - response._content = 'Server error'.encode() - patch.return_value = response + with mock.patch('telegram_handler.TelegramBotQueue.MQBot.send_message') as patch: + # response = requests.Response() + # response.status_code = 500 + # response._content = 'Server error'.encode() + patch.return_value = None handler.emit(record) - assert telegram_handler.handlers.logger.handlers[0].messages['error'] - assert telegram_handler.handlers.logger.handlers[0].messages['debug'] + assert telegram_handler.handlers.logger.handlers[0].messages['warning'] + # assert telegram_handler.handlers.logger.handlers[0].messages['debug'] def test_emit_telegram_error(handler): record = logging.makeLogRecord({'msg': 'hello'}) - with mock.patch('requests.post') as patch: - response = requests.Response() - response.status_code = 200 - response._content = json.dumps({'ok': False}).encode() - patch.return_value = response + with mock.patch('telegram_handler.TelegramBotQueue.MQBot.send_message') as patch: + #response = requests.Response() + #response.status_code = 200 + #response._content = json.dumps({'ok': False}).encode() + patch.return_value = None handler.emit(record) assert telegram_handler.handlers.logger.handlers[0].messages['warning'] @@ -158,6 +163,7 @@ def test_handler_init_without_chat(): assert handler.level == logging.NOTSET + def test_handler_respects_proxy(): proxies = { 'http': 'http_proxy_sample', @@ -165,20 +171,21 @@ def test_handler_respects_proxy(): } handler = telegram_handler.handlers.TelegramHandler('foo', 'bar', level=logging.INFO, proxies=proxies) - + record = logging.makeLogRecord({'msg': 'hello'}) - with mock.patch('requests.post') as patch: + with mock.patch('telegram_handler.TelegramBotQueue.MQBot.send_message') as patch: handler.emit(record) - assert patch.call_args[1]['proxies'] == proxies + assert patch.call_args[1]['api_kwargs']['proxies'] == proxies + def test_custom_formatter(handler): handler.setFormatter(logging.Formatter()) record = logging.makeLogRecord({'msg': 'hello'}) - with mock.patch('requests.post') as patch: + with mock.patch('telegram_handler.TelegramBotQueue.MQBot.send_message') as patch: handler.emit(record) - assert 'parse_mode' not in patch.call_args[1]['json'] + assert 'parse_mode' not in patch.call_args[1] From 32744eb2d69f2924a32da3ea7e98c3ecb7401922 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Tue, 5 Jan 2021 15:45:02 +0100 Subject: [PATCH 07/11] added python-telegram-bot version 5.0 --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 58dfb10..aff8760 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,4 +3,4 @@ mock pytest pytest-cov tox -python-telegram-bot \ No newline at end of file +python-telegram-bot==5.0 \ No newline at end of file From 2a12c70273c2c870d2c432a99418873863c3d638 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Tue, 5 Jan 2021 15:49:18 +0100 Subject: [PATCH 08/11] removed support for python older than python 3.6 --- .travis.yml | 6 +++--- requirements-dev.txt | 2 +- tox.ini | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index cd6c9a8..c3a248f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,10 @@ language: python cache: pip python: - - "2.7" - - "3.4" - - "3.5" - "3.6" + - "3.7" + - "3.8" + - "3.9" install: - pip install tox-travis codecov diff --git a/requirements-dev.txt b/requirements-dev.txt index aff8760..58dfb10 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,4 +3,4 @@ mock pytest pytest-cov tox -python-telegram-bot==5.0 \ No newline at end of file +python-telegram-bot \ No newline at end of file diff --git a/tox.ini b/tox.ini index ebece3b..8a13c84 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py27,py30,py34,py35,py36,coverage +envlist = py36,py37,py38,py39,coverage [testenv] skip_install = True @@ -9,7 +9,7 @@ deps= commands=py.test tests --cov-fail-under 90 --color=auto --cov=telegram_handler --cov-report=term-missing [testenv:coverage] -basepython = python3.5 +basepython = python3.6 passenv = CI TRAVIS_BUILD_ID TRAVIS TRAVIS_BRANCH TRAVIS_JOB_NUMBER TRAVIS_PULL_REQUEST TRAVIS_JOB_ID TRAVIS_REPO_SLUG TRAVIS_COMMIT deps = codecov>=1.4.0 From 9c13f6db386f3b3a71914ebd43d8b4ef7dbe3f8f Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Tue, 12 Jan 2021 19:06:55 +0100 Subject: [PATCH 09/11] bug fixing custom enable notification --- telegram_handler/handlers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/telegram_handler/handlers.py b/telegram_handler/handlers.py index debc6a6..cd5577d 100644 --- a/telegram_handler/handlers.py +++ b/telegram_handler/handlers.py @@ -25,7 +25,10 @@ def __init__(self, token, chat_id=None, level=logging.WARNING, timeout=2, disabl disable_web_page_preview=False, proxies=None, **kwargs): self.token = token self.disable_web_page_preview = disable_web_page_preview - self.disable_notification = kwargs.get('custom_disable_notification', disable_notification) + # self.disable_notification = kwargs.get('custom_disable_notification', disable_notification) + self.disable_notification = disable_notification + if 'custom_enable_notification' in kwargs: + self.disable_notification = not kwargs.get('custom_enable_notification') self.disable_notification_logging_level = disable_notification_logging_level self.timeout = timeout self.proxies = proxies From 858bf4dccc88f61c7614c46a7c13d9b3de3b9ea7 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Thu, 1 Feb 2024 19:33:12 +0100 Subject: [PATCH 10/11] chore: insert try except --- telegram_handler/handlers.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/telegram_handler/handlers.py b/telegram_handler/handlers.py index cd5577d..f2cf3e7 100644 --- a/telegram_handler/handlers.py +++ b/telegram_handler/handlers.py @@ -109,13 +109,21 @@ def emit(self, record): if self.proxies is not None: kwargs.setdefault('proxies', self.proxies) - if len(text) < MAX_MESSAGE_LEN: - response = self.bot.send_message(text=text, api_kwargs=kwargs, **data) - else: - del data['disable_web_page_preview'] - response = self.bot.send_document(caption=text[:1000], api_kwargs=kwargs, document=BytesIO(text.encode()), - filename="traceback.txt", - **data) - - if not response: - logger.warning('Telegram responded with ok=false status! {}'.format(response)) + + + try: + if len(text) < MAX_MESSAGE_LEN: + response = self.bot.send_message(text=text, api_kwargs=kwargs, **data) + else: + del data['disable_web_page_preview'] + response = self.bot.send_document(caption=text[:1000], api_kwargs=kwargs, document=BytesIO(text.encode()), + filename="traceback.txt", + **data) + if not response: + logger.warning( + 'Telegram responded with ok=false status! {}'.format( + response)) + except Exception as e: + logger.exception("Error while sending message to telegram, " + f"{str(e)}") + logger.debug(str(kwargs)) From bbd8e7318f43a1c37fa7422004b50fdcfc027789 Mon Sep 17 00:00:00 2001 From: Gabriele Calarota Date: Fri, 9 Feb 2024 12:13:03 +0100 Subject: [PATCH 11/11] feat: add host to message on telegram --- telegram_handler/formatters.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/telegram_handler/formatters.py b/telegram_handler/formatters.py index fd319ff..fffbfeb 100644 --- a/telegram_handler/formatters.py +++ b/telegram_handler/formatters.py @@ -8,7 +8,8 @@ class TelegramFormatter(logging.Formatter): """Base formatter class suitable for use with `TelegramHandler`""" - fmt = "%(asctime)s %(levelname)s\n[%(name)s:%(funcName)s]\n%(message)s" + fmt = ("%(asctime)s %(levelname)s\n[%(host)s:%(name)s:%(funcName)s]\n%(" + "message)s") parse_mode = None def __init__(self, fmt=None, *args, **kwargs): @@ -17,7 +18,8 @@ def __init__(self, fmt=None, *args, **kwargs): class MarkdownFormatter(TelegramFormatter): """Markdown formatter for telegram.""" - fmt = '`%(asctime)s` *%(levelname)s*\n[%(name)s:%(funcName)s]\n%(message)s' + fmt = ('`%(asctime)s` *%(levelname)s*\n[%(host)s:%(name)s:%(' + 'funcName)s]\n%(message)s') parse_mode = 'Markdown' def formatException(self, *args, **kwargs): @@ -35,7 +37,8 @@ class EMOJI: class HtmlFormatter(TelegramFormatter): """HTML formatter for telegram.""" - fmt = '%(asctime)s %(levelname)s\nFrom %(name)s:%(funcName)s\n%(message)s' + fmt = ('%(asctime)s %(levelname)s\nFrom %(host)s:%(' + 'name)s:%(funcName)s\n%(message)s') parse_mode = 'HTML' def __init__(self, *args, **kwargs):