Skip to content

Microservice en Python qui calcule deux métriques de santé, l'IMC (BMI) et le BMR, via une API REST.

Notifications You must be signed in to change notification settings

sseey/Health-Calculator

Repository files navigation

Health Calculator

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.

Prérequis

Avant de commencer, assurez-vous d'avoir les éléments suivants :

  1. Système d'exploitation : Linux, macOS ou Windows avec WSL.
  2. Python : Version 3.12.
  3. Docker : Dernière version installée.
  4. Git : Pour cloner le dépôt.
  5. Make : Pour exécuter les commandes d'automatisation.
  6. Pre-commit : Pour garantir la qualité et la conformité du code.

Cloner le dépôt Git

Cloner le dépôt sur votre machine locale :

git clone https://github.com/sseey/Health-Calculator.git
cd Health-Calculator

Installer Python

Pour pouvoir tester ce projet il vous faudra Python d'installer voici comment faire :

Installer Python 3

  1. Mettez à jour la liste des paquets et installez Python 3 :
    sudo apt update
    sudo apt install -y python3
  2. Vérifiez que Python 3 est installé :
    python3 --version

Installer le module venv

sudo apt install -y python3-venv

Installer pip

  1. Installez pip pour Python 3 :

    sudo apt install -y python3-pip
  2. Vérifiez que pip est installé correctement :

    pip3 --version

Installer Make

Pour orchestrer ce projet il vous faudra Make voici comment installer make :

  1. Mettre à jour :

    sudo apt update
  2. Installer Make :

    sudo apt install -y make
  3. Vérification :

    make --version

Création et configuration du fichier .env

Pour personnaliser le projet, vous devez créer un fichier .env à la racine du projet contenant les variables suivantes :

Création du fichier .env

  1. Créez un fichier .env dans le répertoire racine :
    touch .env
  2. 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

Lancer le projet localement avec Make

Le projet utilise un fichier Makefile pour automatiser les tâches courantes. Voici les étapes à suivre :

1. Initialiser le projet

Pour créer l'environnement virtuel Python et installer les dépendances :

make init

2. Activer l'environnement

source venv/bin/activate

3. Lancer l'application Flask

Pour démarrer le serveur Flask localement :

make run

Accédez à l'application à l'adresse suivante :

http://127.0.0.1:5000

4. Lancer les tests locaux

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

5. Utiliser Docker

  • 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

Déploiement sur Azure

L'application est déployée sur Azure App Services. Vous pouvez accéder à l'application via le lien suivant :

Health Calculator sur Azure

Un test de l'API déployée peut être exécuté avec :

make test-azure

Structure des fichiers

Backend

app.py

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

health_utils.py

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

Tests

  • test_health_utils.py :

    • Contient des tests unitaires pour les fonctions calculate_bmi et calculate_bmr.
  • 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.

Frontend

index.html

  • Interface utilisateur pour interagir avec les endpoints.
  • Permet de calculer le BMI et le BMR directement depuis le navigateur.

styles.css

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

scripts.js

  • Contient les fonctions JavaScript pour envoyer des requêtes POST à l’API Flask.
  • Valide les entrées utilisateur avant de les envoyer.

Makefile

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.

Workflow CI/CD

CI Pipeline

Le pipeline CI (écrit dans ci.yml) s'assure que chaque modification est valide :

  1. Clône le dépôt.
  2. Configure Python et installe les dépendances.
  3. Construit l'image Docker et lance un conteneur.
  4. Exécute les tests locaux.

CD Pipeline

Le pipeline CD déploie l'application sur Azure :

  1. Archive l’application et ses dépendances.
  2. Téléverse l’application sur Azure App Services.
  3. Valide le déploiement avec des tests.

Pre-commit

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.

Exemple de Hooks utilisés

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

Auteur

Projet réalisé par Hicham Smail. Lien LinkedIn | Lien GitHub


Sources

About

Microservice en Python qui calcule deux métriques de santé, l'IMC (BMI) et le BMR, via une API REST.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published