"""Быстрая проверка доступности PostgreSQL и NATS из `.env.test` (порты docker-compose из docs/dev). Нужна `make check-full`, чтобы вместо длинного трейсбека pytest сразу подсказать: «поднимите инфраструктуру: make up». Только TCP-подключение, без аутентификации; коды: 0 — доступны, 1 — недоступны. """ import socket import sys from pathlib import Path from urllib.parse import urlparse from dotenv import dotenv_values ENV_FILE = Path(__file__).resolve().parent.parent / ".env.test" KEYS = ("OPENBAO__DATABASE__DATABASE_URL", "OPENBAO__NATS__NATS_URL") def unreachable(urls: list[str]) -> list[str]: """Адреса host:port, к которым не удалось подключиться.""" bad: list[str] = [] for url in urls: parsed = urlparse(url) host, port = parsed.hostname or "localhost", parsed.port or 0 try: with socket.create_connection((host, port), timeout=3): pass except OSError: bad.append(f"{host}:{port}") return bad def main() -> int: env = dotenv_values(ENV_FILE) bad = unreachable([env[key] or "" for key in KEYS]) if bad: print(f"Инфраструктура недоступна ({', '.join(bad)}): поднимите её командой make up", file=sys.stderr) return 1 return 0 if __name__ == "__main__": sys.exit(main())