mirror of
https://github.com/python-telegram-bot/python-telegram-bot.git
synced 2024-11-21 22:56:38 +01:00
Log Received Data on Deserialization Errors (#4304)
This commit is contained in:
parent
42d7c8c477
commit
98bed6f01a
4 changed files with 36 additions and 2 deletions
|
@ -4374,7 +4374,16 @@ class Bot(TelegramObject, AsyncContextManager["Bot"]):
|
||||||
else:
|
else:
|
||||||
self._LOGGER.debug("No new updates found.")
|
self._LOGGER.debug("No new updates found.")
|
||||||
|
|
||||||
return Update.de_list(result, self)
|
try:
|
||||||
|
return Update.de_list(result, self)
|
||||||
|
except Exception as exc:
|
||||||
|
# This logging is in place mostly b/c we can't access the raw json data in Updater,
|
||||||
|
# where the exception is caught and logged again. Still, it might also be beneficial
|
||||||
|
# for custom usages of `get_updates`.
|
||||||
|
self._LOGGER.critical(
|
||||||
|
"Error while parsing updates! Received data was %r", result, exc_info=exc
|
||||||
|
)
|
||||||
|
raise exc
|
||||||
|
|
||||||
async def set_webhook(
|
async def set_webhook(
|
||||||
self,
|
self,
|
||||||
|
|
|
@ -168,7 +168,8 @@ class TelegramHandler(tornado.web.RequestHandler):
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
_LOGGER.critical(
|
_LOGGER.critical(
|
||||||
"Something went wrong processing the data received from Telegram. "
|
"Something went wrong processing the data received from Telegram. "
|
||||||
"Received data was *not* processed!",
|
"Received data was *not* processed! Received data was: %r",
|
||||||
|
data,
|
||||||
exc_info=exc,
|
exc_info=exc,
|
||||||
)
|
)
|
||||||
raise tornado.web.HTTPError(
|
raise tornado.web.HTTPError(
|
||||||
|
|
|
@ -1179,6 +1179,7 @@ class TestUpdater:
|
||||||
|
|
||||||
assert len(caplog.records) == 1
|
assert len(caplog.records) == 1
|
||||||
assert caplog.records[-1].getMessage().startswith("Something went wrong processing")
|
assert caplog.records[-1].getMessage().startswith("Something went wrong processing")
|
||||||
|
assert "Received data was: {" in caplog.records[-1].getMessage()
|
||||||
assert caplog.records[-1].name == "telegram.ext.Updater"
|
assert caplog.records[-1].name == "telegram.ext.Updater"
|
||||||
assert response.status_code == 400
|
assert response.status_code == 400
|
||||||
assert response.text == self.response_text.format(
|
assert response.text == self.response_text.format(
|
||||||
|
|
|
@ -535,6 +535,29 @@ class TestBotWithoutRequest:
|
||||||
123, "text", api_kwargs={"unknown_kwarg_1": 7, "unknown_kwarg_2": 5}
|
123, "text", api_kwargs={"unknown_kwarg_1": 7, "unknown_kwarg_2": 5}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def test_get_updates_deserialization_error(self, bot, monkeypatch, caplog):
|
||||||
|
async def faulty_do_request(*args, **kwargs):
|
||||||
|
return (
|
||||||
|
HTTPStatus.OK,
|
||||||
|
b'{"ok": true, "result": [{"update_id": "1", "message": "unknown_format"}]}',
|
||||||
|
)
|
||||||
|
|
||||||
|
monkeypatch.setattr(HTTPXRequest, "do_request", faulty_do_request)
|
||||||
|
|
||||||
|
bot = PytestExtBot(get_updates_request=HTTPXRequest(), token=bot.token)
|
||||||
|
|
||||||
|
with caplog.at_level(logging.CRITICAL), pytest.raises(AttributeError):
|
||||||
|
await bot.get_updates()
|
||||||
|
|
||||||
|
assert len(caplog.records) == 1
|
||||||
|
assert caplog.records[0].name == "telegram.ext.ExtBot"
|
||||||
|
assert caplog.records[0].levelno == logging.CRITICAL
|
||||||
|
assert caplog.records[0].getMessage() == (
|
||||||
|
"Error while parsing updates! Received data was "
|
||||||
|
"[{'update_id': '1', 'message': 'unknown_format'}]"
|
||||||
|
)
|
||||||
|
assert caplog.records[0].exc_info[0] is AttributeError
|
||||||
|
|
||||||
async def test_answer_web_app_query(self, bot, raw_bot, monkeypatch):
|
async def test_answer_web_app_query(self, bot, raw_bot, monkeypatch):
|
||||||
params = False
|
params = False
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue