Projet Python DevOps - Module Scripting Python
Objectif : Solution légÚre pour la gestion automatique des étudiants et l'organisation des cours selon les conditions météorologiques.
Ce projet implémente une solution complÚte pour le Campus Eductive permettant de :
- Gérer automatiquement les listes d'étudiants par ville
- Générer des statistiques simples sur les cours
- Décider automatiquement du mode de cours (présentiel/visioconférence) selon la météo
- Sauvegarder toutes les données importantes en JSON
- Générer des rapports de synthÚse
- Cours en présentiel : Temps clair (
Clear) ou nuageux (Clouds) - Cours en visioconférence : Pluie (
Rain), neige (Snow), orage (Thunderstorm), bruine (Drizzle)
- Python 3.7+
- Clé API OpenWeatherMap (gratuite sur openweathermap.org)
- Connexion internet pour l'API météo
# Cloner le projet
git clone <votre-repo>
cd Python-Hackathon-B3
# Créer et activer l'environnement virtuel
python -m venv venv
# Activation selon votre OS :
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
# Installer les dépendances
pip install -r requirements.txtCréez un fichier .env à la racine du projet :
# Clé API OpenWeatherMap (OBLIGATOIRE pour la météo)
WEATHER_API_KEY=votre_cle_api_openweathermap
# Chemins des fichiers
DATA_FILE_PATH=data/etudiants.csv
EXPORT_PATH=exports/
REPORT_PATH=reports/
# Configuration des logs
LOG_DIR=logs/# Test rapide sans API météo
python main.py --list-cities
# Si vous voyez la liste des villes, l'installation est correcte !# Afficher toutes les villes disponibles
python main.py --list-cities
python main.py -l
# Traiter une ville spécifique
python main.py --city Paris
python main.py -c Lyon
# Mode automatique - traiter toutes les villes
python main.py --full
python main.py -f
# Mode complet avec génération de rapport
python main.py --full --report
python main.py -f -r
# Aide complĂšte
python main.py --helpExemple 1 : Traitement d'une ville
python main.py --city MarseilleRésultat :
- Filtre les étudiants de Marseille
- Appelle l'API météo pour Marseille
- Décide du mode de cours selon la météo
- Affiche les décisions pour chaque étudiant
- Sauvegarde dans
exports/marseille.json
Exemple 2 : Traitement complet avec rapport
python main.py --full --reportRésultat :
- Traite automatiquement toutes les villes
- GénÚre un rapport global dans
reports/report_YYYY-MM-DD.txt - Sauvegarde toutes les décisions dans
exports/decisions_YYYY-MM-DD.json
Si vous lancez l'application sans arguments :
python main.pyL'application passe en mode interactif :
- Affiche automatiquement toutes les villes disponibles
- Vous demande de saisir une ville Ă traiter
- Permet de traiter plusieurs villes successivement
- Tapez
quit,q, ouexitpour quitter
Python-Hackathon-B3/
âââ đ data/
â âââ etudiants.csv # DonnĂ©es des Ă©tudiants (nom, Ăąge, email, ville)
âââ đ exports/ # Fichiers JSON gĂ©nĂ©rĂ©s
â âââ paris.json # Ătudiants filtrĂ©s par ville
â âââ lyon.json
â âââ decisions_YYYY-MM-DD.json # DĂ©cisions mĂ©tĂ©o globales
âââ đ reports/ # Rapports de synthĂšse
â âââ report_YYYY-MM-DD.txt # Statistiques globales
âââ đ logs/ # Logs quotidiens
â âââ YYYY-MM-DD.log # Journal d'activitĂ© du jour
âââ đ services/ # Modules mĂ©tier
â âââ __init__.py # Package Python
â âââ gestion.py # đ Gestion des Ă©tudiants
â âââ meteo.py # đ€ïž API mĂ©tĂ©o et dĂ©cisions
â âââ utils.py # đ§ Fonctions utilitaires
âââ main.py # đ Interface CLI principale
âââ requirements.txt # đŠ DĂ©pendances Python
âââ .env # âïž Configuration (Ă crĂ©er)
âââ .gitignore # Git ignore
âââ README.md # đ Documentation
- Demande de ville Ă l'utilisateur (CLI + mode interactif)
- Filtrage des étudiants par ville
- Tri des étudiants par ùge croissant
- Sauvegarde en JSON :
exports/<ville>.json
- Appel API OpenWeatherMap pour chaque ville
- Décision automatique présentiel/visioconférence
- Messages formatés pour chaque étudiant
- Génération du fichier :
exports/decisions_<date>.json
- gestion.py : Fonctions liées aux étudiants
- meteo.py : Appel API et logique météo
- main.py : Exécution principale avec CLI
- utils.py : Fonctions utilitaires
- ParamĂštres dans fichier
.env - SystĂšme de logs quotidiens dans
logs/
- Interface CLI complĂšte avec argparse
- Option
--fullpour traitement automatique - Génération de rapport.txt avec statistiques :
- Nombre de villes traitées
- Nombre d'étudiants en visio
- Nombre d'étudiants en présentiel
- Mode interactif sans arguments
- Fichier quotidien :
logs/YYYY-MM-DD.log - Timestamp automatique sur chaque entrée
- Niveaux : INFO, WARNING, ERROR, DEBUG
- Historique automatique par jour
[2024-12-07 14:30:15] - đ DĂ©marrage de l'application de gestion des cours
[2024-12-07 14:30:16] - đïž Traitement de la ville: Paris
[2024-12-07 14:30:17] - đ 3 Ă©tudiant(s) trouvĂ©(s) Ă Paris
[2024-12-07 14:30:18] - đ€ïž MĂ©tĂ©o Ă Paris: Nuageux
[2024-12-07 14:30:19] - đ Mode de cours: prĂ©sentiel
python main.py --city ParisSortie attendue :
Cours en prĂ©sentiel pour Thibault Renaud (Paris) â MĂ©tĂ©o : Nuageux
Cours en prĂ©sentiel pour Claudine Gilles (Paris) â MĂ©tĂ©o : Nuageux
Cours en prĂ©sentiel pour Vincent-Laurent Klein (Paris) â MĂ©tĂ©o : Nuageux
â
Traitement terminé pour Paris
đ 3 Ă©tudiant(s) traitĂ©(s)
python main.py --full --reportRésultat :
- Traite toutes les villes automatiquement
- GénÚre
reports/report_2024-12-07.txt:
đïž 9 villes traitĂ©es
đïž 12 cours en visio
đïž 18 cours en prĂ©sentiel
python main.pySession interactive :
đïž Villes disponibles: Bordeaux, Lille, Lyon, Marseille, Nantes, Nice, Paris, Toulouse
đ Entrez le nom de la ville Ă traiter (ou 'quit' pour quitter): Lyon
[Traitement de Lyon...]
â
Traitement terminé pour Lyon
đ Entrez le nom de la ville Ă traiter (ou 'quit' pour quitter): quit
đ Au revoir !
# Test sans API météo
python main.py --list-cities
# Test avec une ville (nécessite clé API)
python main.py --city Paris
# Test des modules individuellement
python services/gestion.py
python services/meteo.pyFichier CSV d'entrée (data/etudiants.csv) :
nom,age,email,ville
ThérÚse Laroche,23,[email protected],Marseille
Agathe-Alix Faure,22,[email protected],Nantes
Fichier JSON de sortie (exports/paris.json) :
[
{
"nom": "Thibault Renaud",
"age": 22,
"email": "[email protected]",
"ville": "Paris"
}
]â "Fichier de donnĂ©es non trouvĂ©"
- Vérifiez que
data/etudiants.csvexiste - Vérifiez le chemin dans le fichier
.env
â "ModuleNotFoundError"
- Activez l'environnement virtuel :
source venv/bin/activate - Installez les dépendances :
pip install -r requirements.txt
â Erreur API mĂ©tĂ©o
- Vérifiez votre clé API dans
.env - Vérifiez votre connexion internet
- Vérifiez que votre quota API n'est pas dépassé
Consultez les logs quotidiens dans logs/YYYY-MM-DD.log pour diagnostiquer les problĂšmes.
# API (OBLIGATOIRE pour la météo)
WEATHER_API_KEY=your_openweathermap_api_key
# Chemins personnalisables
DATA_FILE_PATH=data/etudiants.csv # Fichier CSV des étudiants
EXPORT_PATH=exports/ # Dossier exports JSON
REPORT_PATH=reports/ # Dossier rapports
LOG_DIR=logs/ # Dossier logs quotidiens- Modifiez
DECISION_TREEdansservices/meteo.pypour changer la logique météo - Ajoutez des traductions dans
TRADUCTION_WEATHER - Personnalisez les formats de logs dans
services/utils.py
- Python 3.7+ avec modules standard
- API OpenWeatherMap pour la météo
- argparse pour l'interface CLI
- JSON/CSV pour les données
- dotenv pour la configuration
- Logs personnalisés (sans module logging)