# core/utils/template_resolver.py import re from typing import Any, Dict PLACEHOLDER_PATTERN = re.compile(r"\{\{\s*([a-zA-Z0-9_.]+)(\|[^}]+)?\s*\}\}") def resolve_request_body_template( data: Any, variables: Dict[str, Any], ) -> Any: """ 仅解析请求参数中 {{var}} 模板 Args: data: dict/list/str variables: {"next_cursor": "123", ...} Returns: 替换后的结构 """ if isinstance(data, dict): return {k: resolve_request_body_template(v, variables) for k, v in data.items()} elif isinstance(data, list): return [resolve_request_body_template(item, variables) for item in data] elif isinstance(data, str): def replacer(match): var_name = match.group(1) default_value = match.group(2)[1:] if match.group(2) else None value = variables.get(var_name) if value is not None: return str(value) elif default_value is not None: return default_value else: return "" return PLACEHOLDER_PATTERN.sub(replacer, data) else: return data if __name__ == '__main__': data = { "cursor": "{{next_cursor}}", "page_size": 20, "filters": { "start_date": "{{start_date}}", "end_date": "{{end_date|2025-01-01}}" }, "tags": ["{{tag1}}", "{{tag2|default_tag}}"] } variables = { "next_cursor":"1", "start_date": "2025-06-30", "tag1": "news" } result = resolve_request_body_template(data, variables) print(result)