# DuniterPy 1.0.0 est sortie!

**URL:** https://forum.duniter.org/t/duniterpy-1-0-0-est-sortie/8567
**Category:** DuniterPy
**Tags:** duniterpy
**Created:** [12 July 2021 14:42 UTC](https://forum.duniter.org/t/duniterpy-1-0-0-est-sortie/8567 "2021-07-12T14:42:49Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [12 July 2021 14:42 UTC](https://forum.duniter.org/t/duniterpy-1-0-0-est-sortie/8567/1 "2021-07-12T14:42:49Z")

</div>

J’ai le grand plaisir de vous annoncer la sortie de la tant attendue version 1.0.0 en pré-version candidate à la publication numéro 0.

> **[Client Challenge](https://pypi.org/project/duniterpy/1.0.0rc1)**

Cette version apporte tellement de changements que nous préférons avoir vos retours avant la sortie de la version stable.

**Attention, cette version brise la compatibilité ascendante !**

Pour la dernière fois avant la lointaine version 2.0.0.

_Les futures versions intermédiaires 1.x.y utiliseront les alertes de dépréciations ([Deprecation Warnings](https://docs.python.org/3/library/exceptions.html#DeprecationWarning)) de Python, pour vous signaler ce qui est obsolète, vous permettant de migrer sur le nouveau code tranquillement._

## Liste des changements

### Bibliothèque non asynchrone

La version 1.0.0 n’est plus en mode asynchrone. En effet, ce mode est très verbeux dans Python, et intimidant avec sa boucle d’évènement, alors qu’il apparaît que la majorité des clients ne font pas usage de requêtes parallèles multiples à haute fréquence.

Ainsi, tout le code est maintenant synchrone. Vous ne verrez plus les mots clefs `async/await`, ni la boucle d’évènement imposée dans les exemples.

Pour ceux qui désirent utiliser un mode asynchrone, ils peuvent maintenant le faire avec la méthode qu’ils préfèrent, et pas forcément avec `asyncio` (Threads, Process, etc). Pour ceux qui désirent continuer à utiliser `asyncio`, rassurez-vous, un exemple est fourni.

### Remaniement des classes Documents

D’importants changements ont été apportés aux sous-classes de `Document`.  
Tous les documents disposent maintenant d’un attribut `signature` qui est une `string` et non plus une liste de `string`. Sauf la classe Transaction qui utilise son propre attribut `signatures` et peut gérer les signatures multiples.

Il n’est plus possible de passer la signature en argument à la création du document puisqu’il n’est pas logique de créer la signature _avant_ le document dans son cycle de vie.  
Cependant, il est maintenant possible de passer directement une instance de `SigningKey` pour créer un document immédiatement signé !

Pour les transactions, les méthodes `sign()` et `multi_sign()` ajoutent les signatures au lieu de les remplacer. Ce qui vous permet de faire signer le document en plusieurs fois.

Les méthodes `check_signature()` s’occupent de vérifier les signatures selon le type de document.

`Membership` : l’argument `membership_type` est maintenant optionnel avec `IN` par défaut.

Les attributs `version` et `currency` sont maintenant optionnels et ont par défaut la dernière version stipulée dans le protocole selon le type de document, et le nom de code de la Ğ1 pour la monnaie.  
De plus, les noms de code des monnaies connues sont maintenant disponibles dans le module `constants`.

Les attributs/arguments `timestamp` et `blockstamp` étaient utilisés de façon interchangeable sans tenir compte du type de valeur concernée. Ce qui apportait beaucoup de confusion. Ils ont tous été renommés selon les règles suivantes :

- `timestamp` pour une unité de temps en secondes
- `block_id` pour le type `BlockID` (identifiant unique des blocs)
- `BlockUID` a été renommé en `BlockID` et `BlockID.block_uid()` par `get_block_id()`

Ainsi vous savez instantanément si vous devez fournir un identifiant de bloc ou une date/heure en secondes.

Les classes `Endpoint` voient leurs attributs renommés également (`server` → `host` notamment)

### Cryptographie

Arrivée de la fonctionnalité de création d’un trousseau à partir d’un Mnemonic DUBP avec `SigningKey.from_dubp_mnemonic()`. Un exemple est fourni.

### Exemples plus faciles

Inclusion du dossier des exemples `examples` dans le package Python !

- Il est maintenant possible de les lancer dans la console Python !
- Voir comment s’en servir dans le [README.md](https://git.duniter.org/clients/python/duniterpy/-/blob/main/README.md#Examples)

Pour le reste, je vous laisse lire le dernier [CHANGELOG.md](https://git.duniter.org/clients/python/duniterpy/-/blob/main/CHANGELOG.md)

Merci à @vit et @moul.

---

<div class="post-metadata">

### Author: ![Moul](https://forum.duniter.org/user_avatar/forum.duniter.org/moul/32/9145_2.png) [@Moul](https://forum.duniter.org/u/Moul)
#### Post date: [25 July 2021 10:30 UTC](https://forum.duniter.org/t/duniterpy-1-0-0-est-sortie/8567/2 "2021-07-25T10:30:45Z")

</div>

## v1.0.0rc1

- Correctif du endpoint `ESUserEndpoint`
- Changement du workflow de la branche `master` et de la branche principale `dev` par une unique branche `main`.
- La génération de l’autodoc a été corrigé : [https://clients.duniter.io/python/duniterpy/index.html](https://clients.duniter.io/python/duniterpy/index.html)

Plus de détails dans le [changelog](https://git.duniter.org/clients/python/duniterpy/-/blob/main/CHANGELOG.md).

---

<div class="post-metadata">

### Author: ![vit](https://forum.duniter.org/user_avatar/forum.duniter.org/vit/32/2775_2.png) [@vit](https://forum.duniter.org/u/vit)
#### Post date: [21 August 2021 08:16 UTC](https://forum.duniter.org/t/duniterpy-1-0-0-est-sortie/8567/3 "2021-08-21T08:16:39Z")

</div>

# DuniterPy 1.0.0 est définitivement sortie!

Après des mois de travail patient et acharné pour maintenir une bibliothèque Python simple et puissante pour les clients/scripts/bidouilles, @Moul et moi-même sommes heureux de vous offrir cet outil.

Merci à @matograine, @hugo, et tous les contributeurs que j’oublie !

On continue à améliorer cet outil et on va bien sûr intégrer un client API RPC Substrate et/ou GraphQL Hydra dès que possible.

## v1.0.0

Pas de changement par rapport à la version v1.0.0rc1.
