Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Obtenir automatiquement arborisation imports + schema UML pour projets mal documentés

+5 votes

Je lis le code source de projets de plus en plus volumineux. En général, il sont commentés suffisamment pour comprendre le fonctionnement et rôle de telle fonction ou telle méthode.

Cependant, quand ça devient tentaculaire, quand on trouve la réponse finale on a oublié la question initiale... La solution serait de dessiner sur papier, une sorte d' arbre en partant du fichier main.py, dont chaque nœud serait un gros carré avec le nom de fichier avec les classes, fonctions et variables à l' intérieur, relié aux autres nœuds qu'il importe lui-même.

Puis sur une seconde feuille, dessiner le schéma UML global du projet.

Bref, c'est quand même un peu galère et là on regrette que l'auteur n'ai pas collé en PDF ces deux infos dans un répertoire prévu pour. Avoir un coup d’œil rapide sur l' architecture permet de gagner du temps sur la bonne compréhension du projet.

Existe t il une solution pour automatiser ces deux taches en renseignant le répertoire ou le fichier de départ ?

demandé 12-Fev-2016 par buffalo974 (2,690 points)

2 Réponses

+1 vote
 
Meilleure réponse

VOICI !
A tout hasard, pompez ceci:
https://github.com/IndexErrorCoders/PygamesCompilation/tree/master/IE_games_8/WizardsMagic
Ensuite, vous copiez le code source ci-dessous dans un fichier 'xyz.py'
Je l'ai appellé ainsi pour qu' il apparaisse en bas a droite du répertoire.

#! /usr/bin/env python3
# -*- encoding: utf-8 -*-

import os
import subprocess

files = [f for f in os.listdir('.') if os.path.isfile(f)]
i = 0
for f in files: 
    filename, file_extension = os.path.splitext(f)

    if file_extension == '.py':            
        if filename != 'xyz':
            i += 1
            VARGLOB += 1
            print('\n      -',i,'-     encore un script python  :  ',filename)
            print("filename  ", filename)
            print("file_extension", file_extension)
            print("f", f)



            try:                
                subprocess.check_output(["pyreverse", "-o", "png", str(f)])
                os.rename('classes.png', (filename  +'.png'))

                print('\n     ',filename,' has been pyreversed  !!!')

J'espère que cela sera utile à quelqu'un.
NB : vous pouvez essayer de l' améliorer, j' ai par exemple quelques images png qui font un carré blanc de 11 pixels de coté, je ne sais pas comment régler ça.
Le top serait d'avoir une récursivité qui se balade dans tous les répertoire d'un projet python2 ou 3, en partant du main.py.
Si on y arrive, ce sera digne de rejoindre le dépôt github d' Indexerrorcoders !

répondu 16-Fev-2016 par buffalo974 (2,690 points)
edité 24-Dec-2017 par buffalo974

tu peux poster le résultat de cette commande? pour voir la gueule du truc uml plz

screenshot resultat possible

J'ai pas compris comment afficher une image %-(

http://imgur.com/YZ5ZvEe

+4 votes

Il existe un tas d'UML generator pour Python:

répondu 12-Fev-2016 par barnumbirr (2,750 points)

Graphiz et pyreverse ont l'air vraiment bien !

Edit: Pour la syntaxe :

pyreverse -o png  monfichier.py

Ceci vous dessinera le schema UML des classes du fichier.

si c'est un script en python2, faire au préalable:

2to3 -w monfichier.py

l'original sera dans monfichier.bak


Si quelqu'un sait comment obtenir l’intégralité du projet en UML sans répéter fichier par fichier ça m’intéresse.

...