Artigo
· Maio 31, 2023 11min de leitura

Resumo do InterSystems Embedded Python

         

Olá, comunidade,
Neste artigo, vou demonstrar o uso do InterSystems Embedded Python. Vamos abordar os tópicos abaixo:

  • 1-Visão geral do Embedded Python
  • 2-Uso do Embedded Python
    • 2.1- Usando uma biblioteca do Python de ObjectScript
    • 2.2- Chamando as APIs do InterSystems do Python
    • 2.3- Usando ObjectScript e Python juntos
  • 3-Usando as funções integradas do Python
  • 4-Módulos/bibliotecas do Python 
  • 5-Casos de uso do Embedded Python
  • 6-Resumo

Vamos começar com uma visão geral

 

1-Visão geral do Embedded Python

O Embedded Python é um recurso da plataforma de dados do InterSystems IRIS que permite aos desenvolvedores do Python ganharem acesso direto e total aos dados e à funcionalidade no InterSystems IRIS.

O InterSystems IRIS tem uma poderosa linguagem de programação integrada, chamada ObjectScript, que é interpretada, compilada e executada dentro da plataforma de dados.

Como o ObjectScript é executado no contexto do InterSystems IRIS, ele tem acesso direto à memória e às chamadas de procedimentos da plataforma de dados.

O Embedded Python é uma extensão da linguagem de programação do Python que permite a execução de código em Python dentro do contexto de processo do InterSystems IRIS.

Como o ObjectScript e o Python operam na mesma memória de objeto, é possível dizer que os objetos do Python não só emulam os objetos do ObjectScript, mas são objetos do ObjectScript.

A coigualdade dessas linguagens significa que você pode escolher a mais apropriada para o trabalho ou a linguagem com que se sente mais confortável para escrever aplicativos.

 

2-Uso do Embedded Python

Ao usar o Embedded Python, você pode escrever seu código em três modalidades diferentes.

2.1 - Usando uma biblioteca do Python de ObjectScript

Primeiro, você pode escrever um arquivo .py normal e chamá-lo do contexto do InterSystems IRIS. Nesse caso, a plataforma de dados inicializará o processo em Python e permitirá que você importe um módulo chamado IRIS, que anexa automaticamente o processo em Python ao kernel do IRIS e fornece acesso a todas as funcionalidades do ObjectScript a partir do contexto do seu código em Python.

2.2 - Chamando as APIs do InterSystems do Python

Em segundo lugar, você pode escrever código do ObjectScript normal e instanciar um objeto em Python usando o pacote %SYS.Python. Esse pacote do ObjectScript permite que você importe os módulos e as bibliotecas do Python e trabalhe com esse código base usando a sintaxe do ObjectScript.
O pacote %SYS.Python permite que desenvolvedores do ObjectScript sem qualquer conhecimento de Python usem o rico ecossistema de bibliotecas do Python no código ObjectScript.

2.3 - Usando ObjectScript e Python juntos

Em terceiro lugar, você pode criar uma definição de classe da InterSystems e escrever métodos em Python. Qualquer chamada a esse método inicializará o interpretador de Python. Esse método tem o benefício de preencher a palavra-chave self desse bloco de código Python com uma referência à instância da classe que contém. Além disso, ao usar Python para escrever métodos de classe nas classes da InterSystems, você pode implementar facilmente métodos que lidam com diferentes eventos de entrada de dados no SQL, como uma nova linha adicionada à tabela.
Isso também permite o rápido desenvolvimento de procedimentos armazenados personalizados em Python.

Como você pode ver, o Embedded Python permite que você escolha a linguagem de programação mais adequada ao trabalho sem sacrificar o desempenho.

3-Usando as funções integradas do Python

O interpretador de Python tem várias funções e tipos integrados que estão sempre disponíveis. Eles estão listados aqui em ordem alfabética.

Funções integradas

A

abs()

aiter()

all()

any()

anext()

ascii()

 

B

bin()

bool()

breakpoint()

bytearray()

bytes()

 

C

callable()

chr()

classmethod()

compile()

complex()

 

D

delattr()

dict()

dir()

divmod()

 

E

enumerate()

eval()

exec()

 

F

filter()

float()

format()

frozenset()

 

G

getattr()

globals()

 

H

hasattr()

hash()

help()

hex()

 

I

id()

input()

int()

isinstance()

issubclass()

iter()

L

len()

list()

locals()

 

M

map()

max()

memoryview()

min()

 

N

next()

 

O

object()

oct()

open()

ord()

 

P

pow()

print()

property()

 

 

 

 

R

range()

repr()

reversed()

round()

 

S

set()

setattr()

