# Nouveau client de messagerie Cesium+/ḠChange en python!

**URL:** https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779
**Category:** CS+
**Created:** [20 November 2020 05:14 UTC](https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779 "2020-11-20T05:14:56Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![poka](https://forum.duniter.org/user_avatar/forum.duniter.org/poka/32/6827_2.png) [@poka](https://forum.duniter.org/u/poka)
#### Post date: [20 November 2020 05:14 UTC](https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779/1 "2020-11-20T05:14:56Z")

</div>

Suite à [ce topic](https://forum.duniter.org/t/chiffrement-des-messages-cesium/7733) il y a deux semaines, j’ai décidé de refondre mon petit client de messagerie Cesium en python.

Voilà qui est fait:

> **[axiom-team/cesium-messaging](https://git.p2p.legal/axiom-team/cesium-messaging)**
>
> Envoi/Réception/Suppression de message via un pod Cesium ou Gchange

Normalement en suivant le readme, ça fonctionne.

Bon c’est mon premier vrai programme en python donc soyez indulgent ^^  
Si des pythoneux veulent faire une revu de code, ce serait pas une mauvaise idée.  
C’est pas très long, et je suis sûr que je peux factoriser beaucoup plus mes classes en jouer sur les héritages …

J’ai fait en sorte qu’il soit utilisable aussi bien standalone qu’en module importé depuis un autre projet, ainsi n’importe quel programme python peut désormais utiliser la messagerie de Cesium/ḠChange.

Il utilise natools pour tous ce qui touche à la crypto, qui lui même utilise duniterpy pour certaines choses …  
Je me rends compte que le gros soucis de python c’est qu’on se retrouve vite avec 15000 modules importés (contrairement à bash 😜), je pense qu’il est possible d’optimiser tout ça dans l’état actuel …

---

<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: [20 November 2020 08:57 UTC](https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779/2 "2020-11-20T08:57:46Z")

</div>

Bravo !

Quelques suggestions d’améliorations :

- Respecter la même indentation dans tout le fichier (4 espaces est un standard)
- Mettre les «&nbsp;valeurs magiques&nbsp;» du code dans des constantes nommées en majuscules juste après les imports
- Utiliser le format standard envfile pour tes variables d’environnement (remplacer `userenv.py` par `user.env`):

```bash
DUNITERKEY=""
POD_PATH="/path/to/pod"

```

puis au choix :

- Le charger avec python-dotenv : [https://robinislam.me/blog/reading-environment-variables-in-python/](https://robinislam.me/blog/reading-environment-variables-in-python/)

- Exporter les variables dans le shell : [https://stackoverflow.com/questions/19331497/set-environment-variables-from-file-of-key-value-pairs](https://stackoverflow.com/questions/19331497/set-environment-variables-from-file-of-key-value-pairs) (2eme réponse)

- Charger ensuite les variables depuis l’environnement (après les constantes) :

```python
os.getenv("DUNITERKEY", "") # load env var with default value
os.getenv("POD_PATH", "/path/to/pod") # load env var with default value

```

- Eviter absolument les imports dans le code (toujours en tête de code)

Hope it helps.

---

<div class="post-metadata">

### Author: ![poka](https://forum.duniter.org/user_avatar/forum.duniter.org/poka/32/6827_2.png) [@poka](https://forum.duniter.org/u/poka)
#### Post date: [22 November 2020 03:54 UTC](https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779/3 "2020-11-22T03:54:04Z")

</div>

Merci pour ces conseils, je viens de les appliquer et j’ai amélioré un peu le code 🙂 (je n’avais pas fait d’import dans le code je sais pas si tu parlais de mon test de fichier au milieu des imports, je l’ai viré).

Les tabulation c’est VSCode qui m’a trompé! Je fais tab pour qu’il me fasse 4 espaces automatiques dans du code python, mais à certains endroits random, tab vaut 2 espaces … (complot)

Il me restera à factoriser un peu mes classes peut être, et à l’ajouter au pip.

---

<div class="post-metadata">

### Author: ![cuckooland](https://forum.duniter.org/user_avatar/forum.duniter.org/cuckooland/32/425_2.png) [@cuckooland](https://forum.duniter.org/u/cuckooland)
#### Post date: [22 November 2020 08:52 UTC](https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779/4 "2020-11-22T08:52:14Z")

</div>

> [@poka](#):
>
> Les tabulation c’est VSCode qui m’a trompé! Je fais tab pour qu’il me fasse 4 espaces automatiques dans du code python, mais à certains endroits random, tab vaut 2 espaces … (complot)

Sans doute un coup du détecteur d’indentation :  
[https://code.visualstudio.com/docs/editor/codebasics#\_autodetection](https://code.visualstudio.com/docs/editor/codebasics#_autodetection)

---

<div class="post-metadata">

### Author: ![HugoTrentesaux](https://forum.duniter.org/user_avatar/forum.duniter.org/hugotrentesaux/32/6396_2.png) [@HugoTrentesaux](https://forum.duniter.org/u/HugoTrentesaux)
#### Post date: [22 November 2020 18:20 UTC](https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779/5 "2020-11-22T18:20:10Z")

</div>

Après un rapide coup d’œil sur le code, voici quelques remarques qui pourraient te simplifier un peu la vie pour la suite

- [https://git.p2p.legal/axiom-team/cesium-messaging/src/master/lib/cesiumMessaging.py#L44-L53](https://git.p2p.legal/axiom-team/cesium-messaging/src/master/lib/cesiumMessaging.py#L44-L53)

Tu définis un dictionnaire python étape par étape pour le transforme en json (ce que tu fais à plusieurs endroits). Tu pourrais le faire en un coup, c’est plus lisible :

```python
data = {
    "sort": {"time": "desc"},
    "from": 0,
    "size": nbrMsg,
    "_source" = ['issuer','recipient','title','content','time','nonce','read_signature']
    "query": {
        "bool": {
            "filter": {
                "term": {
                    boxType: self.recipent
                    }
                }
            }
        }
    }

```

- [https://git.p2p.legal/axiom-team/cesium-messaging/src/master/lib/cesiumMessaging.py#L59-L62](https://git.p2p.legal/axiom-team/cesium-messaging/src/master/lib/cesiumMessaging.py#L59-L62)

Tu peux condenser ces quatre lignes en une avec un opérateur ternaire tout en restant lisible

```python
boxType = "outbox" if outbox else "inbox"

```

Voilà ma petite contribution 😉

---

<div class="post-metadata">

### Author: ![poka](https://forum.duniter.org/user_avatar/forum.duniter.org/poka/32/6827_2.png) [@poka](https://forum.duniter.org/u/poka)
#### Post date: [22 November 2020 19:14 UTC](https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779/6 "2020-11-22T19:14:01Z")

</div>

> [@HugoTrentesaux](#):
>
> Tu définis un dictionnaire python étape par étape pour le transforme en json (ce que tu fais à plusieurs endroits). Tu pourrais le faire en un coup, c’est plus lisible

Lol bon du coup je sais plus quoi faire, regarde cette même source 2 commits auparavant: [jaklis/cesiumMessaging.py at 4aea9901441a6db9d7eaa7a616150eaddb2ab3f7 - jaklis - P2Git](https://git.p2p.legal/axiom-team/cesium-messaging/src/4aea9901441a6db9d7eaa7a616150eaddb2ab3f7/lib/cesiumMessaging.py#L45-L65)

J’ai justement changé en suite de dictionnaires pensant que c’était plus propre ainsi (ce que tu proposes est un peut un mélange des deux approche c’est certainement le mieux).

> [@HugoTrentesaux](#):
>
> Tu peux condenser ces quatre lignes en une avec un opérateur ternaire tout en restant lisible

Bien vue, j’avais pas ça en bash ^^

Merci pour ces retours 🙂

---

<div class="post-metadata">

### Author: ![Spencer](https://forum.duniter.org/user_avatar/forum.duniter.org/spencer/32/6079_2.png) [@Spencer](https://forum.duniter.org/u/Spencer)
#### Post date: [23 November 2020 09:38 UTC](https://forum.duniter.org/t/nouveau-client-de-messagerie-cesium-change-en-python/7779/7 "2020-11-23T09:38:27Z")

</div>

Poka,

You are inspirational… you’re doing great!

I think you’re going to love python, that you’ll appreciate how it gets out-of-your-way and just lets you express what you want to get done.

En avant!  
-Spencer971
