Skip to main content

Single Point of Truth dinámico para proyectos Python

Project description

Omniauto

Single Point of Truth dinámico para proyectos Python

Python 3.7+ License: MIT PyPI Version

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

  1. Fork el repositorio
  2. Crea una rama: git checkout -b feature/nueva-funcionalidad
  3. Commit cambios: git commit -am 'Agrega nueva funcionalidad'
  4. Push: git push origin feature/nueva-funcionalidad
  5. 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

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

omniauto-0.1.1.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

omniauto-0.1.1-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

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

Hashes for omniauto-0.1.1.tar.gz
Algorithm Hash digest
SHA256 9a9b44ed0805d410eaf95b5c0c2e9b55f9fa1793d7f0ce7083db0e3ab5f90323
MD5 2482cb1678a6fbc4de0e7e671bf2a968
BLAKE2b-256 2c80608510caaa9e921ed6f1834fe56865f9f86e68464fba388858715c890000

See more details on using hashes here.

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

Hashes for omniauto-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fa8f2a69a9f3857e5e4e1583109ac1d215a174c03414513a9533aaa5c08109a8
MD5 b694cd1c131a011e9c83ad9a55d84a1b
BLAKE2b-256 33064142501eaed873f694ceb4a0469fd4c7643a7a42657ccc2821034a436679

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page