1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- # 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:
- 替换后的结构
- :rtype: Any
- """
- 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 = {
- # "dada":{"next_cursor":"1"},
- # "start_date": "2025-06-30",
- # "tag1": "news",
- # "tag3": "news",
- # "default_tag55": "1111",
- }
- result = resolve_request_body_template(data, variables)
- print(result)
|