slice()

sorted()

staticmethod()

str()

sum()

super()

 

T

tuple()

type()

 

V

vars()

 

Z

zip()

 

_

__import__()

Usando as funções integradas do Python

Para usar a função integrada do Python, precisamos importar "builtins" antes de invocar a função

set builtins = ##class(%SYS.Python).Import("builtins")

A função print() do Python é, na verdade, um método de módulo integrado, então agora você pode usar esta função do ObjectScript:

USER>do builtins.print("hello world!")
hello world!
USER>set list = builtins.list()
 
USER>zwrite list
list=5@%SYS.Python  ; []  ; <OREF>

Da mesma forma, você pode usar o método help() para conseguir ajuda com o objeto da lista.

USER>do builtins.help(list)
Help on list object:
class list(object)
 |  list(iterable=(), /)
 |
 |  Built-in mutable sequence.
 |
 |  If no argument is given, the constructor creates a new empty list.
 |  The argument must be an iterable if specified.
 |
 |  Methods defined here:
 |
 |  __add__(self, value, /)
 |      Return self+value.
 |
 |  __contains__(self, key, /)
 |      Return key in self.
 |
 |  __delitem__(self, key, /)
 |      Delete self[key].

 

4-Módulos ou bibliotecas do Python

Alguns módulos ou bibliotecas do Python estão instalados por padrão e prontos para uso. Ao usar a função help("module", podemos ver estes módulos:

Resultado 1 da lista de bibliotecas do Python

 

instalando um módulo ou uma biblioteca do Python

Além desses módulos, o Python tem centenas de módulos ou bibliotecas, que podem ser visualizados em pypi.org (O Python Package Index (PyPI) é um repositório de software para a linguagem de programação Python)

Se precisarmos de outras bibliotecas, podemos instalá-las usando o comando irispip da intersystems

Por exemplo, Pandas é a biblioteca de análise de dados em Python. O comando a seguir usa o instalador de pacotes irispip para instalar o pandas em um sistema Windows:

C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python pandas

C:\InterSystems será substituído pelo diretório de instalação da InterSystems

 

5-Casos de uso do Embedded Python

5.1-Imprimindo o PDF ao usar a biblioteca Reportlab do python

Precisamos instalar a biblioteca Reportlab usando o comando irispip e depois só criar uma função objectscript.

Com um local de arquivo atribuído, o seguinte método ObjectScript, CreateSamplePDF(), cria um arquivo PDF de amostra e o salva nesse local.

Class Demo.PDF
{

ClassMethod CreateSamplePDF(fileloc As %String) As %Status
{
    set canvaslib = ##class(%SYS.Python).Import("reportlab.pdfgen.canvas")
    set canvas = canvaslib.Canvas(fileloc)
    do canvas.drawImage("C:\Sample\isc.png", 150, 600)
    do canvas.drawImage("C:\Sample\python.png", 150, 200)
    do canvas.setFont("Helvetica-Bold", 24)
    do canvas.drawString(25, 450, "InterSystems IRIS & Python. Perfect Together.")
    do canvas.save()
}

}

A primeira linha do método importa o arquivo canvas.py do subpacote pdfgen do ReportLab. A segunda linha do código instancia um objeto Canvas e depois chama os métodos dele, como chamaria os métodos de qualquer objeto do InterSystems IRIS.

Então, você pode chamar o método da maneira habitual: 

do ##class(Demo.PDF).CreateSamplePDF("C:\Sample\hello.pdf")

O seguinte PDF é gerado e salvo no local especificado:

PDF de uma página com o logotipo da InterSystems, do Python e o texto: "InterSystems IRIS and Python". Perfect Together.

 

5.2-Gerando o código QR usando a biblioteca Qrcode do Python

Para gerar o código QR, precisamos instalar a biblioteca Qrcode usando o comando irispip e depois, com o código abaixo, podemos gerar o código QR:

 

5.3-Obter a localização geográfica usando a biblioteca Folium do Python

Para obter os dados geográficos, precisamos instalar a biblioteca Folium usando o comando irispip e depois criar a função object script abaixo:

Class dc.IrisGeoMap.Folium Extends %SwizzleObject
{

// Function to print Latitude, Longitude and address details 
ClassMethod GetGeoDetails(addr As %String) [ Language = python ]
{
    from geopy.geocoders import Nominatim
    geolocator = Nominatim(user_agent="IrisGeoApp")
    try:
        location = geolocator.geocode(addr)
        print("Location:",location.point)
        print("Address:",location.address)
        point = location.point
        print("Latitude:", point.latitude)
        print("Longitude:", point.longitude)
    except:
        print("Not able to find location")
}
}

Conectar ao Terminal do IRIS e executar o código abaixo

do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("Cambridge MA 02142")

Confira o resultado abaixo:

imagem

 

5.4-Gerar e marcar locais em um mapa interativo usando a biblioteca Folium do Python

Vamos usar a mesma biblioteca Folium do Python para gerar e marcar locais em um Mapa interativo. A função object script abaixo fará o desejado:

ClassMethod MarkGeoDetails(addr As %String, filepath As %String) As %Status [ Language = python ]
{
    import folium
    from geopy.geocoders import Nominatim
    
    geolocator = Nominatim(user_agent="IrisGeoMap")
    #split address in order to mark on the map
    locs = addr.split(",")
    if len(locs) == 0:
        print("Please enter address")
    elif len(locs) == 1:
        location = geolocator.geocode(locs[0])
        point = location.point
        m = folium.Map(location=[point.latitude,point.longitude], tiles="OpenStreetMap", zoom_start=10)
    else:
        m = folium.Map(location=[20,0], tiles="OpenStreetMap", zoom_start=3)
    
    for loc in locs:
        try:
            location = geolocator.geocode(loc)
            point = location.point
            folium.Marker(
                    location=[point.latitude,point.longitude],
                    popup=addr,
                ).add_to(m)         
        except:
            print("Not able to find location : ",loc) 
              
    map_html = m._repr_html_()
    iframe = m.get_root()._repr_html_()
    fullHtml = """
             <!DOCTYPE html>
                <html>
                    <head></head>
                    <body> """
    fullHtml = fullHtml + iframe            
    fullHtml = fullHtml + """                                             
                </body>
                </html>
    """
    try:
        f = open(filepath, "w")
        f.write(fullHtml)
        f.close()
    except:
        print("Not able to write to a file")
}

Conectar ao Terminal do IRIS e invocar a função MarkGeoDetails

Invocaremos a função MarkGeoDetails() da classe dc.IrisGeoMap.Folium.
A função exige dois parâmetros:

  1. location/locations (Podemos transmitir vários locais ao adicionar "," entre eles)
  2. Caminho do arquivo HTML

Vamos executar o código abaixo para marcar Cambridge MA 02142, NY, Londres, EAU, Jeddah, Lahore e Glasgow no Mapa e salvar como o arquivo "irisgeomap_locations.html"

do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("Cambridge MA 02142,NY,London,UAE,Jeddah,Lahore,Glasgow","d:\irisgeomap_locations.html")

O código acima gerará o arquivo HTML interativo abaixo

imagem

 

5.5-Análise de dados usando a biblioteca Pandas do Python 

Precisamos instalar a biblioteca Pandas usando o comando irispip e, depois, podemos usar o código abaixo para visualizar os dados

 

6-Resumo

O InterSystems Embedded Python (IEP) é um recurso poderoso que permite integrar código em Python aos seus aplicativos da InterSystems perfeitamente. Com o IEP, você pode aproveitar as vastas bibliotecas e frameworks disponíveis no Python para melhorar a funcionalidade dos seus aplicativos da InterSystems. Neste artigo, vamos explorar os principais recursos e benefícios do IEP.

O IEP é implementado como um conjunto de bibliotecas que permite a interação com objetos em Python e a execução de código em Python a partir dos aplicativos da InterSystems. Isso oferece uma maneira simples e eficaz de integrar código em Python nos seus aplicativos da InterSystems, permitindo que você realize a análise de dados, o machine learning, o processamento de linguagem natural e outras tarefas que possam ser difíceis de implementar no ObjectScript da InterSystems.

Uma das principais vantagens de usar o IEP é que fornece uma maneira de aproximar os mundos do Python e da InterSystems. Assim, fica fácil usar os pontos fortes das duas linguagens para criar aplicativos poderosos que combinam os melhores aspectos delas.

O IEP também oferece uma maneira de ampliar a funcionalidade dos seus aplicativos da InterSystems ao aproveitar os recursos do Python. Isso significa que você pode usar o grande número de bibliotecas e frameworks disponíveis no Python para realizar tarefas difíceis de implementar no ObjectScript da InterSystems.

O InterSystems Embedded Python oferece uma maneira poderosa de ampliar a funcionalidade dos seus aplicativos da InterSystems ao aproveitar os recursos do Python. Ao integrar código em Python nos seus aplicativos da InterSystems, você pode aproveitar o grande número de bibliotecas e frameworks disponíveis no Python para realizar tarefas complexas que talvez sejam difíceis de implementar no ObjectScript da InterSystems.

Obrigado

Discussão (0)1
Entre ou crie uma conta para continuar