Puedes ejecutar cualquier ejemplo en nuestra consola interactiva: Abrir consola de Python →
Proyecto avanzado: Sistema modular completo en Python
Este proyecto final integra todo lo aprendido en el nivel avanzado: arquitectura profesional, dataclasses, asyncio, logging, pytest, argparse, patrones de diseño, serialización y más. Construiremos un sistema modular real compuesto por: CLI + servicios + repositorios + modelos + adaptadores + tests + logs + configuración.
Tabla de contenidos
- Estructura del proyecto
- Modelos con dataclasses
- Repositorio + adaptadores
- Servicios
- CLI con argparse
- Logging profesional
- Tests con pytest
- Serialización
- Ejercicios
- Proyecto final completo
1. Estructura del proyecto
proyecto_avanzado/
app/
modelos/
servicios/
repos/
cli/
utils/
tests/
config/
logs/
main.py
2. Modelos con dataclasses
# app/modelos/usuario.py
from dataclasses import dataclass
@dataclass
class Usuario:
id: int
nombre: str
activo: bool = True
3. Repositorio + adaptadores
# app/repos/base.py
class RepoUsuarios:
def guardar(self, usuario): ...
def obtener(self, id): ...
def listar(self): ...
# app/repos/memoria.py
class RepoMemoria(RepoUsuarios):
def __init__(self):
self.data = {}
def guardar(self, usuario):
self.data[usuario.id] = usuario
def obtener(self, id):
return self.data.get(id)
def listar(self):
return list(self.data.values())
4. Servicios
# app/servicios/usuarios.py
from app.modelos.usuario import Usuario
def registrar(repo, nombre):
nuevo = Usuario(id=len(repo.listar()) + 1, nombre=nombre)
repo.guardar(nuevo)
return nuevo
5. CLI con argparse
# app/cli/main.py
import argparse
from app.repos.memoria import RepoMemoria
from app.servicios.usuarios import registrar
def cli():
parser = argparse.ArgumentParser()
parser.add_argument("accion", choices=["registrar", "listar"])
parser.add_argument("--nombre")
args = parser.parse_args()
repo = RepoMemoria()
if args.accion == "registrar":
u = registrar(repo, args.nombre)
print("Registrado:", u)
elif args.accion == "listar":
print(repo.listar())
if __name__ == "__main__":
cli()
6. Logging profesional
# app/utils/logging.py
import logging
def crear_logger(nombre):
logger = logging.getLogger(nombre)
logger.setLevel(logging.INFO)
handler = logging.FileHandler(f"logs/{nombre}.log")
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
7. Tests con pytest
# tests/test_usuarios.py
from app.repos.memoria import RepoMemoria
from app.servicios.usuarios import registrar
def test_registrar():
repo = RepoMemoria()
u = registrar(repo, "Ana")
assert u.nombre == "Ana"
8. Serialización
# app/utils/serializar.py
import json
from dataclasses import asdict
def serializar(obj):
return json.dumps(asdict(obj))
9. Ejercicios
- Añade un adaptador de base de datos SQLite.
- Implementa logging para cada acción del CLI.
- Crea tests para listar usuarios.
- Añade un comando “desactivar usuario”.
- Implementa serialización completa del repositorio.
# desactivar
def desactivar(repo, id):
u = repo.obtener(id)
u.activo = False
# sqlite adaptador
import sqlite3
10. Proyecto final completo
# main.py
from app.cli.main import cli
if __name__ == "__main__":
cli()
Con este proyecto tienes una base profesional para construir aplicaciones reales, escalables y mantenibles en Python.
Fin del nivel avanzado
Has completado todas las guías del nivel avanzado. Si quieres, puedo generar ahora:
- Un **nivel experto**
- Un **curso completo** en PDF/HTML
- Un **roadmap profesional**
- Un **proyecto real** (API, microservicio, scraper, dashboard, etc.)