.. contents::
====================
Django detect cyclic
====================
Application to detect cyclic imports.
With this application you can analyze the dependence of your applications
.. image:: https://github.com/goinnn/django-detect-cyclic/raw/master/examples/example-only-cyclic-exclude.png
Requeriments
============
* `python-graph-core <http://pypi.python.org/pypi/python-graph-core/>`_ (1.8.1)
* `python-graph-dot <http://pypi.python.org/pypi/python-graph-dot/>`_ (1.8.1)
* `pysmell <http://pypi.python.org/pypi/pysmell/>`_ (0.7.3)
* `pyplete <http://pypi.python.org/pypi/pyplete/>`_ (0.0.2)
* `django-form-admin <http://pypi.python.org/pypi/django-form-admin>`_ (0.3.2) (optional)
* `jquery.graphviz <https://github.com/goinnn/jquery.graphviz/>`_ (fronzen into the app, only to svg-js format)
Installation
============
In your settings.py:
::
INSTALLED_APPS = (
'django_detect_cyclic',
)
In your urls.py:
::
urlpatterns = patterns('',
(r'^admin/detect_cyclic/', include('django_detect_cyclic.urls')),
)
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:
* http://code.google.com/p/python-graph/issues/detail?id=15
* http://stackoverflow.com/questions/2133767/using-python-graphviz-importerror-no-module-named-gv
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 <https://github.com/goinnn/django-detect-cyclic/blob/master/EXAMPLES.rst/>`_
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 <https://github.com/goinnn/jquery.graphviz/>`_ (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.