Artículo
· 28 jul, 2023 Lectura de 7 min

Interfaz de línea de comandos para interoperabilidad de IRIS (iop)

¡Hola Comunidad!

Me alegra anunciar la nueva versión de iris-pex-embedded-python (v2.3.1) con una nueva interfaz de línea de comandos.

Esta línea de comandos se llama iop por Interoperability On Python.

Primero me gustaría presentar los principales cambios del proyecto desde la versión 1.

Breve historia del proyecto

La versión 1.0 fue una prueba de concepto para mostrar cómo el framework de interoperabilidad de IRIS se puede utilizar con un enfoque python first mientras sigue siendo compatible con cualquier código existente de ObjectScript.

¿Qué significa eso? Significa que cualquier desarrollador Python puede usar el framework de interoperabilidad de IRIS sin ningún conocimiento de ObjectScript.

Ejemplo:

from grongier.pex import BusinessOperation

class MyBusinessOperation(BusinessOperation):

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

Genial, ¿cierto?

Con la versión 1.1, añadí la posibilidad de registrar esas clases de Python en IRIS con una función auxiliar.

from grongier.pex import Utils

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

La versión 2.0 fue una versión major porque podías instalar el proyecto directamente con pip.

pip install iris-pex-embedded-python

Novedades de la versión 2.3.1

La versión 2.3.1 es también una versión major porque introduce una nueva interfaz de línea de comandos.

Esta interfaz de línea de comandos se puede utilizar con este proyecto de Python basado en este módulo o quizá con proyectos que no utilicen este módulo.

Permitidme presentarla y explicar por qué se puede utilizar en proyectos que no son de Python.

La interfaz de línea de comandos

La línea de comandos forma parte de este proyecto. Para instalarla, solo hay que instalar el proyecto con pip.

pip install iris-pex-embedded-python

Después, se puede usar la línea de comandos iop para iniciar el framework de interoperabilidad.

iop

salida:

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 a ver algunos ejemplos.

help

El comando help muestra la ayuda y el nombre de producción predeterminado.

iop -h

salida:

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

El comando default especifica la producción predeterminada.

Sin parámetros, muestra la producción predeterminada.

iop -d

salida:

default production: PEX.Production

Con un parámetro, especifica la producción predeterminada.

iop -d PEX.Production

lists

El comando lists enumera las producciones.

iop -l

salida:

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

start

El comando start inicia una producción.

Para salir del comando, hay que pulsar CTRL+C.

iop -s PEX.Production

Si no se da un parámetro, el comando start inicia la producción predeterminada.

iop -s

salida:

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

El comando kill finaliza una producción (force stop).

El comando Kill es el mismo que el comando stop, pero con un force stop.

El comando Kill no utiliza parámetros porque sólo se puede estar ejecutando una producción.

iop -k 

stop

El comando stop detiene una producción.

El comando Stop no toma un parámetro porque solo se puede estar ejecutando una producción.

iop -S 

restart

El comando restart reinicia una producción.

El comando restart no utiliza parámetros porque solo se puede estar ejecutando una producción.

iop -r 

migrate

El comando migrate migra una producción y clases con el archivo de configuración.

El comando migrate debe tomar la ruta absoluta del archivo de configuración.

El archivo de configuración debe estar en la misma carpeta que el código Python.

iop -M /tmp/settings.py

export

El comando export exporta una producción.

Si no se da un parámetro, el comando export exporta la producción predeterminada.

iop -e

Si se da un parámetro, el comando export exporta la producción dada en el parámetro.

iop -e PEX.Production

salida:

{
    "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

El comando status muestra el estado de una producción.

El comando status no toma un parámetro porque solo se puede estar ejecutando una producción.

iop -x 

salida:

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

Los estados pueden ser:
- stopped (parado)
- running (ejecutándose)
- suspended (suspendido)
- troubled (con problemas)

version

El comando version muestra la versión.

iop -v

salida:

2.3.0

log

El comando log muestra el log.

Para salir del comando hay que pulsar CTRL+C.

iop -L

salida:

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
...

¿Se puede utilizar fuera del proyecto iris-pex-embedded-python?

Esa es vuestra elección.

Pero me gustaría explicaros por qué creo que se puede utilizar fuera del proyecto iris-pex-embedded-python.

Primero, porque puede interactuar con producción sin la necesidad de usar un iris shell. Eso significa que es más fácil de usar en un script.

En segundo lugar, porque settings.py se puede utilizar para importar producción y clases con variables de entorno.

Este es un ejemplo de settings.py :

import os

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

Prestad atención al valor #text. Es una variable de entorno. Genial, ¿verdad?

¿Os gustaría usar esta herramienta de línea de comandos? ¿Merece la pena seguir desarrollándola?

Gracias por leer el artículo y espero vuestros comentarios.

Comentarios (0)1
Inicie sesión o regístrese para continuar