Artigo
· Ago. 27 7min de leitura

Interoperabilidade Iris pela Interface de Comando de Linha (iop)

Tenho orgulho de anunciar o novo lançamento de iris-pex-embedded-python (v2.3.1) com uma nova interface de linha de comando.

Essa linha de comando é chamada iop, de Interoperability On Python.

Primeiro, eu gostaria de apresentar em algumas palavras as maiores mudanças no projeto desde a primeira versão.

Um breve histórico do projeto

A versão 1.0 foi uma prova de conceito para mostrar como a framework de interoperabilidade do IRIS pode ser usada com uma abordagem primeiro python enquanto permanece compatível com qualquer código ObjectScript existente.

O que isso significa? Significa que qualquer desenvolvedor python pode usar a framework de interoperabilidade do IRIS sem ter nenhum conhecimento de ObjectScript.

Exemplo:

from grongier.pex import BusinessOperation

class MyBusinessOperation(BusinessOperation):

    def on_message(self, request):
        self.log.info("Received request")

Incrível, não é?

Com a versão 1.1, eu adicionei a possibilidade de registrar as classes python para o IRIS com uma função ajudante.

from grongier.pex import Utils

Utils.register_file("/src/MyBusinessOperation.py")

A versão 2.0 foi um lançamento maior porque agora você pode instalar o projeto com pip.

pip install iris-pex-embedded-python

O que há de novo na versão 2.3.1

A versão 2.3.1 é um lançamento grande porque introduz uma nova interface de linha de comando

Essa interface de linha de comando pode ser usada com esse projeto python baseada neste módulo ou talvez projetos que não usem este módulo.

Deixe-me introduzi-lo e explicar porque pode ser usado em projetos sem python.

a interface de linha de comando

A linha de comando é parte deste projeto, para instalá-la você deve instalar o projeto com pip.

pip install iris-pex-embedded-python

Então você pode usar a linha de comando iop para iniciar a framework de interoperabilidade.

iop

saída:

usage: iop [-h] [-d DEFAULT] [-l] [-s START] [-k] [-S] [-r] [-M MIGRATE] [-e EXPORT] [-x] [-v] [-L]
optional arguments:
  -h, --help            display help and default production name
  -d DEFAULT, --default DEFAULT
                        set the default production
  -l, --lists           list productions
  -s START, --start START
                        start a production
  -k, --kill            kill a production (force stop)
  -S, --stop            stop a production
  -r, --restart         restart a production
  -M MIGRATE, --migrate MIGRATE
                        migrate production and classes with settings file
  -e EXPORT, --export EXPORT
                        export a production
  -x, --status          status a production
  -v, --version         display version
  -L, --log             display log

default production: UnitTest.Production

Vamos ver alguns exemplos.

help

O comando help exibe a ajuda e o nome padrão da produção.

iop -h

Saída:

usage: python3 -m grongier.pex [-h] [-d DEFAULT] [-l] [-s START] [-k] [-S] [-r] [-M MIGRATE] [-e EXPORT] [-x] [-v] [-L]
...
default production: PEX.Production

default

O comando default define a produção padrão.

Sem argumento, ele exibe a produção default.

iop -d

output :

default production: PEX.Production

Com um argumento, ele define a produção padrão.

iop -d PEX.Production

lists

O comando lists lista as produções.

iop -l

Saída:

{
    "PEX.Production": {
        "Status": "Stopped",
        "LastStartTime": "2023-05-31 11:13:51.000",
        "LastStopTime": "2023-05-31 11:13:54.153",
        "AutoStart": 0
    }
}

start

O comando start inicia uma produção

Para sair do comando, você deve apertar CTRL+C.

iop -s PEX.Production

Se nenhum argumento for dado, o comando start inicia a produção padrão.

iop -s

Saída:

2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting production
2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting item Python.FileOperation
2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting item Python.EmailOperation
...

kill

O comando kill mata uma produção (força parada).

O comando kill é o mesmo que o de parada (stop), mas com um "forçar" (force) na frente.

O comando kill não leva argumento porque só pode ter uma produção rodando.

iop -k 

stop

O comando stop para uma produção.

O comando stop não tem argumentos porque só pode ter uma produção rodando

iop -S 

restart

O comando restart reinicia uma produção.

O comando restart não tem argumentos porque só pode ter uma produção rodando.

iop -r 

migrate

O comando migrate migra uma produção e classes com arquivo de definições settings.

O comando migrate deve ter como argumento o caminho completo do arquivo de definições settings.

O arquivo de definições settings deve estar na mesma pasta do código python.

iop -M /tmp/settings.py

export

O comando export exporta uma produção.

Se não for dado nenhum argumento, o comando export exporta a produção padrão.

iop -e

Se um argumento for dado, o comando export exporta a produção no dado argumento.

iop -e PEX.Production

output :

{
    "Production": {
        "@Name": "PEX.Production",
        "@TestingEnabled": "true",
        "@LogGeneralTraceEvents": "false",
        "Description": "",
        "ActorPoolSize": "2",
        "Item": [
            {
                "@Name": "Python.FileOperation",
                "@Category": "",
                "@ClassName": "Python.FileOperation",
                "@PoolSize": "1",
                "@Enabled": "true",
                "@Foreground": "false",
                "@Comment": "",
                "@LogTraceEvents": "true",
                "@Schedule": "",
                "Setting": [
                    {
                        "@Target": "Adapter",
                        "@Name": "Charset",
                        "#text": "utf-8"
                    },
                    {
                        "@Target": "Adapter",
                        "@Name": "FilePath",
                        "#text": "/irisdev/app/output/"
                    },
                    {
                        "@Target": "Host",
                        "@Name": "%settings",
                        "#text": "path=/irisdev/app/output/"
                    }
                ]
            }
        ]
    }
}

status

O comando status dá o status de uma produção.

O comando status não leva argumentos pois apenas uma produção pode estar rodando.

iop -x 

output :

{
    "Production": "PEX.Production",
    "Status": "stopped"
}

Os status podem ser:
- stopped (parada)
- running (rodando)
- suspended (suspensa)
- troubled (com problema)

version

O comando version exibe a versão.

iop -v

output :

2.3.0

log

O comando log exibe o log.

Para sair do comando você deve apertar CTRL+C

iop -L

output :

2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting production
2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting item Python.FileOperation
2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting item Python.EmailOperation
...

Ele pode ser usado fora do projeto iris-pex-embedded-python?

Isso será uma escolha sua.

Mas, antes de você sair daqui, deixe eu te dizer porque eu acho que pode ser usado fora de um projeto iris-pex-embedded-python.

Primeiro, porque ele pode interagir com a produção sem a necessidade de usar um terminal iris. Isso significa que é mais fácil de usar em um script.

Segundo, porque o settings.py pode ser usado para importar uma produção e classes com variáveis de ambiente.

Aqui está um exemplo de settings.py:

import os

PRODUCTIONS = [
        {
            'UnitTest.Production': {
                "Item": [
                    {
                        "@Name": "Python.FileOperation",
                        "@ClassName": "Python.FileOperation",
                        "Setting": {
                            "@Target": "Host",
                            "@Name": "%settings",
                            "#text": os.environ['SETTINGS']
                        }
                    }
                ]
            }
        } 
    ]

Note o valor #text. É um variável de ambiente. Bacana, né?

Você se vê usando essa ferramenta de linha de comando, o suficiente para valer a pena continuar desenvolvendo?

Obrigado por ler e seus feedbacks são bem vindos.

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