[ВОЛК] обработка ошибки загрузки описаний категорий
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
+37
-10
@@ -157,27 +157,51 @@ def load_categories():
|
|||||||
log_message(f"Запрос описания для категории {category_id} из {desc_url}")
|
log_message(f"Запрос описания для категории {category_id} из {desc_url}")
|
||||||
|
|
||||||
with urlopen(desc_url) as response:
|
with urlopen(desc_url) as response:
|
||||||
desc_response = json.loads(response.read().decode())
|
# Явно указываем кодировку UTF-8 при декодировании
|
||||||
|
raw_data = response.read()
|
||||||
|
try:
|
||||||
|
decoded_data = raw_data.decode('utf-8')
|
||||||
|
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)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
error_msg = f"Ошибка парсинга JSON для категории {category_id}: {e}. Первые 500 символов ответа: {decoded_data[:500]}"
|
||||||
|
log_message(error_msg, "ERROR")
|
||||||
|
print(error_msg)
|
||||||
|
# Пропускаем эту категорию и продолжаем обработку
|
||||||
|
continue
|
||||||
|
|
||||||
# Проверка версии API
|
# Проверка версии API
|
||||||
api_version = desc_response.get('api_version')
|
api_version = desc_response.get('api_version')
|
||||||
if api_version != VOLK_API_VERSION:
|
if api_version != VOLK_API_VERSION:
|
||||||
error_msg = f"Несовпадение версии API при загрузке описания категории {category_id}: получена версия '{api_version}', ожидается '{VOLK_API_VERSION}'. Обработка остановлена."
|
error_msg = f"Несовпадение версии API при загрузке описания категории {category_id}: получена версия '{api_version}', ожидается '{VOLK_API_VERSION}'. Пропуск категории."
|
||||||
log_message(error_msg, "ERROR")
|
log_message(error_msg, "ERROR")
|
||||||
print(error_msg)
|
print(error_msg)
|
||||||
# Останавливаем обработку
|
# Пропускаем эту категорию и продолжаем обработку
|
||||||
break
|
continue
|
||||||
|
|
||||||
# Проверка наличия блока data
|
# Проверка наличия блока data
|
||||||
if 'data' not in desc_response:
|
if 'data' not in desc_response:
|
||||||
error_msg = f"В JSON ответе для категории {category_id} отсутствует блок 'data'. Обработка остановлена."
|
error_msg = f"В JSON ответе для категории {category_id} отсутствует блок 'data'. Пропуск категории."
|
||||||
log_message(error_msg, "ERROR")
|
log_message(error_msg, "ERROR")
|
||||||
print(error_msg)
|
print(error_msg)
|
||||||
# Останавливаем обработку
|
# Пропускаем эту категорию и продолжаем обработку
|
||||||
break
|
continue
|
||||||
|
|
||||||
desc_data = desc_response['data']
|
desc_data = desc_response['data']
|
||||||
|
|
||||||
|
# Проверка типа desc_data - должен быть словарём
|
||||||
|
if not isinstance(desc_data, dict):
|
||||||
|
error_msg = f"Блок 'data' для категории {category_id} не является словарём (тип: {type(desc_data)}). Пропуск категории."
|
||||||
|
log_message(error_msg, "ERROR")
|
||||||
|
print(error_msg)
|
||||||
|
# Пропускаем эту категорию и продолжаем обработку
|
||||||
|
continue
|
||||||
|
|
||||||
# Получаем description из блока data
|
# Получаем description из блока data
|
||||||
description = desc_data.get('description')
|
description = desc_data.get('description')
|
||||||
# Если description пустое, None или отсутствует, обнуляем поле в БД
|
# Если description пустое, None или отсутствует, обнуляем поле в БД
|
||||||
@@ -198,11 +222,14 @@ def load_categories():
|
|||||||
log_message(f"Описание для категории {category_id} обнулено (пустое или отсутствует)")
|
log_message(f"Описание для категории {category_id} обнулено (пустое или отсутствует)")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error_msg = f"Ошибка при загрузке описания для категории {category_id}: {e}"
|
error_msg = f"Ошибка при загрузке описания для категории {category_id}: {type(e).__name__}: {e}"
|
||||||
log_message(error_msg, "ERROR")
|
log_message(error_msg, "ERROR")
|
||||||
print(error_msg)
|
print(error_msg)
|
||||||
# Останавливаем обработку при ошибке
|
import traceback
|
||||||
break
|
traceback_str = traceback.format_exc()
|
||||||
|
log_message(f"Трассировка ошибки для категории {category_id}:\n{traceback_str}", "ERROR")
|
||||||
|
# Пропускаем эту категорию и продолжаем обработку остальных
|
||||||
|
continue
|
||||||
|
|
||||||
log_message(f"Завершение загрузки описаний. Обновлено описаний: {desc_updated_count}.")
|
log_message(f"Завершение загрузки описаний. Обновлено описаний: {desc_updated_count}.")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user