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