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

Suite à ce topic il y a deux semaines, j’ai décidé de refondre mon petit client de messagerie Cesium en python.

Voilà qui est fait:

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 :stuck_out_tongue_winking_eye:), je pense qu’il est possible d’optimiser tout ça dans l’état actuel …

6 J'aimes

Bravo !

Quelques suggestions d’améliorations :

  • Respecter la même indentation dans tout le fichier (4 espaces est un standard)
  • Mettre les « valeurs magiques » 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):
DUNITERKEY=""
POD_PATH="/path/to/pod"

puis au choix :

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.

5 J'aimes

Merci pour ces conseils, je viens de les appliquer et j’ai amélioré un peu le code :slight_smile: (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.

3 J'aimes

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

2 J'aimes

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

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 :

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

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

boxType = "outbox" if outbox else "inbox"

Voilà ma petite contribution :wink:

3 J'aimes

Lol bon du coup je sais plus quoi faire, regarde cette même source 2 commits auparavant: 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).

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

Merci pour ces retours :slight_smile:

2 J'aimes

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

2 J'aimes