Skip to content

10. Ejercicio práctico: version 2

Image

Esta nueva version introduce el siguiente archivo [config.py]:


def configure():
    import os

    # ruta absoluta de la carpeta de este script
    script_dir = os.path.dirname(os.path.abspath(__file__))

    # raíz a partir de la cual se medirán ciertas rutas relativas
    root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"

    # dependencias de la aplicación
    absolute_dependencies = [
        f"{root_dir}/v01/shared",
    ]

    # configuración de la aplicación
    config = {
        # ruta absoluta del archivo de contribuyentes
        "taxpayersFilename"f"{script_dir}/../data/taxpayersdata.txt",
        # rutas absolutas del archivo de resultados
        "resultsFilename"f"{script_dir}/../data/résultats.txt"
    }

    # actualización de syspath
    from myutils import set_syspath
    set_syspath(absolute_dependencies)

    # se genera el config
    return config

Comentarios

  • línea 5: se recupera el nombre absoluto de la carpeta que contiene el script que se ejecuta, en este caso el script [config.py]. De este modo, se obtiene el nombre absoluto de la carpeta [main]. Esta es también la carpeta que contiene el script principal [main.py];
  • línea 8: cuando un archivo al que se hace referencia no pertenece a la carpeta de la aplicación, no se utilizará [script_dir] para localizarlo, sino [root_dir]. Esta línea deberá modificarse tan pronto como la aplicación cambie de ubicación en el sistema de archivos;
  • líneas 11-13: se enumeran los nombres absolutos de todas las carpetas que deben encontrarse en el Python Path para que la aplicación funcione. Línea 12: se hace referencia a la carpeta [shared] de la version 1 del ejercicio de aplicación;
  • líneas 16-21: definen la configuración de la aplicación en un diccionario [config]. Aquí se introducen las rutas absolutas de los archivos de texto manipulados por la aplicación. Para ello, se utiliza [script_dir] que, recordemos, designa aquí la carpeta [main];
  • líneas 24-25: se establece el Python Path necesario para la aplicación;

El script principal [main.py] es el siguiente:


# se configura la aplicación
import config

config = config.configure()

# el syspath está configurado: ya se pueden realizar las importaciones
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data

# archivo de contribuyentes
taxpayers_filename = config['taxpayersFilename']
# archivo de resultados
results_filename = config['resultsFilename']

# código
try:

    # lectura de los datos de los contribuyentes
    taxpayers = get_taxpayers_data(taxpayers_filename)
    # lista de resultados
    results = []
    # se calcula el impuesto de los contribuyentes
    for taxpayer in taxpayers:
        # el cálculo del impuesto devuelve un diccionario de claves
        # ['marié', 'enfants', 'salaire', 'impôt', 'surcôte', 'décôte', 'réduction', 'taux']
        result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
        # el diccionario se añade a la lista de resultados
        results.append(result)
    # se guardan los resultados
    record_results(results_filename, results)
except BaseException as erreur:
    # pueden producirse diferentes errores: falta de archivo, contenido del archivo incorrecto
    # se muestra el error y se sale de la aplicación
    print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
    print("Travail terminé...")

Comentarios

  • líneas 1-4: se configura la aplicación;
  • línea 7: sabemos que, tras la configuración, el Python Path es correcto y contiene, en particular, la carpeta [shared], que a su vez contiene el script [impôts_module_01]. De este script, importamos las funciones que necesitamos;
  • líneas 9-12: los nombres de los archivos utilizados se encuentran en la configuración. Son nombres absolutos;
  • líneas 14-35: se encuentra el código de version 1;

El version 1 no funcionaba en una consola de Python. En esa misma consola, el version 2 da los siguientes resultados:

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

Ya no se produce ningún error.