Utilisation avancée de la librairie Python typée

Utilisation avancée de la librairie Python typée

Il y a neuf mois, nous vous présentions une nouvelle librairie de programmation Yoctopuce pour Python, entièrement réécrite pour profiter des fonctionalités plus récentes Python, en particulier le typage et les coroutines asynchrones. Nous avons eu l'occasion de la tester sur plusieurs projets, où elle a donnée entière satisfaction, mais dans le cadre desquels nous nous sommes rendu compte que quelques informations complémentaires pourraient être utiles. Les voici donc...

Intégration dans une application asynchrone

L'exemple de la librairie qui démontre l'utilisation de l'API asynchrone part du principe qu'il peut lancer lui-même la boucle principale du programme, à l'aide de la commande classique de Python:

asyncio.run(main(), debug=False)


Quand on doit ajouter un plug-in à une application asynchrone existante, ce n'est en général pas le même scénario: la boucle d'évaluation asynchrone a déjà été lancée par l'application, et il faut s'y intégrer.

Pour une lecture directe de capteur ou pour actionner une sortie en réponse à un callback de l'application, il suffit en général de faire un simple appel à notre librairie avec await. Par contre, si vous vouler pourvoir réagir aux événements inattendus (plug/unplug ou valeurs notifiées), vous avez probablement intérêt à créer une nouvelle tâche asynchrone indépendante lors de l'initialisation de votre plug-in, pour gérer les événements et appeller périodiquement YAPI.UpdateDeviceList():

async def handleAsyncEvents():
        errmsg: YRefParam = YRefParam()
        while True:
                await YAPI.Sleep(3000, errmsg)
                await YAPI.UpdateDeviceList(errmsg)

async def setup():
        asyncio.get_running_loop().create_task(handleAsyncEvents)



Par ailleurs, pour faciliter l'utilisation de notre librairie en mode asynchrone, nous avons complété la documentation de référence interactive HTML pour y intégrer les prototypes des deux API: la version standard, et la version asynchrone.

Intégration sans PyPI

Notre librairie n'a aucune dépendance envers des librairies tierces: elle est entièrement constuite sur les classes de bases de Python. Donc si vous désirez garder un contrôle accru sur le code, il est aisé de l'intégrer dans votre projet en ne copiant que le minimum de fichiers nécessaires. En pratique, cela revient à ajouter à votre arborescence de code source un sous-répertoire yoctolib, incluant les fichiers de base (yocto_api) et les fichiers les fonctions spécifiques que vous utilisez (par exemple yocto_relay pour la classe YRelay):

yoctolib/
    yocto_api.py
    yocto_api_aio.py
    yocto_relay.py
    yocto_relay_aio.py
    # etc.


Aucun autre fichier n'est nécessaire. Par contre, notez bien que même si vous n'utilisez pas la nouvelle API asynchrone, l'inclusion des fichiers _aio est indispensable, car ils sont utilisés en interne par l'API standard. Par contre, si vous travaillez directement avec l'API asynchrone, vous n'avez pas besoin des fichiers offrant l'API standard.

Toujours en bêta

Bien que cette librairie soit maintenant entièrement stabilisée et que ses fonctionalités soient équivalentes à notre librairie officielle TypeScript par exemple, nous avons choisi de la garder en Bêta tant qu'elle n'intègrerait pas toutes les fonctionalités de la librairie Python originale. Il ne lui manque plus que le support USB natif, sans devoir lancer VirtualHub, que nous comptons ajouter mais pour lequel il faudra encore un peu de patience...

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.