From 1dae288b35f4ce15172403dcb6959c88f192445c Mon Sep 17 00:00:00 2001 From: David Castex Date: Fri, 6 Jun 2025 16:36:25 +0200 Subject: [PATCH] =?UTF-8?q?assemblage=20du=20d=C3=A9roulement=20du=20scrip?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Des bugs sont apparues : à corriger --- banbou.py | 164 +++++++++++------- test/JEUXDONNEES/dossier02/modele_visa02.xlsx | Bin 0 -> 18659 bytes test/test_remplir_visa.py | 34 +++- 3 files changed, 131 insertions(+), 67 deletions(-) create mode 100644 test/JEUXDONNEES/dossier02/modele_visa02.xlsx diff --git a/banbou.py b/banbou.py index 90dfc7c..1d06c1d 100644 --- a/banbou.py +++ b/banbou.py @@ -1,7 +1,9 @@ ## Script Banbou pour le prétraitement des données des dossiers de recollement ## de fibre optique. -import os, shutil, datetime, openpyxl +import os, shutil, datetime +import openpyxl as xls +#from openpyxl.styles import Alignment, PatternFill @@ -273,14 +275,14 @@ def remplir_VISA(modele, projet): # creation d'un workbook à partir d'un modele - classeur = openpyxl.load_workbook(modele) + classeur = xls.load_workbook(modele) ## definition personnalisé vers chaque feuille du classeur - FRONT = wb[wb.sheetnames[0]] - PDF = wb[wb.sheetnames[1]] - CSV = wb[wb.sheetnames[2]] - DWG = wb[wb.sheetnames[3]] + FRONT = classeur[classeur.sheetnames[0]] + PDF = classeur[classeur.sheetnames[1]] + CSV = classeur[classeur.sheetnames[2]] + DWG = classeur[classeur.sheetnames[3]] @@ -295,7 +297,7 @@ def remplir_VISA(modele, projet): # Nom dossier # Date de reception # Date Visa - FRONT['C1'] = f'Analyse : {projet.nom}\nDate de réception :\nDate visa : {projet.date}' + FRONT['C1'].value = f'Analyse : {projet.nom}\nDate de réception :\nDate visa : {projet.date}' @@ -304,27 +306,27 @@ def remplir_VISA(modele, projet): # FRONT DWG # Je ne peux pas controler automatiquement la projection du DWG (c'est un binaire illisible hors de AutoCAD) # J'ajoute automatiquement la mention comme dans le script précedent. - FRONT['C3'] = f"{projet.nb_dwgs} fichier(s) DWG présent(s).\nProjection de tous les fichiers DWG : RFG93-CC43 (EPSG:3943)." + FRONT['C3'].value = f"{projet.nb_dwgs} fichier(s) DWG présent(s).\nProjection de tous les fichiers DWG : RFG93-CC43 (EPSG:3943)." # Controle le nb de fichiers DWG if projet.nb_dwgs == 0: projet.controles |= 2**4 # allume le bit 5ième bit - FRONT['C3'] = "Pas de fichier DWG présent." + FRONT['C3'].value = "Pas de fichier DWG présent." # Regarde si des fails ont été détectés sur les DWGs fail = projet.controles & FAIL_DWG # operation logique avec le masque # notifie en consequence if fail : - FRONT['B3'] = "FAIL" - FRONT['B3'].fill = PatternFill("solid", start_color="FF4343") + FRONT['B3'].value = "FAIL" + FRONT['B3'].fill = xls.styles.PatternFill("solid", start_color="FF4343") else : - FRONT['B3'] = "OK" - FRONT['B3'].fill = PatternFill("solid", start_color="52BE80") # ancien vert "68D000" + FRONT['B3'].value = "OK" + FRONT['B3'].fill = xls.styles.PatternFill("solid", start_color="52BE80") # ancien vert "68D000" # FRONT PDF - FRONT['C4'] = f"{projet.nb_pdfs} fichier(s) PDF présent(s)." + FRONT['C4'].value = f"{projet.nb_pdfs} fichier(s) PDF présent(s)." # Controle le nb de fichiers PDF if projet.nb_pdfs == 0: @@ -335,51 +337,51 @@ def remplir_VISA(modele, projet): fail = projet.controles & FAIL_PDF # notifie en consequence if fail : - FRONT['B4'] = "FAIL" - FRONT['B4'].fill = PatternFill("solid", start_color="FF4343") + FRONT['B4'].value = "FAIL" + FRONT['B4'].fill = xls.styles.PatternFill("solid", start_color="FF4343") else : - FRONT['B4'] = "OK" - FRONT['B4'].fill = PatternFill("solid", start_color="52BE80") + FRONT['B4'].value = "OK" + FRONT['B4'].fill = xls.styles.PatternFill("solid", start_color="52BE80") # FRONT CSV - FRONT['C5'] = f"{projet.nb_points} point(s) en RFG93-CC43 (EPSG:3943)." + FRONT['C5'].value = f"{projet.nb_points} point(s) en RFG93-CC43 (EPSG:3943)." # Controle le nb de fichiers CSV if projet.nb_csvs == 0: projet.controles |= 2**0 # allume le 1er bit - FRONT['C5'] = "Pas de fichier CSV présent." + FRONT['C5'].value = "Pas de fichier CSV présent." # Regarde si des fails ont été détectés sur les CSVs fail = projet.controles & FAIL_CSV # notifie en consequence if fail : - FRONT['B5'] = "FAIL" - FRONT['B5'].fill = PatternFill("solid", start_color="FF4343") + FRONT['B5'].value = "FAIL" + FRONT['B5'].fill = xls.styles.PatternFill("solid", start_color="FF4343") else : - FRONT['B5'] = "OK" - FRONT['B5'].fill = PatternFill("solid", start_color="52BE80") + FRONT['B5'].value = "OK" + FRONT['B5'].fill = xls.styles.PatternFill("solid", start_color="52BE80") # FRONT FICHE INFO TOPOLOGIE - FRONT['C6'] = f"{projet.nb_releves} fiche(s) Info. présente(s)." + FRONT['C6'].value = f"{projet.nb_releves} fiche(s) Info. présente(s)." # Controle le nb de fichiers Fiche Topologique if projet.nb_releves == 0: projet.controles |= 2**12 # allume le 13ième bit - FRONT['C6'] = "Pas de fiche d'Info. Topologie présente." + FRONT['C6'].value = "Pas de fiche d'Info. Topologie présente." - # Regarde si des fails ont été détectés sur les CSVs - fail = projet.controles & FAIL_CSV + # Regarde si des fails ont été détectés sur les Fiches Topo + fail = projet.controles & FAIL_INFO # notifie en consequence if fail : - FRONT['B6'] = "FAIL" - FRONT['B6'].fill = PatternFill("solid", start_color="FF4343") + FRONT['B6'].value = "FAIL" + FRONT['B6'].fill = xls.styles.PatternFill("solid", start_color="FF4343") else : - FRONT['B6'] = "OK" - FRONT['B6'].fill = PatternFill("solid", start_color="52BE80") + FRONT['B6'].value = "OK" + FRONT['B6'].fill = xls.styles.PatternFill("solid", start_color="52BE80") @@ -435,7 +437,7 @@ class _Fichier: taille=0): self.nom_original = nom_original # - son nom original self.chemin = chemin # - son chemin absolue (dossier+fichier) - self.extension = extension # - son extension + self.extension = extension # - son extension (ecrit en minuscule) self.nom = nom # - son nom formaté self.implication = implication # - son implication dans le projet self.taille = taille # taille en octets @@ -593,7 +595,8 @@ class _Projet: Créer un dossier "Travail" dans la racine du working directory et le peuple des fichiers nécessaires - Met à jour le nombre de fichiers CSVs, DWGs et + Met à jour le nombre de fichiers CSVs, DWGs + Préfixe et suffixe les fichiers le nécessitant (le CSV et le DWG) """ travail = "Travail" @@ -619,10 +622,14 @@ class _Projet: match fichier.extension: case "csv": dest = self.racine + "\\" + travail + "\\" + "Point_" + fichier.nom + "_IN" + "." + fichier.extension - - + self.nb_csvs += 1 case "dwg": dest = self.racine + "\\" + travail + "\\" + "Plan_" + fichier.nom + "." + fichier.extension + self.nb_dwgs += 1 + + case "pdf": + dest = self.racine + "\\" + travail + "\\" + fichier.nom + "." + fichier.extension + self.nb_pdfs += 1 # TODO: refaire le comptage auillleurs !!!! case _: dest = self.racine + "\\" + travail + "\\" + fichier.nom + "." + fichier.extension @@ -655,6 +662,7 @@ class _Projet: - Le fichier CSV NÉCESSITE des ';' comme séparateur d'élements. (Normalement c'est toujours le cas de toutes façon) - Le fichier doit avoir exactement 5 colonnes. TODO : vois si plus de souplesse avec le catchage de paramètres restants param user_input: nom complet d'un fichier csv + NOTE: Ne pas formatter le fichier original, mais celui qui est deja copié dans le dossier Travail """ # titres des colonnes correctement formattés. titres = "id_point;TYPE;X;Y;Z\n" @@ -786,40 +794,70 @@ class _Notification: # # -------------------------------------------------------------------------- # # # MAIN -# racine = os.getcwd() -# print("\nRépertoire courant : ".center(18), racine) +racine = os.getcwd() +print("\nRépertoire courant : ".center(18), racine) -# # --recupérer le chemin du dossier à traiter -# pas_de_dossier = True +# --recupérer le chemin du dossier à traiter +pas_de_dossier = True -# for a in os.scandir(): -# print("\ncourant scandir() = ", a.name.ljust(25), " ", a.is_dir()) -# if a.is_dir(): -# #il y a un dossier -# pas_de_dossier = False -# print(f"\nDossier à Traiter trouvé : {a.name}") -# racine = a +for a in os.scandir(): + print("\ncourant scandir() = ", a.name.ljust(25), " ", a.is_dir()) + if a.is_dir(): + #il y a un dossier + pas_de_dossier = False + print(f"\nDossier à Traiter trouvé : {a.name}") + racine = a -# if pas_de_dossier: -# print("\nPas de dossier trouvé...\nFin de programme.\n") -# os.system("pause") -# exit() +if pas_de_dossier: + print("\nPas de dossier trouvé...\nFin de programme.\n") + os.system("pause") + exit() -# # Création entité projet et maj de ses attributs -# projet = _Projet() +# Création entité projet et maj de ses attributs +projet = _Projet() -# projet.dater() +projet.dater() -# projet.nommer() -# # controle de la longueur du nom du projet -# if len(projet.nom) >=46 : -# print(f"\n{projet.nom} est un nom de dossier trop long (+ de 46 caractères). Veuillez raccourcir son nom\nFin de programme.\n") -# os.system("pause") -# exit() +projet.nommer() +# controle de la longueur du nom du projet +if len(projet.nom) >=46 : + print(f"\n{projet.nom} est un nom de dossier trop long (+ de 46 caractères). Veuillez raccourcir son nom\nFin de programme.\n") + os.system("pause") + exit() -# projet.enraciner() +projet.enraciner() -# projet.rapport = f"{racine}\\Visa_lot_2.xlsx" +## projet.rapport = f"{racine}\\Visa_lot_2.xlsx" -# projet.fichiers = creer_liste(projet.racine) +projet.fichiers = creer_liste(projet.racine) +projet.calculer_taille() + +projet.preparer_dossier_travail() + + +# il faut UN SEUL fichier CSV +if projet.nb_csvs > 1: + print("Avertissement : Il y a plusieurs fichiers CSV.\n Veuillez ne garder qu'UN SEUL fichier CSV dans le dossier original.\nFin de programme.\n") + os.system("pause") + exit() + + +fichier_csv = "" + +for fichier in projet.fichiers: + if fichier.extension in "csv": + entree = projet.racine + "\\Travail\\Point_" + fichier.nom + "_IN" + ".csv" + sortie = projet.racine + "\\Travail\\Point_" + fichier.nom + "_IN" + ".csv" + projet.formatter_vers_ArcGIS(fichier.chemin, sortie) + + + +projet.controler_longueur_noms() + + +modele = projet.racine + "\\Visa_banbou03.xlsx" +remplir_VISA(modele, projet) + + +# exit() \ No newline at end of file diff --git a/test/JEUXDONNEES/dossier02/modele_visa02.xlsx b/test/JEUXDONNEES/dossier02/modele_visa02.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c428a796598b4e2dcee87a1b39de1a2b9b8c43d8 GIT binary patch literal 18659 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 literal 0 HcmV?d00001 diff --git a/test/test_remplir_visa.py b/test/test_remplir_visa.py index 82bad9d..1ddc2bc 100644 --- a/test/test_remplir_visa.py +++ b/test/test_remplir_visa.py @@ -1,8 +1,16 @@ from banbou import remplir_VISA +from banbou import _Notification import banbou +from openpyxl import workbook +# NOTE: les jeux de données de ces tests sont dans le dossier "dossier02" +# NOTE: Il faut un dossier Travail dans le même dossier que le script banbou, en effet le script place le VISA rempli à cet emplacement là +# Je vais test de mocker : classeur.save(f"Travail\\{projet.nom}_VISA.xlsx") pour enregeistrer la ou je veux pour mon test + +# TODO: mocker la focntion save de openpyxl, pour sauvegarder dans le bon dossier Travail dans le dossier02 PAS REUSSI ENCORE A MOCKER JUSTE DES PARAMETRES DE METHODES + def test_notifie_correctement_le_visa(mocker): @@ -15,13 +23,31 @@ def test_notifie_correctement_le_visa(mocker): # projet.nb_csvs # projet.nb_releves # projet.notifs + # projet.nb_points - modele = r"C:\Users\David_Castex\Documents\DATAS\GITDAV\NEOBANBOU\test\JEUXDONNEES\dossier02\modele_visa.xlsx" - # ENCOURS - # remplir_VISA(modele, projet) - pass \ No newline at end of file + + + class MockResponse: + def __init__(self): + self.nom = "FIBER" + self.date = "20001225" + self.nb_dwgs = 1 + self.controles = 0 + self.nb_pdfs = 1 + self.nb_csvs = 1 + self.nb_releves = 1 + self.notifs = [_Notification("CSV", "Il manque un point..."), _Notification("PDF", "Nom trop long."), _Notification("CSV", "Encore un point de manqué.")] + self.nb_points = 38 + + mocker.patch("banbou._Projet", return_value = MockResponse()) + + sut = banbou._Projet() + + modele = r"C:\Users\David_Castex\Documents\DATAS\GITDAV\NEOBANBOU\test\JEUXDONNEES\dossier02\Visa_banbou03.xlsx" + + remplir_VISA(modele, sut) \ No newline at end of file