''' @author: olivier.massot, sept. 2018 ''' import zipfile from path import Path, TempDir class ValidationReport(): def __init__(self, title = ""): self.title = title self.errors = {} self.valid = True class BaseValidator(): @classmethod def submit(cls, subject): """ prends un dossier ou une archive en entrée et vérifie son contenu """ subject = Path(subject) if subject.isfile(): with TempDir() as dirname: zip_ref = zipfile.ZipFile(subject, 'r') zip_ref.extractall(dirname) zip_ref.close() if Path(dirname / subject.stem).isdir(): # cas où l'archive contient un dossier qui lui-même contient les fichiers dirname /= subject.stem return cls._submit_folder(dirname) elif subject.isdir(): return cls._submit_folder(subject) else: raise FileNotFoundError(f"Impossible de trouver le fichier ou répertoire: {subject}") @classmethod def _submit_folder(cls, folder): raise NotImplementedError()