Skip to content

10. Toepassingsopdracht: versie 2

Image

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:

(venv) C:\Data\st-2020\dev\python\cours-2020\python3-flask-2020\impots\v02>python main/main.py
Travail terminé...

Er treden nu geen fouten meer op.