cojournalist-data / ui /helpers.py
Tom
Refactor: Modularize codebase into clean architecture (Phase 1)
6c0d724
raw
history blame
1.41 kB
"""UI helper functions for data formatting and display."""
import re
def prefer_language(value: str | dict | None, lang_code: str) -> str | None:
"""Return the value for the requested language with sensible fallbacks."""
if isinstance(value, str):
return value or None
if not isinstance(value, dict):
return None
order = [lang_code, "de", "fr", "it", "rm", "en"]
for code in order:
text = value.get(code)
if text:
return text
for text in value.values():
if text:
return text
return None
def strip_html(text: str) -> str:
"""Remove HTML tags and collapse whitespace for short summaries."""
if not text:
return ""
cleaned = re.sub(r"<[^>]+>", " ", text)
cleaned = re.sub(r"\s+", " ", cleaned).strip()
return cleaned
def pick_external_url(*candidates) -> str | None:
"""Return the first non-empty external URL."""
for candidate in candidates:
if not candidate:
continue
if isinstance(candidate, dict):
# Prefer German, fall back to any available language
url = prefer_language(candidate, "de") or prefer_language(candidate, "fr") or prefer_language(candidate, "it")
if url:
return url
elif isinstance(candidate, str) and candidate.strip():
return candidate.strip()
return None