Health Calculator est un projet Python permettant de calculer des indices de santé comme le BMI (Indice de Masse Corporelle) et le BMR (Taux Métabolique de Base) à l'aide d'une API REST et d'une interface web intuitive. L'application est conteneurisée avec Docker et dispose de pipelines CI/CD pour un déploiement sur Azure.
Avant de commencer, assurez-vous d'avoir les éléments suivants :
- Système d'exploitation : Linux, macOS ou Windows avec WSL.
- Python : Version 3.12.
- Docker : Dernière version installée.
- Git : Pour cloner le dépôt.
- Make : Pour exécuter les commandes d'automatisation.
- Pre-commit : Pour garantir la qualité et la conformité du code.
Cloner le dépôt sur votre machine locale :
git clone https://github.com/sseey/Health-Calculator.git
cd Health-Calculator
Pour pouvoir tester ce projet il vous faudra Python d'installer voici comment faire :
- Mettez à jour la liste des paquets et installez Python 3 :
sudo apt update sudo apt install -y python3
- Vérifiez que Python 3 est installé :
python3 --version
sudo apt install -y python3-venv
-
Installez pip pour Python 3 :
sudo apt install -y python3-pip
-
Vérifiez que pip est installé correctement :
pip3 --version
Pour orchestrer ce projet il vous faudra Make voici comment installer make :
-
Mettre à jour :
sudo apt update
-
Installer Make :
sudo apt install -y make
-
Vérification :
make --version
Pour personnaliser le projet, vous devez créer un fichier .env
à la racine du projet contenant les variables suivantes :
- Créez un fichier
.env
dans le répertoire racine :touch .env
- Remplissez-le avec les variables ci-dessus en adaptant les valeurs à vos besoins.
# Configuration Flask
FLASK_ENV=exemple
PORT=XXXX
# Configuration Docker
CONTAINER_NAME=nom-du-container
DOCKER_IMAGE=health-calculator
Le projet utilise un fichier Makefile
pour automatiser les tâches courantes. Voici les étapes à suivre :
Pour créer l'environnement virtuel Python et installer les dépendances :
make init
source venv/bin/activate
Pour démarrer le serveur Flask localement :
make run
Accédez à l'application à l'adresse suivante :
http://127.0.0.1:5000
Pour exécuter les tests unitaires :
make test
Pour tester les endpoints API locaux :
make test-api
Pour tester les endpoints déployés sur Azure :
make test-azure
-
Construire l'image Docker :
make build
-
Lancer l'application dans un conteneur Docker :
make run-container
-
Arrêter et supprimer le conteneur :
make stop-container
L'application est déployée sur Azure App Services. Vous pouvez accéder à l'application via le lien suivant :
Un test de l'API déployée peut être exécuté avec :
make test-azure
- Contient l'API Flask avec les endpoints suivants :
/
: Page d'accueil et interface utilisateur./bmi
: Calcul du BMI./bmr
: Calcul du BMR.
- Utilise
dotenv
pour charger les variables d'environnement. - Fournit une route pour servir les fichiers statiques du répertoire
assets
.
- Contient les fonctions utilitaires pour les calculs :
calculate_bmi(height, weight)
: Calcule le BMI en utilisant la taille (en mètres) et le poids (en kg).calculate_bmr(height, weight, age, gender)
: Calcule le BMR avec les données de taille (en cm), poids, âge et genre.
- Permet une validation stricte des entrées utilisateur, et convertit les tailles saisies en centimètres si nécessaire.
-
test_health_utils.py
:- Contient des tests unitaires pour les fonctions
calculate_bmi
etcalculate_bmr
.
- Contient des tests unitaires pour les fonctions
-
test_integration_azure.py
:- Valide les endpoints API déployés sur Azure.
- Comprend une fonction
wait_for_service
pour s'assurer que l'application est accessible avant d'exécuter les tests.
-
test_app.py
:- Teste les fonctionnalités principales de l'application Flask en local.
- Interface utilisateur pour interagir avec les endpoints.
- Permet de calculer le BMI et le BMR directement depuis le navigateur.
- Ajoute un style moderne avec un dégradé sombre en fond d’écran.
- Inclut un design adaptatif pour la carte centrale et le footer.
- Gère les icônes GitHub et LinkedIn dans le footer.
- Contient les fonctions JavaScript pour envoyer des requêtes POST à l’API Flask.
- Valide les entrées utilisateur avant de les envoyer.
Le Makefile
permet d’automatiser les tâches. Voici ses principales cibles :
make init
: Initialise le projet (environnement virtuel et dépendances et installe et prepare pre commit dans l'environnement de developement).make run
: Lance l'application Flask.make build
: Construit l'image Docker.make run-container
: Lance l'application dans un conteneur Docker.make test
: Exécute les tests unitaires.make test-api
: Teste les endpoints locaux.make test-azure
: Teste les endpoints déployés sur Azure.make clean
: Supprime les fichiers temporaires.
Le pipeline CI (écrit dans ci.yml
) s'assure que chaque modification est valide :
- Clône le dépôt.
- Configure Python et installe les dépendances.
- Construit l'image Docker et lance un conteneur.
- Exécute les tests locaux.
Le pipeline CD déploie l'application sur Azure :
- Archive l’application et ses dépendances.
- Téléverse l’application sur Azure App Services.
- Valide le déploiement avec des tests.
Le projet utilise pre-commit pour garantir la qualité et la conformité du code avant chaque commit. Les hooks pre-commit permettent d'automatiser des vérifications comme la correction des espaces inutiles, le formatage du code, et le respect des règles de style.
- trailing-whitespace : Supprime les espaces inutiles à la fin des lignes.
- end-of-file-fixer : Garantit qu’un fichier se termine par une ligne vide.
- black : Formate le code Python.
- flake8 : Analyse statique pour détecter des erreurs de style.
Projet réalisé par Hicham Smail. Lien LinkedIn | Lien GitHub
- https://www.sololearn.com/en/discuss/2686226/bmi-calculator-python-beginner-project
- https://docs.python.org/3/library/unittest.html
- https://hub.docker.com/_/python
- https://pre-commit.com/
- https://stackoverflow.com/questions/2838715/makefile-variable-initialization-and-export
- https://stackoverflow.com/questions/23434708/how-does-an-api-work