10. Exercice d’application : version 2▲
Cette nouvelle version introduit le fichier [config.py] suivant :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
def configure():
import os
# chemin absolu du dossier de ce script
script_dir = os.path.dirname(os.path.abspath(__file__))
# racine à partir de laquelle vont être mesurés certains chemins relatifs
root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"
# dépendances de l'application
absolute_dependencies = [
f"{root_dir}/v01/shared",
]
# configuration de l'application
config = {
# chemin absolu du fichier des contribuables
"taxpayersFilename": f"{script_dir}/../data/taxpayersdata.txt",
# chemins absolu du fichier des résultats
"resultsFilename": f"{script_dir}/../data/résultats.txt"
}
# mise à jour du syspath
from myutils import set_syspath
set_syspath(absolute_dependencies)
# on rend la config
return config
Commentaires
-
ligne 5 : on récupère le nom absolu du dossier qui contient le script qui s’exécute, ici le script [config.py]. On obtient donc le nom absolu du dossier [main]. C’est également ce dossier qui contient le script principal [main.py] ;
-
ligne 8 : lorsqu’un fichier référencé n’appartient pas au dossier de l’application, on n’utilisera pas [script_dir] pour le localiser mais [root_dir]. Cette ligne devra être changée dès que l’application change de place dans le système de fichiers ;
-
lignes 11-13 : on liste les noms absolus de tous les dossiers qui doivent se trouver dans le Python Path pour que l’application fonctionne. Ligne 12, on référence le dossier [shared] de la version 1 de l’exercice d’application ;
-
lignes 16-21 : définissent la configuration de l’application dans un dictionnaire [config]. Ici on inscrit les chemins absolus des fichiers texte manipulés par l’application. Pour cela, on utilise [script_dir] qui rappelons-le, désigne ici le dossier [main] ;
-
lignes 24-25 : on fixe le Python Path nécessaire à l’application ;
Le script principal [main.py] est le suivant :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
# on configure l'application
import config
config = config.configure()
# le syspath est configuré - on peut faire les imports
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data
# fichier des contribuables
taxpayers_filename = config['taxpayersFilename']
# fichier des résultats
results_filename = config['resultsFilename']
# code
try:
# lecture des données contribuables
taxpayers = get_taxpayers_data(taxpayers_filename)
# liste des résultats
results = []
# on calcule l'impôt des contribuables
for taxpayer in taxpayers:
# le calcul de l'impôt renvoie un dictionnaire de clés
# ['marié', 'enfants', 'salaire', 'impôt', 'surcôte', 'décôte', 'réduction', 'taux']
result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
# le dictionnaire est ajouté à la liste des résultats
results.append(result)
# on enregistre les résultats
record_results(results_filename, results)
except BaseException as erreur:
# il peut y avoir différentes erreurs : absence de fichier, contenu de fichier incorrect
# on affiche l'erreur et on quitte l'application
print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
print("Travail terminé...")
Commentaires
-
lignes 1-4 : l’application est configurée ;
-
ligne 7 : on sait qu’après la configuration, le Python Path est correct et contient notamment le dossier [shared] qui contient le script [impôts_module_01]. De ce script, on importe les fonctions dont on a besoin ;
-
lignes 9-12 : les noms des fichiers utilisés sont trouvés dans la configuration. Ce sont des noms absolus ;
-
lignes 14-35 : on retrouve le code de la version 1 ;
La version 1 ne marchait pas dans une console Python. Dans cette même console, la version 2 donne les résultats suivants :
2.
(venv) C:\Data\st-2020\dev\python\cours-2020\python3-flask-2020\impots\v02>python main/main.py
Travail terminé...
Aucune erreur n’est désormais rencontrée.



