Compare commits

...
2 Commits
Author SHA1 Message Date
gitadmin c2fd69cf39 [ВОЛК] volk26_nri, step 5
ci/woodpecker/push/woodpecker Pipeline was successful
2025-12-21 13:31:45 +03:00
gitadmin ae1d9eb8a7 [ВОЛК] volk26_nri, step 4 2025-12-21 13:30:07 +03:00
+52 -11
View File
@@ -44,6 +44,23 @@ def log_message(message, category="VOLK_loader"):
return False
return False
def safe_log_direct(message, category="VOLK_loader"):
"""Безопасная функция для прямой записи в лог-файл без обработки исключений
Используется в критических ситуациях, когда обычный log_message может не сработать"""
try:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] [{category}] {message}\n"
# Прямая запись без контекстного менеджера для максимальной надежности
f = open(LOG_FILE, 'a', encoding='utf-8')
try:
f.write(log_entry)
f.flush() # Принудительно сбрасываем буфер
finally:
f.close()
except:
# Игнорируем все исключения - эта функция должна быть максимально безопасной
pass
def load_categories():
"""Экспортируемая функция для загрузки категорий из JSON в базу данных"""
inserted_count = 0
@@ -159,23 +176,47 @@ def load_categories():
desc_response = None
try:
response = urlopen(desc_url)
# Добавляем таймаут для избежания зависаний (30 секунд)
from urllib.request import Request
req = Request(desc_url)
safe_log_direct("run urlopen", "DEBUG")
response = urlopen(req, timeout=30)
safe_log_direct("done urlopen", "ERROR")
log_message("urlopen успешно выполнен")
except (URLError, HTTPError, OSError, socket.gaierror, socket.timeout, ConnectionError) as e:
log_message("ошибка urlopen")
error_msg = f"Ошибка сетевого подключения при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}"
log_message(error_msg, "ERROR")
traceback_str = traceback.format_exc()
log_message(f"Трассировка сетевой ошибки для категории {category_id}:\n{traceback_str}", "ERROR")
# Используем безопасное логирование для критических ошибок
safe_log_direct("ПЕРЕХВАЧЕНА СЕТЕВАЯ ОШИБКА urlopen", "ERROR")
safe_log_direct(f"Категория: {category_id}, URL: {desc_url}", "ERROR")
safe_log_direct(f"Тип ошибки: {type(e).__name__}, Сообщение: {str(e)}", "ERROR")
try:
traceback_str = traceback.format_exc()
safe_log_direct(f"Трассировка:\n{traceback_str}", "ERROR")
except:
pass
# Также пробуем обычное логирование
try:
error_msg = f"Ошибка сетевого подключения при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}"
log_message(error_msg, "ERROR")
except:
pass
# Пропускаем эту категорию и продолжаем обработку
continue
except Exception as e:
# Перехватываем любые другие исключения, которые могут возникнуть при urlopen
log_message("ошибка urlopen, шаг 2")
error_msg = f"Неожиданная ошибка при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}"
log_message(error_msg, "ERROR")
traceback_str = traceback.format_exc()
log_message(f"Трассировка неожиданной ошибки для категории {category_id}:\n{traceback_str}", "ERROR")
safe_log_direct("ПЕРЕХВАЧЕНА НЕОЖИДАННАЯ ОШИБКА urlopen", "ERROR")
safe_log_direct(f"Категория: {category_id}, URL: {desc_url}", "ERROR")
safe_log_direct(f"Тип ошибки: {type(e).__name__}, Сообщение: {str(e)}", "ERROR")
try:
traceback_str = traceback.format_exc()
safe_log_direct(f"Трассировка:\n{traceback_str}", "ERROR")
except:
pass
# Также пробуем обычное логирование
try:
error_msg = f"Неожиданная ошибка при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}"
log_message(error_msg, "ERROR")
except:
pass
# Пропускаем эту категорию и продолжаем обработку
continue