En la mayoría de proyectos Python de gran desarrollo, se hace necesario documentar el desarrollo de una aplicación.
A menudo se utilizan los diagramas UML, para ilustrar diagramas de clases, paquetes, etc.
Pyreverse es una utilidad que analiza el código fuente Python y extrae diagramas de clases y dependencias con paquetes.
En los diagramas generados se muestran:
- Atributos de clases y si es posible su tipo
- Métodos de clases
- Enlaces de herencia entre clases
- Enlaces de asociación entre clases
- Representación de excepciones e interfaces
Nota: Esta utilidad ha sido integrada desde 2008 con Pylint a partir de la versión 0.15.
Instalación en Ubuntu 11.04
Puesto que Pyreverse esta integrado en Pylint y este utiliza Graphviz para generar los diagramas nos basta con instalar los siguientes paquetes:
sudo apt-get install graphviz pylint
A modo de ejemplo, utilizare el código fuente de Tivion, para generar algunos diagramas UML.
Generaramos con pyreverse, un archivo classes_Tivion.png aplicándolo a la carpeta src de Tivion:
pyreverse -o png -p Tivion src/
-o : establece el formato de salida
-p nombre : produce los archivos de salida añadiendo el nombre establecido
Esto generará un diagrama como el siguiente (haz click para agrandar):
Pero el layout por defecto, es algo espartano y podemos mejorarlo con otras hojas de estilo XML que definamos. Para ello necesitamos cambiar el formato de salida a .dot, para posteriormente generar un archivo SVG.
Generar el .dot
pyreverse -o dot -p Tivion src/
Generar el SVG a partir del DOT
dot -Tsvg classes_Tivion.dot > classes_Tivion.svg
Aplicar el layout mejorado
Para ello he utilizado el xsl definido aquí:
xsltproc notugly.xsl classes_Tivion.svg > classes_Tivion-notugly.svg
Esto mejora un poco, pero habría que editar el .dot para cambiar los estilos de cada “record”. Como prueba, he editado un par de records, cambiándoles el fondo, pero sería necesario automatizarlo, o incluso mucho mejor si pyreverse admitiera un xsl y lo generara ya con otro layout mas moderno.
El resultado es el siguiente (haz click para agrandar):
Fuentes
Pyreverse : UML Diagrams for Python
Making Graphviz output pretty with xsl
Making Graphviz output pretty with xsl (updated)