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.