Sakia 0.50.x est sortie!

Sakia est de retour après une longue absence.

Changements de la version 0.50.0 :

  • Mise à jour de la dépendance DuniterPy en version 0.56.0
  • Correctifs pour tous les bugs détectés
  • Ajout de l’icône Sakia dans la barre d’outils
  • Suppression du menu « search direct connections »
  • Ajout d’un bouton « rafraîchir » dans l’historique des transactions
  • Correctif du système de traduction
  • Mise à jour de la traduction française

Au total, 200 modifications de code réparties en 68 commits. 1 mois de travail à plein temps.

Changement de la version 0.50.1 :

  • Correctifs sur le build du package pip
  • Correctif sur le script release.sh

Pour info, à la création d’un compte Sakia, seul le dernier mois de transaction est téléchargé. Si vous désirez voir plus de transactions, modifiez les dates, puis cliquez sur le bouton de rafraîchissement qui va télécharger les transactions pour la période. Ce n’est pas encore automatique et il manque un indicateur de chargement.

N’hésitez pas à me faire des retours ici. Seuls les bugs seront pris en compte. Pour les améliorations, on verra plus tard.

L’installation se fera uniquement via PyPI.

pip3 install sakia --user --upgrade

Important : si vous aviez déjà une ancienne version de Sakia, il faut la désinstaller et surtout supprimer le dossier ~/.config/sakia !

[EDIT]
J’ai supprimé le package 0.50.0 car il ne fonctionne pas. Grâce aux correctifs de @moul, une version 0.50.1 va bientôt arriver et sera fonctionnelle. Merci de votre patience.

C’est prêt ! Testé et fonctionnel :

7 J'aimes
pip3 install sakia --user --upgrade

Le fichier de licence n’est pas intégré dans la wheel :

sakia --version
Traceback (most recent call last):
  File "/home/moul/.local/bin/sakia", line 6, in <module>
    from sakia.main import main
  File "/home/moul/.local/lib/python3.7/site-packages/sakia/main.py", line 15, in <module>
    from sakia.app import Application
  File "/home/moul/.local/lib/python3.7/site-packages/sakia/app.py", line 10, in <module>
    from .options import SakiaOptions
  File "/home/moul/.local/lib/python3.7/site-packages/sakia/options.py", line 3, in <module>
    from sakia.constants import ROOT_SERVERS
  File "/home/moul/.local/lib/python3.7/site-packages/sakia/constants.py", line 12, in <module>
    os.path.join(os.path.dirname(__file__), "g1_license.html"), "r", encoding="utf-8"
FileNotFoundError: [Errno 2] No such file or directory: '/home/moul/.local/lib/python3.7/site-packages/sakia/g1_license.html'

J’ai généré le fichier html de licence, l’ai copié au bon endroit, et :

