vit
28 February 2020 11:12
1
Grâce à l’outil pyreverse (création de diagrammes UML à partir d’un code python) livré avec pylint (analyse des erreurs de code) j’ai pu générer les diagrammes UML de DuniterPy 0.56.0.
Packages (références entre les modules Python)
Classes (héritages)
Attention: pour que pyreverse
fonctionne, j’ai du corriger son code dans pylint/pyreverse/inspector.py
:
Il faut ajouter l’exception AttributeError
au except
.
@staticmethod
def handle_assignattr_type(node, parent):
"""handle an astroid.assignattr node
handle instance_attrs_type
"""
try:
values = set(node.infer())
current = set(parent.instance_attrs_type[node.attrname])
parent.instance_attrs_type[node.attrname] = list(current | values)
except (astroid.InferenceError, AttributeError):
pass
3 Likes
vivou
18 May 2023 14:37
2
Salut Vit,
Super tes diagrammes UML, ça donne de quoi approfondir.
J’ai envie de partager qu’avec @Nicolas on travaille aussi sur la vulgarisation du code.
On a lancé callGraph et GraphViz sur toute l’architecture de dossiers de Duniter et on obtient ça :
Voilà, on continue à essayer de comprendre comment tout ça fonctionne,
On est toujours preneur de quelqu’un qui nous explique et à qui on peut poser des questions sur comment Duniter a été pensé.
À bientôt
2 Likes
et voici une version lisible du graphe obtenu ci-dessus :
(Note : ce graphe n’étudie que les fonctions en typescript)
1 Like
Et de la même manière pour les fonctions en Rust on obtient pour Duniter_V2s le graphe ci-dessous : (grace au logiciel GitHub - koknat/callGraph: A multi-language tool which parses source code for function definitions and calls )
pas très lisible mais pouvant etre bien lu ici :
duniterV2s_graph.pdf (77.2 KB)
ou encore un fichier yaml des appels des fonctions, du style :
---
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/balances.rs:__MAIN__:
calls:
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/oneshot.rs:to_account_id: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/runtime/common/src/weights/pallet_balances.rs:transfer_all: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/cert.rs:__MAIN__:
calls:
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/oneshot.rs:to_account_id: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/node/src/service/client.rs:storage: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/identity.rs:__MAIN__:
calls:
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/oneshot.rs:to_account_id: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/cucumber_tests.rs:read: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/node/src/service/client.rs:storage: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:__MAIN__:
calls:
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:new: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:spawn_full_node: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:from:
calls:
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:new: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:kill:
called_by:
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:kill: 1
calls:
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:kill: 1
/media/donneesbis/git_bis/duniter_V2s/duniter-v2s/end2end-tests/tests/common/mod.rs:new:
...etc....
Evidemment ces graphes demandent de la mise en page pour rendre cela plus lisible…
En tout cas nous sommes motivés pour apporter de la clarté et ainsi faciliter l’accès au code pour les nouveaux dévelopeurs (tels que nous mêmes). Toute suggestion dans ce sens sera bienvenue.
à bientot
Et pour info, les discussions concernant duniter V2s ont maintenant lieu sur un fil plus récent :