Skip to content

10. Esercizio pratico: versione 2

Image

Questa nuova versione introduce il seguente file [config.py]:


def configure():
    import os

    # percorso assoluto della cartella di questo script
    script_dir = os.path.dirname(os.path.abspath(__file__))

    # radice rispetto alla quale verranno misurati alcuni percorsi relativi
    root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"

    # dipendenze dell'applicazione
    absolute_dependencies = [
        f"{root_dir}/v01/shared",
    ]

    # configurazione dell'applicazione
    config = {
        # percorso assoluto del file dei contribuenti
        "taxpayersFilename"f"{script_dir}/../data/taxpayersdata.txt",
        # percorso assoluto del file dei risultati
        "resultsFilename"f"{script_dir}/../data/résultats.txt"
    }

    # aggiornamento del syspath
    from myutils import set_syspath
    set_syspath(absolute_dependencies)

    # si ripristina la configurazione
    return config

Commenti

  • riga 5: si recupera il percorso assoluto della cartella che contiene lo script in esecuzione, in questo caso lo script [config.py]. Si ottiene quindi il percorso assoluto della cartella [main]. È questa stessa cartella a contenere lo script principale [main.py];
  • riga 8: quando un file a cui si fa riferimento non appartiene alla cartella dell’applicazione, non si utilizzerà [script_dir] per individuarlo, ma [root_dir]. Questa riga dovrà essere modificata non appena l’applicazione cambia posizione nel file system;
  • righe 11-13: vengono elencati i percorsi assoluti di tutte le cartelle che devono trovarsi nel Python Path affinché l’applicazione funzioni. Alla riga 12 viene indicata la cartella [shared] della versione 1 dell’esercizio applicativo;
  • righe 16-21: definiscono la configurazione dell’applicazione in un dizionario [config]. Qui si inseriscono i percorsi assoluti dei file di testo gestiti dall’applicazione. A tal fine, si utilizza [script_dir] che, ricordiamo, indica in questo caso la cartella [main];
  • righe 24-25: si imposta il Python Path necessario all’applicazione;

Lo script principale [main.py] è il seguente:


# si configura l'applicazione
import config

config = config.configure()

# il syspath è configurato - è possibile eseguire le importazioni
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data

# file dei contribuenti
taxpayers_filename = config['taxpayersFilename']
# file dei risultati
results_filename = config['resultsFilename']

# codice
try:

    # lettura dei dati dei contribuenti
    taxpayers = get_taxpayers_data(taxpayers_filename)
    # elenco dei risultati
    results = []
    # calcolo dell'imposta dei contribuenti
    for taxpayer in taxpayers:
        # il calcolo dell'imposta restituisce un dizionario di chiavi
        # ['marié', 'enfants', 'salaire', 'impôt', 'surcôte', 'décôte', 'réduction', 'taux']
        result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
        # il dizionario viene aggiunto all'elenco dei risultati
        results.append(result)
    # i risultati vengono salvati
    record_results(results_filename, results)
except BaseException as erreur:
    # possono verificarsi diversi errori: file mancante, contenuto del file errato
    # viene visualizzato l'errore e l'applicazione viene chiusa
    print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
    print("Travail terminé...")

Commenti

  • righe 1-4: l’applicazione viene configurata;
  • riga 7: si sa che, dopo la configurazione, il Python Path è corretto e contiene in particolare la cartella [shared], che a sua volta contiene lo script [impôts_module_01]. Da questo script si importano le funzioni necessarie;
  • righe 9-12: i nomi dei file utilizzati si trovano nella configurazione. Si tratta di nomi assoluti;
  • righe 14-35: si ritrova il codice della versione 1;

La versione 1 non funzionava in una console Python. Nella stessa console, la versione 2 fornisce i seguenti risultati:

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

Non si verifica più alcun errore.