Gestor de tareas


Justificación elección

El gestor de tareas escogido para el proyecto será Invoke.

Inicialmente, se ha realizado un estudio sobre distintos gestores de tareas que se podían emplear para el proyecto, y que por lo tanto fueran compatibles con Python. Las principales opciones que se han considerado han sido Invoke, Makefile, Poetry, SCons y Luigi. Tras un pequeño estudio de características, se han descartado estas dos últimas, ya que su integración en el proyecto resultaría un proceso complejo y tras observarse la documentación no queda claro que mejoren otra opción más conocida como Make.

Tras realizar un análisis de las distintas herramientas posibles, finalmente se valoraron Invoke, Makefile y Poetry. Para poder realizar una elección adecuada del gestor de tareas, he decidido probar las distintas herramientas con el proyecto diseñado. Para la realización, he podido observar que Invoke y Make se integran de una forma muy sencilla, mientras que Poetry ha resultado más complicado de diseñar, por lo que inicialmente se ha creado un ejemplo en una máquina virtual (se puede observar aquí la ejecución de Poetry) para finalmente probar y adaptarlo al proyecto.

A continuación se adjuntan los distintos ficheros de configuración utilizados: Invoke, Makefile y Poetry.

Finalmente, se ha escogido Invoke frente a Makefile y Poetry por las siguientes razones:

Un ejemplo de una tarea en Invoke sería la siguiente:

# Tarea de ejecución de tests
@task
def test(c):
	print("Ejecución de test.\n")
	print("Test Clase UsuarioAdmin:")
	run("pytest -v --disable-pytest-warnings ./src/test/modelos/testUsuarioAdmin.py")

Para el uso de Invoke, se requieren los módulos task y run.

Configuración Invoke

Para poder utilizar Invoke primero se ha instalado con pip3 install invoke, y a continuación se ha creado el fichero de gestión de tareas, que en Invoke recibe el nombre tasks.py, ya que está construido con el propio Python.

Una vez creado el fichero tasks.py, procedemos a definir las tareas necesarias en la fase actual del proyecto:

Una vez definidas las tareas, se configuran en Invoke de la siguiente manera:

# Tarea de limpieza de ficheros
@task 
def clean(c):
	print("Borrando caché de python.")
	run("find . -maxdepth 5 -type d -name __pycache__ -exec rm -r {} +")
	print("Borrando caché de pytest.")
	run("find . -maxdepth 5 -type d -name .pytest_cache -exec rm -r {} +")
# Tarea de ejecución del modelo
@task
def execute(c):
	print("Ejecución del modelo\n")
	run("python3 ./src/main.py")
	print("Fin de la ejecución.")
# Tarea de ejecución de tests
@task
def test(c):
	print("Ejecución de test.\n")
	print("Test Clase UsuarioAdmin:")
	run("pytest -v --disable-pytest-warnings ./src/test/testUsuarioAdmin.py")
	
	print("\nTest Clase UsuarioCliente:")
	run("pytest -v --disable-pytest-warnings ./src/test/testUsuarioCliente.py")
	
	print("\nTest Clase Poliza:")
	run("pytest -v --disable-pytest-warnings ./src/test/testPoliza.py")
	
	print("\nTest Clase Prescripcion:")
	run("pytest -v --disable-pytest-warnings ./src/test/testPrescripcion.py")
	
	print("\nTest Clase Autorizacion:")
	run("pytest -v --disable-pytest-warnings ./src/test/testAutorizacion.py")
	
	print("\nTest Clase Cita:")
	run("pytest -v --disable-pytest-warnings ./src/test/testCita.py")
	
	print("\nTest Clase Controlador:")
	run("pytest -v --disable-pytest-warnings ./src/test/testControlador.py")
Build & Run

Para ejecutar el gestor de tareas se ha de ejecutar:

invoke <tarea>

Un ejemplo sería:

invoke clean