[ВОЛК] доработка тестового httpx постера до картинок
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-12-21 18:55:15 +03:00
parent ebaa7e89e4
commit e3de30e429
+173
View File
@@ -331,6 +331,179 @@ async def test_telegram_publish():
import traceback import traceback
logger.error(f"Трассировка стека:\n{traceback.format_exc()}") logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
# Публикуем второе сообщение с картинкой
try:
logger.info("=" * 80)
logger.info("ПОПЫТКА ОТПРАВКИ ТЕСТОВОГО СООБЩЕНИЯ С КАРТИНКОЙ")
logger.info("=" * 80)
send_photo_url = f"https://api.telegram.org/bot{POSTER_BOT_TOKEN}/sendPhoto"
image_url = "https://base.volk-nn.ru/uploads/events/volk26/volk26_event/20251210_175059_0.jpg"
# Формируем текст для сообщения с картинкой
photo_caption = f"{test_tags}\n{test_unit_name}\n<b>Тестовое сообщение с картинкой</b>\n\nЭто тестовое сообщение с изображением для проверки работы публикации фото в Telegram."
logger.info(f"URL запроса: {send_photo_url}")
logger.info(f"Метод: POST")
logger.info(f"Параметры запроса:")
logger.info(f" chat_id: {CHANNEL_ID}")
logger.info(f" photo_url: {image_url}")
logger.info(f" photo_url_length: {len(image_url)}")
logger.info(f" caption_length: {len(photo_caption)}")
logger.info(f" parse_mode: HTML")
logger.info(f" disable_notification: {PUBLISH_SILENTLY}")
photo_payload = {
'chat_id': CHANNEL_ID,
'photo': image_url,
'caption': photo_caption,
'parse_mode': 'HTML',
'disable_notification': PUBLISH_SILENTLY
}
photo_start_time = datetime.now()
photo_response = await httpx_client.post(send_photo_url, json=photo_payload)
photo_end_time = datetime.now()
photo_duration = (photo_end_time - photo_start_time).total_seconds()
logger.info(f"Статус ответа: {photo_response.status_code}")
logger.info(f"Время запроса: {photo_duration:.2f} секунд")
if photo_response.status_code == 200:
photo_result = photo_response.json()
if photo_result.get('ok'):
photo_message_data = photo_result.get('result', {})
photo_message_id = photo_message_data.get('message_id')
photo_chat_data = photo_message_data.get('chat', {})
logger.info("=" * 80)
logger.info("СООБЩЕНИЕ С КАРТИНКОЙ УСПЕШНО ОТПРАВЛЕНО!")
logger.info("=" * 80)
logger.info(f"Message ID: {photo_message_id}")
logger.info(f"Chat ID: {photo_chat_data.get('id')}")
logger.info(f"Chat type: {photo_chat_data.get('type')}")
logger.info(f"Chat title: {photo_chat_data.get('title', 'N/A')}")
logger.info(f"Время отправки: {photo_duration:.2f} секунд")
logger.info(f"Дата сообщения: {photo_message_data.get('date')}")
logger.info("=" * 80)
# Редактируем сообщение с картинкой, добавляя информацию о редактировании
try:
logger.info("=" * 80)
logger.info("ПОПЫТКА РЕДАКТИРОВАНИЯ СООБЩЕНИЯ С КАРТИНКОЙ")
logger.info("=" * 80)
edit_photo_caption_url = f"https://api.telegram.org/bot{POSTER_BOT_TOKEN}/editMessageCaption"
logger.info(f"URL запроса: {edit_photo_caption_url}")
logger.info(f"Метод: POST")
logger.info(f"Параметры запроса:")
logger.info(f" chat_id: {CHANNEL_ID}")
logger.info(f" message_id: {photo_message_id}")
# Добавляем информацию о редактировании в конец подписи
edited_photo_caption = f"{photo_caption}\n\n<i>Сообщение с картинкой отредактировано через httpx клиент</i>"
logger.info(f" caption_length (после редактирования): {len(edited_photo_caption)}")
logger.info(f" parse_mode: HTML")
edit_photo_payload = {
'chat_id': CHANNEL_ID,
'message_id': photo_message_id,
'caption': edited_photo_caption,
'parse_mode': 'HTML'
}
edit_photo_start_time = datetime.now()
edit_photo_response = await httpx_client.post(edit_photo_caption_url, json=edit_photo_payload)
edit_photo_end_time = datetime.now()
edit_photo_duration = (edit_photo_end_time - edit_photo_start_time).total_seconds()
logger.info(f"Статус ответа: {edit_photo_response.status_code}")
logger.info(f"Время запроса: {edit_photo_duration:.2f} секунд")
if edit_photo_response.status_code == 200:
edit_photo_result = edit_photo_response.json()
if edit_photo_result.get('ok'):
logger.info("=" * 80)
logger.info("СООБЩЕНИЕ С КАРТИНКОЙ УСПЕШНО ОТРЕДАКТИРОВАНО!")
logger.info("=" * 80)
logger.info(f"Время редактирования: {edit_photo_duration:.2f} секунд")
logger.info("=" * 80)
else:
logger.error(f"Ошибка в ответе API при редактировании подписи: {edit_photo_result}")
logger.error(f"Описание ошибки: {edit_photo_result.get('description', 'N/A')}")
logger.error(f"Код ошибки: {edit_photo_result.get('error_code', 'N/A')}")
else:
logger.error(f"HTTP ошибка при редактировании подписи: {edit_photo_response.status_code}")
logger.error(f"Текст ответа: {edit_photo_response.text}")
except httpx.TimeoutException as e:
logger.error("=" * 80)
logger.error("ТАЙМАУТ ПРИ РЕДАКТИРОВАНИИ СООБЩЕНИЯ С КАРТИНКОЙ!")
logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e)}")
logger.error(f"Полное представление: {repr(e)}")
logger.error(f"Параметры запроса:")
logger.error(f" chat_id: {CHANNEL_ID}")
logger.error(f" message_id: {photo_message_id}")
logger.error(f" caption_length: {len(edited_photo_caption)}")
except httpx.HTTPError as e:
logger.error("=" * 80)
logger.error("ОШИБКА HTTP ПРИ РЕДАКТИРОВАНИИ СООБЩЕНИЯ С КАРТИНКОЙ!")
logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e)}")
logger.error(f"Полное представление: {repr(e)}")
except Exception as e:
logger.error("=" * 80)
logger.error("НЕОЖИДАННАЯ ОШИБКА ПРИ РЕДАКТИРОВАНИИ СООБЩЕНИЯ С КАРТИНКОЙ!")
logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e) if hasattr(e, '__dict__') else 'N/A'}")
logger.error(f"Полное представление: {repr(e)}")
import traceback
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
else:
logger.error(f"Ошибка в ответе API при отправке фото: {photo_result}")
logger.error(f"Описание ошибки: {photo_result.get('description', 'N/A')}")
logger.error(f"Код ошибки: {photo_result.get('error_code', 'N/A')}")
else:
logger.error(f"HTTP ошибка при отправке фото: {photo_response.status_code}")
logger.error(f"Текст ответа: {photo_response.text}")
except httpx.TimeoutException as e:
logger.error("=" * 80)
logger.error("ТАЙМАУТ ПРИ ОТПРАВКЕ СООБЩЕНИЯ С КАРТИНКОЙ!")
logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e)}")
logger.error(f"Полное представление: {repr(e)}")
logger.error(f"Параметры запроса:")
logger.error(f" chat_id: {CHANNEL_ID}")
logger.error(f" photo_url: {image_url}")
logger.error(f" caption_length: {len(photo_caption)}")
except httpx.HTTPError as e:
logger.error("=" * 80)
logger.error("ОШИБКА HTTP ПРИ ОТПРАВКЕ СООБЩЕНИЯ С КАРТИНКОЙ!")
logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e)}")
logger.error(f"Полное представление: {repr(e)}")
except Exception as e:
logger.error("=" * 80)
logger.error("НЕОЖИДАННАЯ ОШИБКА ПРИ ОТПРАВКЕ СООБЩЕНИЯ С КАРТИНКОЙ!")
logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e) if hasattr(e, '__dict__') else 'N/A'}")
logger.error(f"Полное представление: {repr(e)}")
import traceback
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
return True return True
else: else:
logger.error(f"Ошибка в ответе API: {result}") logger.error(f"Ошибка в ответе API: {result}")