Django application to detect cyclic imports

## Django detect cyclic

Application to detect cyclic imports. With this application you can analyze the dependence of your applications

### Installation

INSTALLED_APPS = (

'django_detect_cyclic',

)


urlpatterns = patterns('',

)


Make sure that you have in your urls jsi18nurl:

js_info_dict = {
'packages': ('your.app.package',),
}

urlpatterns = patterns('',

url(r'^jsi18n/\$', 'django.views.i18n.javascript_catalog', js_info_dict),

)


### Caption

• The nodes are applications, or (if you use the option “Show modules”) modules in the applications
• One edge means that the source node imports from the destination node
• Every edge of a cycle has the same background color and the label contains “Cycle X”
• The labels of the edges contain the weight in parentheses
• If you use the “Show modules” option, each node will have a background color. If two nodes are from the same application, they will have the same background color.
• If an edge is dotted, every import in the source happens at runtime, whithin the body of a function or method

### Possibles Errors

It is possible that the next links are interested if you can some problem:

It is possible that you have to remove the pyc files:

find -iname "*.pyc" -exec rm "{}" \;


### Usage

You have two ways, you can run a command:

python manage.py detect_cyclic
python manage.py detect_cyclic --include-apps="app1,app6,app7,app11" --file-name="my_graph.svg" --exclude-packages="migrations,templatetags" --verbosity=2
python manage.py detect_cyclic --include-apps="app1,app6" --show-modules --file-name="my_graph.svg" --exclude-packages="migrations" --verbosity=2
python manage.py detect_cyclic --include-apps="app1,app6" --only-cyclic --file-name="my_graph.svg" --exclude-packages="migrations" --verbosity=2


Or you can access via web to the wizard:

/admin/detect_cyclic/


### Examples

To see more examples click in examples

### Releases

#### 0.0.9 (2012-09-02)

• Fix some errors
• Adapt the code to the last version of pyplete. Now the detect the relative imports, something like this:
from models import MyModel # from the same directory of the models.py


And this:

from .models import MyModel # from the same directory of the models.py


#### 0.0.8 (2012-08-09)

• Loaded a templatetag, and with this you get a error
• Now works the js in Django 1.4
• Fix a error when you had some application repeat in your settings (INSTALLED_APPS)
• Fix a csr error when you click in download the graph and the format is svg-js

#### 0.0.7 (2012-07-25)

• Now jquery.graphviz has a stable version (0.0.1, Tested in Chrome, FireFox, Safari and IE9)
• Detail to the js

#### 0.0.6 (2012-07-23)

• Format svg-js (beta). Change dracula js to jquery.graphviz.js (Tested in Chrome and FireFox)

#### 0.0.5 (2012-07-13)

• Change force-colors option to use-colors option
• Change distribution of the wizard
• Usability

#### 0.0.4 (2012-07-12)

• Wizard to create graphs (/admin/detect_cyclic/)
• Format svg-js (alpha)
• Fix a little errors

#### 0.0.3 (2012-07-10)

• Add the option “scope-global”, this ignore the imports into the functions
• Now if the verbosity option is 1, only show the errors
• Now when a node (with show-modules) has the same name that a application, the node name will be app_name.__init__
• Now the label of the cycle edges has the same color that the edge
• Now disabled the colors of the edge and nodes when the format is not svg. But it is possible enabled if you use the “force color” option
• Optimizations
• New option “dotted-scope-local”. If the all import between two nodes are into a function the edge will be dotted
• Fixed some little errors

#### 0.0.2 (2012-07-09)

• Documentation and examples

#### 0.0.1 (2012-07-09)

• Initial release.

## Project details

Uploaded source