File size: 572 Bytes
67aa1ca | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | """Utilidades compartidas por los servicios."""
from __future__ import annotations
import re
import unicodedata
def slugify(value: str) -> str:
"""Convierte un texto en un slug apto para URLs.
Elimina acentos, pasa a minúsculas y reemplaza los separadores por
guiones.
"""
normalized = (
unicodedata.normalize("NFKD", value)
.encode("ascii", "ignore")
.decode("ascii")
)
normalized = re.sub(r"[^\w\s-]", "", normalized).strip().lower()
slug = re.sub(r"[-\s]+", "-", normalized)
return slug or "sin-nombre"
|