10. Uygulama alıştırması: sürüm 2

Bu yeni sürüm, aşağıdaki [config.py] dosyasını içerir:
def configure():
import os
# bu komut dosyasının bulunduğu klasörün mutlak yolu
script_dir = os.path.dirname(os.path.abspath(__file__))
# bazı göreceli yolların hesaplanacağı kök dizin
root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"
# uygulamanın bağımlılıkları
absolute_dependencies = [
f"{root_dir}/v01/shared",
]
# uygulamanın yapılandırması
config = {
# vergi mükellefleri dosyasının mutlak yolu
"taxpayersFilename": f"{script_dir}/../data/taxpayersdata.txt",
# sonuç dosyasının mutlak yolu
"resultsFilename": f"{script_dir}/../data/résultats.txt"
}
# syspath güncellemesi
from myutils import set_syspath
set_syspath(absolute_dependencies)
# yapılandırma gerçekleştiriliyor
return config
Açıklamalar
-
- satır: Çalıştırılan komut dosyasının bulunduğu klasörün mutlak yolunu alıyoruz; burada bu komut dosyası [config.py]'tir. Böylece [main] klasörünün mutlak yolunu elde ediyoruz. Ana komut dosyası [main.py] de bu klasörde bulunmaktadır;
-
- satır: Referans verilen bir dosya uygulama klasörüne ait değilse, dosyayı bulmak için [script_dir] değil, [root_dir] kullanılır. Uygulamanın dosya sistemindeki konumu değiştiğinde bu satırın da değiştirilmesi gerekir;
- 11-13. satırlar: Uygulamanın çalışması için Python Path’te bulunması gereken tüm klasörlerin mutlak adları listelenir. 12. satırda, uygulama alıştırmasının 1. sürümüne ait [shared] klasörüne atıfta bulunulur;
- 16-21. satırlar: Uygulamanın yapılandırmasını [config] sözlüğünde tanımlar. Buraya, uygulama tarafından işlenen metin dosyalarının mutlak yolları yazılır. Bunun için [script_dir] kullanılır; hatırlatmak gerekirse, bu burada [main] klasörünü ifade eder;
- 24-25. satırlar: Uygulama için gerekli Python yolunu belirleriz;
Ana komut dosyası [main.py] şu şekildedir:
# uygulama yapılandırılıyor
import config
config = config.configure()
# syspath yapılandırıldı - içe aktarmalar yapılabilir
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data
# vergi mükellefleri dosyası
taxpayers_filename = config['taxpayersFilename']
# sonuç dosyası
results_filename = config['resultsFilename']
# kod
try:
# vergi mükellefi verilerinin okunması
taxpayers = get_taxpayers_data(taxpayers_filename)
# sonuç listesi
results = []
# vergi mükelleflerinin vergisi hesaplanır
for taxpayer in taxpayers:
# vergi hesaplaması bir anahtar sözlüğü döndürür
# ['marié', 'enfants', 'salaire', 'impôt', 'surcôte', 'décôte', 'réduction', 'taux']
result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
# sözlük sonuç listesine eklenir
results.append(result)
# sonuçlar kaydedilir
record_results(results_filename, results)
except BaseException as erreur:
# farklı hatalar olabilir: dosya yok, dosya içeriği hatalı
# hata görüntülenir ve uygulamadan çıkılır
print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
print("Travail terminé...")
Açıklamalar
- 1-4. satırlar: uygulama yapılandırılır;
-
- satır: Yapılandırma tamamlandıktan sonra Python yolunun doğru olduğu ve özellikle [impôts_module_01] betiğini içeren [shared] klasörünü barındırdığı bilinmektedir. Bu betikten ihtiyaç duyulan işlevler içe aktarılır;
- 9-12. satırlar: Kullanılan dosya adları yapılandırmada bulunur. Bunlar mutlak adlardır;
- 14-35. satırlar: Sürüm 1'in kodu burada yer almaktadır;
Sürüm 1, bir Python konsolunda çalışmıyordu. Aynı konsolda, sürüm 2 şu sonuçları veriyor:
Artık herhangi bir hata ile karşılaşılmamaktadır.