Skip to content

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

Image

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

    1. 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;
    1. 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;
    1. 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:

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

Artık herhangi bir hata ile karşılaşılmamaktadır.