Je viens de faire un gros travail ce week-end pour simplifier DuniterPy.
A ma connaissance, personne n’utilise la puissance d’aiohttp
qui permet de faire des millions de requêtes concurrentes. Pour accéder à l’api de Duniter, ça n’a pas de sens.
De plus, aiohttp
oblige à taguer toutes les fonctions qui l’utilise avec les mots clefs async
/await
. async
à la déclaration de la fonction, await
à son appel.
Ainsi, les exemples sont difficiles à comprendre, surtout quand on débute en python, et nécessitent l’utilisation d’une boucle d’événement pour lancer les fonctions asynchrones. C’est une contrainte forte pour l’intégration de DuniterPy dans de petits scripts qui se veulent légers.
aiohttp
est aussi utilisé dans Sakia et soulève des problèmes supplémentaires. Sakia utilise le cadre d’application Qt,
et celui-ci est asynchrone de-facto, avec sa propre boucle d’évènement. Pour pouvoir utiliser aiohttp
avec Qt, on doit installer une rustine, squamash
qui va synchroniser les deux boucles !
De plus, asyncio
est connu pour sa très mauvaise gestion des erreurs. Les exceptions qui se produisent au sein de asyncio ne donne pas d’informations suffisantes pour tracer les bugs. Et nous avons un bug critique dans Sakia avec asyncio, mais sans informations sur sa cause il reste impossible à corriger.
Sakia va donc utiliser les fonctions asynchrone de Qt (Qt concurrent) qui sont parfaitement intégrées au cadre d’application. On pourra alors retirer aiohttp
et tous les tags async/await
. Mais avant cela il fallait aussi que DuniterPy soit débarrassé de aiohttp
et asyncio
.
Avec une bibliothèque neutre (urllib
et websocket
sont utilisés), vous pouvez choisir la technologie que vous désirez pour faire des requêtes en parallèle (thread
, asyncio
, trio
, etc). Un exemple est fourni : request_data_async.py
qui permet de faire du asyncio
comme avant. Il n’y a donc pas de régression.
Je vous met ici la version 1.0.0 alpha.
duniterpy-1.0.0a0-py3-none-any.whl (87,8 Ko)
Installation dans un environnement virtuel python :
pip install duniterpy-1.0.0a0-py3-none-any.whl
Installation dans votre compte utilisateur :
pip install --user duniterpy-1.0.0a0-py3-none-any.whl
Pour avoir les exemples à jour sans asyncio
, il faut cloner la branche remove_asyncio
du dépôt :
git clone --branch remove_asyncio https://git.duniter.org/clients/python/duniterpy.git
Ou pour avoir seulement la branche concernée :
git clone --branch remove_asyncio --single-branch https://git.duniter.org/clients/python/duniterpy.git
@moul, @matograine, @tuxmain, @poka, et ceux que j’oublie, merci de tester les exemples et de me faire des retours.