This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user