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,rousseloceane@live.com,Marseille
Agathe-Alix Faure,22,alfred43@de.fr,NantesFichier JSON de sortie (exports/paris.json) :
[
{
"nom": "Thibault Renaud",
"age": 22,
"email": "smonnier@laposte.net",
"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)