#Embedded Python

0 Abonnés · 84 Publications

Embedded Python fait référence à l'intégration du langage de programmation Python dans le noyau InterSystems IRIS, permettant aux développeurs d'opérer avec des données et de développer une logique d'entreprise pour les applications côté serveur en utilisant Python.

Documentation.

Article Guillaume Rongier · Jan 6 8m read

Interoperability on Python (IoP) (Interopérabilité sur Python) est un projet de validation de concept conçu pour démontrer la puissance du cadre d'interopérabilité InterSystems IRIS lorsqu'il est associé à une approche axée sur Python. IoP exploite Embedded Python (une fonctionnalité d'InterSystems IRIS) pour permettre aux développeurs d'écrire des composants d'interopérabilité en Python, qui s'intègrent de manière transparente à la plateforme IRIS robuste. Ce guide a été conçu pour les débutants et fournit une introduction complète à l'IoP, à sa configuration et aux étapes pratiques pour créer votre premier composant d'interopérabilité. À la fin de cet article, vous comprendrez clairement comment utiliser l'IoP pour créer des solutions d'interopérabilité évolutives basées sur Python. IoP est particulièrement utile pour les développeurs qui travaillent avec InterSystems IRIS ou IRIS for Health, car il simplifie la création de services métier, de processus métier et d'opérations métier qui utilisent Python. Une telle approche réduit la dépendance à ObjectScript (le langage traditionnel pour le développement IRIS), le rendant plus accessible aux développeurs Python.


Pourquoi utilisons-nous IoP?

IoP offre plusieurs avantages aux développeurs:

  1. Dévelopment Python-First: Python est un langage largement adopté, convivial pour les débutants et doté d'un riche écosystème de bibliothèques. IoP permet aux développeurs de tirer parti de leur expertise Python au sein de l'écosystème IRIS.
  2. Interopérabilité simplifiée: IoP résume les configurations complexes basées sur ObjectScript, permettant un développement plus rapide des composants d'interopérabilité.
  3. Applications de santé Healthcare: IoP est particulièrement adapté aux intégrations dans le domaine de la santé, telles que celles impliquant FHIR (Fast Healthcare Interoperability Resources), grâce à la prise en charge robuste des normes de santé par IRIS for Health.
  4. Communauté et Open Source: IoP est disponible sur PyPI et GitHub et bénéficie d'un soutien actif de la communauté, notamment grâce aux contributions de développeurs tels que Guillaume Rongier (développeur évangéliste pour InterSystems).

Conditions préalables

Avant de vous lancer dans IoP, assurez-vous d'avoir les éléments suivants:

  • InterSystems IRIS ou IRIS for Health: une installation locale ou un conteneur Docker exécutant IRIS (la version Community Edition suffit pour les tests).
  • Python 3.10 ou version ultérieure: requis pour exécuter IoP et ses dépendances.
  • Connaissances de base en Python: bonne connaissance des classes, des fonctions et de l'installation des paquets Python.

Dans ce tutoriel, nous utiliserons à l'aide d'une installation IRIS locale pour créer une production InterSystems IRIS comportant une fonctionnalité basée sur Python qui enregistre un message 'Hello World' à la réception d'une requête. Cela devrait démontrer une intégration transparente avec le cadre d'interopérabilité IRIS.

Les étapes suivantes décrivent le processus permettant d'atteindre cet objectif :

  • Étape 1: configuration de l'environnement virtuel
  • Étape 2: installation du paquet IoP
  • Étape 3: configuration des variables d'environnement pour la connexion IRIS
  • Étape 4: initialisation du module IoP dans IRIS à l'aide de l'interface de ligne de commande (CLI)
  • Étape 5: création d'une opération métier Python: exemple Hello World
  • Étape 6: migration des composants IoP vers IRIS
  • Étape 7: aperçu de la production
  • Étape 8: Test du composant d'opération de production

Commençons par l'étape 1.

Étape1: configuration de l'environnement virtuel

Tout d'abord, configurez un environnement virtuel Python afin d'isoler les dépendances de votre projet et d'assurer la compatibilité avec IoP et InterSystems IRIS. Un environnement virtuel est un répertoire autonome contenant une version spécifique de Python et les packages requis pour votre projet. Une telle configuration évite les conflits avec d'autres projets Python et rationalise le processus de développement. Pour ce tutoriel, créez un dossier nommé IOP afin d'organiser vos fichiers de projets.

Accédez au dossier IOP et exécutez la commande suivante pour configurer l'environnement virtuel:

python -m venv .venv

Cette commande crée un répertoire .venv dans votre dossier IOP, contenant un interpréteur Python et tous les paquets que vous installez pour votre projet IoP.
Pour activer l'environnement virtuel sous Windows, exécutez la commande suivante:

.venv\Scripts\activate

 
Pour Unix ou MacOS, utilisez la commande suivante:

source .venv/bin/activate

 

Étape 2: installation du paquet IoP

Une fois votre environnement virtuel activé, installez le paquet iris-pex-embedded-python, dépendance principale de votre projet IoP, afin d'activer l'interopérabilité basée sur Python au moyen d'InterSystems IRIS. Exécutez la commande suivante dans votre terminal:

pip install iris-pex-embedded-python

Cette commande installe le paquet iris-pex-embedded-python et ses dépendances à partir du Python Package Index (PyPI) dans votre environnement virtuel. Après l'installation, vous pouvez utiliser le module IoP à l'aide de composants d'interopérabilité basés sur Python, tels que les activités commerciales pour votre projet IoP.

 

0
0 34
Article Iryna Mykhailova · Nov 5, 2025 6m read

Salut!

C'est encore moi 😁. Dans l'article précédent Comment écrire un service API REST pour exporter le paquet FHIR généré au format JSON, nous avons généré une ressource DocumentReference, dont le contenu était encodé en Base64

Question!! Est-il possible d'écrire un service REST pour le décoder? Je voudrais vraiment savoir ce que contiennent les données du message🤔🤔🤔

Bien, allons-y!

1. Créez une nouvelle classe utilitaire datagen.utli.decodefhirjson.cls pour décoder les données contenues dans DocumentReference
 

Class datagen.utli.decodefhirjson Extends%RegisteredObject
{
}

2. Écrivez une



0
0 40
Article Iryna Mykhailova · Nov 3, 2025 13m read

Bonjour à tous,

Continuons à travailler sur la génération de données de test et l'exportation des résultats via une API REST. 😁

Ici, je souhaite réutiliser la classe `datagen.restservice` créée dans l'article précédent : « Écriture d'un service API REST pour exporter les données patient générées au format .csv ».

Cette fois-ci, nous prévoyons de générer un bundle FHIR incluant plusieurs ressources pour tester le référentiel FHIR.

Voici une référence si vous souhaitez en savoir plus sur FHIR : « The Concept of FHIR: A Healthcare Data Standard Designed for the Future ».

C'est parti ! 😆

1.



0
0 46
Article Iryna Mykhailova · Oct 23, 2025 6m read

Salut,

C'est moi encore 😁. Je travaille actuellement à la génération de fausses données patients à des fins de test avec Chat-GPT et Python. J'aimerais également partager mon apprentissage. 😑

Tout d'abord, créer un service d'API REST personnalisé est facile en utilisant %CSP.REST.

Commençons ! 😂

1. Créez une classe datagen.restservice qui étend %CSP.REST.

Class datagen.restservice Extends%CSP.REST
{
Parameter CONTENTTYPE = "application/json";
}

2. Ajoutez une fonction genpatientcsv() pour générer les données du patient et les regrouper dans une chaîne csv

Class datagen.restservice E


0
0 69
Article Guillaume Rongier · Juil 2, 2025 4m read

Bonjour chers ingénieurs interface et développeurs d'applications,     

Saviez-vous que Python peut être utilisé dans des productions ou des intégrations?

L'interface utilisateur de configuration de production est low-code, mais dans de nombreux projets, vous pouvez arriver au point où il est nécessaire d'écrire du code. Comme nous l'avons vu dans le cours Architecture d'intégration, les Business Process comportent de nombreux emplacements où insérer du code, notamment l'éditeur BPL (pour les Business Process BPL) et l'éditeur DTL (pour les transformations de données).

😯 À partir d'InterSystem

Une activité de code issue d'une transformation de données DTL, avec le langage défini sur Python. Le contenu du champ de code indique bidders = [bid.User for bid in source.Lot.Bids()]. New line. bidders = set(bidders). New line. target.NumOutbid = (len(bidders) - 1).

0
0 45
Article Iryna Mykhailova · Juin 24, 2025 3m read

J'écris cet article principalement pour recueillir un consensus informel sur la façon dont les développeurs utilisent Python avec IRIS. N'hésitez donc pas à répondre au sondage à la fin de cet article ! Dans le corps de l'article, je détaillerai chaque choix proposé, ainsi que ses avantages, mais n'hésitez pas à le parcourir et à simplement répondre au sondage.

Comme la plupart d'entre vous le savent probablement, Python est actuellement le langage de programmation le plus populaire auprès des développeurs du monde entier, et pour cause. Python est intuitif, facile à lire, dispose d'une vaste

0
0 52
Article Sylvain Guilbaud · Juin 13, 2025 9m read

J'ai dû récemment rafraîchir mes connaissances sur le module EMPI de HealthShare et, comme je travaillais depuis quelque temps sur les fonctionnalités de stockage et de recherche vectorielle d'IRIS, j'ai tout naturellement fait le rapprochement.

Pour ceux d'entre vous qui ne connaissent pas bien les fonctionnalités EMPI, voici une brève introduction:

Index patient principal "Enterprise Master Patient Index"

En général, tous les EMPI fonctionnent de manière très similaire : ils ingèrent les informations, les normalisent et les comparent avec les données déjà présentes dans leur système. Dans le

0
0 35
Article Sylvain Guilbaud · Mars 28, 2025 54m read

Depuis l'introduction d'Embedded Python, il y a toujours eu un doute sur ses performances par rapport à ObjectScript et J'en ai discuté à plusieurs reprises avec @Guillaume Rongier , eh bien, profitant du fait que je faisais une petite application pour capturer les données des concours publics en Espagne et pouvoir effectuer des recherches en utilisant les capacités de VectorSearch, j'ai vu l'opportunité de réaliser un petit test.

Données pour le test

Les informations relatives aux concours publics sont fournies mensuellement dans des fichiers XML à partir de cette URL  et le format typique de


myth-busted – Mike Raffety, DTM, PID

0
0 40
InterSystems officiel Adeline Icard · Mars 27, 2025

InterSystems annonce la disponibilité générale d'InterSystems IRIS, InterSystems IRIS for Health et HealthShare Health Connect 2025.1.

La version 2025.1 de la plateforme de données InterSystems IRIS®, InterSystems IRIS® for HealthTM et HealthShare® Health Connect est désormais disponible. Il s'agit d'une version en maintenance prolongée.

Points forts de la version

Cette nouvelle version propose plusieurs nouvelles fonctionnalités et améliorations, notamment :

1. Fonctionnalités avancées de recherche vectorielle

  • Un nouvel index ANN (Approximate Nearest Neighbor) basé sur disque accélèr
0
0 34
Article Sylvain Guilbaud · Fév 28, 2025 1m read

Bonjour,

Comme il m'a fallu un certain temps pour comprendre d'où venait le problème, je voudrais partager cette expérience, afin que vous ne tombiez pas dans le même piège.

Je viens de remarquer que si vous nommez votre package "code" (tout en minuscules), dans une classe utilisant du python intégré en utilisant [Language = python], vous aurez l'erreur suivante :

 <THROW> *%Exception.PythonException <PYTHON EXCEPTION> 246 <class 'ModuleNotFoundError'>: No module named 'code.basics'; 'code' is not a package

Class code.basics Extends%RegisteredObject
{

ClassMethod Welcome() As%Status
0
0 29
Article Sylvain Guilbaud · Fév 26, 2025 7m read

L'utilisation de Embedded Python lors de la création d'une solution basée sur InterSystems peut ajouter des fonctionnalités très puissantes et approfondies à votre boîte à outils.

J'aimerais partager un exemple de cas d'utilisation que j'ai rencontré : l'activation d'un CDC (Change Data Capture) pour une collection mongoDB - la capture de ces modifications, leur digestion via un flux d'interopérabilité et, pour finir, la mise à jour d'un EMR via une API REST.

0
0 48
Article Guillaume Rongier · Fév 10, 2025 5m read

Je suis heureux d'annoncer la nouvelle version de l'IoP, qui, au fait, n'est pas une simple ligne de commande. Je dis cela parce que le nouveau moteur de recherche de l'IA considère toujours que l'IoP n'est qu'une ligne de commande. Il s'agit d'un ensemble de cadres permettant de créer des applications à partir du cadre d'interopérabilité d'IRIS, en adoptant avant tout une approche en python.

La nouvelle version de l'IoP : 3.2.0 comporte de nombreuses nouvelles fonctionnalités, mais la plus importante est la prise en charge de DTL . 🥳

Pour les messages de l'IoP et pour jsonschema. 🎉

image

Prise en charge de DTL

À partir de la version 3.2.0, l'IoP prend en charge les transformations DTL.

DTL est la couche de transformation des données (Data Transformation Layer) dans IRIS Interoperability in IRIS Interoperability.

Les transformations DTL sont utilisées pour transformer des données d'un format à un autre à l'aide d'un éditeur graphique. Il prend également en charge les structures jsonschema.

0
0 48
Article Sylvain Guilbaud · Jan 2, 2025 10m read

Votre mission

Imaginons que vous êtes un espion international qui consacre sa vie à protéger les habitants de notre planète contre les dangers. La mission suivante vous est confiée:

Cher agent IRIS,

Nous sommes désolés d'interrompre vos vacances aux Bahamas, mais notre agent à Londres vient de nous informer qu'une "bombe à explosion retardée" est prête à exploser dans une zone très peuplée de Los Angeles. Selon nos informateurs, la "bombe à explosion retardée" devrait se déclencher à 15h14 aujourd'hui.

Dépêchez-vous, les citoyens comptent sur vous!

Le problème

Alors que vous vous précipite

Fuseaux horaires du monde (Wikipedia)

0
0 110
Article Lorenzo Scalese · Nov 21, 2024 8m read

Dans l'article précédent. Pratiques des membres de la classe et leur exécution au sein de Embedded Python. WNous allons maintenant aborder le processus de changement d'espace de noms, d'accès aux variables globales, de traversée et d'exécution de routine  au sein de Embedded Python.

Avant de passer aux autres fonctions, examinons brièvement la fonction execute du paquet iris. Cette fonction est particulièrement utile pour l'exécution de fonctions ObjectScript arbitraires et l'invocation de classes.

>>> b = iris.execute('return $Piece("test^aaaa","^",2)')
>>> b
'aaaa'
>>> b = iris.execute('return







0
0 51
Article Lorenzo Scalese · Nov 18, 2024 8m read

Bonjour la communauté,

Dans cet article, je vais décrire et illustrer le processus de mise en œuvre d'ObjectScript au sein de Embedded Python. Cette discussion fera également référence à d'autres articles relatifs à Embedded Python, et répondra aux questions qui ont été utiles à mon apprentissage.

Comme vous le savez peut-être, l'intégration des fonctionnalités de Python dans IRIS est possible depuis un certain temps. Cet article se concentrera sur la manière dont ObjectScript peut être incorporé de manière transparente à Embedded Python.

Essentiellement, Embedded Python sert d'extension qui p

0
0 73
Article Guillaume Rongier · Oct 6, 2024 21m read

Cela fait maintenant plus de 2 ans que j'utilise quotidiennement Embedded Python. Il est peut-être temps de partager un retour d'expérience sur ce parcours.

Pourquoi écrire ce commentaire de retour d'expérience? Parce que, je suppose, je suis comme la plupart de mes collègues ici, un développeur ObjectScript, et je pense que la communauté bénéficierait de ce retour d'expérience et pourrait mieux comprendre les avantages et les inconvénients du choix de Embedded Python pour développer quelque chose dans IRIS. Et aussi éviter certains pièges.

image

0
0 88
Article Iryna Mykhailova · Sept 4, 2024 2m read

Bonjour à tous,

Cet article a pour but de vous guider dans le processus de configuration et d'utilisation de la fonctionnalité d'exécution flexible de Python pour Embedded Python. Avant la version 2024.2, le programme d'installation d'Intersystems IRIS incluait une version préinstallée de Python. Vous pouvez trouver les bibliothèques Python et les fichiers d'application situés dans le répertoire \lib\python de votre dossier d'installation IRIS (par exemple, C:\InterSystems\IRIS20242\lib\python).

Cependant, à partir de la version 2024.2, le programme d'installation d'IRIS n'inclut plus l'inst


0
0 45
Article Lorenzo Scalese · Août 22, 2024 5m read

Dans l'article précédent, nous avons présenté l'application d[IA]gnosis développée pour soutenir le codage des diagnostics CIM-10. Dans le présent article, nous verrons comment InterSystems IRIS for Health nous fournit les outils nécessaires à la génération de vecteurs à partir de la liste des codes CIM-10 au moyen d'un modèle de langage pré-entraîné, à leur stockage et à la recherche ultérieure de similitudes sur tous ces vecteurs générés.

Introduction

L'une des principales fonctionnalités apparues avec le développement des modèles d'IA est ce que nous appelons RAG (Retrieval-Augmented Gener

0
1 59
Article Lorenzo Scalese · Août 20, 2024 8m read

Avec l'introduction des types de données vectorielles et de la fonctionnalité de recherche vectorielle dans IRIS, tout un univers de possibilités de développement d'applications s'ouvre et un exemple de ces applications est celui que j'ai récemment vu publié dans un appel d'offres public du Ministère régional de la santé de Valence demandant un outil d'aide au codage de la CIM-10 à l'aide de modèles d'IA.

Comment pourrions-nous mettre en œuvre une application similaire à celle demandée? Voyons ce dont nous aurions besoin:

  1. Liste des codes CIM-10, que nous utiliserons comme contexte de notre ap

0
1 55
Article Iryna Mykhailova · Août 7, 2024 3m read

Introduction à l'exécution de WSGI dans IRIS

Avec IRIS 2024+, les utilisateurs peuvent héberger des applications WSGI à l'aide de Security.Applications. À titre d'exemple, un utilisateur peut faire quelque chose comme ceci.

Exemple minimal

zn"%SYS"Kill props
Set props("Description") = "Sample WSGI Application"Set props("MatchRoles") = ":%All"Set props("WSGIAppLocation") = "/path/to/flaskapp"Set props("WSGIAppName") = "myapp"Set props("WSGICallable") = "app"Set props("DispatchClass") = "%SYS.Python.WSGI"// important, sinon sera reconnu comme une application CSPSet sc = ##cla
0
0 45
Article Sylvain Guilbaud · Avr 15, 2024 6m read

Comme vous avez pu le constater dans les dernières publications de la communauté, InterSystems IRIS inclut depuis la version 2024.1 la possibilité d'inclure des types de données vectorielles dans sa base de données et sur la base de ce type de données, des recherches vectorielles ont été mises en œuvre. Eh bien, ces nouvelles fonctionnalités m'ont rappelé l'article que j'ai publié il y a quelque temps et qui était basé sur la reconnaissance faciale utilisant Embedded Python.

Introduction

Pour ceux d’entre vous qui ne se souviennent pas du sujet de cet article, le lien se trouve à la fin de c

0
0 71
Article Pierre LaFay · Avr 9, 2024 5m read

J'ai récemment eu besoin de surveiller depuis HealthConnect les enregistrements présents dans une base de données NoSQL dans le Cloud, plus précisément Cloud Firestore, déployé dans Firebase. D'un coup d'œil rapide, j'ai pu voir à quel point il serait facile de créer un adaptateur ad-hoc pour établir la connexion en tirant parti des capacités d'Embedded Python, et je me suis donc mis au travail.

Préparation de l'environnement

Pour commencer, nous avons besoin d'une instance de la base de données sur laquelle nous pouvons effectuer les tests. En accédant à la console Firebase, nous avons créé

0
0 80
Article Sylvain Guilbaud · Mars 22, 2024 5m read

L'invention et la vulgarisation des grands modèles de langage (tels que GPT-4 d'OpenAI) ont lancé une vague de solutions innovantes capables d'exploiter de grands volumes de données non structurées qui étaient peu pratiques, voire impossibles, à traiter manuellement jusqu'à récemment. Ces applications peuvent inclure la récupération de données (voir le cours ML301 de Don Woodlock pour une excellente introduction à Retrieval Augmented Generation), l'analyse des sentiments, et même des agents d'IA entièrement autonomes, pour n'en nommer que quelques-uns !

Dans cet article, je souhaite démontrer

0
0 131
Article Sylvain Guilbaud · Fév 16, 2024 2m read

Pourquoi j'ai décidé d'écrire ceci

Dans mon dernier article, j'ai parlé du renvoi de valeurs avec Python. Mais les renvoyer est simple, ce qui peut rendre les choses plus difficiles, c'est ce dont je vais parler aujourd'hui : où la valeur est traitée.

Objet Python dans IRIS

En suivant l'exemple du dernier article, nous avons la méthode : objet dans IRIS

Class python.returnTest [ Abstract ]
{

ClassMethod returnSomething(pValue... As%String) As%Integer [ Language = python ]
{
	return pValue
}

}

Nous aurons ensuite en retour un objet Python, qu'IRIS interprète comme la classe

0
0 84
Question Cyril Grosjean · Jan 10, 2024

Bonjour,

Nous sommes confrontés à un problème sur notre environnement de pré-production, nous n'arrivons pas à corriger cette erreur qui n'apparait pas dans notre environnement local :

ERREUR <Ens>ErrGeneral: Failed to create instance of GESTION01.Prestataire.PostFusionIntervention BP 'Post Fusion Intervention' : ERREUR #5002: Erreur ObjectScript: OnInit+4^Grongier.PEX.BusinessProcess.1^2^ do ..%class."_dispatch_on_init"($this) *<class 'sqlalchemy.exc.OperationalError'>: (intersystems_iris.dbapi._DBAPI.OperationalError) Accès refusé (Background on this error at: https://sqlalche.me/e/20
7
1 189
Article Sylvain Guilbaud · Fév 1, 2024 6m read

Bonjour La Communauté,

Le langage SQL reste le moyen le plus pratique pour récupérer de l'information stockée en base de données.

Le format JSON est très souvent utilisé dans les échanges de données.

Il est donc fréquent de chercher à obtenir des données au format JSON à partir de requêtes SQL.

Vous trouverez ci-dessous des exemples simples qui pourront vous aider à répondre à ce besoin à partir de code en ObjectScript et en Python.

ObjectScript : via le SQL dynamique avec %SQL.Statement + les structures JSON avec %DynamicObject et %DynamicArray

ClassMethod getJSON() As%String
{
    /
1
0 334
Question Cécile Heuillet · Déc 21, 2023

Bonjour,

j'utilise une méthode en python sur une opération pour pouvoir générer un fichier csv à partir d'une table de lien. Cette méthode me génère l'erreur : ERREUR <Ens>ErrCanNotAcquireJobRootLock et cela me bloque complètement pour l'arrête de la production. Mon opération passe en statut "Queued" alors que le fichier est généré et mon message de retour est complet.

La méthode principale de l'opération est :

Method extractionPiecesSage(pRequest As myDSO.msg.exportPiecesSage, Output pResponse As myDSO.msg.retourExport) As%Status
{
    set sc = $$$OKset pResponse = ##class(myDSO.m
2
0 85