70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
|
|
import json
|
|||
|
|
from pathlib import Path
|
|||
|
|
from typing import Dict, Any
|
|||
|
|
import copy
|
|||
|
|
|
|||
|
|
|
|||
|
|
class ResponseBuilder:
|
|||
|
|
"""响应构建器"""
|
|||
|
|
|
|||
|
|
TEMPLATE_DIR = Path(__file__).parent.parent / "config" / "responses"
|
|||
|
|
|
|||
|
|
@staticmethod
|
|||
|
|
def load_template(template_name: str) -> Dict:
|
|||
|
|
"""加载 JSON 模板
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
template_name: 模板名称(不含.json扩展名)
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
模板字典
|
|||
|
|
"""
|
|||
|
|
file_path = ResponseBuilder.TEMPLATE_DIR / f"{template_name}.json"
|
|||
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|||
|
|
return json.load(f)
|
|||
|
|
|
|||
|
|
@staticmethod
|
|||
|
|
def replace_placeholders(template: Dict, **kwargs) -> Dict:
|
|||
|
|
"""递归替换占位符
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
template: 模板字典
|
|||
|
|
**kwargs: 占位符键值对
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
替换后的字典
|
|||
|
|
"""
|
|||
|
|
def replace_value(value):
|
|||
|
|
if isinstance(value, str):
|
|||
|
|
result = value
|
|||
|
|
for key, val in kwargs.items():
|
|||
|
|
placeholder = f"{{{key}}}"
|
|||
|
|
if placeholder in result:
|
|||
|
|
result = result.replace(placeholder, str(val))
|
|||
|
|
return result
|
|||
|
|
elif isinstance(value, dict):
|
|||
|
|
return {k: replace_value(v) for k, v in value.items()}
|
|||
|
|
elif isinstance(value, list):
|
|||
|
|
return [replace_value(item) for item in value]
|
|||
|
|
return value
|
|||
|
|
|
|||
|
|
# 深拷贝模板,避免修改原始数据
|
|||
|
|
return replace_value(copy.deepcopy(template))
|
|||
|
|
|
|||
|
|
@staticmethod
|
|||
|
|
def build_success_response(template_name: str, **kwargs) -> Dict:
|
|||
|
|
"""构建成功响应
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
template_name: 模板名称
|
|||
|
|
**kwargs: 占位符键值对
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
响应字典
|
|||
|
|
"""
|
|||
|
|
template = ResponseBuilder.load_template(template_name)
|
|||
|
|
return ResponseBuilder.replace_placeholders(
|
|||
|
|
template["success_response"],
|
|||
|
|
**kwargs
|
|||
|
|
)
|