Skip to content

10. Ćwiczenie praktyczne: wersja 2

Image

W tej nowej wersji wprowadzono następujący plik: [config.py]:


def configure():
    import os

    # absolutna ścieżka do folderu tego skryptu
    script_dir = os.path.dirname(os.path.abspath(__file__))

    # katalog główny, względem którego będą mierzone niektóre ścieżki względne
    root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"

    # zależności aplikacji
    absolute_dependencies = [
        f"{root_dir}/v01/shared",
    ]

    # konfiguracja aplikacji
    config = {
        # ścieżka bezwzględna do pliku podatników
        "taxpayersFilename"f"{script_dir}/../data/taxpayersdata.txt",
        # absolutna ścieżka do pliku wyników
        "resultsFilename"f"{script_dir}/../data/résultats.txt"
    }

    # aktualizacja ścieżki systemowej
    from myutils import set_syspath
    set_syspath(absolute_dependencies)

    # przywracamy konfigurację
    return config

Komentarze

  • wiersz 5: pobieramy bezwzględną ścieżkę do folderu zawierającego uruchamiany skrypt, w tym przypadku skrypt [config.py]. Otrzymujemy zatem bezwzględną ścieżkę do folderu [main]. W tym samym folderze znajduje się również główny skrypt [main.py];
  • wiersz 8: gdy odwołany plik nie znajduje się w folderze aplikacji, do jego zlokalizowania nie używa się [script_dir], lecz [root_dir]. Wiersz ten należy zmienić, gdy tylko aplikacja zmieni lokalizację w systemie plików;
  • wiersze 11–13: podano pełne ścieżki do wszystkich folderów, które muszą znajdować się w ścieżce Python Path, aby aplikacja działała. W wierszu 12 podano odnośnik do folderu [shared] z wersji 1 ćwiczenia aplikacyjnego;
  • wiersze 16–21: określają konfigurację aplikacji w słowniku [config]. W tym miejscu wpisuje się bezwzględne ścieżki do plików tekstowych przetwarzanych przez aplikację. W tym celu używa się [script_dir], co – przypomnijmy – oznacza tutaj folder [main];
  • wiersze 24–25: ustala się ścieżkę Python Path niezbędną dla aplikacji;

Główny skrypt [main.py] wygląda następująco:


# konfigurujemy aplikację
import config

config = config.configure()

# ścieżka systemowa jest skonfigurowana – można przeprowadzić importy
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data

# plik podatników
taxpayers_filename = config['taxpayersFilename']
# plik wyników
results_filename = config['resultsFilename']

# kod
try:

    # odczyt danych podatników
    taxpayers = get_taxpayers_data(taxpayers_filename)
    # lista wyników
    results = []
    # obliczanie podatku podatników
    for taxpayer in taxpayers:
        # obliczenie podatku zwraca słownik kluczy
        # ['marié', 'enfants', 'salaire', 'impôt', 'surcôte', 'décôte', 'réduction', 'taux']
        result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
        # słownik został dodany do listy wyników
        results.append(result)
    # zapisano wyniki
    record_results(results_filename, results)
except BaseException as erreur:
    # mogą wystąpić różne błędy: brak pliku, nieprawidłowa zawartość pliku
    # wyświetlany jest komunikat o błędzie i aplikacja zostaje zamknięta
    print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
    print("Travail terminé...")

Komentarze

  • wiersze 1–4: konfiguracja aplikacji;
  • wiersz 7: wiadomo, że po konfiguracji ścieżka Python Path jest poprawna i zawiera w szczególności folder [shared], w którym znajduje się skrypt [impôts_module_01]. Z tego skryptu importuje się potrzebne funkcje;
  • wiersze 9–12: nazwy używanych plików znajdują się w konfiguracji. Są to nazwy bezwzględne;
  • wiersze 14–35: pojawia się kod z wersji 1;

Wersja 1 nie działała w konsoli Python. W tej samej konsoli wersja 2 daje następujące wyniki:

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

Nie występują już żadne błędy.