Una librería Python para crear diagramas de arquitectura y flujo con iconos profesionales
Project description
Flujograma
Una librería Python profesional para crear diagramas de arquitectura y flujo con iconos profesionales. Alternativa offline a diagrams.mingrammer.com con soporte completo para AWS, GCP, Kubernetes y más.
🚀 Características
- 🔒 100% Offline: No requiere conexión a internet ni servicios de IA
- ⚡ Ligero: Sin dependencias pesadas como GraphViz, solo Pillow y Lark
- 🌍 Multiidioma: Soporte para español, inglés y fácil extensión a otros idiomas
- 🎯 Lenguaje controlado: Basado en gramáticas simples, no IA completa
- ☁️ Diagramas de arquitectura: Compatible con diagrams.mingrammer.com para crear diagramas de infraestructura cloud
- 🎨 Iconos profesionales: Soporte para iconos PNG de AWS, GCP, Kubernetes con fallback automático
- 📐 Layout inteligente: Detección automática de filas múltiples y flechas direccionales
📦 Instalación
Desde PyPI (Recomendado)
pip install flujograma
Desde código fuente
git clone https://github.com/tuusuario/flujograma.git
cd flujograma
pip install -e .
Dependencias del sistema
# Solo requiere Python 3.8+ y las siguientes dependencias:
# Pillow>=9.0.0 - Para procesamiento de imágenes
# lark>=1.1.0 - Para parsing de gramáticas
🎯 Uso básico
Diagramas de flujo tradicionales
from flujograma import generate_diagram
# Generar diagrama en español
generate_diagram(
text="Si la variable es mayor a 5, entonces imprimir mensaje sino incrementar contador",
language="es",
filename="mi_diagrama.png"
)
# Generar diagrama en inglés
generate_diagram(
text="If variable is greater than 5, then print message else increment counter",
language="en",
filename="my_diagram.png"
)
🏗️ Diagramas de arquitectura web (Web Services)
from src.flujograma.diagrams_api import Diagram, ELB, EC2, RDS, S3
# Crear arquitectura básica
with Diagram("Mi Arquitectura", filename="arquitectura.png"):
ELB("load-balancer") >> EC2("web-server") >> RDS("database") >> S3("storage")
# Arquitectura con múltiples filas y flechas direccionales
with Diagram("Sistema Complejo", filename="sistema.png"):
# Fila 1: Flujo principal
ELB("lb") >> EC2("frontend") >> RDS("main-db") >> S3("files")
# Fila 2: Con feedback (flecha izquierda ←)
ELB("lb") >> EC2("cache") >> RDS("main-db") << EC2("analytics")
# Fila 3: Servicios auxiliares
ELB("lb") >> EC2("api") >> RDS("logs-db")
🔧 Operadores disponibles:
>>: Flecha hacia la derecha →<<: Flecha hacia la izquierda ←
☁️ Componentes AWS:
ELB("nombre"): Load Balancer (púrpura)EC2("nombre"): Servidor/Aplicación (naranja)RDS("nombre"): Base de datos (azul)S3("nombre"): Almacenamiento (verde)
📝 Sintaxis soportada
Español
Si [condición], entonces [acción]Si [condición], entonces [acción] sino [acción]Mientras [condición], [acción]Para cada [elemento] en [lista], [acción]Inicio/Fin
Inglés
If [condition], then [action]If [condition], then [action] else [action]While [condition], [action]For each [element] in [list], [action]Start/End
🏗️ Estructura del proyecto
flujograma/
├── src/
│ └── flujograma/
│ ├── core/ # Lógica principal
│ ├── languages/ # Soporte multiidioma
│ ├── renderers/ # Generadores de salida
│ └── assets/ # Iconos y recursos
├── tests/ # Pruebas unitarias
├── examples/ # Ejemplos de uso
├── requirements.txt # Dependencias principales
├── requirements-dev.txt # Dependencias de desarrollo
├── pyproject.toml # Configuración del proyecto
└── README.md # Este archivo
🚀 Ejemplos de uso
Ejemplo 1: Login de usuario
from flujograma import generate_diagram
text = """
Inicio.
Leer usuario y contraseña.
Si las credenciales son válidas, entonces mostrar dashboard sino mostrar error.
Fin.
"""
generate_diagram(text, "es", "login.png")
Ejemplo 2: Calculadora
text = """
Inicio.
Leer dos números y operación.
Si operación es suma, entonces calcular a + b.
Si operación es resta, entonces calcular a - b.
Si operación es multiplicación, entonces calcular a * b.
Si operación es división y b no es cero, entonces calcular a / b sino mostrar error.
Mostrar resultado.
Fin.
"""
generate_diagram(text, "es", "calculadora.png")
Ejemplo 3: Arquitectura web
from src.flujograma.diagrams_api import Diagram, ELB, EC2, RDS, S3
with Diagram("E-commerce Platform", filename="ecommerce.png"):
# Frontend tier
ELB("Load Balancer") >> EC2("Web Frontend") >> S3("Static Assets")
# Backend tier
ELB("Load Balancer") >> EC2("API Server") >> RDS("User Database")
EC2("API Server") >> RDS("Product Database")
# Analytics tier
EC2("API Server") >> EC2("Analytics") >> RDS("Analytics DB")
🧪 Ejecutar tests
Instalar dependencias de desarrollo
pip install -r requirements-dev.txt
Ejecutar todas las pruebas
pytest tests/ -v
Ejecutar con cobertura de código
pytest tests/ --cov=src/flujograma --cov-report=html
Ejecutar tests específicos
# Solo pruebas de parsers
pytest tests/test_flujograma.py::TestFlowParser -v
# Solo pruebas de nodos AST
pytest tests/test_flujograma.py::TestASTNodes -v
# Solo pruebas de integración
pytest tests/test_flujograma.py::TestIntegration -v
🛠️ Desarrollo
Configurar entorno de desarrollo
# Clonar repositorio
git clone https://github.com/tuusuario/flujograma.git
cd flujograma
# Crear entorno virtual
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
# Instalar en modo desarrollo
pip install -e .
pip install -r requirements-dev.txt
Ejecutar ejemplos
# Ejemplos básicos
python examples/ejemplo_1_login.py
python examples/ejemplo_2_calculadora.py
# Ejemplos de arquitectura
python examples/ejemplos-seb-service.py
python examples/ejemplos_direccionales.py
Scripts avanzados
Generar diagramas en lote
import os
from flujograma import generate_diagram
examples_dir = "examples"
for filename in os.listdir(examples_dir):
if filename.endswith('.py'):
# Procesar archivo de ejemplo
with open(os.path.join(examples_dir, filename), 'r') as f:
content = f.read()
# Extraer texto del diagrama y generar
# (lógica personalizada según formato)
Validar sintaxis
from flujograma.core.parser import FlowParser
parser = FlowParser("es")
text = "Si x > 5, entonces imprimir mensaje"
try:
diagram = parser.parse(text)
print("✅ Sintaxis válida")
print(f"Nodos generados: {len(diagram.nodes)}")
except Exception as e:
print(f"❌ Error de sintaxis: {e}")
📊 Estadísticas del proyecto
- Líneas de código: ~2,500
- Tests: 18 pruebas unitarias
- Cobertura: >85%
- Dependencias: Solo 2 (Pillow, Lark)
- Tamaño del paquete: <50KB
🤝 Contribuir
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/amazing-feature) - Commit tus cambios (
git commit -m 'Add amazing feature') - Push a la rama (
git push origin feature/amazing-feature) - Abre un Pull Request
📄 Licencia
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
🆚 Comparación con alternativas
| Característica | Flujograma | diagrams.mingrammer.com | Graphviz | Draw.io |
|---|---|---|---|---|
| Offline | ✅ | ❌ | ✅ | ❌ |
| Dependencias ligeras | ✅ | ❌ | ❌ | N/A |
| Texto a diagrama | ✅ | ❌ | ❌ | ❌ |
| Iconos profesionales | ✅ | ✅ | ❌ | ✅ |
| Multi-idioma | ✅ | ❌ | ❌ | ✅ |
| API Python | ✅ | ✅ | ❌ | ❌ |
📞 Soporte
- GitHub Issues: Para reportar bugs o solicitar features
- Email: tu.email@ejemplo.com
- Documentación: Ver carpeta
examples/para más casos de uso
¡Gracias por usar Flujograma! 🎉
Desarrollo
# Clonar repositorio
git clone https://github.com/CubeFreaKLab/flujograma.git
cd flujograma
# Instalar dependencias de desarrollo
pip install -e ".[dev]"
# Ejecutar pruebas
pytest
## Licencia
MIT License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flujograma-1.0.0.tar.gz.
File metadata
- Download URL: flujograma-1.0.0.tar.gz
- Upload date:
- Size: 348.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc3c1107c44e7812bbbd51cb4ae22a99f1ec5217507fd19414abee7cf7f6c4e8
|
|
| MD5 |
127574eae2b1855128f5c5c7e844e048
|
|
| BLAKE2b-256 |
a67e3dfb285e581f9e69b941465a1a2c8c4984875e95a8aa51dacf6d454207c9
|
File details
Details for the file flujograma-1.0.0-py3-none-any.whl.
File metadata
- Download URL: flujograma-1.0.0-py3-none-any.whl
- Upload date:
- Size: 346.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b56af00fd80386111c75dea47b3c6e0789d92e4748943aad6c521410c4bd2d6
|
|
| MD5 |
3f5880a771e96cb72c396d78d57b4153
|
|
| BLAKE2b-256 |
c0dd4e4b17b4902e5410425cfa8e99d45d93eba621afb071b33e2122db227268
|