En django se pretende que cada aplicación sea independiente, cada aplicación encapsule una funcionalidad. Esto normalmente es una utopía y terminamos teniendo en nuestro proyecto un conjunto de aplicaciones genéricas e independientes 8-) y otro conjunto de aplicaciones que dependen unas de otras :oops:

El problema viene cuando este segundo conjunto de aplicaciones no tienen una jerarquía clara, es decir si la aplicación A importa a una aplicación B; la aplicación B no debería de importar a la aplicación A. Esto es fácil decirlo pero cuando el tamaño de nuestro proyecto empieza a crecer cada vez es más difícil y más difícil aún de detectarlo.

Con django-detect-cyclic se pretende que esta detección sea realmente sencilla. Tras instalarlo solo tendremos que acceder a un wizard instalado en la administración, y tras determinar una serie de parámetros (vía formulario, todos con configuración por defecto) se nos generará un grafo con las dependencias entre las aplicaciones, como los que podemos ver en las dos siguientes imágenes.

Wizard con grafo generado en la parte superior

Ejemplo de grafo, seleccionando la opción muestra módulos

Leyenda:

  • Los nodos son las aplicaciones, o los módulos de las aplicaciones (si tu usas la opcion “Muestra los modulos”)
  • Una arista significa que el nodo fuente importa al nodo destino
  • Todas las aristas que pertenecen a un ciclo tienen el mismo color y su etiqueta contiene “Ciclo X”
  • Las etiquetas de las aristas contienen el peso (número de importaciones) entre parentesis
  • Si usas la opcion “Muestra los modulos” cada nodo tendrá un color de fondo, que representará a la aplicación que pertenezca
  • Si la arista está punteada, quiere decr que todos las importaciones entre esos dos nodos están dentro de alguna función

Todo esto mismo se puede hacer mendiante línea de comandos

Trabajo realizado durante la pi week

Related Posts:

Etiquetado con:          
 

  1. Me encanta la manera en que escribes, de verdad

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>