Version finale de production

Contient le nouveau fichier README et 3 fichiers :
 - le script sur un seul fichier.
 - le nouveau modèle de Visa.
 - le fichier de style de couche (aucune modif, juste renommé)

Ces 3 fichiers sont à copier dans le NextCloud pour mise à disposition.
This commit is contained in:
David Castex 2025-06-30 14:08:32 +02:00
parent 1dae288b35
commit cf8d29daf0
4 changed files with 2757 additions and 23 deletions

1175
NEOBANBOU.py Normal file

File diff suppressed because it is too large Load Diff

147
README.md
View File

@ -1,38 +1,139 @@
# NeoBanbou
# NeoBanbou 🐼🐼
Script Python d'assistance dans le controle des dossiers de plan de recollement de fibre optiques.
Script Python utilisé pour le controle qualité de dossiers de plan de
recollement de fibre optiques.
## 🎍 Mise en place 📖
Lorsque vous débutez sur Banbou, la première fois.
1. Sur le bureau, créez un dossier 📁 nommé *Banbou* (B majuscule).
2. Copiez/collez 📋 dans celui ci, les fichiers :
- `NEOBANBOU.py` 📄
- `VISA_BANBOU.xlsx` 📄
- `STYLE_SYMBOLOGIE.lyrx` 📄
Et voilà !
## 🎍 Utilisation 📖
A faire à chaque dossier à traiter.
1. Copiez/collez 📋 l'archive 🗃 du dossier à traiter dans le dossier *Banbou*, et dézipper la 🤐.
2. A l'intérieur de ⮩ **chaque sous-dossier** ainsi dézippé (ou à défaut dans le dossier dézippé), copiez/collez-y 📋 le fichier `NEOBANBOU.py` 📄.
3. Exécutez ⚙ le script `NEOBANBOU.py` ainsi déposé.
Vous pouvez fermer les fenêtres apparues une fois le script terminé. Bien joué ! 👍
## 🎍 Fonctionnement 📖
### ⛪ Historique ⛪
Après avoir lu et compris le contenu de l'ancien script, et avoir apporté quelques modifications, j'ai plutot décidé de repartir de zéro.
Ma première version était divisée en plusieurs modules et fichiers.
Mais pour une question d'ergonomie dans l'utilisation, j'ai tout regroupé sur un seul fichier.
### 🧪 Tests unitaires 🧪
Dans l'optique de m'exercer, j'ai créé dans l'ancienne version des tests unitaires pour chaque fonction et classe. Malheuresement, je ne les ai pas mis a jour avec la dernière version, ils ne sont donc pour le moment plus fonctionnels.
### 🔃 Déroulé du programme 🔃
Voici un explicatif du déroulé du programme :
#### 1. Imports des bibliothèques et modules.
- lignes 4-14 : Le script commence par vérifier la présence de la commande `pip` (commande qui permet d'installer des modules *PyPI* (Python Package Index, le dépot communautaire des modules Python) et l'installe si nécessaire.
- lignes 15-25 : Le script vérifie la présence des modules additionnels utilisés dans le script et les installe si nécessaire.
> Note : Cette partie est en vérité à exécuter qu'une seule fois, lors de la première utilisation du script. Si vous souhaitez accélérer l'exécution du script pour les prochaines fois, effacez cette partie (lignes 4 à 25).
- lignes 29-32 : Import des modules utilisés.
#### 2. Constantes
- lignes 39-162 : Vous trouverez une liste de variables constantes :
- Le nom de l'utilisateur Windows.
- Le chemin vers le modèle du Visa.
- Le nom du dossier qui receptionne les fichiers créés.
- Le caractère choisi comme séparateur d'élements d'un fichier CSV.
- L'expression régulière utilisée pour filtrer les fichiers nécessaires des fichiers inutiles. (VOir lien wiki sur les RegEx)
- Les masques binaires utilisés pour les opérations logiques de validation de point de controle. TODO Voir lien plus loin pour les explications.
- Une liste de projections polaires coniques utilisé en France Métropolitaine (TODO Voir lien réf IGN). Elles sont, chacunes, définies et contraintes par leurs plages des valeurs (les coordonnées géographiques).
## Lancer les Tests
> Note : Vous pouvez modifier facilement le comportement du programme en modifiant directement ces variables.
Pour lancer les tests, il faudra préalablement installer un environnement de travail isolé
#### 3. Classes et fonctions
```bash
python -m venv venv
```
Il s'agit du regroupement des modules que j'avais externalisés dans l'ancienne version :
Puis basculer vers cet environnement (a faire à chaque fois qu'on ouvre un shell)
```bash
source venv/Scripts/activate
```
Sous Windows ce sera `env\Scripts\activate.bat`
- lignes 172-245 : Une représentation d'un fichier.
- lignes 251-256 : Une représentation d'une notification.
- lignes 266-328 : Une fonction importante qui controle la validité des coordonnées d'un point géographique.
- lignes 337-472 : Des fonctions *Input/Output* sur des chaines de caractères (ex: formater un nom suivant une nomenclature donné, etc)
- lignes 482-906 : Une représentation du projet.
- lignes 916-1081 : Une fonction qui génère le Visa de controle.
#### 4. Exécution du programme
>Note : Le programme principal parait donc très court car il va ensuite faire appel à toutes les autres fonctions vu plus haut.
- lignes 1123-1134 : Le programme commence par créer un Projet et définie des valeurs utiles (date, chemin, etc)
- ligne 1136 : Le programme parcourt le dossier où se trouve le script et analyse tous les fichiers trouvés (quel est son nom, son extension, est-il est utile pour le projet ? ) et stocke toutes ces infos dans une liste pour être utiliser plus tard.
- ligne 1138 : calcule la taille **seulement** des fichiers qui vont être copiés dans le dossier de Travail.
- ligne 1142 : reprend la liste créée et décide des dossiers à créer puis y copie les fichiers attendus. Ajoute les préfixes et suffixes aux noms de fichiers si nécessaire.
- lignes 1151-1156 : le fichier CSV contenant les points est lu. Chaque ligne, contenant une coordonnée, est :
- analysée, on vérifie de sa projection.
- formatée, on corrige certains défauts de syntaxe. Les lignes vides, etc.
- ajoutée à une liste. Cette liste est ensuite écrite dans un fichier.
- ligne 1161 : Le programme controle la longueur de tous les noms de fichiers.
- ligne 1166 : finalement le programme crée un visa à partir d'un modèle, et ajoute toutes les informations nécessaires, ainsi que toutes les notifications
sur des points de controles qui ne seraient pas passés.
### 🛂🚧 Les points de controles réalisés 🚧🛂
#### 1. 🚦Intersection CC47 et Lambert93 🚦
Voir shémas (TODO)
#### 2. 🧭 Longitude pas en métropole 🧭
Si la projection polaire est correcte, je vérifie et avertie si la longitude du point ne se situe pas en métropole.
#### 3. 📏 Longueur des noms de fichiers 📏
>Note : Par nom de fichier je veux dire le nom du fichier sans son point ni son extension. Il faut cependant compter les préfixes et suffixes ajoutés.
Ex : pour le fichier `Plan_monfichierDWG.dwg`, le nom retenu sera *Plan_monfichierDWG* simplement.
La règle retenu est :
- Pour le fichier DWG, longueur nom strictement inférieure à 31.
- Tous les autres noms de fichiers et dossiers, longueur nom strictement inférieure à 46.
#### 4. 🛸 Fichier CSV imcomplet, inconnu 🛸
Le formatage du fichier ne résout pas tout. Si il manque des données, des champs entiers, etc, je ne vais pas les créer. Dans ce cas, le programme s'arrete
en affichant un avertissement.
J'ai utiliser Pytest pour les tests et son module pytest-mock
#### 5. 🚧 Controle la présence des fichiers nécessaires
Un projet doit necessairement comporter au moins ces 4 fichiers :
- un fichier PDF 📄 de plan de situation
- un fichier PDF 📄 (ou autres formats), la fiche de topographie
- un fichier DWG 📄, le fichier de couches AutoCad
- un **seul** fichier CSV 📄, le fichier contenant le relevé des coordonnées de chaque points.
```bash
pip install pytest
pip install pytest-mock
```
>Note: Si un de ces 4 fichiers est absent, le projet devrait être considéré comme **incomplet**. Des FAILs se notifieront dans la page FRONT.
Les tests sont situés dans le dossier `test/` pour les lancer tous, depuis la racine du projet :
## 🎍 A l'attention des utilisateurs avancés 📖
```
pytest test/
```
J'ai considéré l'écriture de ce script comme un exercice d'algorithmie et de d'apprentissage du Python.
De ce point de vue, il y a certainement beaucoup d'optimisation.
*C'est vrai ça : Pourquoi s'embêter à faire des classes pour des objets qui ont deja nativement dans le langage des classes et méthodes ( wtf une classe _Fichier ??), ou alors pourquoi implementer une variable binaire pour comptabiliser les controles ? (alors que de simples variables ou une liste de variables aurait pu aussi bien fait l'affaire...).*
## Auteurs
**Réponse :** pour la pratique et la curiosité !
- [@david.castex](https://gitea.digitanie.org/david.castex)
Donc oui, ce script n'est pas optimal. Mais, il est robuste (plutot) et fonctionnel pour l'usage prévu en production.
Notez également qu'il n'y a eu aucun recours à de l'IA. L'exercice consistait aussi à conceptualiser les besoins.
TODO Explication avancées.

1458
STYLE_SYMBOLOGIE.lyrx Normal file

File diff suppressed because it is too large Load Diff

BIN
VISA_BANBOU.xlsx Normal file

Binary file not shown.