10. Ćwiczenie praktyczne: wersja 2

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:
Nie występują już żadne błędy.