| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- import re
- from typing import Any
- from app.service.engine.execution_context import ExecutionContext
- _ARRAY_COMBINE_RE = re.compile(r"^\[(.*)?\]$")
- class ParameterResolver:
- def resolve(self, value: Any, context: ExecutionContext) -> Any:
- if value is None:
- return None
- if isinstance(value, str):
- m = _ARRAY_COMBINE_RE.match(value)
- if m:
- content = (m.group(1) or "").strip()
- if not content:
- return []
- elements = content.split(",")
- result = []
- for elem in elements:
- elem = elem.strip()
- if elem:
- resolved = self.resolve(elem, context)
- if resolved is not None:
- result.append(resolved)
- return result
- if value.startswith("$"):
- path = value[1:]
- return context.lookup(path)
- return value
- if isinstance(value, dict):
- return {
- str(k): self.resolve(v, context) for k, v in value.items()
- }
- if isinstance(value, list):
- return [self.resolve(v, context) for v in value]
- return value
|