Skip to content

Mejora: reorganizar estructura del proyecto (src/, tests/, requirements.txt) #53

Description

@jandrescodes

💡 Descripción

Reorganizar la estructura del proyecto para mejorar la organización, escalabilidad y seguir las mejores prácticas de Python. Actualmente todos los archivos están en la raíz, lo que dificulta la escalabilidad. Se propone separar el código fuente, tests y documentación en carpetas dedicadas.

Funcionalidad a mejorar: Estructura general del proyecto

Cambio propuesto:

  • Crear carpeta src/ para código fuente (calculator. py, main.py, gui.py)
  • Crear carpeta tests/ para tests (test_*. py, conftest.py)
  • Mantener docs/ como está
  • Crear requirements.txt para gestión de dependencias

📁 Estructura Actual vs Propuesta

Actual:

team-practice/
├── calculator.py
├── main.py
├── gui.py
├── test_calculator.py
├── test_gui_calculator.py
├── conftest.py
├── docs/
├── .github/
└── ... 

Propuesta:

team-practice/
├── src/                       # NUEVO - Código fuente
│   ├── __init__.py
│   ├── calculator.py
│   ├── cli.py                 # Renombrar main.py
│   └── gui.py
├── tests/                     # NUEVO - Tests
│   ├── __init__.py
│   ├── conftest.py
│   ├── test_calculator.py
│   └── test_gui.py            # Renombrar test_gui_calculator.py
├── docs/                      # Mantener como está
│   ├── USER_GUIDE.md
│   └── screenshots/
├── .github/
├── README.md
├── CHANGELOG.md
├── LICENSE
├── .gitignore
└── requirements.txt           # NUEVO

📋 Tareas

Reorganización de archivos:

  • Crear carpeta src/ y mover:
    • calculator.py → src/calculator.py
    • main.py → src/cli.py (renombrar)
    • gui.py → src/gui.py
  • Crear carpeta tests/ y mover:
    • test_calculator.py → tests/test_calculator. py
    • test_gui_calculator.py → tests/test_gui.py (renombrar)
    • conftest.py → tests/conftest.py
  • Crear archivos __init__.py en src/ y tests/

Nuevos archivos:

  • Crear requirements.txt con contenido:
    pytest>=7.0.0
  • Crear src/__init__.py con imports del paquete

Actualización de código:

  • Actualizar imports en src/cli.py (de calculator a src.calculator)
  • Actualizar imports en src/gui.py (de calculator a src.calculator)
  • Actualizar imports en tests/test_calculator.py (a src.calculator)
  • Actualizar imports en tests/test_gui.py (a src.gui)
  • Actualizar .github/workflows/ci.yml con nuevas rutas de tests
  • Actualizar README.md con nuevos comandos de ejecución
  • Verificar que no se requiera actualizar .gitignore

Verificación:

  • Ejecutar tests y verificar que todos pasen: pytest tests/ -v
  • Verificar que GUI funcione: python src/gui.py
  • Verificar que CLI funcione: python src/cli.py
  • Verificar que CI/CD pase en GitHub Actions

🎯 Beneficios

  1. ✅ Separación clara entre código, tests y documentación
  2. ✅ Escalabilidad: Fácil agregar más módulos
  3. ✅ Profesionalismo: Estructura estándar de Python
  4. ✅ Mejores imports: from src.calculator import ...
  5. ✅ Testing estándar: pytest tests/
  6. ✅ Gestión de dependencias clara con requirements.txt
  7. ✅ Onboarding más fácil para nuevos colaboradores

📝 Notas Adicionales

  • tkinter NO se incluye en requirements.txt (viene con Python)
  • La carpeta docs/ se mantiene intacta
  • main.py se renombra a cli.py para mayor claridad
  • Archivos de configuración permanecen en raíz
  • Todo código nuevo debe ir en src/ después de esta reorganización
  • Todos los tests nuevos deben ir en tests/

✅ Criterios de Aceptación

  • Estructura de carpetas creada correctamente
  • Todos los archivos movidos sin pérdida de funcionalidad
  • Imports actualizados en todos los archivos
  • requirements.txt creado
  • README.md actualizado
  • CI/CD funcionando con nueva estructura
  • Todos los tests pasan
  • GUI funciona correctamente
  • CLI funciona correctamente
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentaciónCambios en README, docstrings, etc.en progresoTarea que está siendo trabajadamejoraMejora a funciones existentes

Type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions