10. Ejercicio práctico: versión 2

Esta nueva versión 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",
# ruta absoluta 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 restaura la configuración
return config
Comentarios
- línea 5: se obtiene el nombre absoluto de la carpeta que contiene el script que se está ejecutando, en este caso el script [config.py]. Por lo tanto, se obtiene el nombre absoluto de la carpeta [main]. Esta misma carpeta también 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 la ruta de Python para que la aplicación funcione. En la línea 12, se hace referencia a la carpeta [shared] de la versión 1 del ejercicio de la aplicación;
- líneas 16-21: definen la configuración de la aplicación en un diccionario [config]. Aquí se registran las rutas absolutas de los archivos de texto que maneja la aplicación. Para ello, se utiliza [script_dir], que, recordemos, se refiere aquí a la carpeta [main];
- líneas 24-25: se establece la ruta de Python necesaria 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 agrega a la lista de resultados
results.append(result)
# se guardan los resultados
record_results(results_filename, results)
except BaseException as erreur:
# pueden presentarse diferentes errores: falta el archivo, contenido incorrecto del archivo
# 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, la ruta de Python es correcta y contiene, entre otros, 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: aquí se encuentra el código de la versión 1;
La versión 1 no funcionaba en una consola de Python. En esa misma consola, la versión 2 arroja los siguientes resultados:
Ya no se presenta ningún error.