Justement, je suis en train de me former à Python pour développer une nouvelle version de la wotmap. La bibliothèque Python igraph va me permettre d’interroger un noeud duniter local pour en extraire les membres et les certifications pour ensuite calculer les stats de la wot (position des noeuds en fonction de différents layouts, centralités, communautés, etc.). Ce que je fais actuellement en PHP mais sans les calculs qui sont actuellement effectués par le navigateur. Là, tout se fera côté serveur et SigmaJS affichera la wot directement, sans attendre. Je sais que @tuxmain aussi maîtrise Python. J’espère que je pourrai compter sur un peu d’aide si j’en aurai besoin Du coup, je me demande si ça pourrait pas s’intégrer dans ta bibliothèque ? Bravo pour ce que tu as fait @vit !
Merci !
Duniterpy va te permettre de récupérer les infos de duniter, puis tu utiliseras igraph pour construire un graph avec.
Pour que Duniterpy reste une bibliothèque légère, je n’envisage pas d’inclure de la construction de graph dedans.
Il vaut mieux respecter le principe de séparation des responsabilités
Bon, j’ai besoin d’éclaircissements pour l’intégration de la partie authentification/cryptographie de DuniterPy dans Silkaj.
En gros, il y a trois types d’authentifications dans Silkaj : scrypt (salt, password), seed (stockés dans les authfile
) et (E)WIF.
J’ai réussi l’intégration Scrypt. Par contre, je n’arrive pas avec la chaîne de caractère stockée dans le fichier authfile
.
Il s’agit d’une clé modifiée en hexadécimal dont je n’arrive pas à transformer dans la version originale pour que ça soit accepté par DuniterPy.
Je rentre pas trop dans le détail ici, mais on peut en discuter de manière plus approfondie.
Pour références les fichiers silkaj : auth.py et crypto_tools.
Dans les exemples, pour faire vite, j’utilise la fonction native de la libnacl SigningKey.save()
.
Ça me sauve un “truc” dans un fichier, mais j’ai oublié l’exemple de chargement de ce fichier.
Je vais retravailler ça et te tenir au courant.
Pour le format WIF, c’est dans les issues, à faire…
Ok, merci du tip, j’ai réussi à sauvegarder un fichier, à le lire avec libnacl.utils.load_key()
, puis à utiliser son contenu avec succès.
Nouvelle version de Duniterpy 0.52.0
Changelog
- Refactor documents Identity and Revocation in their own module - Break BC !
- Add PubSec, Seedhex, WIF and EWIF file authentication (import/export) - Break BC !
- Simpler certification example.
- Simpler transaction example.
Merci à @moul pour sa contribution au code !
Documentation html temporairement sur mon site :
Je vais bientôt sortir la prochaine release de Duniterpy. Ce week-end je pense.
@moul et @tuxmain, si vous avez des besoins « urgents » avant cette sortie, dites le moi.
Nouvelle version de Duniterpy 0.53.0
Cette version apporte le support des Ascii Armor Messages, c’est à dire que vous pouvez chiffrer/signer des messages avec vos clefs Duniter pour communiquer par courriel ou autre.
Attention, cette version brise la retro-compatibilité avec les précédentes ! Regardez les commits pour vous faire une idée, il sont signalés par la mention (Break BC).
Changelog
- Add Ascii Armor Messages support https://git.duniter.org/clients/python/duniterpy/issues/78
- Fix decrypt binary message not supporting binary data (thanks @tuxmain) https://git.duniter.org/clients/python/duniterpy/issues/74
Documentation temporairement sur mon site :
http://vit.free.fr/duniterpy/duniterpy.key.html#module-duniterpy.key.ascii_armor
Pour info, cette modification a cassé Silkaj lors de l’importation de ScryptParams
:
Voici mon correctif :
--- a/silkaj/auth.py
+++ b/silkaj/auth.py
@@ -21,7 +21,7 @@ from getpass import getpass
from pathlib import Path
from re import compile, search
from duniterpy.key import SigningKey
-from duniterpy.key import ScryptParams
+from duniterpy.key.scrypt_params import ScryptParams
Du coup, je vais figer la version de DuniterPy :
Je sais pas pour quelle raison as-tu modifié cette ligne. C’est un ~breaking change~ mineur.
Je sais pas ce que vous en pensez Mais, sachez que Silkaj va s’en prémunir
Mea Culpa !
D’habitude, quand je brise la retro compatibilité, je rajoute (Break BC) dans le titre du commit… Là j’ai oublié. Désolé.
Je te conseille effectivement de figer ta version de duniterpy tant que tu ne veux pas intégrer de nouvelles fonctionnalités ou récupérer une correction de bug. Car la bibliothèque est en version 0.x.x, donc l’architecture public finale n’est pas encore figée.
Le commit que tu pointes du doigt est une phase de transition pour la classe ScryptParams
, qui a encore évoluée dans les commits suivant. Le problème était double en terme d’architecture :
- Une classe
ScrypParams
utilisée par plusieurs modules mais déclarée dans un des modules : je l’ai déplacée dans son propre module. - Les valeurs par défaut de cette classe étaient en dur dans plusieurs modules. Je les ai placées dans un nouveau module constants.py dédié aux constantes du package
key
.
Je vais éditer mon post pour signaler le “Break BC”.
[Edit]
Pour ton problème d’import, je pense qu’on peut retrouver la compatibilité en ajoutant une ligne du genre from scrypt_params import ScriptParams
dans le __init__.py
du package key
. Je verrai ça pour la prochaine release.
v0.54.0 (5th May 2019)
Code/tests
- Fix OutputSource and InputSource from_inline() regex matching
- Transaction document: tests and code: drop versions 2 and 3 management
- Block document: code: drop vensions 2 and 3 management
- Block document: Upgrade blocks to v11 and TX to v10
- Add OutputSource.inline_condition() method
- output conditions: fix ‹ parser › variables default definition
- output conditions: add token() and compose() tests
Other
- CI: Do not trigger build, tests, type check on modification of non-relevant files
- Makefile: use python3 module to run tests and type check
- Add coveralls as dev dependency
- setup.py: add classifiers: Python versions, Intended Audience
- Add CHANGELOG.md from v0.53.1
v0.53.1 (18th April 2019)
- Implement equality
__eq__()
and__hash__()
methods for InputSource and OutputSource classes
v0.54.1 (9th May 2019)
-
Transaction
: add eq() and hash() methods - Transaction Unlock parameters: add eq() and hash() methods
- Transaction: add ‘time’ variable for read and write but not for doc generation
- output conditions: add eq() and hash() methods
- test transaction equality at all levels
[EDIT] ATTENTION : cette version publiée est incomplète et non fonctionnelle ! Attendre la 0.55.1 !
v0.55.0 (18th July 2019)
Code
- Refactor request
api.ws2p.heads
inapi.bma.network.ws2p_heads
(BMA command to get ws2p heads) - Fix bug in PubSec v1 secret key length check while loading
Checks
Pylint
- Add Pylint as a dev dependency to check code validity
- Add
pylint
command to theMakefile
- #91, !65: Apply Pylint on the code
Black
- #54: Add Black as dev dependency to format the code (not PEP8 compliant)
- Add
format
andcheck-format
commands to theMakeFile
- !63: Format the code with Black
Other
-
Makefile
:check
command formypy
,pylint
, andcheck-format
checks -
#94: Apply Mypy, Pylint and Black on
tests
andexamples
folders
CI
- Add MyPy, Black, and Pylint jobs
- Rename
mypy
job tocheck
which runmake check
:mypy
,pylint
,check-format
- Add
check-format
job at the first stage
Build
- Add
build
command to the Makefile - Install build dependencies separately via a
requirements_deploy.txt
file -
#98, !72: Do not include
tests
folder in the wheel package for PyPi distribution
CD
- Add
deploy
anddeploy_test
commands to the Makefile - #99, !74: Add job for PyPi test deployment
- !73: Trigger PyPi release job only on tag
- Move
github-sync
stage in release stage as anafter-script
step -
#100, !75: Use extends instead of Yaml anchors in
.gitlab-ci.yml
(requires GitLab v12+) - Also trigger the pipeline when the
Makefile
changes
Project
- #96, !70: Add support for PEP 561 for DuniterPy type hints to be recognized by mypy when imported
- Remove not used
coveralls
dependency
Thanks @Moul, @vtexier.
Nouvelle mouture de Duniterpy.
Seule nouveauté côté API, la commande BMA api.bma.network.ws2p_heads
pour obtenir la branche majoritaire sur le réseau.
Le reste est un gros travail sur l’environnement de développement et l’intégration continue dans Gitlab.
En installant via pip (3.7), je n’ai pas tout, il manque les dossiers api
, documents
, grammars
, key
. C’est un que chez moi ou c’est le paquet qui a un problème ?
Merci du retour ! Effectivement il y a un gros problème sur le build dans gitlab :
Le build seul fonctionne en local sur mon dépôt, je vais tester le build du déploiement de test cette après midi.
En attendant NE PAS UTILISER CETTE VERSION, attendre la 0.55.1.
La version 0.55.1 est disponible ! La version 0.55.0 a été supprimé du dépôt officiel Pypi car non fonctionnelle.
Le changelog reste inchangé et se trouve plus haut.
v0.55.1 (19th July 2019)
-
#102: wheel build does not longer include
duniterpy
sub-folders - Trigger release only on
master
not on tag as protected environment variables are not shared with pipelines started on a tag - Fix Makefile: rebuild not working
DuniterPy version 0.56.0 est sortie !
La grande nouveauté est le support de WS2P !
Vous allez pouvoir vous connecter à un serveur Duniter en WS2P comme ci vous étiez un véritable nœud Duniter ! De quoi faire des automates en Python basés sur les événements WS2P…
Attention : la connexion par websocket a changée ! Reportez-vous aux exemples du dossier examples
pour voir comment on se connecte en BMA et en WS2P en websocket.
La documentation automatique que personne ne lit est ici…
v0.56.0 (20th January 2020)
Code
-
#58, !84: Introduce WS2P API support: BREAK BACKWARD COMPATIBILITY:
-
bma.ws
: now websocket connections use the specialWSConnection
class andasync
, check examples. - Add two examples, a helper to retrieve the WS2P API from BMA.
-
- #113, !89: Blocks signature verification is correctly handled now, differently from other documents.
-
#112, !88: fix
Unlock.from_inline()
error on a newly created Unlock - !87: Typos in Block:
noonce
−>nonce
, hash - !82: Use
sys.exit()
instead ofexit()
- !79:
- Move tools out of the
helper
folder - Dedicate the
helper
folder to helpers - Introduce
output_available()
helper to check if an output is available
- Move tools out of the
Dependencies
- !91: fix the
attrs
/attr
dependency
Build
-
#107, !81: Enhance version definition in
setup.py
CI/CD
- !78: Release on PyPI only on tags
Documentation
- #101, !80: Publish auto-documentation on GitLab Pages
-
#106, !83: Migrate the
README
back to markdown, reword and update it. - !77: Improve v0.55.0 and add v0.55.1 changelog
- !92: Add v0.56.0 changelog
Ouuuuh c’est nice ça Super boulot vit !!