En ce début d’été plusieurs mises à jour ont été publiées cette semaine dont la nouvelle version du SDK 1.8.2, des mises à jour de la Console et surtout une nouvelle version du PythonProxy.

Découvrons ces nouveautés en détail !

PythonProxy 1.8.2 :  amélioration de l’expérience de développement des packages Python

Configuration des scripts à démarrer

Depuis la sortie du “PythonProxy” en décembre 2014 permettant d’embarquer des scripts Python dans un package Constellation, tous les fichiers “.py” présents dans le répertoire “Scripts” étaient chargés à l’exception du fichier “Constellation.py” et des fichiers terminant par “lib.py” ce qui permettait d’inclure des librairies Python dans vos packages. De plus tous ces fichiers Python étaient lancés par ordre alphabétique.

Cela fait désormais partie du passé ! En effet, depuis la mise à jour 1.8.2, il faut déclarer la liste des fichiers Python à charger dans le fichier App.config en ajoutant la section suivante :

Sans oublier de déclarer dans la section <configSection> la ligne suivante :

Vous pouvez donc maintenant définir explicitement les scripts que vous voulez lancer et dans l’ordre que vous souhaitez sans devoir jouer sur les noms des fichiers.

Cela offre plus de souplesse dans la conception de vos packages avec un fonctionnement beaucoup plus clair et explicit.

Timeout de démarrage

Lorsque le PythonProxy lance un script Python que vous avez écrit, il cherchera à se connecter avec lui avant d’invoquer votre méthode “OnStart”. Seulement en cas de problème, par exemple si votre script comporte des erreurs fatales, la connexion n’aura jamais lieu et votre package sera bloqué !

Désormais cette nouvelle version intègre la notion de “timeout” permettant de définir un temps maximal de démarrage. Si le PythonProxy ne parvient pas à se connecter à votre script dans le délai imparti, il affichera un message d’erreur et passera au script suivant sans bloquer indéfiniment.

Ce timeout peut être configuré pour chaque script avec l’attribut “startupTimeout” ou bien de manière globale.

Notez également qu’il existe un timout d’arrêt : si votre script n’est pas terminé après avoir reçu l’ordre d’arrêt dans un délai imparti, le PythonProxy mettra fin au processus Python qui l’héberge.

Par exemple :

Le 1er script (Demo.py) doit démarrer en moins de 10 secondes et le 2ème script (LightSensor.py) doit s’arrêter en moins de 2 secondes. Pour le reste, le temps de démarrage est de 20 secondes et 5 secondes pour l’arret.

Notez enfin que si aucune valeur n’est spécifiée (ni sur la balise <script> ni de manière globale sur la section <pythonProxy>), les valeurs par défaut sont :

  • 30 secondes pour le démarrage
  • 8 secondes pour l’arrêt

Redirection de la sortie et des erreurs Python sur Constellation

Avec cette nouvelle version du PythonProxy, l’ensemble du flux de sortie et d’erreur des processus Python qui hebergent vos scripts seront rédirigés vers les logs Constellation.

Autrement dit un simple “print” sera visible dans les logs Constellation mais surtout la moindre erreur, par exemple une erreur de syntaxe dans votre script empêchant son initialisation, sera remontée dans les logs Constellation vous donnant alors toutes les informations nécessaires pour sa correction.

Exemple d'erreur de syntaxe redirigée dans les logs Constellation

Avec cette nouvelle version du Python Proxy, fini le côté “Black Box” lors du démarrage de vos scripts !

Surveillance de vos scripts

Il y a désormais un mécanisme de Ping/Pong entre le package Constellation et les scripts Python pour vérifier l’état de vie des deux parties. Si un processus Python ne reçoit plus de Ping reçu pendant plus de 30 secondes, il s’arrêtera automatiquement pour éviter les processus orphelins (notamment en cas de debug).

Mise à niveau

Pour en profiter il suffit de mettre à jour le package Nuget depuis Visual Studio et d’ajouter ensuite la section de configuration présentée ci-dessus dans votre fichier App.config.

Mise à jour du package Nuget PythonProxy

Notez que tous les nouveaux projets Constellation créés avec le SDK 1.8.2 (présenté ci-dessous) sont déjà basés sur cette nouvelle version du Python Proxy, il n’y a aucune action à faire pour en profiter !

Mise à jour du SDK 1.8.2

Tout d’abord les templates des projets (C# et Python) ont été mis à jour avec les dernières versions des libraires (.NET et Python). Ainsi les nouveaux projets créés avec cette nouvelle version du SDK profiteront automatiquement des dernières versions de l’API .NET et du Python Proxy 1.8.2 décrit ci-dessus.

Lorsqu’un package est publié (en local ou directement sur un serveur Constellation), l’assistant effectuera un nettoyage de la solution avant de lancer la compilation. Cela permet de purger les fichiers qui ne sont plus utilisés dans votre package.

Autre détail fort bien utile, lorsque vous ajoutez une icone pour votre package, c’est à dire que vous ajoutez cette icone (png ou jpg) dans votre projet Visual Studio et que vous la déclarez dans le Package Manifeste, l’assistant de publication du package Constellation configuera automatique la propriété « Copy to Output directory » sur votre icone !

Suite à la sortie du Python Proxy 1.8.2, le schéma de configuration XSD de la nouvelle section <pythonProxy> décrite ci-dessus sera installée de façon à pouvoir profiter de l’IntelliSense dans Visual Studio lorsque vous éditez ce fichier.

IntelliSense sur la section PythonProxy

De plus un nouvel « Item Template » nommé « Constellation Python Script » a été ajouté. Il permet de créer des scripts Constellation Python avec un template de base dans vos packages.

Création d'un nouveau script Constellation Python

Dès qu’un script Constellation Python est ajouté, Visual Studio configurera automatiquement la propriété « Copy to Output directory » pour inclure votre script dans le package et ajoutera la référence de ce fichier dans la section  <pythonProxy> du fichier App.config toujours de manière automatique.

Autre : mise à jour de la Console et de la libraire .NET

Les différentes mises à jour de la Console du mois de Juin permettent de prendre en compte dynamiquement les packages uploadés via la Management API (sans devoir rafraichir la page). De plus plusieurs bugs ont été corrigés comme l’édition des settings de type boolean ou number sur les packages sans manifeste (eg. Virtual Package) ou encore un problème de la mise à jour des StateObjects qui n’étaient pas maintenus en cas de changement de page.

Aussi la libraire .NET Constellation a été mise à jour le 20 mai 2017 (1.8.2.17140) et le 29 juin (1.8.2.17178). Cela corrige un problème sur l’envoi de réponse à des sagas dans un environnement Linux/Mono et permet le déclenchement de la procédure d’arrêt (OnPreShutsown puis OnShutdown) sur les packages lancés hors sentinelle (par exemple depuis Visual Studio en phase de debug).

Retrouvez plus d’information sur le changelog.

Mise à jour de l’API Python et du SDK en version 1.8.2
Étiqueté avec :                        

Démarrez la discussion sur le forum Constellation