ParamManagerScripts/backend/script_groups/ImportHTML/models/pagina_html.py

75 lines
2.5 KiB
Python

# models/pagina_html.py
import os
import re
import hashlib
from pathlib import Path
class PaginaHTML:
def __init__(self, ruta_archivo, titulo=None, contenido=None, imagenes=None):
self.ruta_archivo = ruta_archivo
self.nombre_archivo = Path(ruta_archivo).name
self.titulo = titulo or self._extraer_titulo_de_ruta()
self.contenido = contenido or ""
self.hash = self._generar_hash()
self.imagenes = imagenes or [] # Lista de imágenes asociadas a esta página
def _extraer_titulo_de_ruta(self):
"""Extrae el título a partir del nombre del archivo."""
nombre = Path(self.ruta_archivo).stem
# Limpia el nombre: reemplaza guiones y underscores por espacios
nombre = re.sub(r"[_-]", " ", nombre)
# Capitaliza cada palabra
nombre = " ".join(word.capitalize() for word in nombre.split())
return nombre
def _generar_hash(self):
"""Genera un hash único para la página."""
elementos_hash = [
self.nombre_archivo,
self.titulo,
(
self.contenido[:500] if self.contenido else ""
), # Usar solo los primeros 500 caracteres
]
texto_hash = "|".join(elementos_hash)
return hashlib.md5(texto_hash.encode()).hexdigest()
def to_markdown(self):
"""Convierte la página a formato Markdown."""
# Hash como comentario al principio
hash_line = f"<!-- {self.hash} -->\n\n"
# Título como encabezado
titulo_line = f"## {self.titulo}\n\n"
# Nombre del archivo original como referencia
origen_line = f"*Origen: {self.nombre_archivo}*\n\n"
# Contenido
md = f"{hash_line}{titulo_line}{origen_line}"
# Limpiar cualquier artefacto de asteriscos extra antes de agregar el contenido
contenido_limpio = re.sub(r"(\*{3,}|\-{3,}|_{3,})", "---", self.contenido)
md += contenido_limpio + "\n\n"
# Ya no se agregan imágenes al final - se asume que están en el contenido
md += "---\n\n"
return md
def get_index_entry(self):
"""Genera una entrada para el índice."""
# Formatear el título para el enlace de Markdown
slug = re.sub(r"[^\w\s-]", "", self.titulo.lower())
slug = re.sub(r"\s+", "-", slug)
return f"- [{self.titulo}](#{slug})"
def add_imagen(self, imagen):
"""Añade una referencia a una imagen asociada a esta página."""
if imagen not in self.imagenes:
self.imagenes.append(imagen)