summaryrefslogtreecommitdiff
path: root/pyreverse
diff options
context:
space:
mode:
authorEmile Anclin <emile.anclin@logilab.fr>2008-08-18 14:29:33 +0200
committerEmile Anclin <emile.anclin@logilab.fr>2008-08-18 14:29:33 +0200
commitb301188a39e04785c119fdd171d9090316a1eace (patch)
tree4437a309d7bce6a53fb802fbebc06c3c3e9f5610 /pyreverse
parentc6b5e45af507e0b02ace2a66921f3d38e7183526 (diff)
downloadpylint-b301188a39e04785c119fdd171d9090316a1eace.tar.gz
change FilterMixin inheritance
Diffstat (limited to 'pyreverse')
-rw-r--r--pyreverse/diadefslib.py25
-rw-r--r--pyreverse/diagrams.py27
-rw-r--r--pyreverse/utils.py26
3 files changed, 39 insertions, 39 deletions
diff --git a/pyreverse/diadefslib.py b/pyreverse/diadefslib.py
index 96830ea..cc7a394 100644
--- a/pyreverse/diadefslib.py
+++ b/pyreverse/diadefslib.py
@@ -151,11 +151,12 @@ class OptionHandler:
title = '%s.%s' % (node.root().name , title)
return title
- def not_builtin(self, node):
- "filter out builtins except if show_builtin option"
+ def show_builtin(self, node):
+ "true if builtins and show_builtin option"
# FIXME : does it work as it should ?
- return (not self.config.show_builtin) and \
+ return (self.config.show_builtin) or not \
(node.name in ('object', 'type') or node.root().name == '__builtin__')
+
class DefaultDiadefGenerator(LocalsVisitor, OptionHandler):
"""generate minimum diagram definition for the project :
@@ -173,11 +174,12 @@ class DefaultDiadefGenerator(LocalsVisitor, OptionHandler):
create a diagram definition for packages
"""
+ mode = self.config.mode
if len(node.modules) > 1:
- self.pkgdiagram = PackageDiagram('packages %s' % node.name)
+ self.pkgdiagram = PackageDiagram('packages %s' % node.name, mode)
else:
self.pkgdiagram = None
- self.classdiagram = ClassDiagram('classes %s' % node.name)
+ self.classdiagram = ClassDiagram('classes %s' % node.name, mode)
def leave_project(self, node):
"""leave the astng.Project node
@@ -202,11 +204,12 @@ class DefaultDiadefGenerator(LocalsVisitor, OptionHandler):
add this class to the class diagram definition
"""
- if self.not_builtin(node):
+ if not self.show_builtin(node):
return
+ print "node", node
self.linker.visit(node)
title = self.get_title(node)
- self.classdiagram.add_object(title, node, self.show_attr)
+ self.classdiagram.add_object(title, node)
class ClassDiadefGenerator(OptionHandler):
@@ -226,7 +229,7 @@ class ClassDiadefGenerator(OptionHandler):
all classes related to the one fecthed by=1)
"""
- diagram = ClassDiagram(klass)
+ diagram = ClassDiagram(klass, self.config.mode)
if len(project.modules) > 1:
module, klass = klass.rsplit('.', 1)
module = project.get_module(module)
@@ -247,7 +250,7 @@ class ClassDiadefGenerator(OptionHandler):
# TODO : add all ancestors whatever the include_level ?
include_level -= 1
for ancestor in klass_node.ancestors():
- if self.not_builtin(ancestor):
+ if not self.show_builtin(ancestor):
continue
self.extract_classes(diagram, ancestor, include_level)
@@ -260,7 +263,7 @@ class ClassDiadefGenerator(OptionHandler):
if isinstance(ass_node, astng.Instance):
ass_node = ass_node._proxied
if not isinstance(ass_node, astng.Class) \
- or self.not_builtin(ass_node):
+ or not self.show_builtin(ass_node):
continue
self.extract_classes(diagram, ass_node, include_level)
@@ -269,7 +272,7 @@ class ClassDiadefGenerator(OptionHandler):
"""
title = self.get_title(klass_node)
self.linker.visit(klass_node)
- diagram.add_object(title, klass_node, self.show_attr)
+ diagram.add_object(title, klass_node)
# diagram handler #############################################################
diff --git a/pyreverse/diagrams.py b/pyreverse/diagrams.py
index 25b8959..dc84155 100644
--- a/pyreverse/diagrams.py
+++ b/pyreverse/diagrams.py
@@ -17,7 +17,7 @@
"""
from logilab import astng
-from pyreverse.utils import is_interface
+from pyreverse.utils import is_interface, FilterMixIn
def set_counter(value):
Figure._UID_COUNT = value
@@ -47,11 +47,12 @@ class DiagramEntity(Figure):
self.title = title
self.node = node
-class ClassDiagram(Figure):
+class ClassDiagram(Figure, FilterMixIn):
"""a class diagram objet
"""
TYPE = 'class'
- def __init__(self, title='No name'):
+ def __init__(self, title, mode):
+ FilterMixIn.__init__(self, mode)
Figure.__init__(self)
self.title = title
self.objects = []
@@ -72,22 +73,23 @@ class ClassDiagram(Figure):
return rel
raise KeyError(relation_type)
- def get_attrs(self, node, show_attr):
+ def get_attrs(self, node):
return [name for (name,v) in node.instance_attrs_type.items()
- if show_attr(name)]
+ if self.show_attr(name)]
- def get_methods(self, node, show_attr):
+ def get_methods(self, node):
return [m for m in node.values()
- if isinstance(m, astng.Function) and show_attr(m.name)]
-
- def add_object(self, title, node, show_attr = None):
+ if isinstance(m, astng.Function) and self.show_attr(m.name)]
+
+ def get_attributs(self, obj):
+ obj.attrs = self.get_attrs(obj.node)
+ obj.methods = self.get_methods(obj.node)
+
+ def add_object(self, title, node):
"""create a diagram object
"""
assert not self._nodes.has_key(node)
ent = DiagramEntity(title, node)
- if isinstance(node, astng.Class)and show_attr:
- ent.methods = self.get_methods(node, show_attr)
- ent.attrs = self.get_attrs(node, show_attr)
self._nodes[node] = ent
self.objects.append(ent)
@@ -123,6 +125,7 @@ class ClassDiagram(Figure):
"""
for obj in self.classes():
node = obj.node
+ self.get_attributs(obj)
# shape
if is_interface(node):
obj.shape = 'interface'
diff --git a/pyreverse/utils.py b/pyreverse/utils.py
index 1c54ac6..932dd42 100644
--- a/pyreverse/utils.py
+++ b/pyreverse/utils.py
@@ -90,26 +90,20 @@ VIS_MOD = {'special':_SPECIAL, 'protected': _PROTECTED, 'private': _PRIVATE, 'pu
class FilterMixIn:
"""filter nodes according to a mode and nodes' visibility
"""
+ def __init__(self, mode):
+ "init filter modes"
+ __mode = 0
+ for nummod in mode.split('+'):
+ try:
+ __mode += MODES[nummod]
+ except KeyError, ex:
+ print >> sys.stderr, 'Unknown filter mode %s' % ex
+ self.__mode = __mode
- def get_mode(self):
- """return the integer value of a mode string
- """
- try:
- return self.__mode
- except AttributeError:
- mode = 0
- for nummod in self.config.mode.split('+'):
- try:
- mode += MODES[nummod]
- except KeyError, ex:
- print >> sys.stderr, 'Unknown filter mode %s' % ex
- self.__mode = mode
- return mode
def show_attr(self, node):
"""return true if the node should be treated
"""
- mode = self.get_mode()
visibility = get_visibility(getattr(node, 'name', node))
- return not (mode & VIS_MOD[visibility] )
+ return not (__mode & VIS_MOD[visibility] )