добавление отслеживания количества выгрузки
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-05-19 22:36:49 +10:00
parent e9d7a2d51f
commit 63ab6ed108
5 changed files with 90 additions and 20 deletions

View File

@@ -12,7 +12,7 @@ from fastapi.responses import FileResponse
from config import DOCUMENTS_DIR, APP_TITLE, APP_DESCRIPTION, APP_VERSION
from utils import logger
from api.schemas import ParserOneRequest, Parserall, Source, DownloadRange
from api.schemas import ParserOneRequest, Parserall, Source, DownloadRange, DownloadCountsResponse
from parsers import start_pars_one_istochnik, start_pars_two_istochnik, start_pars_all_istochnik
import work_parser as wp
@@ -178,6 +178,13 @@ def setup_routes(app: FastAPI) -> None:
except Exception as e:
logger.warning(f"Не удалось удалить архив: {e}")
def mark_as_downloaded():
try:
wp.mark_articles_as_downloaded(titles_from_db)
logger.info(f"Статьи помечены как скачанные: {len(titles_from_db)} записей")
except Exception as e:
logger.error(f"Ошибка при обновлении download: {e}")
response = FileResponse(
path=archive_path,
filename=archive_name,
@@ -189,9 +196,27 @@ def setup_routes(app: FastAPI) -> None:
response.headers["Access-Control-Expose-Headers"] = "Content-Disposition"
background_tasks.add_task(cleanup_archive)
background_tasks.add_task(mark_as_downloaded)
return response
# ==================== Выгрузка (download) ====================
@app.get("/download_counts", summary="Получить количество статей для выгрузки", response_model=DownloadCountsResponse)
async def get_download_counts():
"""
Возвращает количество статей для каждого поля (tematik, svodka, donesenie, bilutene, status),
где значение поля = TRUE и download = FALSE
"""
return wp.get_download_counts()
# @app.post("/mark_downloaded", summary="Отметить статьи как скачанные")
# async def mark_articles_as_downloaded(titles: List[str]):
# """
# Обновляет поле download = TRUE для списка заголовков статей
# """
# return wp.mark_articles_as_downloaded(titles)
@app.get("/logs", summary="Показать логи")
async def get_logs():
with open("app.log", "r") as file:

View File

@@ -32,3 +32,11 @@ class DownloadRange(BaseModel):
data_start: str
data_finish: str
field_name: str = "status"
class DownloadCountsResponse(BaseModel):
"""Ответ с количеством статей для выгрузки по каждому полю"""
tematik: int
svodka: int
donesenie: int
bilutene: int