from abc import ABC, abstractmethod from typing import Callable class SyncEngine(ABC): """Interfaz abstracta para motores de sincronización.""" @abstractmethod def sync_folder( self, src: str, dst: str, on_file: Callable[[str], None], on_summary: Callable[[str], None], ) -> None: """ Sincroniza src → dst. on_file(path) — llamado con cada archivo que se procesa on_summary(line) — llamado con cada línea de resumen al finalizar """ ... @abstractmethod def is_available(self) -> bool: """Devuelve True si el motor está disponible en el sistema actual.""" ...