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