10. Ejercicio práctico: version 2

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:
Ya no se produce ningún error.