Skip to content

elouanlbrs/Python-Hackathon-B3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎓 Hackathon ESGI - Gestion des Étudiants et Cours selon MĂ©tĂ©o

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.

📋 Description du Projet

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

đŸŒ€ïž Logique MĂ©tĂ©orologique

  • Cours en prĂ©sentiel : Temps clair (Clear) ou nuageux (Clouds)
  • Cours en visioconfĂ©rence : Pluie (Rain), neige (Snow), orage (Thunderstorm), bruine (Drizzle)

🚀 Installation et Configuration

1. Prérequis

  • Python 3.7+
  • ClĂ© API OpenWeatherMap (gratuite sur openweathermap.org)
  • Connexion internet pour l'API mĂ©tĂ©o

2. Installation du Projet

# 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.txt

3. Configuration Environnement

Cré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/

4. Vérification de l'Installation

# Test rapide sans API météo
python main.py --list-cities

# Si vous voyez la liste des villes, l'installation est correcte !

đŸ’» Utilisation de l'Application

🔧 Interface CLI (Ligne de Commande)

Commandes Principales

# 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 --help

Exemples d'Utilisation CLI

Exemple 1 : Traitement d'une ville

python main.py --city Marseille

Ré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 --report

Ré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

đŸ–„ïž Mode Interactif

Si vous lancez l'application sans arguments :

python main.py

L'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, ou exit pour quitter

📁 Structure du Projet

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

🎯 FonctionnalitĂ©s ImplĂ©mentĂ©es

✅ Partie 1 - Gestion des Utilisateurs

  • 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

✅ Partie 2 - Organisation des Cours selon MĂ©tĂ©o

  • 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

✅ Partie 3 - Structure Logicielle

  • 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/

✅ Partie Bonus

  • Interface CLI complĂšte avec argparse
  • Option --full pour 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

📊 SystĂšme de Logs PersonnalisĂ©

Fonctionnalités

  • Fichier quotidien : logs/YYYY-MM-DD.log
  • Timestamp automatique sur chaque entrĂ©e
  • Niveaux : INFO, WARNING, ERROR, DEBUG
  • Historique automatique par jour

Format des Logs

[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

đŸ› ïž Exemples Complets d'Utilisation

Scénario 1 : Traitement Manuel d'une Ville

python main.py --city Paris

Sortie 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)

Scénario 2 : Traitement Automatique Complet

python main.py --full --report

Ré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

Scénario 3 : Mode Interactif

python main.py

Session 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 !

🔧 DĂ©veloppement et Tests

Tests Rapides

# 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.py

Structure des Données

Fichier 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"
  }
]

🐛 DĂ©pannage

Erreurs Communes

❌ "Fichier de donnĂ©es non trouvĂ©"

  • VĂ©rifiez que data/etudiants.csv existe
  • 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Ă©

Logs de Débogage

Consultez les logs quotidiens dans logs/YYYY-MM-DD.log pour diagnostiquer les problĂšmes.

📝 Configuration AvancĂ©e

Variables d'Environnement ComplĂštes

# 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

Personnalisation

  • Modifiez DECISION_TREE dans services/meteo.py pour changer la logique mĂ©tĂ©o
  • Ajoutez des traductions dans TRADUCTION_WEATHER
  • Personnalisez les formats de logs dans services/utils.py

🎓 ConformitĂ© au Cahier des Charges

Technologies Utilisées

  • 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)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages