добавил условия
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-04-29 23:32:49 +10:00
parent 8b07841687
commit 36b544ad7e
2 changed files with 37 additions and 8 deletions

View File

@@ -9,6 +9,12 @@ from utils import logger
import parser_bd as pbd
# Обязательные поля для модели ParsedData
REQUIRED_FIELDS = [
'title', 'category', 'translation_text', 'short_text'
]
def update_bd_and_create_document(
response_text: str,
article_date: str,
@@ -20,8 +26,6 @@ def update_bd_and_create_document(
"""
Обрабатывает ответ от GPT, сохраняет в БД и создаёт DOCX документ
"""
clean_response = ''
if not response_text:
print(f"Пустой ответ от GPT для URL: {url}")
logger.info(f"Пустой ответ от GPT для URL: {url}")
@@ -31,7 +35,20 @@ def update_bd_and_create_document(
clean_response = response_text.strip().replace('```json', '').replace('```', '').strip()
data = json.loads(clean_response)
# Проверяем наличие обязательных полей от GPT
missing_fields = [f for f in REQUIRED_FIELDS if not data.get(f)]
if missing_fields:
print(f"Ответ GPT не содержит обязательных полей: {missing_fields} для URL: {url}")
logger.warning(f"Ответ GPT не содержит обязательных полей: {missing_fields} для URL: {url}")
print(f"Полученные данные: {data}")
return
# Нормализация типов: category может приходить как list, а ожидается str
if isinstance(data.get('category'), list):
data['category'] = ', '.join(data['category'])
if data['category']:
# Добавляем системные поля
data['article_date'] = article_date
data['url'] = url
data['parsed_at'] = parsed_at
@@ -73,6 +90,11 @@ def update_bd_and_create_document(
doc.save(doc_path)
print(f"Сохранен документ: {doc_path}")
except json.JSONDecodeError as ex:
print(f"Ошибка парсинга JSON от GPT для URL {url}: {ex}")
print(f"Сырой ответ: {response_text[:500]}")
logger.error(f"JSON decode error для {url}: {ex}")
except Exception as ex:
print(f"Ошибка при обработке ответа GPT: {ex}")
logger.info(f"Ошибка при обработке ответа GPT: {ex}")
print(f"Ошибка при обработке ответа GPT для URL {url}: {ex}")
print(f"Сырой ответ: {response_text[:500]}")
logger.error(f"Ошибка при обработке ответа GPT для {url}: {ex}")