Vladmodels Katya Y117 47 154 May 2026

@dataclass(frozen=True, slots=True) class VladModel: """A tiny data‑class representing a single VladModels product.""" brand: str # e.g. "vladmodels" name: str # e.g. "katya" code: str # e.g. "y117" width_mm: int # first numeric value (mm) height_mm: int # second numeric value (mm)

def _split_and_clean(raw: str) -> List[str]: """ Helper: split a free‑form string on whitespace and strip any surrounding punctuation. Returns a list of clean tokens. """ return [token.strip().strip(",.;:") for token in raw.split() if token.strip()] vladmodels katya y117 47 154

Expected format (case‑insensitive): "<brand> <name> <code> <width> <height>" Example: "vladmodels katya y117 47 154" vladmodels katya y117 47 154

def test_non_numeric(): with pytest.raises(ValueError, match="must be integer numbers"): parse_vladmodels_spec("vladmodels katya y117 forty seven 154") Run with: vladmodels katya y117 47 154

area = parse_vladmodels_spec("vladmodels katya y117 47 154").area_mm2 print(area) # → 7238