Article
· Juil 24, 2023 7m de lecture

Interface en ligne de commande pour l'interopérabilité de l'Iris (iop)

Je suis fier d'annoncer la nouvelle version du logiciel iris-pex-embedded-python (v2.3.1) avec une nouvelle interface en ligne de commande.

Cette ligne de commande est appelée iop et signifie Interoperability On Python (interopérabilité sur Python).

Tout d'abord, j'aimerais présenter en quelques mots le projet et les principaux changements depuis la version 1.

Un bref historique du projet

La version 1.0 était une preuve de concept visant à montrer comment le cadre d'interopérabilité d'IRIS peut être utilisé avec une approche python first (priorité à Python) tout en restant compatible avec n'importe quel code ObjectScript existant.

Qu'est-ce que cela signifie ? Cela signifie que tout développeur python peut utiliser le cadre d'interopérabilité d'IRIS sans aucune connaissance d'ObjectScript.

Exemple :

from grongier.pex import BusinessOperation

class MyBusinessOperation(BusinessOperation):

    def on_message(self, request):
        self.log.info("Demande reçue")

Formidable, n'est-ce pas ?

Avec la version 1.1, j'ai ajouté la possibilité d'enregistrer ces classes python dans IRIS avec une fonction d'aide "help".

from grongier.pex import Utils

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

La version 2.0 est une version majeure car on peut maintenant installer ce projet avec pip.

pip install iris-pex-embedded-python

Quoi de neuf dans la version 2.3.1

La version 2.3.1 est une version majeure car elle introduit une nouvelle interface en ligne de commande.

Cette interface en ligne de commande peut être utilisée avec ce projet python basé sur ce module ou peut-être avec des projets qui n'utilisent pas ce module.

Laissez-moi la présenter et expliquer pourquoi elle peut être utilisée dans des projets non python.

L'interface en ligne de commande

La ligne de commande fait partie de ce projet, pour l'installer il suffit d'installer ce projet avec pip.

pip install iris-pex-embedded-python

Vous pouvez ensuite utiliser la ligne de commande iop pour lancer le cadre d'interopérabilité.

iop

résultat :

utilisation: iop [-h] [-d DEFAULT] [-l] [-s START] [-k] [-S] [-r] [-M MIGRATE] [-e EXPORT] [-x] [-v] [-L]
les arguments optionnels:
  -h, --help            affichage de  help (aide) et du nom de production par défaut
  -d DEFAULT, --default DEFAULT
                        définition de la production par défaut
  -l, --lists           liste de productions
  -s START, --start START
                        démarrage de la production
  -k, --kill            Suppression de la production (arrêt forcé)
  -S, --stop            Arrêt de la production
  -r, --restart         redémarrage de la production
  -M MIGRATE, --migrate MIGRATE
                        migration de la production et des classes avec un fichier de configuration
  -e EXPORT, --export EXPORT
                        exportation de la production
  -x, --status          état de la production
  -v, --version         version d''affichage
  -L, --log             affichage du journal

production par défaut : UnitTest.Production

Voici quelques exemples.

help (aide)

La commande "help" affiche l'aide et le nom de production par défaut.

iop -h

résultat :

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

default (par défaut)

La commande "default" permet de définir la production par défaut.

Si aucun argument n'est fourni, la production par défaut est affichée.

iop -d

résultat :

production par défaut : PEX.Production

Si un argument est fourni, la production par défaut est définie.

iop -d PEX.Production

lists (les listes)

La commande "lists" permet de dresser la liste des productions.

iop -l

utilisation :

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

start (lancement)

La commande "start" permet de lancer une production.

Pour quitter la commande, il faut appuyer sur CTRL+C.

iop -s PEX.Production

Si aucun argument n'est donné, la commande "start" lance la production par défaut.

iop -s

résultat :

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 (suppression)

La commande "kill" peut supprimer une production (arrêt forcé).

La commande "kill" est la même que la commande stop mais avec un arrêt forcé.

La commande "Kill" ne prend pas d'argument parce qu'une seule production peut être en cours d'exécution.

iop -k

stop (arrêt)

La commande "stop" permet d'arrêter une production.

La commande "stop" ne prend pas d'argument parce qu'une seule production peut être en cours d'exécution.

iop -S

restart (redémarrage)

La commande "restart" permet de relancer une production.

La commande "restart" ne prend pas d'argument parce qu'une seule production peut être en cours d'exécution.

iop -r

migrate (migration)

La commande "migrate" permet de migrer une production et des classes avec un fichier de configuration.

La commande "migrate" doit prendre le chemin absolu du fichier de configuration.

Le fichier de configuration doit se trouver dans le même dossier que le code python.

iop -M /tmp/settings.py

export (exportation)

La commande "export" permet d'exporter une production.

Si aucun argument n'est donné, la commande "export" exporte la production par défaut.

iop -e

Si un argument est donné, la commande "export" exécute la production indiquée dans l'argument.

iop -e PEX.Production

résultat :

{
    "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 (état)

La commande "status" permet d'indiquer l'état d'une production.

La commande "status" ne prend pas d'argument parce qu'une seule production peut être en cours d'exécution.

iop -x

résultat :

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

Un état peut être :
- arrêté
- en cours d'exécution
- suspendu
- compliqué

version

La commande "version" permet d'afficher la version.

iop -v

résultat :

2.3.0

log (journal)

La commande "log" permet d'afficher le journal.

Pour quitter la commande, il faut appuyer sur CTRL+C.

iop -L

résultat :

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

Peut-on l'utiliser en dehors du projet iris-pex-embedded-python ?

À vous de choisir.

Mais, avant de vous quitter, laissez-moi vous expliquer pourquoi je pense que cela peut être utilisé en dehors du projet iris-pex-embedded-python.

Tout d'abord, parce que cela permet d'interagir avec la production sans avoir besoin d'utiliser un shell iris. Cela signifie qu'il est plus facile à l'utiliser dans un script.

Deuxièmement, parce que settings.py peut être utilisé pour importer la production et les classes avec des variables d'environnement.

Voici un exemple de settings.py :

import os

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

Faites attention à la valeur #text. C'est une variable d'environnement. Pas mal, non ?

Est-ce que vous vous voyez utiliser cet outil en ligne de commande, cela vaut-il la peine de continuer à le développer ?

Merci pour avoir lu cet article et vos commentaires sont les bienvenus.

Discussion (0)2
Connectez-vous ou inscrivez-vous pour continuer