- utils/news.py: добавлен logger, логирование ошибок RSS - utils/cat.py: добавлен logger, логирование ошибок TheCatAPI - utils/pogoda.py: улучшены логи fallback/warning при ошибках API - utils/rate_limiter.py: debug-логи при ожидании токенов - commands/pg.py, news.py, cat.py, morning.py, status.py, stats.py: logger + логи ошибок и успешного выполнения команд - console_commands/pogoda.py, news.py, cat.py, morning.py, status.py, stats.py: logger + логи выполнения - bot.py: логи запуска/остановки, проверки конфигурации, маршрутизации консольных команд, f-строки -> %s формат - ISSUES.md: снят флаг задачи по логированию - все 243 теста пройдены
26 lines
767 B
Python
26 lines
767 B
Python
import asyncio
|
|
import logging
|
|
|
|
import requests
|
|
|
|
from utils.rate_limiter import cat_limiter
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
CAT_API_URL = "https://api.thecatapi.com/v1/images/search"
|
|
|
|
_session = requests.Session()
|
|
|
|
|
|
async def fetch_cat() -> str | None:
|
|
"""Получить URL случайного котика. Вернуть None при ошибке."""
|
|
await cat_limiter.acquire()
|
|
try:
|
|
response = await asyncio.to_thread(_session.get, CAT_API_URL, timeout=10)
|
|
response.raise_for_status()
|
|
data = response.json()
|
|
return data[0]["url"]
|
|
except (requests.exceptions.RequestException, IndexError, KeyError) as e:
|
|
logger.error("Ошибка при получении котика: %s", e)
|
|
return None
|