embeddedpy-bridge: Un kit de herramientas para Python incrustado
Embeddedpy-bridge: Un kit de herramientas para Embedded Python
Visión general
Embedded Python es un cambio radical para InterSystems IRIS, ya que ofrece acceso al vasto ecosistema de Python directamente dentro de la base de datos. Sin embargo, salvar la brecha entre ObjectScript y Python a veces puede parecer bastante complicado.
Para hacer que esta transición sea fluida, podéis usar embeddedpy-bridge.
Este paquete es un kit de utilidades orientado al desarrollador, diseñado para proporcionar wrappers de ObjectScript de alto nivel, sintaxis familiar y manejo robusto de errores para Python incrustado. Permite a los desarrolladores interactuar con estructuras de datos de Python usando los patrones nativos de IRIS con los que ya estáis familiarizados.
El reto
Aunque la biblioteca %SYS.Python es poderosa, los desarrolladores a menudo se enfrentan a algunos obstáculos:
- Manejo de proxies: Navegar por listas y diccionarios de Python usando proxies sin procesar no se siente "nativo" en ObjectScript.
- Iteración: Los bucles
Whileestándar de ObjectScript no "hablan" de forma nativa con los iteradores de Python. - Gestión de espacios de nombres: Asegurar que las utilidades de Python estén disponibles en todo el sistema.
La solución:embeddedpy-bridge
Mi objetivo fue crear un "puente" que haga que Python se sienta como un ciudadano de primera clase dentro de ObjectScript.
Características clave:
- Convención de prefijo
py: Todos los métodos de la clase%ZPython.Utilsusan el prefijopy(por ejemplo,pyDict(),pyList(),pyJSON()) para distinguir claramente la lógica relacionada con Python del código nativo de IRIS. - Wrappers orientados a objetos: Clases de alto nivel para
ListyDictque soportan métodos familiares comoGetAt(),SetAt()yCount(). - Iteradores inteligentes: Los iteradores integrados
ListIteratoryDictIteratorpermiten recorrer datos de Python usando buclesWhileestándar de ObjectScript. - Soporte de macros: Un archivo
%ZPython.incproporciona atajos como$$$pyDicty$$$pyJSONpara un desarrollo más limpio y rápido.
Ejemplos de uso
1. Sintaxis simple (Macros)
Ya no tendréis que escribir ##class(...) cada vez. Usad atajos:
$$$pyDict— Crear un diccionario de Python.$$$pyList— Crear una lista de Python.$$$pyJSON(dynObj)— Convertir un objeto JSON en Python al instante.
2. Manejo unificado de diccionarios
En lugar de gestionar proxies de Python sin procesar, usad el diccionario envuelto:
Fragmento de código
Include %ZPython
Set pyDict = $$$pyDict
Do pyDict.SetAt("Status", "Active")
Do pyDict.SetAt("Version", 1.0)
// Standard IRIS iteration
Set iter = pyDict.%GetIterator()
While iter.%GetNext(.key, .val) {
Write "Key: ", key, " Val: ", val, !
}Set pyList = $$$zpyList()
Do pyList.Append("First Item")
Do pyList.Append("Second Item")
Write "Total items: ", pyList.Count(), !
// Access by index
Write "Item 1: ", pyList.GetAt(0), !2. Conversión de datos sin interrupciones
Convertid objetos dinámicos de IRIS en objetos de Python y viceversa con una sola línea:
Fragmento de código:
Set dynObj = {"name": "John", "roles": ["Admin", "User"]}
Set pyObj = $$$pyJSON(dynObj)
// Verify Python type
Write ##class(%ZPython.Utils).IsType(pyObj, "dict") // 1El objetivo de este proyecto es salvar la brecha entre dos mundos poderosos. Mientras que InterSystems IRIS proporciona el motor para Python incrustado, embeddedpy-bridge proporciona el volante.