﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tag PythonProxy - Constellation</title>
	<atom:link href="https://developer.myconstellation.io/tag/pythonproxy/feed/" rel="self" type="application/rss+xml" />
	<link>https://developer.myconstellation.io/tag/pythonproxy/</link>
	<description>Votre plateforme d&#039;interconnexion</description>
	<lastBuildDate>Tue, 21 May 2019 12:54:02 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://developer.myconstellation.io/wp-content/uploads/2016/02/256x256-e1457476015859.png</url>
	<title>Tag PythonProxy - Constellation</title>
	<link>https://developer.myconstellation.io/tag/pythonproxy/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Support de Python 3, des environnements virtuels et autres nouveaut&#233;s de l&#8217;API Python</title>
		<link>https://developer.myconstellation.io/blog/support-python-3-et-environnements-virtuels/</link>
					<comments>https://developer.myconstellation.io/blog/support-python-3-et-environnements-virtuels/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Tue, 21 May 2019 12:54:02 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[PythonProxy]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=6201</guid>

					<description><![CDATA[<p>L’API Python Constellation embarquée dans le package NuGet Constellation.PythonProxy a connu trois mises à jour depuis la dernière news sur le blog : la version 1.8.5 en Octobre 2018 avec le support des environnements virtuels, la 1.8.6 en Février 2019</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/support-python-3-et-environnements-virtuels/">Support de Python 3, des environnements virtuels et autres nouveaut&eacute;s de l&rsquo;API Python</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>L’API Python Constellation embarquée dans le package NuGet <a href="https://www.nuget.org/packages/Constellation.PythonProxy/">Constellation.PythonProxy</a> a connu trois mises à jour depuis la dernière news sur le blog : la <strong>version 1.8.5 en Octobre 2018</strong> avec le support des<strong> environnements virtuels</strong>, la <strong>1.8.6 en Février 2019</strong> avec plusieurs nouveautés dont le <strong>support de Python 3.x</strong> et pour finir la <strong>version 1.8.7 publiée début Mai 2019</strong> avec quelques ajouts dont la substitution de configuration du Proxy Python par des settings Constellation.</p>
<p>Retour en détail sur les nouveautés …</p>
<h3>Le choix de l’interpréteur Python et les environnements virtuels</h3>
<p>Depuis la version 1.8.5<strong> il est possible de définir la commande pour lancer les scripts Python de votre package</strong>.  Par défaut chaque script était lancé avec la commande “python” ce qui vous obligez à définir la commande “python” dans le PATH de votre système.</p>
<p>Désormais vous pouvez définir dans le fichier <em>App.config</em> de votre package Python, l’attribut “<em>pythonCmd</em>” pour spécifier la commande à lancer. Ci-dessous un exemple avec l’interpréteur Python 2.7 :</p>
<p></p><pre class="crayon-plain-tag">&lt;pythonProxy xmlns="urn:Constellation.PythonProxy" pythonCmd="C:\Python27\python.exe"&gt;
  &lt;scripts&gt;
    &lt;script filename="Scripts\Demo.py" /&gt;
    &lt;script filename="Scripts\Demo2.py" /&gt;
  &lt;/scripts&gt;
&lt;/pythonProxy&gt;</pre><p></p>
<p>L’attribut “<em>pythonCmd</em>” peut-être également défini de manière individuelle pour chaque script. Prenez par exemple la configuration suivante :</p>
<p></p><pre class="crayon-plain-tag">&lt;pythonProxy xmlns="urn:Constellation.PythonProxy" pythonCmd="python3"&gt;
  &lt;scripts&gt;
    &lt;script filename="Scripts\Demo.py" /&gt;
    &lt;script filename="Scripts\Demo2.py" pythonCmd="C:\Users\Sebastien\venv\Scripts\python.exe" /&gt;
    &lt;script filename="Scripts\Demo3.py" pythonCmd="C:\Python27\python.exe" /&gt;
  &lt;/scripts&gt;
&lt;/pythonProxy&gt;</pre><p></p>
<p>Ci-dessus le package Python démarre trois scripts Demo.py, Demo2.py et Demo3.py de la façon suivante :</p>
<ul>
<li>Demo.py sera lancé par l’interpréteur Python 3 (via la commande “python3” défini au niveau global)</li>
<li>Demo2.py sera lancé par un environnement virtuel ici nommé “venv” (défini pour le script)</li>
<li>Demo3.py sera lancé par l’interpréteur Python 2.7 installé dans “C:\Python27”</li>
</ul>
<p><strong>Il devient donc possible d’utiliser des interpréteurs Python spécifiques dont les environnements virtuels. </strong>Notez que si rien n’est défini, les scripts seront lancés par la commande “<em>python</em>”.</p>
<h3>Le support de Python 3.x</h3>
<p>La version 1.8.6 du Proxy Python est désormais compatible Python 2.x et Python 3.x.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2019/05/image-10.png"><img class="colorbox-6201"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Python 3.x" src="https://developer.myconstellation.io/wp-content/uploads/2019/05/image_thumb-9.png" alt="Python 3.x" width="454" height="92" border="0" /></a></p>
<p align="left"><strong>Il est donc maintenant possible d’écrire des packages Constellation en Python 2.x ou en Python 3.x</strong> (ou les deux en même temps, avec ou sans environnements virtuels avec l’attribut “<em>pythonCmd</em>” vu précédemment).</p>
<h3>La configuration du “Proxy” par settings Constellation</h3>
<p>Il est possible d’utiliser des settings Constellation (c’est à dire des variables de configuration que l’on peut administrer depuis la Constellation par l’<a href="/client-api/rest-api/interface-rest-management/#Settings_dune_instance_dun_package">API</a> ou la <a href="/constellation-platform/constellation-console/gerer-packages-avec-la-console-constellation/#Editer_les_settings_dun_package">Console</a>) dans la section de configuration de votre <em>App.config</em> qui défini les scripts et les interpréteurs Python à utiliser.</p>
<p>Pour cela, au démarrage de votre package le Proxy Python remplacera les tags au format <em>$(xxxx)</em> où xxxx est la clé d’un setting de votre package.</p>
<p>Pour bien comprendre imaginez que vous souhaitez changer l’interpréteur Python à utiliser dans les settings Constellation.</p>
<p>Commençons par <a href="/client-api/net-package-api/settings/">déclarer un setting dans le manisfest</a> de votre package que nous nommerons “<em>PythonPath</em>” avec la valeur par défaut “<em>python</em>”. Dans le fichier <em>PackageInfo.xml</em> :</p>
<p></p><pre class="crayon-plain-tag">&lt;Settings&gt;
  &lt;Setting name="PythonPath" defaultValue="python" type="String" /&gt;
&lt;/Settings&gt;</pre><p></p>
<p>Maintenant dans la configuration de notre proxy Python définissons l’attribut “pythonCmd”, c’est à dire la commande à utiliser pour lancer nos scripts Python, par la valeur de notre setting Constellation en utilisant le tag <em>$(PythonPath).</em> Soit dans le fichier <em>App.config</em> :</p>
<p></p><pre class="crayon-plain-tag">&lt;pythonProxy xmlns="urn:Constellation.PythonProxy" pythonCmd="$(PythonPath)"&gt;
  &lt;scripts&gt;
    &lt;script filename="Scripts\Demo.py" /&gt;
  &lt;/scripts&gt;
&lt;/pythonProxy&gt;</pre><p></p>
<p>Dans la Console Constellation, la valeur par défaut est donc “python” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2019/05/image-11.png"><img class="colorbox-6201"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2019/05/image_thumb-10.png" alt="image" width="454" height="246" border="0" /></a></p>
<p>Lorsque nous démarrons le package, on peut constater dans les logs que le tag est bien remplacé par la valeur par défaut ici “python”, qui dans mon environnement est un alias vers Python 3.6.8 :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2019/05/image-12.png"><img class="colorbox-6201"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Python 3.6" src="https://developer.myconstellation.io/wp-content/uploads/2019/05/image_thumb-11.png" alt="Python 3.6" width="454" height="34" border="0" /></a></p>
<p>Sans changer notre cas, modifions la valeur du setting “PythonPath” depuis l’interface Web de la Console Constellation en spécifiant la valeur “C:\Python27\python.exe” :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2019/05/image-13.png"><img class="colorbox-6201"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2019/05/image_thumb-12.png" alt="image" width="454" height="240" border="0" /></a></p>
<p>Redémarrons notre package et on constatera dans les logs que notre script est maintenant exécuté par l’interpréteur Python 2.7.13 :</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2019/05/image-14.png"><img class="colorbox-6201"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="https://developer.myconstellation.io/wp-content/uploads/2019/05/image_thumb-13.png" alt="image" width="454" height="49" border="0" /></a></p>
<p align="left">Il devient alors possible de jongler entre les différentes versions des interpréteurs Python ou même les environnements virtuels depuis les settings Constellation sans devoir toucher au package lui-même.</p>
<h3>Utilisation des settings Constellation avant le “Start” et notification de mise à jour</h3>
<p>Depuis vos scripts Python pour récupérer la valeur d’un setting Constellation il faut utiliser la méthode GetSetting :</p>
<p></p><pre class="crayon-plain-tag">Constellation.GetSetting("MonSetting")</pre><p></p>
<p>Jusqu’à la version 1.8.6, on ne pouvait appeller cette méthode <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Les_bases">qu’après le “Start”</a>, mais désormais vous pouvez l’utiliser juste après l’import de la libraire Constellation, par exemple :</p>
<p></p><pre class="crayon-plain-tag">print("Initilisation")

import Constellation

demo = Constellation.GetSetting("Demo")
demo2 = Constellation.GetSetting("Demo2") or "Sebastien"

print("Setting Test = %s" % Constellation.GetSetting("test"))
print("setting Demo = %s et Demo2 %s" % (demo, demo2))

def Start():
    print("Démarrage !")

Constellation.Start(Start);</pre><p></p>
<p>Vous pouvez ainsi initialiser vos scripts en ayant accès aux settings de votre package Constellation.</p>
<p>Autre nouveauté, l’ajout de l’évènement “<em>OnSettingsUpdated</em>” vous permettant d’être notifié lorsque qu’une valeur d’un setting de votre package est mis à jour dans Constellation.</p>
<p></p><pre class="crayon-plain-tag">import Constellation

def OnSettingsUpdated():
    print("Mise à jour de mes settings depuis Constellation !!")

def Start():
    Constellation.OnSettingsUpdated = OnSettingsUpdated

Constellation.Start(Start);</pre><p></p>
<h3>Autres nouveautés</h3>
<p>Tout d’abord les <a href="/client-api/python-api/messagecallbacks-exposer-des-methodes-python/">MessageCallbacks</a> et  les<a href="/client-api/python-api/consommer-des-stateobjects-en-python/">StateObjectLinks</a>, c’est à dire les méthodes de votre code que vous déclarez pour répondre à un message ou pour suivre un StateObject sont désormais invoquées dans un thread asynchrone pour éviter de bloquer le package.</p>
<p>Ensuite le « Working Directory » (<em>os.getcwd()</em>) est maintenant le répertoire du package et non le répertoire du script Python lui-même.</p>
<p>Il y a eu une revue du mécanisme de ping entre le proxy .NET et la sandbox Python basé maintenant sur le temps CPU et non l’horloge système (afin d’éviter les problèmes liés au changement d’heure).</p>
<p>On peut également citer l’affichage de la stacktrace complète lorsqu’une exception est levée dans le dispatch d’un MessageCallback ou d’un StateObjectLink, l’ajout automatique de la section XML de configuration dans le fichier « app.config » lors de l’installation du package ou encore l’affichage des numéros de version du Proxy python et interpréteur python au démarrage des scripts.</p>
<p>Pour mettre à jour votre API Python, lancez simplement le gestionnaire de package NuGet !</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/support-python-3-et-environnements-virtuels/">Support de Python 3, des environnements virtuels et autres nouveaut&eacute;s de l&rsquo;API Python</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/blog/support-python-3-et-environnements-virtuels/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Décrire les MessagesCallbacks en Python avec la mise à jour du PythonProxy 1.8.4</title>
		<link>https://developer.myconstellation.io/blog/decrire-les-messagescallbacks-en-python-avec-la-mise-a-jour-du-pythonproxy-1-8-4/</link>
					<comments>https://developer.myconstellation.io/blog/decrire-les-messagescallbacks-en-python-avec-la-mise-a-jour-du-pythonproxy-1-8-4/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Mon, 30 Apr 2018 13:10:59 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[StateObject]]></category>
		<category><![CDATA[MessageCallback]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[PythonProxy]]></category>
		<category><![CDATA[CLI]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5954</guid>

					<description><![CDATA[<p>Passée inaperçue sur le repository Nuget, une nouvelle version 1.8.4 du PythonProxy a été publié en début d’année. Cette mise à jour de version accompagne désormais le SDK Visual Studio ainsi que les templates du Constellation Package Tools CLI depuis</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/decrire-les-messagescallbacks-en-python-avec-la-mise-a-jour-du-pythonproxy-1-8-4/">Décrire les MessagesCallbacks en Python avec la mise à jour du PythonProxy 1.8.4</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Passée inaperçue sur le repository Nuget, une <strong>nouvelle version 1.8.4 du </strong><a href="https://developer.myconstellation.io/client-api/python-api/"><strong>PythonProxy</strong></a> a été publié en début d’année.</p>
<p>Cette mise à jour de version accompagne désormais le SDK Visual Studio ainsi que les templates du <a href="https://developer.myconstellation.io/client-api/python-api/developper-avec-le-package-tools-cli/"><em>Constellation Package Tools CLI</em></a> depuis la semaine dernière.</p>
<p>Au programme de cette nouvelle version : <strong>la description des arguments des MessageCallbacks</strong> et <strong>des types de StateObjects</strong>.</p>
<p>En effet, comme <a href="/client-api/python-api/messagecallbacks-exposer-des-methodes-python/" target="_blank" rel="noopener">vous le savez</a> déjà, pour déclarer un MessageCallback en Python il suffit d’ajouter le décorateur <em>Constellation.MessageCallback()</em> :</p>
<p></p><pre class="crayon-plain-tag">@Constellation.MessageCallback()
def MultipleParameterCallback(a, b, c):
    '''
    MessageCallback with 3 parameters
    '''
    Constellation.WriteInfo("a = %s - type: %s" % (a, type(a)))
    Constellation.WriteInfo("b = %s - type: %s" % (b, type(b)))
    Constellation.WriteInfo("c = %s - type: %s" % (c, type(c)))</pre><p></p>
<p>Dans l&rsquo;exemple ci-dessus, une méthode Python avec 3 paramètres, le simple fait d&rsquo;ajouter le décorateur <em>Constellation.MessageCallback() </em>permet d&rsquo;invoquer cette méthode depuis n&rsquo;importe quel client (package ou consommateur) connecté dans notre Constellation.</p>
<p>D&rsquo;ailleurs, ce MC est également référencé dans Constellation. Nous pouvons le découvrir sur le ControlHub ou via le <a href="/constellation-platform/constellation-console/messagecallbacks-explorer/">MessageCallbacks Explorer</a> de la Console Constellation :<a href="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-71.png"><img loading="lazy" class="alignnone size-medium wp-image-2517 aligncenter colorbox-5954" src="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-71-300x172.png" alt="" width="300" height="172" srcset="https://developer.myconstellation.io/wp-content/uploads/2016/08/image-71-300x172.png 300w, https://developer.myconstellation.io/wp-content/uploads/2016/08/image-71-768x440.png 768w, https://developer.myconstellation.io/wp-content/uploads/2016/08/image-71.png 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Seulement à l&rsquo;<a href="/client-api/net-package-api/messagecallbacks/">inverse de l&rsquo;API .NET</a>, les parametres d&rsquo;une méthode Python (et les variables de manière globale) ne sont pas fortement typés comme en .NET. Autrement dit, il n&rsquo;y a rien qui indique le type des arguments de notre MessageCallback. Côté <a href="/constellation-platform/constellation-console/messagecallbacks-explorer/">MessageCallbacks Explorer</a> les arguments sont alors reconnus comme « Objects ».</p>
<p><strong>Cette mise à jour 1.8.4 permet la description des arguments</strong> en utilisant une syntaxe empruntée à S<em>phinx </em>dans les commentaires.</p>
<p>Pour cela utilisez la syntaxe suivante dans la description du MC :</p>
<p></p><pre class="crayon-plain-tag">:param &lt;type&gt; &lt;name&gt; : &lt;description&gt;</pre><p></p>
<p>Par exemple pour décrire les 3 arguments de notre exemple :</p>
<p></p><pre class="crayon-plain-tag">@Constellation.MessageCallback()
def Demo(a, b, c):
    '''
    Ceci est un exemple de MC avec 3 parametres

    :param int a: My int value
    :param bool b: My boolean value
    :param string c: My string value
    '''
    Constellation.WriteInfo("a = %s - type: %s" % (a, type(a)))
    Constellation.WriteInfo("b = %s - type: %s" % (b, type(b)))
    Constellation.WriteInfo("c = %s - type: %s" % (c, type(c)))</pre><p></p>
<p align="left">Ainsi en retournant sur le MC Explorer, chaque argument est correctement typé dans Constellation :</p>
<p style="text-align: center;" align="left"><a href="https://developer.myconstellation.io/wp-content/uploads/2018/04/image-10.png"><img loading="lazy" class="aligncenter colorbox-5954" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="Description des arguments d'un MC en Python" src="https://developer.myconstellation.io/wp-content/uploads/2018/04/image_thumb-9.png" alt="Description des arguments d'un MC en Python" width="484" height="166" border="0" /></a></p>
<p align="left">Notez que vous pouvez également<a href="/client-api/python-api/messagecallbacks-exposer-des-methodes-python/#Decrire_les_arguments_de_type_complexe"> décrire des types complexes utilisés</a> comme type de paramètre d&rsquo;entrée, <a href="/client-api/python-api/messagecallbacks-exposer-des-methodes-python/#Parametres_optionnels_avec_valeur_par_defaut">définir les paramètres qui sont optionnels</a>, ou encore <a href="/client-api/python-api/messagecallbacks-exposer-des-methodes-python/#Repondre_aux_Sagas">décrire les types de retour</a>.</p>
<p align="left">Egalement compris dans cette mise à jour la <a href="/getting-started/creez-votre-premier-package-constellation-en-python/#Publier_des_StateObjects">description des types complexe utilisés comme modèle de données de vos StateObjects</a>.</p>
<p align="left">Pour en profiter il suffit de mettre à jour le package Nuget depuis Visual Studio ou de taper la commande « <a href="/client-api/python-api/developper-avec-le-package-tools-cli/#Mise_a_jour_du_template">ctln update</a> » si vous utilisez la CLI.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/decrire-les-messagescallbacks-en-python-avec-la-mise-a-jour-du-pythonproxy-1-8-4/">Décrire les MessagesCallbacks en Python avec la mise à jour du PythonProxy 1.8.4</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/blog/decrire-les-messagescallbacks-en-python-avec-la-mise-a-jour-du-pythonproxy-1-8-4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mise à jour de l&#8217;API Python et du SDK en version 1.8.2</title>
		<link>https://developer.myconstellation.io/blog/api-python-et-sdk-version-1-8-2/</link>
					<comments>https://developer.myconstellation.io/blog/api-python-et-sdk-version-1-8-2/#respond</comments>
		
		<dc:creator><![CDATA[Sebastien Warin]]></dc:creator>
		<pubDate>Fri, 30 Jun 2017 14:26:51 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[PythonProxy]]></category>
		<category><![CDATA[Update]]></category>
		<category><![CDATA[Mise à jour]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Console]]></category>
		<guid isPermaLink="false">https://developer.myconstellation.io/?p=5145</guid>

					<description><![CDATA[<p>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 !</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/api-python-et-sdk-version-1-8-2/">Mise à jour de l&rsquo;API Python et du SDK en version 1.8.2</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>En ce début d’été plusieurs mises à jour ont été publiées cette semaine dont la <strong>nouvelle version du </strong><a href="/constellation-platform/constellation-sdk/" target="_blank" rel="noopener"><strong>SDK</strong></a><strong> 1.8.2</strong>, des <strong>mises à jour de la </strong><a href="/constellation-platform/constellation-console/" target="_blank" rel="noopener"><strong>Console</strong></a> et surtout une <strong>nouvelle version du </strong><a href="/client-api/python-api/" target="_blank" rel="noopener"><strong>PythonProxy</strong></a>.</p>
<p>Découvrons ces nouveautés en détail !</p>
<h3>PythonProxy 1.8.2 :  amélioration de l’expérience de développement des packages Python</h3>
<h4>Configuration des scripts à démarrer</h4>
<p>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.</p>
<p>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 :</p>
<p></p><pre class="crayon-plain-tag">&lt;pythonProxy xmlns="urn:Constellation.PythonProxy"&gt;
  &lt;scripts&gt;
    &lt;script filename="Scripts\Demo.py" /&gt;
    &lt;script filename="Scripts\LightSensor.py" /&gt;
    &lt;script filename="Scripts\Camera.py" /&gt;
  &lt;/scripts&gt;
&lt;/pythonProxy&gt;</pre><p></p>
<p>Sans oublier de déclarer dans la section<em> &lt;configSection&gt;</em> la ligne suivante :</p>
<p></p><pre class="crayon-plain-tag">&lt;section name="pythonProxy" type="Constellation.PythonProxy.PythonConfigurationSection, Constellation.PythonProxy, Version=1.8.0.0, Culture=neutral, PublicKeyToken=null" /&gt;</pre><p></p>
<p>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.</p>
<p>Cela offre plus de souplesse dans la conception de vos packages avec un fonctionnement beaucoup plus clair et explicit.</p>
<h4>Timeout de démarrage</h4>
<p>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é !</p>
<p>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.</p>
<p>Ce timeout peut être configuré pour chaque script avec l’attribut “<em>startupTimeout</em>” ou bien de manière globale.</p>
<p>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.</p>
<p>Par exemple :</p>
<p></p><pre class="crayon-plain-tag">&lt;pythonProxy xmlns="urn:Constellation.PythonProxy" scriptStartupTimeout="20" scriptCloseTimeout="5"&gt;
  &lt;scripts&gt;
    &lt;script filename="Scripts\Demo.py" startupTimeout="10" /&gt;
    &lt;script filename="Scripts\LightSensor.py" closeTimeout="2" /&gt;
    &lt;script filename="Scripts\Camera.py" /&gt;
  &lt;/scripts&gt;
&lt;/pythonProxy&gt;</pre><p></p>
<p>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.</p>
<p>Notez enfin que si aucune valeur n’est spécifiée (ni sur la balise <em>&lt;script&gt;</em> ni de manière globale sur la section <em>&lt;pythonProxy&gt;</em>), les valeurs par défaut sont :</p>
<ul>
<li>30 secondes pour le démarrage</li>
<li>8 secondes pour l’arrêt</li>
</ul>
<h4>Redirection de la sortie et des erreurs Python sur Constellation</h4>
<p>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.</p>
<p>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.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/06/image-2.png"><img class="colorbox-5145"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Exemple d'erreur de syntaxe redirigée dans les logs Constellation" src="https://developer.myconstellation.io/wp-content/uploads/2017/06/image_thumb-2.png" alt="Exemple d'erreur de syntaxe redirigée dans les logs Constellation" width="354" height="45" border="0" /></a></p>
<p>Avec cette nouvelle version du Python Proxy, fini le côté “Black Box” lors du démarrage de vos scripts !</p>
<h4>Surveillance de vos scripts</h4>
<p>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).</p>
<h4>Mise à niveau</h4>
<p>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.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/06/image-3.png"><img class="colorbox-5145"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Mise à jour du package Nuget PythonProxy" src="https://developer.myconstellation.io/wp-content/uploads/2017/06/image_thumb-3.png" alt="Mise à jour du package Nuget PythonProxy" width="354" height="151" border="0" /></a></p>
<p align="left">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 !</p>
<h3>Mise à jour du SDK 1.8.2</h3>
<p>Tout d&rsquo;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&rsquo;API .NET et du Python Proxy 1.8.2 décrit ci-dessus.</p>
<p>Lorsqu&rsquo;un package est publié (en local ou directement sur un serveur Constellation), l&rsquo;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.</p>
<p>Autre détail fort bien utile, lorsque vous ajoutez une icone pour votre package, c&rsquo;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&rsquo;assistant de publication du package Constellation configuera automatique la propriété « <em>Copy to Output directory</em> » sur votre icone !</p>
<p>Suite à la sortie du Python Proxy 1.8.2, le schéma de configuration XSD de la nouvelle section<em> &lt;pythonProxy&gt;</em> décrite ci-dessus sera installée de façon à pouvoir profiter de l&rsquo;IntelliSense dans Visual Studio lorsque vous éditez ce fichier.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/06/image.png"><img class="colorbox-5145"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="IntelliSense sur la section PythonProxy" src="https://developer.myconstellation.io/wp-content/uploads/2017/06/image_thumb.png" alt="IntelliSense sur la section PythonProxy" width="354" height="129" border="0" /></a></p>
<p>De plus un nouvel « Item Template » nommé « <em>Constellation Python Script</em> » a été ajouté. Il permet de créer des scripts Constellation Python avec un template de base dans vos packages.</p>
<p align="center"><a href="https://developer.myconstellation.io/wp-content/uploads/2017/06/image-1.png"><img class="colorbox-5145"  loading="lazy" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Création d'un nouveau script Constellation Python" src="https://developer.myconstellation.io/wp-content/uploads/2017/06/image_thumb-1.png" alt="Création d'un nouveau script Constellation Python" width="354" height="246" border="0" /></a></p>
<p>Dès qu&rsquo;un script Constellation Python est ajouté, Visual Studio configurera automatiquement la propriété « <em>Copy to Output directory</em> » pour inclure votre script dans le package et ajoutera la référence de ce fichier dans la section  <em>&lt;pythonProxy&gt;</em> du fichier App.config toujours de manière automatique.</p>
<h3>Autre : mise à jour de la Console et de la libraire .NET</h3>
<p>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.</p>
<p>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 (<em>OnPreShutsown</em> puis <em>OnShutdown</em>) sur les packages lancés hors sentinelle (par exemple depuis Visual Studio en phase de debug).</p>
<p>Retrouvez plus d&rsquo;information sur le <a href="/constellation-platform/changelog">changelog</a>.</p>
<p>The post <a rel="nofollow" href="https://developer.myconstellation.io/blog/api-python-et-sdk-version-1-8-2/">Mise à jour de l&rsquo;API Python et du SDK en version 1.8.2</a> appeared first on <a rel="nofollow" href="https://developer.myconstellation.io">Constellation</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://developer.myconstellation.io/blog/api-python-et-sdk-version-1-8-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Mise en cache de page à l’aide de Disk: Enhanced 

Served from: developer.myconstellation.io @ 2026-01-22 03:45:43 by W3 Total Cache
-->