Files
vesti/web/publisher_client.py

40 lines
1.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HTTP-клиент к publisher-service (микросервис).
# web больше НЕ импортирует publisher.bot — только этот клиент (HTTP POST /api/v1/publish).
import os
import httpx
PUBLISHER_URL = os.getenv("PUBLISHER_URL", "http://127.0.0.1:8410")
TIMEOUT = 30.0
def publish(card: dict, channels: list[str] | None = None) -> dict:
"""Вызывает publisher-service. Возвращает {"ok", "results", "dry_run"} от сервиса.
При недоступности сервиса — raise RuntimeError с понятным текстом.
"""
payload = {"card": card}
if channels:
payload["channels"] = channels
try:
r = httpx.post(f"{PUBLISHER_URL}/api/v1/publish", json=payload, timeout=TIMEOUT)
except Exception as e:
raise RuntimeError(f"publisher-service недоступен ({PUBLISHER_URL}): {e}") from e
if r.status_code >= 400:
try:
detail = r.json().get("detail", r.text[:200])
except Exception:
detail = r.text[:200]
raise RuntimeError(f"publisher-service ошибка {r.status_code}: {detail}")
return r.json()
def get_views(channel: str, message_id: int) -> int:
"""Views по каналу/сообщению из publisher-service."""
try:
r = httpx.get(f"{PUBLISHER_URL}/api/v1/views/{channel}/{message_id}", timeout=TIMEOUT)
if r.status_code == 200:
return int(r.json().get("views", 0))
except Exception:
pass
return 0