This software produces a class relationship UML-like graph from a given set of
Python source files. It uses graphviz Python bindings and the dot layout for
graph generation and epydoc internals for source introspection.
The most basic usage of this software is to simply pass it the name of the
modules you want to graph (which have to be in your PythonPath) :
$ python umlpy.py mymodule mypackage
The result will be written to the uml.pdf file by default. The output filename
can be modified using the -o (or --output) option. The output format is set
using one of the --png, --pdf and --jpg options.
This software will, by default (without any specific code documentation) display
the classes hierarchy. Using the --all-methods or --all-properties options, il
will also display the methods and/or properties of each class under the class
name. Without these options, methods and properties can also be displayed
individually by adding @doc to the option/method docstring. Properties can also
be displayed by specifying the property type (this cannot be automatically
guessed because of the dynamic typing aspect of python) in the property
docstring, using the "@type: propertytype" syntax. Last, use relationships
between classes can also be specified in the class docstring using the
"@uses: otherclass" syntax.
Note that symmetric options for --all-methods/properties and @doc exist :
specifying @nodoc in the docstring will remove the method/property from the
produced display when using the --all-methods/properties options, and
--no-method/--no-property options will remove all the methods and properties
from display. Last, note that the software behavior is not documented when
symmetric options are used (that is, using --all-methods together with
--no-methods may do weird things, which is arguably understandable).
The example.py distributed with this software shows how to correctly use the
docstrings. The example.png file shows the corresponding output, which was
produced by running
$ python umlpy.py --png -o example.png -p "example." example
The umlpy.png file shows the software output for its own source file.
Class names can be shortened using a common prefix specified with the -p option.
For instance, if you are working on a module called verylongmodulename, you can
pas -p verylongmodulename. to the software, so that
will be displayed (and internally seen as) as submodule.ClassName.
Specific classes matching regexps can also be excluded, re-included or display
forced. That is, if you want to excludes all classes whose name matches
"^events.", you just need to pass -f "^events\\." option to the software. If you
want to excludes these classes but those matching "^events.EventSerializer",
pass -i "^events\\.EventSerializer" option. If you want to force the display
(that is, display classes that would not be displayed otherwise, for instance if
they have no relationship with any other displayed class) of classes matching
"^parser.", use -f "^parser\\." option.
This software is still very young and feature requests or bug reports are more
than welcome at guillaume [at] segu [dot] in. Please clearly specify in the
email subject that you're mailing about this software.