From 30518bfa91f3e70b9aefbe22f3d5ff6f1221b626 Mon Sep 17 00:00:00 2001 From: ronan Date: Wed, 19 Sep 2018 15:28:15 +0200 Subject: [PATCH] gestion des erreurs --- logrotate.py | 61 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 14 deletions(-) diff --git a/logrotate.py b/logrotate.py index 9e044a9..3b94ec9 100644 --- a/logrotate.py +++ b/logrotate.py @@ -30,6 +30,18 @@ def now(): :rtype: datetime.datetime """ return dt.datetime.now().isoformat() + +def cleanList(LIST = [], LISTERR = []): + """ + Supprime de la liste ``LIST`` tous les fichiers + correspondant à ceux en erreur présent dans la liste ``LISTERR`` + + :return: Une nouvelle liste de fichiers nettoyées + :rtype: list + """ + for ERR in LISTERR: + LIST = list(filter(lambda f: not f.startswith(ERR), LIST)) + return LIST def log(FLOG, TXT, FILE, MSG): """ @@ -71,16 +83,20 @@ def removeUnusedFiles(FLOG): delFile(os.path.join(F, FILE), FLOG) return list(set(LIST) - set(LISTDEL)) -def incrementZipFile(LIST, FLOG): +def incrementZipFile(LIST, FLOG, LISTERR = []): """ Incrémente les archives ZIP jusqu'à ``NBARCHIVE`` Suppression de l'archive ZIP dont son index est supérieur ou égal à ``NBARCHIVE`` + + :return: Une liste de fichiers en erreur + :rtype: list """ LISTLOG = listLog(LIST, '.log') LISTZIP = listLog(LIST, '.zip') for f in LISTLOG: WLIST = sorted(list(filter(lambda x: x.startswith(f), LISTZIP)), key=lambda y: int(y.split('.')[2]), reverse=True) + ERR = False for FILE in WLIST: TF = FILE.split('.') IDX = int(TF[2]) @@ -91,25 +107,39 @@ def incrementZipFile(LIST, FLOG): TF[2] = str(IDX + 1) NEWFILE = os.path.join(F, '.'.join(TF)) try: os.rename(OLDFILE, NEWFILE) - except: log(FLOG, TXT, OLDFILE, '{NEWFILE} ***KO***'.format(NEWFILE=NEWFILE)) + except: + ERR = True + LISTERR.append(f) + log(FLOG, TXT, OLDFILE, '{NEWFILE} ***KO***'.format(NEWFILE=NEWFILE)) else: log(FLOG, TXT, OLDFILE, '{NEWFILE}'.format(NEWFILE=NEWFILE)) + finally: + if ERR: break + return LISTERR -def log_0ToZip(LIST, FLOG): +def log_0ToZip(LIST, FLOG, LISTERR = []): """ On écrit tout le contenu des fichiers LOG *.log.0 dans de nouveaux fichiers ZIP *.log.1.zip On supprime ensuite tous les fichiers *.log.0 + + :return: Une liste de fichiers en erreur + :rtype: list """ LISTLOG0 = listLog(LIST, '.log.0') for FILE in LISTLOG0: + ERR = False with open(os.path.join(F, FILE), mode='r', encoding='UTF-8') as f1: - BASE = '.'.join(FILE.split('.')[:-1]) + '.1' + BASE = FILE[:-1] + '1' ZIP = os.path.join(F, BASE + '.zip') with zipfile.ZipFile(ZIP, 'w', compression=zipfile.ZIP_DEFLATED) as f2: try: f2.writestr(BASE, f1.read().encode('UTF-8')) - except: log(FLOG, TXT3, os.path.join(F, FILE), '{NEWFILE} ***KO***'.format(NEWFILE=ZIP)) + except: + ERR = True + LISTERR.append(FILE[:-2]) + log(FLOG, TXT3, os.path.join(F, FILE), '{NEWFILE} ***KO***'.format(NEWFILE=ZIP)) else: log(FLOG, TXT3, os.path.join(F, FILE), '{NEWFILE}'.format(NEWFILE=ZIP)) - delFile(os.path.join(F, FILE), FLOG) + if not ERR: delFile(os.path.join(F, FILE), FLOG) + return LISTERR def logTo0(LIST, FLOG): """ @@ -126,12 +156,13 @@ def logTo0(LIST, FLOG): with open(NEWFILE, mode='w', encoding='UTF-8') as f2: f2.write(f1.read()) except: log(FLOG, TXT, OLDFILE, '{NEWFILE} ***KO***'.format(NEWFILE=NEWFILE)) - else: log(FLOG, TXT, OLDFILE, '{NEWFILE}'.format(NEWFILE=NEWFILE)) - try: - with open(OLDFILE, mode='w', encoding='UTF-8') as f1: - f1.write('') - except: log(FLOG, TXT2, OLDFILE, 'KO') - else: log(FLOG, TXT2, OLDFILE, 'OK') + else: + log(FLOG, TXT, OLDFILE, '{NEWFILE}'.format(NEWFILE=NEWFILE)) + try: + with open(OLDFILE, mode='w', encoding='UTF-8') as f1: + f1.write('') + except: log(FLOG, TXT2, OLDFILE, 'KO') + else: log(FLOG, TXT2, OLDFILE, 'OK') def main(): """ @@ -144,8 +175,10 @@ def main(): with open(os.path.join(F, LOG), mode='a', encoding='UTF-8') as FLOG: LIST = removeUnusedFiles(FLOG) LIST.remove(LOG) # On supprime de la liste le fichier de LOG du script - incrementZipFile(LIST, FLOG) - log_0ToZip(LIST, FLOG) + LISTERR = incrementZipFile(LIST, FLOG) + LIST = cleanList(LIST, LISTERR) + LISTERR = log_0ToZip(LIST, FLOG, LISTERR) + LIST = cleanList(LIST, LISTERR) logTo0(LIST, FLOG) if __name__ == '__main__': -- 1.7.9.5