"""FastAPI 验证服务的客户端。""" import os import httpx from dotenv import load_dotenv from backend.logger import get_logger load_dotenv(override=True) _val_log = get_logger("validation") VALIDATION_URL = os.getenv("VALIDATION_SERVICE_URL", "http://localhost:8001/validate") def validate_jrxml(jrxml_text: str) -> dict: """将 JRXML 发送到验证服务并返回 {valid: bool, error: str}。""" jrxml_length = len(jrxml_text) try: with httpx.Client(timeout=30.0) as client: resp = client.post(VALIDATION_URL, json={"jrxml": jrxml_text}) resp.raise_for_status() result = resp.json() _val_log.info( "验证完成", extra={ "valid": result.get("valid"), "error": result.get("error", ""), "jrxml_length": jrxml_length, }, ) return result except httpx.ConnectError: error_msg = f"无法连接到验证服务 ({VALIDATION_URL})。是否正在运行?" _val_log.error("验证服务连接失败", extra={"error": error_msg, "url": VALIDATION_URL}) return {"valid": False, "error": error_msg} except Exception as e: error_msg = f"验证请求失败: {str(e)}" _val_log.error("验证请求异常", extra={"error": str(e), "url": VALIDATION_URL}) return {"valid": False, "error": error_msg}