[ВОЛК] проверяем urlopen для отлова бага с volk26_nri
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-12-21 13:13:49 +03:00
parent 8772eaaf3d
commit 58a8f1909f
+47 -20
View File
@@ -4,6 +4,7 @@ import time
import traceback import traceback
from datetime import datetime from datetime import datetime
from urllib.request import urlopen from urllib.request import urlopen
from urllib.error import URLError, HTTPError
from dotenv import load_dotenv from dotenv import load_dotenv
import mysql.connector import mysql.connector
from mysql.connector import Error from mysql.connector import Error
@@ -155,26 +156,52 @@ def load_categories():
log_message(f"Запрос описания для категории {category_id} из {desc_url}") log_message(f"Запрос описания для категории {category_id} из {desc_url}")
log_message("отладочное сообщение для проверки вывода в лог-файл") log_message("отладочное сообщение для проверки вывода в лог-файл")
with urlopen(desc_url) as response: desc_response = None
# Явно указываем кодировку UTF-8 при декодировании try:
raw_data = response.read() response = urlopen(desc_url)
log_message("raw data read") log_message("urlopen успешно выполнен")
try: except (URLError, HTTPError, OSError) as e:
decoded_data = raw_data.decode('utf-8') error_msg = f"Ошибка сетевого подключения при запросе описания категории {category_id} из {desc_url}: {type(e).__name__}: {e}"
log_message("data decoded") log_message(error_msg, "ERROR")
except UnicodeDecodeError as e: traceback_str = traceback.format_exc()
error_msg = f"Ошибка декодирования ответа для категории {category_id}: {e}. Попытка декодирования как latin-1." log_message(f"Трассировка сетевой ошибки для категории {category_id}:\n{traceback_str}", "ERROR")
log_message(error_msg, "WARNING") # Пропускаем эту категорию и продолжаем обработку
decoded_data = raw_data.decode('latin-1') continue
try: try:
desc_response = json.loads(decoded_data) with response:
log_message("json loaded") # Явно указываем кодировку UTF-8 при декодировании
except json.JSONDecodeError as e: raw_data = response.read()
error_msg = f"Ошибка парсинга JSON для категории {category_id}: {e}. Первые 500 символов ответа: {decoded_data[:500]}" log_message("raw data read")
log_message(error_msg, "ERROR") try:
# Пропускаем эту категорию и продолжаем обработку decoded_data = raw_data.decode('utf-8')
continue log_message("data decoded")
except UnicodeDecodeError as e:
error_msg = f"Ошибка декодирования ответа для категории {category_id}: {e}. Попытка декодирования как latin-1."
log_message(error_msg, "WARNING")
decoded_data = raw_data.decode('latin-1')
try:
desc_response = json.loads(decoded_data)
log_message("json loaded")
except json.JSONDecodeError as e:
error_msg = f"Ошибка парсинга JSON для категории {category_id}: {e}. Первые 500 символов ответа: {decoded_data[:500]}"
log_message(error_msg, "ERROR")
# Пропускаем эту категорию и продолжаем обработку
continue
except Exception as e:
error_msg = f"Ошибка при чтении ответа для категории {category_id}: {type(e).__name__}: {e}"
log_message(error_msg, "ERROR")
traceback_str = traceback.format_exc()
log_message(f"Трассировка ошибки чтения для категории {category_id}:\n{traceback_str}", "ERROR")
# Пропускаем эту категорию и продолжаем обработку
continue
# Проверяем, что desc_response был успешно получен
if desc_response is None:
error_msg = f"Не удалось получить ответ для категории {category_id}"
log_message(error_msg, "ERROR")
continue
# Проверка версии API # Проверка версии API
api_version = desc_response.get('api_version') api_version = desc_response.get('api_version')