Single Point of Truth dinámico para proyectos Python
Project description
Omniauto
Single Point of Truth dinámico para proyectos Python
Omniauto es una librería Python que crea un punto único de acceso dinámico a todos los módulos de tu proyecto. Descubre y registra funciones automáticamente, organizándolas por categorías para un acceso centralizado y consistente.
Características
- Descubrimiento automático de módulos en tiempo de ejecución
- Decoradores intuitivos (
@ui,@data,@utils) para registro - Generación de stubs para autocompletado en IDE (VS Code, PyCharm)
- Contexto para IA generado automáticamente (Copilot, ChatGPT)
- CLI completo para gestión y mantenimiento
- Recarga en caliente durante desarrollo
- Metadata completa de todas las funciones registradas
- Sistema de tags para organización y búsqueda
Instalación Rápida
pip install omniauto
Uso en 30 Segundos
# En tu módulo (ej: modules/ventanas.py)
from omniauto import ui
@ui(tags=['login', 'auth'])
def abrir_login(usuario: str) -> str:
"""Abre ventana de login"""
return f"Bienvenido, {usuario}!"
# En cualquier parte de tu proyecto
from omniauto import auto
# Acceso centralizado a TODAS las funciones
mensaje = auto.ui.abrir_login("admin")
print(mensaje) # "Bienvenido, admin!"
Comandos CLI
# Listar todas las funciones registradas
omniauto list
# Generar stubs para autocompletado del IDE
omniauto generate --type python
# Generar contexto para IA/LLMs
omniauto generate --type ai
# Recargar módulos (útil en desarrollo)
omniauto reload
# Mostrar ayuda completa
omniauto --help
Estructura de Proyecto Recomendada
mi_proyecto/
├── modules/ # Módulos descubiertos automáticamente
│ ├── auth.py # Autenticación (@ui, @data)
│ ├── api.py # APIs externas (@data)
│ └── utils.py # Utilidades (@utils)
├── config.py # Configuración
├── main.py # from omniauto import auto
└── requirements.txt # omniauto>=0.1.0
Ejemplo Completo
Paso 1: Crear módulos
modules/ventanas.py:
from omniauto import ui
@ui(tags=['login'])
def mostrar_login():
"""Muestra formulario de login"""
print("Formulario de login mostrado")
return True
@ui(tags=['dashboard', 'admin'])
def mostrar_dashboard(usuario: str):
"""Muestra panel de control"""
return f"Dashboard de {usuario}"
modules/datos.py:
from omniauto import data
@data(tags=['procesamiento', 'csv'])
def procesar_csv(ruta: str) -> list:
"""Procesa archivo CSV"""
import csv
with open(ruta, 'r') as f:
return list(csv.reader(f))
@data(tags=['api', 'json'])
def llamar_api(url: str) -> dict:
"""Llama a API REST"""
import requests
return requests.get(url).json()
Paso 2: Usar en tu aplicación
main.py:
from omniauto import auto
def main():
print(f"Modulos cargados: {list(auto._modules.keys())}")
# Usar funciones directamente
if hasattr(auto.ui, 'mostrar_dashboard'):
resultado = auto.ui.mostrar_dashboard("admin")
print(f"Dashboard: {resultado}")
# Listar todas las funciones
print("\nFunciones disponibles:")
for categoria, funciones in auto.list_functions().items():
if funciones:
print(f"{categoria.upper()}: {', '.join(funciones)}")
# Acceder a metadata
print(f"\nTotal funciones registradas: {len(auto.metadata)}")
if __name__ == "__main__":
main()
Decoradores Disponibles
| Decorador | Categoría | Ejemplo |
|---|---|---|
@ui |
Interfaz de usuario | @ui(tags=['ventana', 'formulario']) |
@data |
Procesamiento de datos | @data(tags=['api', 'database']) |
@utils |
Utilidades | @utils(tags=['helpers', 'validación']) |
@register |
Personalizado | @register(category='api', tags=['rest']) |
API Principal
Instancia Global auto
from omniauto import auto
# Acceso por categoría
auto.ui.mi_funcion() # Funciones UI
auto.data.procesar() # Funciones de datos
auto.utils.helper() # Funciones utilitarias
# Métodos de utilidad
auto.list_functions() # Lista todas las funciones
auto.reload_modules() # Recarga módulos
auto.metadata # Metadata completa
Crear Instancia Personalizada
from omniauto import OmniAuto
mi_auto = OmniAuto()
mi_auto.discover_modules("./mis_modulos")
Generación de Stubs para IDE
Omniauto genera automáticamente archivos .pyi para que tu IDE proporcione autocompletado:
# Generar stubs
omniauto generate --type python
# Archivo generado: auto_stub.pyi
# Contiene todas las definiciones de tipo para autocompletado
Integración con IA/LLMs
Genera contexto estructurado para ChatGPT, Copilot, etc.:
omniauto generate --type ai
# Archivo: .copilot/omniauto_context.json
# Usa este archivo en tus prompts de IA
Recarga en Caliente (Desarrollo)
from omniauto import auto
# Durante desarrollo, recarga módulos sin reiniciar
auto.reload_modules()
# O desde CLI
# omniauto reload
Metadata y Búsqueda
# Acceder a metadata completa
for key, info in auto.metadata.items():
print(f"{key}:")
print(f" Documentación: {info['doc']}")
print(f" Tags: {info['tags']}")
print(f" Firma: {info['signature']}")
Testing
# tests/test_omniauto.py
import unittest
from omniauto import OmniAuto
class TestOmniauto(unittest.TestCase):
def setUp(self):
self.auto = OmniAuto()
def test_registration(self):
@self.auto.register_function
def test_func():
return "ok"
self.assertEqual(self.auto.test_func(), "ok")
Contribuir
- Fork el repositorio
- Crea una rama:
git checkout -b feature/nueva-funcionalidad - Commit cambios:
git commit -am 'Agrega nueva funcionalidad' - Push:
git push origin feature/nueva-funcionalidad - Abre Pull Request
Licencia
Distribuido bajo licencia MIT. Ver LICENSE para más información.
Agradecimientos
- Inspirado por el patrón "Single Point of Truth"
- Decoradores inspirados en Flask/ FastAPI
- Arquitectura modular inspirada en plugin systems
Soporte
- Issues: GitHub Issues
- Email: dancenot02@gmail.com
- Documentación: README completo
Project details
Release history Release notifications | RSS feed
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 omniauto-0.1.1.tar.gz.
File metadata
- Download URL: omniauto-0.1.1.tar.gz
- Upload date:
- Size: 22.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a9b44ed0805d410eaf95b5c0c2e9b55f9fa1793d7f0ce7083db0e3ab5f90323
|
|
| MD5 |
2482cb1678a6fbc4de0e7e671bf2a968
|
|
| BLAKE2b-256 |
2c80608510caaa9e921ed6f1834fe56865f9f86e68464fba388858715c890000
|
File details
Details for the file omniauto-0.1.1-py3-none-any.whl.
File metadata
- Download URL: omniauto-0.1.1-py3-none-any.whl
- Upload date:
- Size: 21.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa8f2a69a9f3857e5e4e1583109ac1d215a174c03414513a9533aaa5c08109a8
|
|
| MD5 |
b694cd1c131a011e9c83ad9a55d84a1b
|
|
| BLAKE2b-256 |
33064142501eaed873f694ceb4a0469fd4c7643a7a42657ccc2821034a436679
|