summaryrefslogtreecommitdiff
path: root/pyreverse/main.py
diff options
context:
space:
mode:
authorEmile Anclin <emile.anclin@logilab.fr>2008-09-08 17:03:54 +0200
committerEmile Anclin <emile.anclin@logilab.fr>2008-09-08 17:03:54 +0200
commit78ad977bb7fdb6b77232e16a6f25b36ee35755e7 (patch)
treec82f02022506ff96d63cbda446468a802b1a55b1 /pyreverse/main.py
parenta47cc99e3f61f2cf7ec0ba7377ebf3a07cb3acef (diff)
downloadpylint-78ad977bb7fdb6b77232e16a6f25b36ee35755e7.tar.gz
adapt pyreverse for inclusion into pylint
Diffstat (limited to 'pyreverse/main.py')
-rw-r--r--pyreverse/main.py120
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:])