diff --git a/db_edit.py b/db_edit.py index 6bf67e0..9d77077 100644 --- a/db_edit.py +++ b/db_edit.py @@ -1049,6 +1049,12 @@ def api_publish_post(post_id): if isinstance(result, Exception): raise result + + # Проверяем, что публикация действительно успешна (результат True) + if result is not True: + error_msg = f"Публикация поста ID: {post_id} не удалась (результат: {result})" + log_event(error_msg) + return jsonify({'success': False, 'error': error_msg}), 500 log_event(f"Публикация поста ID: {post_id} выполнена успешно") return jsonify({'success': True}) diff --git a/tg_publish.py b/tg_publish.py index 0829f46..d42d21e 100644 --- a/tg_publish.py +++ b/tg_publish.py @@ -7,6 +7,7 @@ import html import json import re import httpx +import traceback from datetime import datetime, timezone from dotenv import load_dotenv from formatter import get_event_text @@ -205,7 +206,17 @@ async def publish_to_tg(vk_post_id): 'parse_mode': 'HTML', 'disable_notification': PUBLISH_SILENTLY } - photo_response = await httpx_client.post(send_photo_url, json=photo_payload) + try: + photo_response = await httpx_client.post(send_photo_url, json=photo_payload) + except httpx.TimeoutException as e: + logger.error(f"ТАЙМАУТ при отправке фото для записи VK ID {vk_post_id}") + logger.error(f"Тип исключения: {type(e).__name__}") + logger.error(f"Сообщение об ошибке: {str(e)}") + logger.error(f"Полная информация об исключении: {repr(e)}") + if hasattr(e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") + raise # Пробрасываем таймаут наверх if photo_response.status_code == 200: photo_result = photo_response.json() @@ -235,7 +246,12 @@ async def publish_to_tg(vk_post_id): raise except httpx.TimeoutException as e: logger.error(f"ТАЙМАУТ при отправке изображения для записи VK ID {vk_post_id}") - logger.error(f"Детали таймаута: {type(e).__name__}: {e}") + logger.error(f"Тип исключения: {type(e).__name__}") + logger.error(f"Сообщение об ошибке: {str(e)}") + logger.error(f"Полная информация об исключении: {repr(e)}") + if hasattr(e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") raise # Пробрасываем таймаут наверх except Exception as e: logger.warning(f"Не удалось отправить изображение для записи VK ID {vk_post_id}: {e}. Отправляем текстовое сообщение.") @@ -246,7 +262,17 @@ async def publish_to_tg(vk_post_id): 'disable_notification': PUBLISH_SILENTLY, 'disable_web_page_preview': True } - text_response = await httpx_client.post(send_message_url, json=text_payload) + try: + text_response = await httpx_client.post(send_message_url, json=text_payload) + except httpx.TimeoutException as timeout_e: + logger.error(f"ТАЙМАУТ при отправке текста (fallback) для записи VK ID {vk_post_id}") + logger.error(f"Тип исключения: {type(timeout_e).__name__}") + logger.error(f"Сообщение об ошибке: {str(timeout_e)}") + logger.error(f"Полная информация об исключении: {repr(timeout_e)}") + if hasattr(timeout_e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {timeout_e.request.method} {timeout_e.request.url if hasattr(timeout_e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") + raise # Пробрасываем таймаут наверх if text_response.status_code == 200: text_result = text_response.json() @@ -280,7 +306,17 @@ async def publish_to_tg(vk_post_id): 'disable_notification': PUBLISH_SILENTLY, 'disable_web_page_preview': True } - text_response = await httpx_client.post(send_message_url, json=text_payload) + try: + text_response = await httpx_client.post(send_message_url, json=text_payload) + except httpx.TimeoutException as e: + logger.error(f"ТАЙМАУТ при отправке текста для записи VK ID {vk_post_id}") + logger.error(f"Тип исключения: {type(e).__name__}") + logger.error(f"Сообщение об ошибке: {str(e)}") + logger.error(f"Полная информация об исключении: {repr(e)}") + if hasattr(e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") + raise # Пробрасываем таймаут наверх if text_response.status_code == 200: text_result = text_response.json() @@ -333,7 +369,14 @@ async def publish_to_tg(vk_post_id): 'caption': final_text, 'parse_mode': 'HTML' } - edit_caption_response = await httpx_client.post(edit_caption_url, json=edit_caption_payload) + try: + edit_caption_response = await httpx_client.post(edit_caption_url, json=edit_caption_payload) + except httpx.TimeoutException as e: + logger.error(f"ТАЙМАУТ при редактировании подписи для записи VK ID {vk_post_id}") + logger.error(f"Детали таймаута: {type(e).__name__}: {e}") + if hasattr(e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}") + raise # Пробрасываем таймаут наверх if edit_caption_response.status_code == 200: edit_result = edit_caption_response.json() @@ -359,7 +402,12 @@ async def publish_to_tg(vk_post_id): raise except httpx.TimeoutException as e: logger.error(f"ТАЙМАУТ при редактировании подписи для записи VK ID {vk_post_id}") - logger.error(f"Детали таймаута: {type(e).__name__}: {e}") + logger.error(f"Тип исключения: {type(e).__name__}") + logger.error(f"Сообщение об ошибке: {str(e)}") + logger.error(f"Полная информация об исключении: {repr(e)}") + if hasattr(e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") raise # Пробрасываем таймаут наверх except Exception as e: logger.warning(f"Не удалось отредактировать подпись для записи VK ID {vk_post_id}: {e}. Пробуем отредактировать текстовое сообщение.") @@ -370,7 +418,17 @@ async def publish_to_tg(vk_post_id): 'parse_mode': 'HTML', 'disable_web_page_preview': True } - edit_text_response = await httpx_client.post(edit_text_url, json=edit_text_payload) + try: + edit_text_response = await httpx_client.post(edit_text_url, json=edit_text_payload) + except httpx.TimeoutException as timeout_e: + logger.error(f"ТАЙМАУТ при редактировании текста (fallback) для записи VK ID {vk_post_id}") + logger.error(f"Тип исключения: {type(timeout_e).__name__}") + logger.error(f"Сообщение об ошибке: {str(timeout_e)}") + logger.error(f"Полная информация об исключении: {repr(timeout_e)}") + if hasattr(timeout_e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {timeout_e.request.method} {timeout_e.request.url if hasattr(timeout_e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") + raise # Пробрасываем таймаут наверх if edit_text_response.status_code == 200: edit_result = edit_text_response.json() @@ -400,7 +458,17 @@ async def publish_to_tg(vk_post_id): 'parse_mode': 'HTML', 'disable_web_page_preview': True } - edit_text_response = await httpx_client.post(edit_text_url, json=edit_text_payload) + try: + edit_text_response = await httpx_client.post(edit_text_url, json=edit_text_payload) + except httpx.TimeoutException as e: + logger.error(f"ТАЙМАУТ при редактировании текста для записи VK ID {vk_post_id}") + logger.error(f"Тип исключения: {type(e).__name__}") + logger.error(f"Сообщение об ошибке: {str(e)}") + logger.error(f"Полная информация об исключении: {repr(e)}") + if hasattr(e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") + raise # Пробрасываем таймаут наверх if edit_text_response.status_code == 200: edit_result = edit_text_response.json() @@ -451,7 +519,17 @@ async def publish_to_tg(vk_post_id): else: poll_payload['close_date'] = post['poll_end_date'] - poll_response = await httpx_client.post(send_poll_url, json=poll_payload) + try: + poll_response = await httpx_client.post(send_poll_url, json=poll_payload) + except httpx.TimeoutException as e: + logger.error(f"ТАЙМАУТ при отправке опроса для записи VK ID {vk_post_id}") + logger.error(f"Тип исключения: {type(e).__name__}") + logger.error(f"Сообщение об ошибке: {str(e)}") + logger.error(f"Полная информация об исключении: {repr(e)}") + if hasattr(e, 'request'): + logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") + raise # Пробрасываем таймаут наверх if poll_response.status_code == 200: poll_result = poll_response.json() @@ -516,9 +594,12 @@ async def publish_to_tg(vk_post_id): raise except httpx.TimeoutException as e: logger.error(f"ТАЙМАУТ при публикации записи VK ID {vk_post_id}") - logger.error(f"Детали таймаута: {type(e).__name__}: {e}") + logger.error(f"Тип исключения: {type(e).__name__}") + logger.error(f"Сообщение об ошибке: {str(e)}") + logger.error(f"Полная информация об исключении: {repr(e)}") if hasattr(e, 'request'): logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}") + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") # Убеждаемся, что БД не обновляется при таймауте return False except Exception as e: