Fix carried use-sound origin and centralize sound normalization

This commit is contained in:
Jage9
2026-02-24 20:34:48 -05:00
parent fa65d7bd0d
commit 686d065bf9
10 changed files with 267 additions and 34 deletions

View File

@@ -0,0 +1,44 @@
"""Shared normalization helpers for item sound/media URL parameters."""
from __future__ import annotations
def normalize_sound_reference(raw: object) -> str:
"""Normalize sound value to empty/URL/or `sounds/`-relative path."""
token = str(raw or "").strip()
if not token:
return ""
lowered = token.lower()
if lowered in {"none", "off"}:
return ""
if lowered.startswith(("http://", "https://", "data:", "blob:")):
return token
if token.startswith("/sounds/"):
return token[1:]
if token.startswith("sounds/"):
return token
if "/" not in token:
return f"sounds/{token}"
return token
def normalize_media_reference(raw: object) -> str:
"""Normalize media URL-like value while preserving path/query format."""
token = str(raw or "").strip()
if not token:
return ""
lowered = token.lower()
if lowered in {"none", "off"}:
return ""
return token
def enforce_max_length(value: str, *, max_length: int, field_name: str) -> str:
"""Enforce max character length for normalized string fields."""
if len(value) > max_length:
raise ValueError(f"{field_name} must be {max_length} characters or less.")
return value