jabnews/src/adapters/scheduled/news_checker.py
2026-03-22 18:07:16 +03:00

35 lines
1.2 KiB
Python

import asyncio
import logging
from datetime import datetime, timezone
from src.domain.news.usecases import FetchAndPublishNews
logger = logging.getLogger(__name__)
class NewsChecker:
"""
Входящий адаптер: запускает FetchAndPublishNews каждые 5 минут.
Реальный интервал опроса каждой RSS контролируется subscription.interval_minutes.
"""
CHECK_INTERVAL_SECONDS: int = 5 * 60
def __init__(self, usecase: FetchAndPublishNews) -> None:
self._usecase = usecase
async def start(self) -> None:
"""Запускается как asyncio-задача из main.py."""
logger.info("NewsChecker запущен, интервал %d сек", self.CHECK_INTERVAL_SECONDS)
while True:
await asyncio.sleep(self.CHECK_INTERVAL_SECONDS)
await self._run_once()
async def _run_once(self) -> None:
now = datetime.now(tz=timezone.utc)
logger.debug("NewsChecker: запуск проверки %s", now.isoformat())
try:
await self._usecase.execute(now)
except Exception:
logger.exception("Ошибка в NewsChecker")