Embeddedpy-bridge: Um kit de ferramentas para Embedded Python
Visão geral
Embedded Python é um divisor de águas para o InterSystems IRIS, oferecendo acesso ao vasto ecossistema Python diretamente dentro do banco de dados. No entanto, fazer a ponte entre ObjectScript e Python às vezes pode parecer como traduzir entre dois mundos diferentes.
Para tornar essa transição perfeitamente utilizável, embeddedpy-bridge.
Este pacote é um kit de utilidades focado em desenvolvedores, projetado para fornecer wrappers de alto nível em ObjectScript, sintaxe familiar e tratamento de erros robusto para o Python embarcado. Ele permite que os desenvolvedores interajam com estruturas de dados Python usando os padrões nativos do IRIS com os quais já estão acostumados.
O desafio
Embora a biblioteca %SYS.Python seja poderosa, os desenvolvedores frequentemente enfrentam alguns obstáculos:
- Tratamento de proxies: navegar por listas e dicionários Python usando proxies brutos não parece algo “nativo” do ObjectScript.
- Iteração: laços
Whilepadrão do ObjectScript não “conversam” nativamente com iteradores Python. - Gerenciamento de namespaces: garantir que utilitários Python estejam disponíveis em todo o sistema.
A Solução: embeddedpy-bridge
Meu objetivo foi criar uma “Ponte” que faça o Python se sentir como um cidadão de primeira classe dentro do ObjectScript.
Principais recursos:
- Convenção de Prefixo
py: Todos os métodos na classe%ZPython.Utilsusam o prefixopy(por exemplo,pyDict(),pyList(),pyJSON()) para diferenciar claramente a lógica relacionada ao Python do código nativo do IRIS. - Wrappers Orientados a Objetos (OO): Classes de alto nível para
ListeDictque suportam métodos familiares comoGetAt(),SetAt(), eCount(). - Iteradores Inteligentes:
ListIteratoreDictIteratorintegrados permitem percorrer dados Python usando loopsWhilepadrão do ObjectScript. - Suporte a Macros: Um arquivo
%ZPython.incfornece atalhos como$$$pyDicte$$$pyJSONpara um desenvolvimento mais limpo e rápido.
Exempos de uso
1. Sintaxe Simples (Macros)
Chega de digitar ##class(...) toda vez. Use atalhos rápidos:
$$$pyDict— Cria um dicionário Python.$$$pyList— Cria uma lista Python.$$$pyJSON(dynObj)— Converte um objeto JSON em Python instantaneamente.
2. Manipulação Unificada de Dicionários
Em vez de lidar com proxies Python puros, use o dicionário encapsulado:
Exemplo 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. Conversão de Dados Sem Esforço
Converta objetos dinâmicos do IRIS em objetos Python e vice-versa com uma única linha:
Exemplo de código:
Set dynObj = {"name": "John", "roles": ["Admin", "User"]}
Set pyObj = $$$pyJSON(dynObj)
// Verify Python type
Write ##class(%ZPython.Utils).IsType(pyObj, "dict") // 1
O objetivo deste projeto é construir uma ponte entre dois mundos poderosos. Enquanto o InterSystems IRIS fornece o motor para o Python embutido, o embeddedpy-bridge fornece o volante.
.png)
.png)
Clicamos no botão "Create" e pronto… já podemos usar nosso agente de IA..png)
.png)
.png)