Resolve ${VAR} / ${VAR:-default} references in a parameter value.
(value)
| 322 | |
| 323 | |
| 324 | def _resolve_env_vars(value): |
| 325 | """Resolve ${VAR} / ${VAR:-default} references in a parameter value.""" |
| 326 | if not isinstance(value, str): |
| 327 | return value |
| 328 | |
| 329 | m = re.fullmatch(r'\$\{(\w+)\}', value) |
| 330 | if m: |
| 331 | env_name = m.group(1) |
| 332 | resolved = os.environ.get(env_name) |
| 333 | if resolved is not None: |
| 334 | if resolved.lower() in ('true', 'false'): |
| 335 | return resolved.lower() == 'true' |
| 336 | try: |
| 337 | return int(resolved) |
| 338 | except ValueError: |
| 339 | pass |
| 340 | try: |
| 341 | return float(resolved) |
| 342 | except ValueError: |
| 343 | pass |
| 344 | return resolved |
| 345 | return value |
| 346 | |
| 347 | def _replace(match): |
| 348 | env_name = match.group(1) |
| 349 | return os.environ.get(env_name, match.group(0)) |
| 350 | |
| 351 | return re.sub(r'\$\{(\w+)\}', _replace, value) |
| 352 | |
| 353 | |
| 354 | def _infer_param_type(value) -> str: |