[ВОЛК] исправление отметки о публикации события
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
+53
-29
@@ -570,7 +570,8 @@ async def tg_post_event_by_id(id_event):
|
||||
password=MDB_PW,
|
||||
database=MDBASE,
|
||||
charset='utf8mb4',
|
||||
cursorclass=pymysql.cursors.DictCursor
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
init_command="SET time_zone='+00:00'" # Устанавливаем часовой пояс UTC
|
||||
)
|
||||
|
||||
# Проверка времени изменения только в режиме ZILANT
|
||||
@@ -632,6 +633,7 @@ async def tg_post_event_by_id(id_event):
|
||||
timeout=20.0,
|
||||
follow_redirects=True
|
||||
)
|
||||
tg_message_id = None
|
||||
try:
|
||||
tg_message_id = await tg_post_event(httpx_client, event) # Получаем новый message_id
|
||||
finally:
|
||||
@@ -641,29 +643,58 @@ async def tg_post_event_by_id(id_event):
|
||||
# Используем UTC время для записи в базу данных
|
||||
current_time_utc = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
# Обновляем подписки если был предыдущий message_id
|
||||
if old_message_id:
|
||||
cursor.execute("""
|
||||
UPDATE marks_evt
|
||||
SET tg_event_id = %s
|
||||
WHERE tg_event_id = %s
|
||||
""", (tg_message_id, old_message_id))
|
||||
logger.info(f"Обновлены подписки для события {id_event}: {cursor.rowcount} записей")
|
||||
# Обновляем базу данных в отдельном блоке try-except для гарантии сохранения
|
||||
try:
|
||||
# Обновляем подписки если был предыдущий message_id
|
||||
if old_message_id:
|
||||
cursor.execute("""
|
||||
UPDATE marks_evt
|
||||
SET tg_event_id = %s
|
||||
WHERE tg_event_id = %s
|
||||
""", (tg_message_id, old_message_id))
|
||||
logger.info(f"Обновлены подписки для события {id_event}: {cursor.rowcount} записей")
|
||||
|
||||
cursor.execute("""
|
||||
UPDATE events
|
||||
SET is_posted_tg = True,
|
||||
tg_message_id = %s,
|
||||
tg_posted_date = %s
|
||||
WHERE id_event = %s
|
||||
""", (tg_message_id, current_time_utc, id_event))
|
||||
conn.commit()
|
||||
logger.info(f"Событие номер {event['number']} успешно опубликовано")
|
||||
# Обновляем данные о публикации события
|
||||
cursor.execute("""
|
||||
UPDATE events
|
||||
SET is_posted_tg = True,
|
||||
tg_message_id = %s,
|
||||
tg_posted_date = %s
|
||||
WHERE id_event = %s
|
||||
""", (tg_message_id, current_time_utc, id_event))
|
||||
conn.commit()
|
||||
logger.info(f"Событие номер {event['number']} успешно опубликовано. Данные сохранены в БД: message_id={tg_message_id}, date={current_time_utc}")
|
||||
except Exception as db_error:
|
||||
logger.error(f"Ошибка при сохранении данных о публикации события {id_event} в БД: {db_error}")
|
||||
# Пытаемся выполнить commit даже при ошибке
|
||||
try:
|
||||
conn.rollback()
|
||||
# Повторная попытка обновления
|
||||
cursor.execute("""
|
||||
UPDATE events
|
||||
SET is_posted_tg = True,
|
||||
tg_message_id = %s,
|
||||
tg_posted_date = %s
|
||||
WHERE id_event = %s
|
||||
""", (tg_message_id, current_time_utc, id_event))
|
||||
conn.commit()
|
||||
logger.info(f"Данные о публикации события {id_event} успешно сохранены после повторной попытки")
|
||||
except Exception as retry_error:
|
||||
logger.error(f"Критическая ошибка при сохранении данных о публикации события {id_event}: {retry_error}")
|
||||
raise
|
||||
else:
|
||||
logger.error(f"Не удалось опубликовать событие ID {id_event}")
|
||||
|
||||
except RetryAfterException as e:
|
||||
# Обработка RetryAfter (FloodWait)
|
||||
logger.error(f"Полная информация об ошибке RetryAfter в tg_post_event_by_id для события ID {id_event}:")
|
||||
logger.error(f" Тип ошибки: RetryAfter")
|
||||
logger.error(f" Сообщение: {str(e)}")
|
||||
logger.error(f" retry_after: {e.retry_after}")
|
||||
logger.error(f" Полное представление: {repr(e)}")
|
||||
raise
|
||||
except Exception as e:
|
||||
# Проверяем, не RetryAfter ли это
|
||||
# Проверяем, не RetryAfter ли это в строковом виде
|
||||
error_msg = str(e)
|
||||
if error_msg.startswith("RetryAfter:") or (hasattr(e, 'retry_after')):
|
||||
retry_after = getattr(e, 'retry_after', int(error_msg.split(":")[1]) if ":" in error_msg else 60)
|
||||
@@ -674,19 +705,11 @@ async def tg_post_event_by_id(id_event):
|
||||
logger.error(f" Полное представление: {repr(e)}")
|
||||
raise RetryAfterException(retry_after)
|
||||
# Если это не RetryAfter, обрабатываем как обычную ошибку
|
||||
if "RetryAfter" not in error_msg:
|
||||
logger.error(f"Ошибка при публикации: {e}")
|
||||
logger.error(f"Полная информация об ошибке в tg_post_event_by_id для события ID {id_event}:")
|
||||
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)}")
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при публикации: {e}")
|
||||
logger.error(f"Полная информация об ошибке в tg_post_event_by_id для события ID {id_event}:")
|
||||
logger.error(f" Тип ошибки: {type(e).__name__}")
|
||||
logger.error(f" Сообщение: {str(e)}")
|
||||
logger.error(f" Все атрибуты ошибки: {vars(e)}")
|
||||
logger.error(f" Все атрибуты ошибки: {vars(e) if hasattr(e, '__dict__') else 'N/A'}")
|
||||
logger.error(f" Полное представление: {repr(e)}")
|
||||
finally:
|
||||
if conn:
|
||||
@@ -703,7 +726,8 @@ async def tg_post_all_events():
|
||||
password=MDB_PW,
|
||||
database=MDBASE,
|
||||
charset='utf8mb4',
|
||||
cursorclass=pymysql.cursors.DictCursor
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
init_command="SET time_zone='+00:00'" # Устанавливаем часовой пояс UTC
|
||||
)
|
||||
|
||||
with conn.cursor() as cursor:
|
||||
|
||||
Reference in New Issue
Block a user