|
|
@@ -0,0 +1,39 @@
|
|
|
+'''
|
|
|
+
|
|
|
+
|
|
|
+ @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()
|