52 lines
1.8 KiB
Python
52 lines
1.8 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 has_issues(self) -> bool:
|
|
"""True si algún step tiene warnings o errors."""
|
|
return any(s.warnings or s.errors for s in self.steps)
|
|
|
|
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)
|