Écrit par

Sales Engineer at InterSystems
Article Sylvain Guilbaud · Mars 10 6m read

pyprod : Interopérabilité IRIS en Python pur

Intersystems IRIS Productions offrent un cadre performant pour connecter des systèmes hétérogènes, utilisant divers protocoles et formats de messages, de manière fiable, observable et évolutive. intersystems_pyprod, abréviation d'InterSystems Python Productions, est une bibliothèque Python permettant aux développeurs de créer ces composants d'interopérabilité entièrement en Python. Conçue pour la flexibilité, elle prend en charge une approche hybride : vous pouvez combiner facilement de nouveaux composants Python avec des composants ObjectScript existants, en tirant parti de votre infrastructure IRIS établie. Une fois définis, ces composants Python sont gérés comme n'importe quels autres ; ils peuvent être ajoutés, configurés et connectés via la page de configuration d'IRIS Production.


Introduction rapide aux productions InterSystems IRIS


 

 

 

 

 

 

 

 

 

 

 

 

 

Éléments clés d'une production

Image issue du matériel de formation des Services de formation

Une production IRIS reçoit généralement des données provenant d'interfaces externes, les traite selon un processus coordonné et les achemine vers leur destination. Les messages transitant par le système sont automatiquement enregistrés, ce qui rend l'ensemble du flux entièrement traçable grâce aux outils de traçage visuel et de journalisation d'IRIS. L'architecture repose sur certains éléments clés :

  • Hôtes métiers : Il s'agit des composants de base (services, processes et operations) qui échangent des messages persistants.
  • Adaptateurs : Les adaptateurs entrants et sortants gèrent l'interaction avec le monde extérieur, en prenant en charge les protocoles spécifiques nécessaires à la réception et à l'envoi des données.
  • Rappels : Le moteur utilise des méthodes de rappel spécifiques pour transmettre les messages entre les hôtes, de manière synchrone ou asynchrone. Ces rappels respectent des signatures strictes et renvoient un objet Status afin de garantir l'intégrité de l'exécution.
  • Assistants de configuration : Des objets tels que les propriétés et les paramètres exposent les paramètres à l'interface utilisateur de configuration de la production, permettant ainsi aux utilisateurs d'instancier, de configurer et d'enregistrer facilement l'état de ces composants.

Flux de travail avec pyprod

Ce processus se déroule en trois étapes principales.

  1. Écrivez vos composants de production dans un script Python classique. Dans ce script, importez les classes de base requises depuis intersystems_pyprod et définissez vos propres composants en les héritant, comme avec n'importe quelle autre bibliothèque Python.
  2. Chargez-les dans InterSystems IRIS en exécutant la commande intersystems_pyprod (même nom que la bibliothèque) depuis le terminal, en lui indiquant le chemin d'accès à votre script Python. Cette étape lie les classes Python à IRIS afin qu'elles apparaissent comme des composants de production et puissent être configurées et interconnectées via l'interface utilisateur de configuration de production standard.
  3. Créez la production à l'aide de la page de configuration de production et démarrez-la.

REMARQUE : Si vous créez tous vos composants avec leurs propriétés codées en dur dans le script Python, il vous suffit de les ajouter à la production et de la démarrer.

Vous pouvez connecter pyprod à votre instance IRIS en effectuant une configuration.


Exemple simple

Cet exemple illustre un flux de messages synchrone : une requête, émise par un service, transite par un processus, puis est transmise à une opération. La réponse suit ensuite le même chemin en sens inverse, de l’opération au service, en passant par le processus. Nous montrons également comment utiliser l’utilitaire IRISLog pour consigner des entrées de journal personnalisées.

Étape 1

Créez vos composants de production à l'aide de pyprod dans le fichier HelloWorld.py.

