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:
parent
1dae288b35
commit
cf8d29daf0
1175
NEOBANBOU.py
Normal file
1175
NEOBANBOU.py
Normal file
File diff suppressed because it is too large
Load Diff
147
README.md
147
README.md
@ -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
1458
STYLE_SYMBOLOGIE.lyrx
Normal file
File diff suppressed because it is too large
Load Diff
BIN
VISA_BANBOU.xlsx
Normal file
BIN
VISA_BANBOU.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user