Files
comic-manager/core/result.py
T
2026-02-19 08:36:06 +01:00

48 lines
1.6 KiB
Python

# core/result.py
from dataclasses import dataclass, field
@dataclass
class StepResult:
step: str # "validate" | "clean" | "convert" | ...
changed: bool
details: list = field(default_factory=list) # e.g. ["Eliminado: thumbs.db"]
warnings: list = field(default_factory=list)
errors: list = field(default_factory=list)
@dataclass
class ComicResult:
original_path: str
final_path: str | None # None si se abortó
steps: list = field(default_factory=list)
def ok(self) -> bool:
return all(not s.errors for s in self.steps)
def summary(self) -> str:
if not self.ok():
errors = [e for s in self.steps for e in s.errors]
return f"ERROR [{self.original_path}]: {'; '.join(errors)}"
changed_steps = [s.step for s in self.steps if s.changed]
if changed_steps:
dest = self.final_path or self.original_path
return f"OK [{self.original_path}] → {dest} ({', '.join(changed_steps)})"
return f"OK [{self.original_path}] (sin cambios)"
def full_report(self) -> str:
lines = [f"Cómic: {self.original_path}"]
for s in self.steps:
status = "CAMBIADO" if s.changed else "sin cambios"
lines.append(f" [{s.step}] {status}")
for d in s.details:
lines.append(f" - {d}")
for w in s.warnings:
lines.append(f" AVISO: {w}")
for e in s.errors:
lines.append(f" ERROR: {e}")
if self.final_path:
lines.append(f" Resultado final: {self.final_path}")
return "\n".join(lines)