Skip to content

10. تمرين عملي: الإصدار 2

Image

تقدم هذه النسخة الجديدة ملف [config.py] التالي:

def configure():
    import os

    #  absolute path of this script's folder
    script_dir = os.path.dirname(os.path.abspath(__file__))

    #  root from which certain relative paths are measured
    root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"

    #  application dependencies
    absolute_dependencies = [
        f"{root_dir}/v01/shared",
    ]

    #  application configuration
    config = {
        #  absolute path of the taxpayer file
        "taxpayersFilename": f"{script_dir}/../data/taxpayersdata.txt",
        #  absolute path of the results file
        "resultsFilename": f"{script_dir}/../data/résultats.txt"
    }

    #  update syspath
    from myutils import set_syspath
    set_syspath(absolute_dependencies)

    #  return the config
    return config

تعليقات

  • السطر 5: نسترد المسار المطلق للمجلد الذي يحتوي على البرنامج النصي الذي يتم تنفيذه، وهو في هذه الحالة البرنامج النصي [config.py]. وهذا يعطينا المسار المطلق للمجلد [main]. وهذا هو أيضًا المجلد الذي يحتوي على البرنامج النصي الرئيسي [main.py]؛
  • السطر 8: عندما لا ينتمي الملف المشار إليه إلى مجلد التطبيق، لن نستخدم [script_dir] لتحديد موقعه بل [root_dir]. يجب تغيير هذا السطر بمجرد انتقال التطبيق إلى موقع مختلف في نظام الملفات؛
  • الأسطر 11–13: نسرد المسارات المطلقة لجميع المجلدات التي يجب أن تكون موجودة في مسار Python حتى يعمل التطبيق. في السطر 12، نشير إلى المجلد [shared] من التمرين الخاص بالإصدار 1 من التطبيق؛
  • الأسطر 16–21: نحدد تكوين التطبيق في قاموس [config]. هنا، نحدد المسارات المطلقة للملفات النصية التي يتعامل معها التطبيق. للقيام بذلك، نستخدم [script_dirوالذي، للتذكير، يشير إلى المجلد [main] هنا؛
  • السطور 24–25: نحدد مسار Python المطلوب للتطبيق؛

النص البرمجي الرئيسي [main.py] هو كما يلي:

#  configure the application
import config

config = config.configure()

#  syspath is configured - imports can be made
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data

#  taxpayer file
taxpayers_filename = config['taxpayersFilename']
#  results file
results_filename = config['resultsFilename']

#  code
try:

    #  reading taxpayer data
    taxpayers = get_taxpayers_data(taxpayers_filename)
    #  results list
    results = []
    #  taxpayers' taxes are calculated
    for taxpayer in taxpayers:
        #  tax calculation returns a dictionary of keys
        #  ['married', 'children', 'salary', 'tax', 'surcôte', 'décôte', 'réduction', 'taux']
        result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
        #  the dictionary is added to the list of results
        results.append(result)
    #  we record the results
    record_results(results_filename, results)
except BaseException as erreur:
    #  there may be various errors: no file, incorrect file content
    #  display the error and exit the application
    print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
    print("Travail terminé...")

تعليقات

  • الأسطر 1–4: تم تكوين التطبيق؛
  • السطر 7: نعلم أنه بعد التهيئة، يكون مسار Python صحيحًا ويتضمن المجلد [shared]، الذي يحتوي على البرنامج النصي [impôts_module_01]. من هذا البرنامج النصي، نستورد الوظائف التي نحتاجها؛
  • الأسطر 9-12: توجد أسماء الملفات المستخدمة في التهيئة. هذه مسارات مطلقة؛
  • الأسطر 14–35: هذا هو الكود من الإصدار 1؛

لم تعمل الإصدار 1 في وحدة تحكم Python. في نفس وحدة التحكم، ينتج الإصدار 2 النتائج التالية:

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

لم تحدث أية أخطاء الآن.