diff --git a/airflow/providers/telegram/hooks/telegram.py b/airflow/providers/telegram/hooks/telegram.py index 143574bf52252..3f7e0176b9e72 100644 --- a/airflow/providers/telegram/hooks/telegram.py +++ b/airflow/providers/telegram/hooks/telegram.py @@ -142,17 +142,18 @@ def send_message(self, api_params: dict) -> None: :param api_params: params for telegram_instance.send_message. It can also be used to override chat_id """ - kwargs = { - "chat_id": self.chat_id, + kwargs: dict[str, int | str | bool] = { "parse_mode": telegram.constants.ParseMode.HTML, "disable_web_page_preview": True, } + if self.chat_id is not None: + kwargs["chat_id"] = self.chat_id kwargs.update(api_params) if "text" not in kwargs or kwargs["text"] is None: raise AirflowException("'text' must be provided for telegram message") - if kwargs["chat_id"] is None: + if kwargs.get("chat_id") is None: raise AirflowException("'chat_id' must be provided for telegram message") response = asyncio.run(self.connection.send_message(**kwargs)) diff --git a/tests/providers/telegram/hooks/test_telegram.py b/tests/providers/telegram/hooks/test_telegram.py index 2de2df74411e7..56ee38504208f 100644 --- a/tests/providers/telegram/hooks/test_telegram.py +++ b/tests/providers/telegram/hooks/test_telegram.py @@ -93,21 +93,21 @@ def test_should_raise_exception_if_message_text_is_not_provided(self, mock_get_c hook = TelegramHook(telegram_conn_id="telegram_default") error_message = "'text' must be provided for telegram message" with pytest.raises(airflow.exceptions.AirflowException, match=error_message): - hook.send_message({"chat_id": -420913222}) + hook.send_message({"chat_id": "-420913222"}) @mock.patch("airflow.providers.telegram.hooks.telegram.TelegramHook.get_conn") def test_should_send_message_if_all_parameters_are_correctly_provided(self, mock_get_conn): mock_get_conn.return_value = AsyncMock(password="some_token") hook = TelegramHook(telegram_conn_id="telegram_default") - hook.send_message({"chat_id": -420913222, "text": "test telegram message"}) + hook.send_message({"chat_id": "-420913222", "text": "test telegram message"}) mock_get_conn.return_value.send_message.return_value = "OK." mock_get_conn.assert_called_once() mock_get_conn.return_value.send_message.assert_called_once_with( **{ - "chat_id": -420913222, + "chat_id": "-420913222", "parse_mode": "HTML", "disable_web_page_preview": True, "text": "test telegram message", @@ -118,7 +118,7 @@ def test_should_send_message_if_all_parameters_are_correctly_provided(self, mock def test_should_send_message_if_chat_id_is_provided_through_constructor(self, mock_get_conn): mock_get_conn.return_value = AsyncMock(password="some_token") - hook = TelegramHook(telegram_conn_id="telegram_default", chat_id=-420913222) + hook = TelegramHook(telegram_conn_id="telegram_default", chat_id="-420913222") hook.send_message({"text": "test telegram message"}) mock_get_conn.return_value.send_message.return_value = "OK." @@ -126,7 +126,7 @@ def test_should_send_message_if_chat_id_is_provided_through_constructor(self, mo mock_get_conn.assert_called_once() mock_get_conn.return_value.send_message.assert_called_once_with( **{ - "chat_id": -420913222, + "chat_id": "-420913222", "parse_mode": "HTML", "disable_web_page_preview": True, "text": "test telegram message", @@ -182,7 +182,7 @@ def side_effect(*args, **kwargs): def test_should_send_message_if_token_is_provided(self, mock_get_conn): mock_get_conn.return_value = AsyncMock(password="some_token") - hook = TelegramHook(token=TELEGRAM_TOKEN, chat_id=-420913222) + hook = TelegramHook(token=TELEGRAM_TOKEN, chat_id="-420913222") hook.send_message({"text": "test telegram message"}) mock_get_conn.return_value.send_message.return_value = "OK." @@ -190,7 +190,7 @@ def test_should_send_message_if_token_is_provided(self, mock_get_conn): mock_get_conn.assert_called_once() mock_get_conn.return_value.send_message.assert_called_once_with( **{ - "chat_id": -420913222, + "chat_id": "-420913222", "parse_mode": "HTML", "disable_web_page_preview": True, "text": "test telegram message",