From f4cabfacbe5a6dc7e41326ca6a9e801e7a1d1db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=91=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=83=D1=80=D0=B8=D1=81=D1=82?= Date: Fri, 1 May 2026 19:44:51 +1000 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D1=81=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parser_bd.py | 14 ++++++++-- services/document_builder.py | 6 ++-- work_parser.py | 53 ++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 6 deletions(-) diff --git a/parser_bd.py b/parser_bd.py index b31b237..87768c1 100644 --- a/parser_bd.py +++ b/parser_bd.py @@ -13,6 +13,10 @@ class ParsedData(BaseModel): article_date: str status: Optional[bool] = False viewed: Optional[bool] = False + tematik: Optional[bool] = False + svodka: Optional[bool] = False + donesenie: Optional[bool] = False + bilutene: Optional[bool] = False other: str category: str translation_text: str @@ -34,8 +38,8 @@ def save_parsed_data_to_db(data: ParsedData): conn = get_connection() with conn.cursor() as cur: cur.execute(""" - INSERT INTO url (url, parsed_at, title, original_text, article_date, status, viewed, other, category, translation_text, short_text) - VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + INSERT INTO url (url, parsed_at, title, original_text, article_date, status, viewed, tematik, svodka, donesenie, bilutene, other, category, translation_text, short_text) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) ON CONFLICT (url) DO UPDATE SET parsed_at = EXCLUDED.parsed_at, title = EXCLUDED.title, @@ -43,11 +47,15 @@ def save_parsed_data_to_db(data: ParsedData): article_date = EXCLUDED.article_date, status = EXCLUDED.status, viewed = EXCLUDED.viewed, + tematik = EXCLUDED.tematik, + svodka = EXCLUDED.svodka, + donesenie = EXCLUDED.donesenie, + bilutene = EXCLUDED.bilutene, other = EXCLUDED.other, category = EXCLUDED.category, translation_text = EXCLUDED.translation_text, short_text = EXCLUDED.short_text; - """, (data.url, data.parsed_at, data.title, data.original_text, data.article_date, data.status, data.viewed, data.other, data.category, data.translation_text, data.short_text)) + """, (data.url, data.parsed_at, data.title, data.original_text, data.article_date, data.status, data.viewed, data.tematik, data.svodka, data.donesenie, data.bilutene, data.other, data.category, data.translation_text, data.short_text)) conn.commit() return {"status": "success", "message": "Данные успешно сохранены"} except Exception as e: diff --git a/services/document_builder.py b/services/document_builder.py index ed50321..53e2277 100644 --- a/services/document_builder.py +++ b/services/document_builder.py @@ -6,7 +6,7 @@ import os from docx import Document from config import DOCUMENTS_DIR from utils import logger -import parser_bd as pbd +import work_parser as wp # Обязательные поля для модели ParsedData @@ -62,8 +62,8 @@ def update_bd_and_create_document( data['other'] = other # Сохранение в БД через pbd - parsed_data = pbd.ParsedData(**data) - pbd.save_parsed_data_to_db(parsed_data) + parsed_data = wp.ParsedData(**data) + wp.save_parsed_data_to_db(parsed_data) print("Данные успешно сохранены в БД") # Создание DOCX документа diff --git a/work_parser.py b/work_parser.py index dfd7391..cb6dcc9 100644 --- a/work_parser.py +++ b/work_parser.py @@ -10,6 +10,59 @@ DB_CONFIG = { "connect_timeout": 10, "options": "-c statement_timeout=30000" } +# Модель для данных, которые приходят в POST +class ParsedData(BaseModel): + url: str + parsed_at: str + title: str + original_text: str + article_date: str + status: Optional[bool] = False + viewed: Optional[bool] = False + tematik: Optional[bool] = False + svodka: Optional[bool] = False + donesenie: Optional[bool] = False + bilutene: Optional[bool] = False + other: str + category: str + translation_text: str + short_text: str + +# Функции для работы с БД (без эндпоинтов) +def save_parsed_data_to_db(data: ParsedData): + conn = None + try: + conn = get_connection() + with conn.cursor() as cur: + cur.execute(""" + INSERT INTO url (url, parsed_at, title, original_text, article_date, status, viewed, tematik, svodka, donesenie, bilutene, other, category, translation_text, short_text) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (url) DO UPDATE SET + parsed_at = EXCLUDED.parsed_at, + title = EXCLUDED.title, + original_text = EXCLUDED.original_text, + article_date = EXCLUDED.article_date, + status = EXCLUDED.status, + viewed = EXCLUDED.viewed, + tematik = EXCLUDED.tematik, + svodka = EXCLUDED.svodka, + donesenie = EXCLUDED.donesenie, + bilutene = EXCLUDED.bilutene, + other = EXCLUDED.other, + category = EXCLUDED.category, + translation_text = EXCLUDED.translation_text, + short_text = EXCLUDED.short_text; + """, (data.url, data.parsed_at, data.title, data.original_text, data.article_date, data.status, data.viewed, data.tematik, data.svodka, data.donesenie, data.bilutene, data.other, data.category, data.translation_text, data.short_text)) + conn.commit() + return {"status": "success", "message": "Данные успешно сохранены"} + except Exception as e: + if conn: + conn.rollback() + raise e + finally: + if conn: + conn.close() + # Глобальное подключение к БД conn = None