10. Esercizio pratico: Versione 2

Questa nuova versione introduce il seguente file [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
|
Commenti
- riga 5: recuperiamo il percorso assoluto della cartella contenente lo script in esecuzione, in questo caso lo script [config.py]. Questo ci fornisce il percorso assoluto della cartella [main]. Questa è anche la cartella contenente lo script principale [main.py];
- riga 8: quando un file a cui si fa riferimento non appartiene alla cartella dell'applicazione, non useremo [script_dir] per individuarlo, ma [root_dir]. Questa riga deve essere modificata non appena l'applicazione si sposta in una posizione diversa nel file system;
- righe 11–13: elenchiamo i percorsi assoluti di tutte le cartelle che devono trovarsi nel Python Path affinché l’applicazione funzioni. Alla riga 12, facciamo riferimento alla cartella [shared] dell’esercizio sull’applicazione versione 1;
- righe 16–21: definiamo la configurazione dell'applicazione in un dizionario [config]. Qui specifichiamo i percorsi assoluti dei file di testo gestiti dall'applicazione. Per farlo, usiamo [script_dir], che, ricordiamo, qui si riferisce alla cartella [main];
- Righe 24–25: Impostiamo il Python path richiesto dall'applicazione;
Lo script principale [main.py] è il seguente:
| # 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é...")
|
Commenti
- righe 1–4: l'applicazione viene configurata;
- riga 7: sappiamo che, dopo la configurazione, il Python Path è corretto e include la cartella [shared], che contiene lo script [impôts_module_01]. Da questo script importiamo le funzioni di cui abbiamo bisogno;
- righe 9-12: i nomi dei file utilizzati si trovano nella configurazione. Si tratta di percorsi assoluti;
- righe 14–35: questo è il codice della versione 1;
La versione 1 non funzionava in una console Python. Nella stessa console, la versione 2 produce i seguenti risultati:
| (venv) C:\Data\st-2020\dev\python\cours-2020\python3-flask-2020\impots\v02>python main/main.py
Travail terminé...
|
Non sono stati rilevati errori.