<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Python on Yourlabs Business Service</title>
		<link>https://yourlabs.fr/tags/python/</link>
		<description>Recent content in Python on Yourlabs Business Service</description>
		<generator>Hugo</generator>
		<language>fr</language>
		
			<managingEditor>contact@yourlabs.org (Yourlabs)</managingEditor>
		
		
			<webMaster>contact@yourlabs.org (Yourlabs)</webMaster>
		
		
		
			<lastBuildDate>Thu, 18 Jun 2026 12:30:00 +0000</lastBuildDate>
		
			<atom:link href="https://yourlabs.fr/tags/python/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>django-autocomplete-light v4 et v5</title>
				<link>https://yourlabs.fr/posts/2026-06-18-django-autocomplete-light-v4-v5/</link>
				<pubDate>Thu, 18 Jun 2026 12:30:00 +0000</pubDate><author>contact@yourlabs.org (Yourlabs)</author>
				<guid>https://yourlabs.fr/posts/2026-06-18-django-autocomplete-light-v4-v5/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/yourlabs/django-autocomplete-light&#34;&gt;django-autocomplete-light&lt;/a&gt;&#xA;a deux lignes de versions actuelles avec des rôles différents : v4 existe pour&#xA;fournir le chemin de mise à niveau documenté depuis v3 et à travers les&#xA;versions Django prises en charge, tandis que v5 est l&amp;rsquo;endroit où nous pouvons&#xA;prendre les ruptures de compatibilité arrière plus importantes qui débloquent&#xA;la prochaine API.&lt;/p&gt;&#xA;&lt;p&gt;Cet article clarifie à quoi sert chaque ligne, laquelle vous devriez installer,&#xA;et où trouver la documentation de mise à niveau.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Tool calling ipex-llm sur Intel Arc : guide pratique</title>
				<link>https://yourlabs.fr/posts/2025-11-13-docker-ipex-vllm-intel-arc-arch-linux-tool-calling/</link>
				<pubDate>Thu, 13 Nov 2025 13:37:00 +0000</pubDate><author>contact@yourlabs.org (Yourlabs)</author>
				<guid>https://yourlabs.fr/posts/2025-11-13-docker-ipex-vllm-intel-arc-arch-linux-tool-calling/</guid>
				<description>&lt;p&gt;Ce guide montre comment lancer un conteneur Docker Intel ipex-llm, démarrer un&#xA;serveur API vLLM configuré pour le modèle Qwen3-8B avec des capacités de tool&#xA;calling, interroger le serveur avec curl, et interpréter une réponse d&amp;rsquo;exemple.&#xA;Ensuite, nous développerons une boucle d&amp;rsquo;agent simple avec tool calling en&#xA;utilisant l&amp;rsquo;excellente bibliothèque litellm.&lt;/p&gt;&#xA;&lt;p&gt;Cette configuration permet d&amp;rsquo;exécuter de grands modèles de langage (LLMs) sur&#xA;des XPUs Intel avec des fonctionnalités comme le choix automatique d&amp;rsquo;outils et&#xA;le parsing du raisonnement. Toutes les commandes supposent un environnement&#xA;Linux avec Docker installé et un accès au matériel Intel, par exemple via&#xA;/dev/dri.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Tutoriel de développement de plugins d&#39;action Ansible personnalisés</title>
				<link>https://yourlabs.fr/posts/2025-11-05-ansible-custom-action-plugin-development-tutorial/</link>
				<pubDate>Wed, 05 Nov 2025 13:37:00 +0000</pubDate><author>contact@yourlabs.org (Yourlabs)</author>
				<guid>https://yourlabs.fr/posts/2025-11-05-ansible-custom-action-plugin-development-tutorial/</guid>
				<description>&lt;p&gt;Quand votre logique d&amp;rsquo;orchestration devient compliquée, vous pouvez vous&#xA;retrouver avec beaucoup de code YAML difficilement lisible, et ce n&amp;rsquo;est pas&#xA;très agréable à maintenir, par exemple quand vous mutez des variables avec des&#xA;combinaisons de filtres de templates, &lt;code&gt;set_fact&lt;/code&gt; et autres. La solution est de&#xA;passer le code logique de YAML à Python, qui est un vrai langage de&#xA;programmation.&lt;/p&gt;&#xA;&lt;p&gt;Comme vous le savez peut-être : les &lt;strong&gt;modules&lt;/strong&gt; Ansible sont téléversés sur&#xA;l&amp;rsquo;hôte cible, exécutés là-bas, puis leur résultat est renvoyé à Ansible.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Développement de plugins d&#39;action Ansible</title>
				<link>https://yourlabs.fr/posts/2024-03-15-ansible-action-plugin-development/</link>
				<pubDate>Wed, 13 Mar 2024 13:37:00 +0000</pubDate><author>contact@yourlabs.org (Yourlabs)</author>
				<guid>https://yourlabs.fr/posts/2024-03-15-ansible-action-plugin-development/</guid>
				<description>&lt;p&gt;Les plugins d&amp;rsquo;action Ansible sont la meilleure façon de refactorer des rôles&#xA;Ansible complexes et d&amp;rsquo;y encapsuler de la logique DevOps avancée. Mais la&#xA;&lt;a href=&#34;https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html#action-plugins&#34;&gt;documentation officielle&lt;/a&gt;&#xA;est un peu légère, et conclut par :&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Pour des exemples pratiques de plugins d&amp;rsquo;action, consultez le code source des plugins d&amp;rsquo;action inclus avec Ansible Core&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;J&amp;rsquo;ai passé 3 ans à faire de la rétro-ingénierie des plugins d&amp;rsquo;action Ansible et&#xA;à écrire les miens, en faisant des choses qui ressemblent vraiment à de la&#xA;magie, y compris de la sortie animée, qui s&amp;rsquo;avère fonctionner même dans&#xA;GitLab-CI, qui prend en charge le caractère backspace.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Le patron de conception superfixture avec pytest</title>
				<link>https://yourlabs.fr/posts/2024-03-13-pytest-superfixture-design-pattern/</link>
				<pubDate>Wed, 13 Mar 2024 13:37:00 +0000</pubDate><author>contact@yourlabs.org (Yourlabs)</author>
				<guid>https://yourlabs.fr/posts/2024-03-13-pytest-superfixture-design-pattern/</guid>
				<description>&lt;p&gt;pytest est un excellent framework de test Python qui repart d&amp;rsquo;une page blanche&#xA;au lieu de suivre le patron xUnit.&lt;/p&gt;&#xA;&lt;p&gt;Au lieu de :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;YourTestSuite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unittest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TestCase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setUp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some_stuff&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;YourThing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some_stuff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertFalse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some_stuff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On fait :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pytest.fixture&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;some_stuff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;YourThing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some_stuff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;some_stuff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_stuff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Quelques avantages méritent d&amp;rsquo;être notés :&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;la fixture n&amp;rsquo;est pas créée dans chaque test&lt;/li&gt;&#xA;&lt;li&gt;on gagne aussi un niveau d&amp;rsquo;indentation, ce qui est plutôt cool !&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Cependant, que faire avec du code complexe où l&amp;rsquo;on teste la colle entre plus&#xA;d&amp;rsquo;une douzaine de fixtures ?&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ryzom : écrire du CSS et des WebComponents en Python</title>
				<link>https://yourlabs.fr/posts/2021-03-23-write-javascript-in-python/</link>
				<pubDate>Tue, 23 Mar 2021 13:37:00 +0000</pubDate><author>contact@yourlabs.org (Yourlabs)</author>
				<guid>https://yourlabs.fr/posts/2021-03-23-write-javascript-in-python/</guid>
				<description>&lt;p&gt;Cet article fait suite au précédent, &lt;a href=&#34;https://yourlabs.fr/posts/2021-02-27-replacing-templates-with-python-components/&#34;&gt;Replacing templates with Python&#xA;components&lt;/a&gt;.&#xA;Assurez-vous de l&amp;rsquo;avoir lu avant de lire celui-ci !&lt;/p&gt;&#xA;&lt;h2 id=&#34;rappel-des-bases-html&#34;&gt;Rappel des bases HTML&lt;/h2&gt;&#xA;&lt;p&gt;Cette section rappelle comment nous pouvions déjà générer du HTML avec une API&#xA;Python élégante.&lt;/p&gt;&#xA;&lt;h3 id=&#34;contenu&#34;&gt;Contenu&lt;/h3&gt;&#xA;&lt;p&gt;Les composants sont des classes Python chargées de rendre une balise HTML. À ce&#xA;titre, elles peuvent avoir du contenu, c&amp;rsquo;est-à-dire des enfants :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;ryzom.html&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;yourdiv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;some&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;P&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;yourdiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;div&amp;gt;some &amp;lt;p&amp;gt;content&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La plupart des composants devraient s&amp;rsquo;instancier avec &lt;code&gt;*content&lt;/code&gt; comme premier&#xA;argument, et vous pouvez y passer autant d&amp;rsquo;enfants que nécessaire. Ils vont dans&#xA;&lt;code&gt;self.content&lt;/code&gt;, que vous pouvez aussi modifier après instanciation.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
