Files
jason-n-tran-comfyui-workfl…/core/parameter_parser.py
T

63 lines
2.0 KiB
Python

"""
Parse raw parameter value strings into typed Python lists.
Supported formats:
INT range: "10-30, 5" -> [10, 15, 20, 25, 30]
INT list: "10, 20, 30" -> [10, 20, 30]
FLOAT range: "0.5-1.5, 0.25" -> [0.5, 0.75, 1.0, 1.25, 1.5]
FLOAT list: "0.5, 1.0, 1.5" -> [0.5, 1.0, 1.5]
STRING: "cat\ndog\nbird" -> ["cat", "dog", "bird"]
COMBO: "euler, dpm_2, ddim" -> ["euler", "dpm_2", "ddim"]
SEED: "random:5" -> [5 random ints], or "42, 123, 999"
"""
import random
import re
from decimal import Decimal, ROUND_HALF_UP
def parse(raw_string: str, param_type: str) -> list:
"""Main entry point. Dispatches to type-specific parsers."""
raise NotImplementedError("Parameter parsing not yet implemented")
def parse_int(raw: str) -> list[int]:
"""
Parse INT values.
Supports range syntax: "start-end, step" (e.g., "10-30, 5")
Supports comma-separated list: "10, 20, 30"
"""
raw = raw.strip()
# Check for range syntax: "start-end, step" or "start-end"
range_match = re.match(
r"^(-?\d+)\s*-\s*(-?\d+)(?:\s*,\s*(\d+))?$", raw
)
if range_match:
start = int(range_match.group(1))
end = int(range_match.group(2))
step = int(range_match.group(3)) if range_match.group(3) else 1
if step <= 0:
raise ValueError(f"Step must be positive, got {step}")
if start <= end:
return list(range(start, end + 1, step))
else:
return list(range(start, end - 1, -step))
# Otherwise treat as comma-separated list
values = []
for part in raw.split(","):
part = part.strip()
if part:
try:
values.append(int(part))
except ValueError:
raise ValueError(
f"Cannot parse '{part}' as integer. "
f"Use comma-separated values (10, 20, 30) "
f"or range syntax (10-30, 5)"
)
return values