48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
import json
|
||
from pydantic import BaseModel, ValidationError
|
||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||
from typing import List
|
||
|
||
|
||
class ComfyUIServer(BaseModel):
|
||
"""定义单个ComfyUI服务器的配置模型。"""
|
||
http_url: str
|
||
ws_url: str
|
||
input_dir: str
|
||
output_dir: str
|
||
|
||
|
||
class Settings(BaseSettings):
|
||
"""
|
||
应用配置类,通过.env文件加载环境变量。
|
||
"""
|
||
model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
|
||
|
||
# [核心改动] 使用JSON字符串来定义一个服务器列表
|
||
COMFYUI_SERVERS_JSON: str = '[{"http_url": "http://127.0.0.1:8188", "ws_url": "ws://127.0.0.1:8188/ws", "input_dir": "/comfyui/input", "output_dir": "/comfyui/output"}]'
|
||
|
||
DB_FILE: str = "/db/workflows_service.sqlite"
|
||
# S3 和 AWS 配置保持不变
|
||
S3_BUCKET_NAME: str
|
||
AWS_ACCESS_KEY_ID: str
|
||
AWS_SECRET_ACCESS_KEY: str
|
||
AWS_REGION_NAME: str
|
||
|
||
@property
|
||
def SERVERS(self) -> List[ComfyUIServer]:
|
||
"""
|
||
解析JSON配置字符串,返回一个经过验证的服务器配置对象列表。
|
||
"""
|
||
try:
|
||
server_list = json.loads(self.COMFYUI_SERVERS_JSON)
|
||
# 使用Pydantic模型进行验证和类型转换
|
||
return [ComfyUIServer(**server) for server in server_list]
|
||
except json.JSONDecodeError:
|
||
raise ValueError("COMFYUI_SERVERS_JSON 格式无效,必须是有效的JSON数组。")
|
||
except ValidationError as e:
|
||
raise ValueError(f"COMFYUI_SERVERS_JSON 中的服务器配置无效: {e}")
|
||
except Exception as e:
|
||
raise e
|
||
|
||
|
||
settings = Settings() |