12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # 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)
|