Outils de développement
Stack VM
Python 3.10
: la version de Python installée à l’ENSAIVisual Studio Code
: votre éditeur de codeGit
: pour gérer vos dépôtsPostgreSQL
: une base de donnéesDBeaver
: 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
- Montrer le fichier settings.json (DEMO)
- icone ⚙️ niveau workspace ou user
- à priori vous n’avez rien à modifier
- vous pouvez intégrer ce fichier dans votre dépôt projet
- Formater et Linter en phase
Formater :
- Ligne trop longue
- Espaces superflux
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
- Vous pouvez disable les règles qui vous ennuient
- À faire régulièrement
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
- Doc classes
- Attributs
- Doc méthodes
- brève description
- paramètres
- retour
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
- Ils permettent de surveiller l’état d’un système, des comportements inattendus
- Ils aident à identifier et résoudre les problèmes
Level 1 - Débutant
- Vous avez une erreur dans votre code
- Mais vous ne savez pas exactement où ?
- Que faites-vous ?
Vous mettez des “prints” partout
Level 2 - Mode Debug
- Vous ajoutez un point d’arrêt
- Vous lancez en mode debug
- Vous avancez jusqu’à l’erreur
Demo
Level 3 - Logs
import logging
logging.basicConfig(='logs/example.log',
filename=logging.INFO,
levelformat="%(asctime)s - %(levelname)-8s - %(message)s",
="%d/%m/%Y %H:%M:%S") datefmt
Possible d’externaliser la config dans un fichier logging_config.yml
Level 3 - Logs
"Ceci est un message de débogage")
logger.debug("Ceci est un message d'information")
logger.info("Ceci est un message d'avertissement")
logger.warning("Ceci est un message d'erreur") logger.error(
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):
"ma_methode - DEBUT")
logging.debug(
...
"ma_methode - FIN") logging.debug(
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
Wrapper : va encapsuler la méthode
Démo log_decorator