Traceback (most recent call last):
  File "/home/moul/.local/bin/sakia", line 6, in <module>
    from sakia.main import main
  File "/home/moul/.local/lib/python3.7/site-packages/sakia/main.py", line 15, in <module>
    from sakia.app import Application
  File "/home/moul/.local/lib/python3.7/site-packages/sakia/app.py", line 12, in <module>
    from sakia.services import (
  File "/home/moul/.local/lib/python3.7/site-packages/sakia/services/__init__.py", line 1, in <module>
    from .network import NetworkService
  File "/home/moul/.local/lib/python3.7/site-packages/sakia/services/network.py", line 293
    asyncio.async(self.check_ws2p_heads())
                ^
SyntaxError: invalid syntax

asyncio.async() semble être déprécier et ne plus exister dans Py 3.7. Faut utiliser ensure_future().

Hop, première contribution à Sakia renaissance : MR!776.

3 J'aimes

Installé, et lancé !

Avec Debian 10 « Buster », gestionnaire de fenêtre i3.

  • il faut supprimer le dossier .config/sakia d’une installation précédente
  • il ne faut rien faire tant que la fenêtre « connecting to the network » est apparente
  • la première fenêtre ne demande de créer/enregistrer un compte membre. Est-ce bien nécessaire ?

edit1 : d’ailleurs, je n’arrive pas à créer ce compte membre, rien ne se passe quand je clique sur « Export revocation document to continue ».

Le log de mon shell répète :

ERROR:sakia:Could not parse field HeadV1

edit2 : Sakia s’ouvre quand je ferme la fenêtre de création de compte membre.

edit3 : En fait, Sakia est en train de synchroniser. Je ne suis pas sûr que ça se soit lancé tout seul, j’ai cliqué sur le bouton « recycler » (deux flèches en cercle). Mais cette synchro est indiquée tout en bas et peu visible.

2 J'aimes

C’est normal, Sakia (DuniterPy en fait) n’est pas compatible avec la dernière version du protocole qu’utilise dunitrust. Ce sera corrigé asap.

La seule erreur récurrente dans le terminal que je n’arrive pas à cerner c’est des sessions de aiohttp non fermées. Si quelqu’un trouve y aura un bounty ! :grin:

1 J'aime

J’ai une erreur dès le lancement : :confused: (avec sakia 0.50.1 via pip, toutes les deps à jour)

Message d'erreur
ERROR:root:Task exception was never retrieved
future: <Task finished name='Task-4' coro=<NetworkService.discovery_loop() done, defined at /usr/lib/python3.8/site-packages/sakia/services/network.py:222> exception=RuntimeError('no running event loop')>
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/sakia/services/network.py", line 229, in discovery_loop
    await asyncio.sleep(1)
  File "/usr/lib/python3.8/asyncio/tasks.py", line 637, in sleep
    loop = events.get_running_loop()
RuntimeError: no running event loop
ERROR:root:Task exception was never retrieved
future: <Task finished name='Task-5' coro=<NetworkService.refresh_once() done, defined at /usr/lib/python3.8/site-packages/sakia/services/network.py:175> exception=RuntimeError('no running event loop')>
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/sakia/services/network.py", line 178, in refresh_once
    await asyncio.sleep(1)
  File "/usr/lib/python3.8/asyncio/tasks.py", line 637, in sleep
    loop = events.get_running_loop()
RuntimeError: no running event loop
ERROR:root:An unhandled exception occured
Traceback (most recent call last):
  File "/usr/bin/sakia", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.8/site-packages/sakia/main.py", line 160, in main
    loop.run_until_complete(app.initialize_blockchain())
  File "/usr/lib/python3.8/site-packages/quamash/__init__.py", line 289, in run_until_complete
    return future.result()
  File "/usr/lib/python3.8/site-packages/sakia/app.py", line 225, in initialize_blockchain
    await asyncio.sleep(2)  # Give time for the network to connect to nodes
  File "/usr/lib/python3.8/asyncio/tasks.py", line 637, in sleep
    loop = events.get_running_loop()
RuntimeError: no running event loop

Ça vient de chez moi ou j’ouvre un ticket ?

Je ne vois pas ce qui peut causer ça, peux-t-être un blocage réseau non géré. Je veux bien un ticket. J’essaierai de le reproduire.

J’ai oublié les options de Sakia !

Pour avoir les logs de debug :

sakia -d

Pour travailler sur la g1-test :

sakia --currency g1-test

@tuxmain, peux-tu relancer Sakia avec l’option de debug pour avoir le log qui précède le crash ?

@vit je viens d’installer sakia , et je n’arrive même pas a le lancer :confused:

$ sakia
Traceback (most recent call last):
  File "/home/elois/.pyenv/versions/3.7.5/bin/sakia", line 6, in <module>
    from sakia.main import main
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/sakia/main.py", line 15, in <module>
    from sakia.app import Application
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/sakia/app.py", line 20, in <module>
    from sakia.services import (
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/sakia/services/__init__.py", line 4, in <module>
    from .documents import DocumentsService
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/sakia/services/documents.py", line 23, in <module>
    from sakia.data.processors import (
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/sakia/data/processors/__init__.py", line 1, in <module>
    from .nodes import NodesProcessor
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/sakia/data/processors/nodes.py", line 2, in <module>
    import sqlite3
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

Il doit surement manquer le paquet sqlite3 sur ton système.
C’est pas très bien documenté à ce que j’ai pu trouver :

Pas de documentation claire pour une installation utilisateur.
Pour les développeurs c’est plus fournie, et ça parle de libsqlite3-dev.

Je sais lequel des deux paquets est manquant. Mais, ça serait dommage d’avoir besoin d’un paquet -dev pour de l’utilisation.

Attention, oui, rien n’est à jour dans les docs. Il faut que je fasse des installations pip dans un containeur pour voir ce qu’il manque et tout remettre à plat.

@moul a raison, la doc la plus fiable est celle pour les devs.

Quand tu installes un python avec Pyenv, il est compilé je crois et tu dois avoir sur ton système ssl-dev et sqlite3-dev pour qu’il inclut les modules python correspondants.

Tu devras sans doute supprimer et ré-installer la version python dans Pyenv que tu souhaites pour qu’elle inclut les modules sqlite3 et ssl.

1 J'aime

Je pense qu’Éloïs a installé avec pip, pas dans un environnement Python.
La distribution de Sakia se faisait via un binaire.
Ça devrait expliquer pourquoi la documentation d’installation pour l’utilisateur est délaissée.

je ne suis pas bien familier de python donc j’ai probablement oublié des trucs

j’ai installé sakia avec pip3 sur mon ubuntu 19.04.
puis lancé la commande « sakia » sans mon terminal zsh.
j’ai eu une popup qui disait que ça se connectait au réseau avec un bouton ok.
j’ai cliqué sur OK et boum, fin du monde!

une autre popup me propose de faire un rapport d’erreur sur github, a une adresse 404 (le dépot a du déménager)

et voici le rapport d’erreur:

An unhandled exception occured

----
Traceback (most recent call last):

File « /home/tykayn/.local/bin/sakia », line 10, in
sys.exit(main())

File « /home/tykayn/.local/lib/python3.7/site-packages/sakia/main.py », line 160, in main
loop.run_until_complete(app.initialize_blockchain())

File « /home/tykayn/.local/lib/python3.7/site-packages/quamash/init.py », line 286, in run_until_complete
raise RuntimeError(‹ Event loop stopped before Future completed. ›)

RuntimeError: Event loop stopped before Future completed.

edit: si je ne clique pas sur le bouton OK dans la fenêtre où ça parle de raccord réseau, ça ne plante pas et je vois ensuite la fenêtre qui propose la création de compte :smiley:

J’ai donc installé le paquet debian libsqlite3-dev et recompilé python (via pyenv) et cela a effectivement résolu le problème, mais si je clique sur le bouton ok de la fenêtre « connecting to the network », sakia plante :

$ sakia
[...]
ERROR:root:An unhandled exception occured
Traceback (most recent call last):
  File "/home/elois/.pyenv/versions/3.7.5/bin/sakia", line 10, in <module>
    sys.exit(main())
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/sakia/main.py", line 160, in main
    loop.run_until_complete(app.initialize_blockchain())
  File "/home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/quamash/__init__.py", line 286, in run_until_complete
    raise RuntimeError('Event loop stopped before Future completed.')
RuntimeError: Event loop stopped before Future completed.
ERROR:root:Task was destroyed but it is pending!
task: <Task pending coro=<NetworkService.discovery_loop() running at /home/elois/.pyenv/versions/3.7.5/lib/python3.7/site-packages/sakia/services/network.py:229> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7f5edc0803d0>()]>>

Si j’attends sans rien faire, comme le recommande @matograine, la 1ère fenêtre me demande aussi de créer/enregistrer un compte membre, je trouve ça pas logique perso.
Si j’enregistre mon comte membre et je que clique sur le bouton pour récupérer mon document de révocation, rien ne se passe, et si je ferme la fenêtre, la seulement la fenêtre réseau de sakia apparaît.

Il serait préférable d’afficher directement la fenêtre réseau et d’avoir un bouton sur cette dernière qui permette d’enregistrer un compte, par clé publique uniquement, les credentials ne devraient être demandés que lors de l’exécution explicite d’une action utilisateur nécessitant sa signature (publication d’un document sur le réseau).

2 J'aimes

Je suis entièrement d’accord !

Tout cela va être modifié. Mais plus tard.

Objectif numéro 1, correctifs des bugs.

Je vais quand même voir à skipper très rapidement la proposition de créer un compte membre qui n’est pas du tout appropriée, avec notre expérience actuelle.

Vous êtes 3 à subir un crash si vous cliquez sur ok sur la fenêtre de connexion. Ce sera ma première enquête.

@elois, dans le menu à droite, dans Ajouter un compte Sakia, le dernier bouton en bas permet de créer un compte Sakia juste avec la clef publique. Je ne me suis servi que de ça à la fin tellement c’est pratique ! Voir effectivement si on garde les autres méthodes, sauf intérêt pour techniciens.

3 J'aimes

J’ai mis à jour l’issue avec -d.

1 J'aime

Les messages d’erreur ne révèlent rien, malheureusement. Essaie de vérifier sur le guide d’installation que je viens de publier si rien ne manque sur ton système.

Tout est à installé, à jour. J’ai réessayé avec --user et obtenu le même résultat. Peut-être que j’ai des version trop récentes, est-ce que quelqu’un l’a déjà fait tourner sous Arch ?

Sakia 0.50.2 est sorti !

Cette version corrige les bugs constatés sur la version précédente.

Elle améliore également l’expérience utilisateur au premier lancement :

  • Apparition de la fenêtre de connexion réseau. On peut quitter l’application en fermant la fenêtre ou en cliquant sur Cancel. (fenêtre toujours en anglais pour l’instant).
  • La fenêtre qui propose la création d’un compte sakia affiche un menu avec une création rapide par clef publique en tête du menu. La création d’un compte au lancement est optionnelle : fermer la fenêtre et sakia se lance sur la vue réseau par défaut.
  • Les conseils d’installation (bibliothèques systèmes nécessaires) et les options de la ligne de commande ont été ajoutés au README.md.
  • Un fichier CHANGELOG.md a été ajouté au projet.
5 J'aimes

arf… c’est la compet’ entre silkaj et sakia niveau version de duniterpy :s

sakia 0.50.2 has requirement duniterpy==0.56.0, but you'll have duniterpy 0.55.1 which is incompatible.
Installing collected packages: pyaes, duniterpy, Click, tabulate
Found existing installation: duniterpy 0.56.0
    Uninstalling duniterpy-0.56.0:
      Successfully uninstalled duniterpy-0.56.0
Successfully installed Click-7.1.1 duniterpy-0.55.1 pyaes-1.6.1 tabulate-0.8.6

et puis :

pafzedog@Zorglub:~$ sudo pip3 check
launchpadlib 1.10.7 requires testresources, which is not installed.
sakia 0.50.2 has requirement duniterpy==0.56.0, but you have duniterpy 0.55.1.

:slight_smile: il ne devrait pas y avoir de conflit. Pip gère et peu avoir plusieurs paquets python installés en parallèles.

Par contre, je te déconseille d’installer en root, car ça écrase les paquets Python installé par le gestionnaire de paquet de ton système. Je te suggère pip3 install sakia/silkaj --user qui l’installe juste pour ton utilisateur Unix dans $HOME/.local/.

3 J'aimes