Voici quelques éléments clés du code :

  • Nommage des packages : Nous définissons `iris_package_name`, qui préfixe toutes les classes telles qu'elles apparaissent sur la page de configuration de production (si ce préfixe est omis, le nom du script est utilisé par défaut).
  • Messages persistants : Nous définissons `MyRequest` et `MyResponse`. Ce sont les structures de données essentielles à la communication, car seuls les objets persistants peuvent être échangés entre les services, les processus et les opérations.
  • L'adaptateur entrant : Notre adaptateur transmet une chaîne de caractères au service via la méthode `business_host_process_input`.
  • Le Business Service : Implémenté à l'aide du rappel `OnProcessInput`
    • `MyService` reçoit les données de l'adaptateur et les convertit en un message `MyRequest`.
    • Nous utilisons le paramètre `ADAPTERIRISParameter` pour lier l'adaptateur entrant au service. Notez que cet attribut doit être nommé ADAPTER en majuscules pour respecter les conventions IRIS.
    • Nous définissons une propriété targetIRISProperty permettant aux utilisateurs de sélectionner directement le composant de destination via l'interface de configuration.
  • Business Process : implémenté à l'aide du rappel OnRequest.
  • Business Operation : implémentée à l'aide du rappel OnMessage. (Vous pouvez également définir une MessageMap.)
  • Logique et rappels : enfin, les hôtes implémentent leur logique principale dans des rappels standard tels que OnProcessInput et OnRequest, et acheminent les messages via la méthode SendRequestSync.

Pour en savoir plus sur chacun de ces éléments, consultez la page de référence de l'API pyprod et le guide de démarrage rapide.

import time

from intersystems_pyprod import (
    InboundAdapter,BusinessService, BusinessProcess, 
    BusinessOperation, OutboundAdapter, JsonSerialize, 
    IRISProperty, IRISParameter, IRISLog, Status)

iris_package_name = "helloworld"
class MyRequest(JsonSerialize):
    content: str

class MyResponse(JsonSerialize):
    content: str

class MyInAdapter(InboundAdapter):
    def OnTask(self):
        time.sleep(0.5)
        self.business_host_process_input("request message")
        return Status.OK()

class MyService(BusinessService):
    ADAPTER = IRISParameter("helloworld.MyInAdapter")
    target = IRISProperty(settings="Target")
    def OnProcessInput(self, input):
        persistent_message = MyRequest(input)
        status, response = self.SendRequestSync(self.target, persistent_message)
        IRISLog.Info(response.content)
        return status

class MyProcess(BusinessProcess):
    target = IRISProperty(settings="Target")
    def on_request(self, input):
        status, response = self.SendRequestSync(self.target,input)
        return status, response


class MyOperation(BusinessOperation):
    ADAPTER = IRISParameter("helloworld.MyOutAdapter")
    def OnMessage(self, input):
        status = self.ADAPTER.custom_method(input)
        response = MyResponse("response message")
        return status, response


class MyOutAdapter(OutboundAdapter):
    def custom_method(self, input):
        IRISLog.Info(input.content)
        return Status.OK()

Étape 2

Une fois votre code prêt, chargez les composants dans IRIS.

$ intersystems_pyprod /full/path/to/HelloWorld.py

    Loading MyRequest to IRIS...
    ...
    Load finished successfully.
    
    Loading MyResponse to IRIS...
    ...
    Load finished successfully.
    ...
    

Étape 3

Ajoutez chaque hôte à la production via la page de configuration de production.

L'image ci-dessous montre la configuration de MyService et de sa propriété cible dans l'interface utilisateur. Procédez de la même manière pour ajouter MyProcess et MyOperation. Une fois la configuration terminée, démarrez la production pour voir vos messages s'afficher.


En conclusion

En combinant la flexibilité de l'écosystème Python à la fiabilité industrielle d'InterSystems IRIS, pyprod offre une approche moderne pour la création de solutions d'interopérabilité. Que vous développiez des applications de production entièrement nouvelles en Python pur ou que vous amélioriez des infrastructures ObjectScript existantes avec des bibliothèques Python spécialisées, pyprod garantit l'intégration, la visibilité et la simplicité de configuration de vos composants. Nous avons hâte de découvrir vos créations !


Liens rapides

Dépôt GitHub

Package PyPI

Soutenez le projet : Si vous trouvez cette bibliothèque utile, n'hésitez pas à nous attribuer une étoile sur GitHub et à nous suggérer des améliorations. Cela contribue à l'essor du projet et facilite sa découverte par les autres développeurs de la communauté InterSystems !