10. Toepassingsopdracht: versie 2

Deze nieuwe versie introduceert het volgende bestand [config.py]:
def configure():
import os
# absoluut pad naar de map van dit script
script_dir = os.path.dirname(os.path.abspath(__file__))
# de root van waaruit bepaalde relatieve paden worden gemeten
root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"
# afhankelijkheden van de applicatie
absolute_dependencies = [
f"{root_dir}/v01/shared",
]
# configuratie van de applicatie
config = {
# absoluut pad naar het bestand met belastingplichtigen
"taxpayersFilename": f"{script_dir}/../data/taxpayersdata.txt",
# absolute pad naar het resultatenbestand
"resultsFilename": f"{script_dir}/../data/résultats.txt"
}
# syspath bijwerken
from myutils import set_syspath
set_syspath(absolute_dependencies)
# de configuratie wordt teruggezet
return config
Opmerkingen
- regel 5: we halen de absolute naam op van de map die het uit te voeren script bevat, in dit geval het script [config.py]. We krijgen dus de absolute naam van de map [main]. Deze map bevat ook het hoofdscript [main.py];
- regel 8: wanneer een bestand waarnaar wordt verwezen niet in de map van de toepassing staat, gebruiken we niet [script_dir] om het te lokaliseren, maar [root_dir]. Deze regel moet worden aangepast zodra de toepassing van plaats verandert in het bestandssysteem;
- regels 11-13: hier worden de absolute namen vermeld van alle mappen die in het Python Path moeten staan om de applicatie te laten werken. Op regel 12 wordt verwezen naar de map [shared] van versie 1 van de oefenapplicatie;
- regels 16-21: hierin wordt de configuratie van de applicatie gedefinieerd in een woordenboek met de naam [config]. Hier worden de absolute paden van de tekstbestanden die door de applicatie worden verwerkt, opgegeven. Hiervoor wordt [script_dir] gebruikt, wat, zoals we al zeiden, hier verwijst naar de map [main];
- regels 24-25: hier wordt het Python-pad ingesteld dat de applicatie nodig heeft;
Het hoofdscript [main.py] ziet er als volgt uit:
# de applicatie wordt geconfigureerd
import config
config = config.configure()
# het syspath is geconfigureerd – we kunnen de imports uitvoeren
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data
# bestand met belastingplichtigen
taxpayers_filename = config['taxpayersFilename']
# resultatenbestand
results_filename = config['resultsFilename']
# code
try:
# het inlezen van de belastingplichtigengegevens
taxpayers = get_taxpayers_data(taxpayers_filename)
# lijst met resultaten
results = []
# de belasting van de belastingplichtigen wordt berekend
for taxpayer in taxpayers:
# de belastingberekening retourneert een sleutelwoordenboek
# ['marié', 'enfants', 'salaire', 'impôt', 'surcôte', 'décôte', 'réduction', 'taux']
result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
# het woordenboek wordt toegevoegd aan de resultatenlijst
results.append(result)
# de resultaten worden opgeslagen
record_results(results_filename, results)
except BaseException as erreur:
# er kunnen verschillende fouten optreden: bestand ontbreekt, onjuiste bestandsinhoud
# de fout wordt weergegeven en de toepassing wordt afgesloten
print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
print("Travail terminé...")
Opmerkingen
- regels 1-4: de applicatie wordt geconfigureerd;
- regel 7: we weten dat na de configuratie het Python-pad correct is en met name de map [shared] bevat, waarin het script [impôts_module_01] staat. Uit dit script importeren we de functies die we nodig hebben;
- regels 9-12: de namen van de gebruikte bestanden worden in de configuratie gevonden. Dit zijn absolute namen;
- regels 14-35: hier staat de code van versie 1;
Versie 1 werkte niet in een Python-console. In diezelfde console levert versie 2 de volgende resultaten op:
Er treden nu geen fouten meer op.