DevTracker CLI es una aplicación de terminal escrita en Python para gestionar proyectos de desarrollo y las tareas asociadas a cada uno.
Este proyecto nació con un objetivo principalmente educativo: aprender Python construyendo una aplicación completa, desde un menú sencillo hasta una estructura modular con persistencia, validaciones y tests automáticos.
Note
El código contiene más comentarios de los que serían habituales en un proyecto de producción. Se han mantenido deliberadamente porque documentan los conceptos que fui aprendiendo durante el desarrollo y permiten seguir la evolución de cada decisión.
- Crear y listar proyectos.
- Evitar proyectos sin nombre o duplicados.
- Crear, consultar y eliminar tareas dentro de un proyecto.
- Completar tareas y cambiar su prioridad.
- Utilizar IDs únicos para localizar tareas.
- Buscar tareas globalmente por texto o ID.
- Filtrar tareas por estado o prioridad.
- Mostrar estadísticas globales:
- proyectos y tareas totales;
- tareas pendientes y completadas;
- porcentaje completado;
- distribución por prioridad.
- Guardar automáticamente los datos en JSON.
- Recuperar proyectos, tareas e IDs al iniciar la aplicación.
- Gestionar entradas incorrectas sin cerrar inesperadamente el programa.
- Python 3.10+
- Programación orientada a objetos
- Módulos, paquetes e imports
- Listas, diccionarios, tuplas y comprensiones
- Funciones, excepciones y validación de datos
- Lectura, escritura y serialización JSON
- Separación básica por responsabilidades
- Testing automático con Pytest
- Fixtures, parametrización,
monkeypatch,capsysy pruebas de humo
DevTracker_CLI/
├── src/
│ ├── main.py
│ ├── persistence.py
│ ├── models/
│ │ ├── proyecto.py
│ │ └── tarea.py
│ ├── services/
│ │ ├── proyecto_service.py
│ │ ├── tarea_service.py
│ │ ├── busqueda_service.py
│ │ └── estadisticas_service.py
│ └── utils/
│ └── validadores.py
├── data/
│ └── proyectos.example.json
├── tests/
├── docs/
│ ├── DESIGN.md
│ └── TESTING.md
└── pytest.ini
Responsabilidades principales:
main.py: controla el menú y el flujo general.models/: contiene las entidadesProyectoyTareay protege sus reglas.services/: implementa las operaciones de proyectos, tareas, búsquedas y estadísticas.utils/: reúne validadores reutilizables.persistence.py: guarda y reconstruye los objetos desde el archivo JSON.tests/: comprueba el dominio, las búsquedas, las estadísticas y el arranque de la CLI.
El documento docs/DESIGN.md explica con detalle la evolución del proyecto y las decisiones tomadas en cada fase.
- Python 3.10 o superior, necesario para utilizar
match/case. - Pytest, únicamente para ejecutar los tests.
La aplicación no necesita dependencias externas para funcionar.
Desde la raíz del repositorio:
python3 src/main.pyLa primera vez puede no existir data/proyectos.json. La aplicación comenzará sin proyectos y creará el archivo al guardar los primeros datos.
El archivo real de datos está excluido de Git. El repositorio incluye data/proyectos.example.json como referencia de su estructura.
Instala Pytest:
python3 -m pip install pytestEjecuta la suite completa:
pytest -vTambién puedes ejecutar un módulo concreto:
pytest tests/test_busqueda_service.py -v
pytest tests/test_estadisticas_service.py -vLa estrategia de testing está explicada en docs/TESTING.md.
Los datos se almacenan en data/proyectos.json. Antes de guardarlos, los objetos Proyecto y Tarea se convierten en estructuras compatibles con JSON mediante to_dict().
Al iniciar la aplicación se reconstruyen los objetos y se recupera el ID más alto existente para continuar la numeración de tareas.
La versión actual se considera funcional y cerrada como proyecto de aprendizaje. Todas las opciones del menú principal están implementadas.
Posibles mejoras futuras:
- añadir anotaciones de tipos;
- ampliar la cobertura de los servicios y la persistencia;
- validar con mayor profundidad el contenido del JSON;
- reemplazar el almacenamiento JSON por SQLite;
- empaquetar la aplicación como un comando instalable;
- reducir progresivamente los comentarios pedagógicos conforme madure el código.
DevTracker CLI no pretende ser una alternativa comercial a un gestor de proyectos. Su valor está en mostrar un proceso de aprendizaje incremental: comenzar con estructuras básicas de Python, detectar problemas de diseño, refactorizar el código en módulos y proteger el comportamiento mediante tests.
El repositorio se conserva como parte de mi portfolio para documentar ese recorrido y servir como base para futuras mejoras.