Outils de développement

Ludovic Deneuville

Stack VM

  • Python 3.10 : la version de Python installée à l’ENSAI
  • Visual Studio Code : votre éditeur de code
  • Git : pour gérer vos dépôts
  • PostgreSQL : une base de données
    • DBeaver : pour consulter, modifier cette base de données

Visual Studio Code

  • Éditeur de code source populaire
  • Intégre un explorer et un terminal
  • Nombreuses extensions
  • Personnalisation avancée

Zoom sur les Settings

  • fichier .vscode/settings.json
  • Formater : Black
  • Linter : Flake8

Qualité du Code

Pourquoi la Qualité ?

  • Maintenabilité : plus facile à comprendre, à maintenir et à modifier
  • Lisibilité : facilite la collaboration et réduit les erreurs
  • Performance : fonctionne mieux et consomme moins de ressources
  • Sécurité : moins susceptible de contenir des vulnérabilités

Pylint

Outil d’analyse statique pour Python qui :

  • Vérifie la conformité du code aux normes de style
  • Détecte les erreurs potentielles
  • Identifie les mauvaises pratiques
Commandes
pylint src
pylint --output-format=colorized --disable=C0114,C0411,C0415,W0718 $(git ls-files '*.py') --fail-under=7.5

Aborescence du dépôt

PROJET-INFO-2A
    ├── .vscode
    │   └── settings.json
    ├── data
    │   └── init_db.sql
    ├── doc
    │   └── suivi
    │       └── YYYY.MM.DD-semaineN.md
    ├── src
    │   ├── business_object
    │   │   └── une_classe.py
    │   ├── dao
    │   │   └── une_classe_dao.py
    │   ├── service
    │   │   └── une_classe_service.py
    │   ├── tests
    │   │   ├── dao
    │   │   └── service
    │   ├── utils
    │   └── view
    │       └── accueil_view.py
    ├── .gitignore
    ├── LICENCE
    ├── README.md
    └── requirements.txt

Documentation

operations_mathematiques.py
class OperationsMathematiques:
    """Opérations Mathématiques"""
    def diviser_cinq_par(self, nombre) -> float:
        """Divise le nombre 5 par un nombre donné.
        Parameters
        ----------
        nombre : float or int
            Le nombre par lequel 5 sera divisé.
        Returns
        -------
        float or None
            Le résultat de la division de 5 par le nombre donné.
            Si le nombre est égal à 0, la méthode retourne None.
        """
        if nombre != 0:
            return 5 / nombre
        else:
            return None

Logs

Qu’est-ce que les logs

Note

La journalisation (ou logging) est le processus d’enregistrement des événements, des erreurs, et des informations dans une application.

Un log capture des informations sur ce qui s’est passé à un moment donné :

  • Surveillance
  • Débogage

Level 1 - Débutant

  • Vous avez une erreur dans votre code
  • Mais vous ne savez pas exactement où ?
  • Que faites-vous ?

Level 2 - Mode Debug

  • Vous ajoutez un point d’arrêt
  • Vous lancez en mode debug
  • Vous avancez jusqu’à l’erreur

Level 3 - Logs

import logging

logging.basicConfig(
    filename='logs/example.log',  
    level=logging.INFO,     
    format="%(asctime)s - %(levelname)-8s - %(message)s",
    datefmt="%d/%m/%Y %H:%M:%S")

Possible d’externaliser la config dans un fichier logging_config.yml

Level 3 - Logs

logger.debug("Ceci est un message de débogage")
logger.info("Ceci est un message d'information")
logger.warning("Ceci est un message d'avertissement")
logger.error("Ceci est un message d'erreur")

Les niveaux de logs

  • DEBUG : utile pour le débogage lors du développement
  • INFO : suivi du code exécuté
  • WARNING : situation inhabituelle mais non bloquante
  • ERROR : affecte la logique du programme mais ne l’arrête pas complètement
  • CRITICAL : nécessite une intervention urgente

Un bon début

import logging

def ma_methode(a):
    logging.debug("ma_methode - DEBUT")

    ...

    logging.debug("ma_methode - FIN")

Aller plus loin

Utiliser les modules :

  • src/utils/log_init.py
  • src/utils/log_decorator.py

Et ajouter un décorateur @Log avant chaque méthode