diff options
author | Emile Anclin <emile.anclin@logilab.fr> | 2008-09-08 17:03:54 +0200 |
---|---|---|
committer | Emile Anclin <emile.anclin@logilab.fr> | 2008-09-08 17:03:54 +0200 |
commit | 78ad977bb7fdb6b77232e16a6f25b36ee35755e7 (patch) | |
tree | c82f02022506ff96d63cbda446468a802b1a55b1 /pyreverse/main.py | |
parent | a47cc99e3f61f2cf7ec0ba7377ebf3a07cb3acef (diff) | |
download | pylint-78ad977bb7fdb6b77232e16a6f25b36ee35755e7.tar.gz |
adapt pyreverse for inclusion into pylint
Diffstat (limited to 'pyreverse/main.py')
-rw-r--r-- | pyreverse/main.py | 120 |
1 files changed, 111 insertions, 9 deletions
diff --git a/pyreverse/main.py b/pyreverse/main.py index e241f79..20b60b0 100644 --- a/pyreverse/main.py +++ b/pyreverse/main.py @@ -1,4 +1,4 @@ -# Copyright (c) 2008 LOGILAB S.A. (Paris, FRANCE). +# # Copyright (c) 2000-2008 LOGILAB S.A. (Paris, FRANCE). # http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This program is free software; you can redistribute it and/or modify it under @@ -14,14 +14,116 @@ # this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. """ -Pyreverse command line tool. + %prog [options] <packages> + + create UML diagrams for classes and modules in <packages> """ -def run(args): - from logilab.common.clcommands import main_run - from pyreverse import commands - main_run(args, __doc__) +import sys +from logilab.common.configuration import ConfigurationMixIn +from logilab.astng.manager import astng_wrapper, ASTNGManager +from logilab.astng.inspector import Linker + +from pylint.pyreverse.diadefslib import DiadefsHandler +from pylint.pyreverse import writer +from pylint.pyreverse.utils import insert_default_options + +OPTIONS = ( +("filter-mode", + dict(short='f', default='PUB_ONLY', dest='mode', type='string', + action='store', metavar='<mode>', + help="""filter attributes and functions according to + <mode>. Correct modes are : + 'PUB_ONLY' filter all non public attributes + [DEFAULT], equivalent to PRIVATE+SPECIAL_A + 'ALL' no filter + 'SPECIAL' filter Python special functions + except constructor + 'OTHER' filter protected and private + attributes""")), +#("diadefs-file", +#dict(short='d', metavar="<file>", action="store", + #help="create diagram according to the diagrams definitions in <file>")), +("class", +dict(short='c', action="append", metavar="<class>", dest="classes", default=[], + help="create a class diagram with all classes related to <class>;\ + this uses by default the options -ASmy")), + +("show-ancestors", +dict(short="a", action="store", metavar='<ancestor>', type='int', + help='show <ancestor> generations of ancestor classes not in <projects>')), +("all-ancestors", +dict(short="A", default=None, + help="show all ancestors off all classes in <projects>") ), +("show-associated", +dict(short='s', action="store", metavar='<ass_level>', type='int', + help='show <ass_level> levels of associated classes not in <projects>')), +("all-associated", +dict(short='S', default=None, + help='show recursively all associated off all associated classes')), + +("show-builtin", +dict(short="b", action="store_true", default=False, + help='include builtin objects in representation of classes')), + +("module-names", +dict(short="m", default=None, type='yn', metavar='[yn]', + help='include module name in representation of classes')), +# TODO : generate dependencies like in pylint +#("package-dependencies", +#dict(short="M", action="store", metavar='<package_depth>', type='int', + #help='show <package_depth> module dependencies beyond modules in \ +#<projects> (for the package diagram)')), +("only-classnames", +dict(short='k', action="store_true", default=False, + help="don't show attributes and methods in the class boxes; \ +this disables -f values")), +("output", dict(short="o", dest="output_format", action="store", + default="dot", metavar="<format>", + help="create a *.<format> output file if format available.")), +) +#( ('quiet', + #dict(help='run quietly', action='store_true', short='q')), ) + + +class PyreverseCommand(ConfigurationMixIn):# OptionsManagerMixIn + """base class providing common behaviour for pyreverse commands""" + + name = 'pyreverse' + + options = OPTIONS + priority = 0 + + def __init__(self, args): + ConfigurationMixIn.__init__(self, usage=__doc__) + insert_default_options() + self.manager = ASTNGManager() + self.register_options_provider(self.manager) + args = self.load_command_line_configuration() + self.run(args) + + def run(self, args): + """checking argmuents and run project""" + if not args: + print self.help() + return + self.project = self.manager.project_from_files(args, astng_wrapper) + self.linker = Linker(self.project, tag=True) + handler = DiadefsHandler(self.config) + diadefs = handler.get_diadefs(self.project, self.linker) + if self.config.output_format == "vcg": + writer.VCGWriter(self.config).write(diadefs) + else: + writer.DotWriter(self.config).write(diadefs) + + +#register_commands( (DiagramCommand,) ) + +class Run: + """pyreverse main class""" + def __init__(self, args): + """run pyreverse""" + pyreverse = PyreverseCommand(args) -if __name__ == "__main__": - import sys - run(sys.argv[1:]) +if __name__ == '__main__': + Run(sys.argv[1:]) |