Use fullnames in the inheritance diagrams, with some related fixes.

This commit is contained in:
Robin Dunn
2016-06-07 16:43:46 -07:00
parent cfed6ce4df
commit d7e4f7c22b

View File

@@ -60,23 +60,24 @@ class InheritanceDiagram(object):
specials = [] specials = []
def recurse(cls): def recurse(cls):
nodename, fullname = self.class_name(cls) fullname = self.class_name(cls)
if cls in [object] or nodename.startswith('sip.'): if cls in [object] or fullname.startswith('sip.'):
return return
baselist = [] baselist = []
all_classes[cls] = (nodename, fullname, baselist) all_classes[cls] = (fullname, baselist)
for base in cls.__bases__: for base in cls.__bases__:
if base in [object] or self.class_name(base)[0].startswith('sip.'): name = self.class_name(base)
if base in [object] or name.startswith('sip.'):
continue continue
baselist.append(self.class_name(base)[0]) baselist.append(name)
if base not in all_classes: if base not in all_classes:
recurse(base) recurse(base)
for cls in classes: for cls in classes:
recurse(cls) recurse(cls)
specials.append(self.class_name(cls)[1]) specials.append(self.class_name(cls))
return list(all_classes.values()), specials return list(all_classes.values()), specials
@@ -95,16 +96,12 @@ class InheritanceDiagram(object):
else: else:
fullname = '%s.%s' % (module, cls.__name__) fullname = '%s.%s' % (module, cls.__name__)
name_parts = fullname.split('.') if fullname.startswith('wx._'):
if 'wx._' in fullname: parts = fullname.split('.')
nodename = fullname = name_parts[-1] del parts[1]
else: fullname = '.'.join(parts)
# Just the last 2 parts
nodename = '.'.join(name_parts[-2:]) return fullname
if fullname.startswith('wx.'):
fullname = fullname[3:]
return nodename, fullname
# These are the default attrs for graphviz # These are the default attrs for graphviz
@@ -166,7 +163,7 @@ class InheritanceDiagram(object):
res.append('digraph %s {\n' % name) res.append('digraph %s {\n' % name)
res.append(self._format_graph_attrs(g_attrs)) res.append(self._format_graph_attrs(g_attrs))
for name, fullname, bases in self.class_info: for fullname, bases in self.class_info:
# Write the node # Write the node
this_node_attrs = n_attrs.copy() this_node_attrs = n_attrs.copy()
@@ -175,40 +172,31 @@ class InheritanceDiagram(object):
this_node_attrs['color'] = 'blue' this_node_attrs['color'] = 'blue'
this_node_attrs['style'] = 'bold' this_node_attrs['style'] = 'bold'
if self.main_class is None:
newname, fullname = wx2Sphinx(name)
else:
newname = name
if class_summary is None: if class_summary is None:
# Phoenix base classes, assume there is always a link # Phoenix base classes, assume there is always a link
this_node_attrs['URL'] = '"%s.html"'%fullname this_node_attrs['URL'] = '"%s.html"' % fullname
else: else:
if 'wx.' in fullname:
fullname = fullname[3:]
if fullname in class_summary: if fullname in class_summary:
this_node_attrs['URL'] = '"%s.html"'%fullname this_node_attrs['URL'] = '"%s.html"' % fullname
else: else:
full_page = formatExternalLink(fullname, inheritance=True) full_page = formatExternalLink(fullname, inheritance=True)
if full_page: if full_page:
this_node_attrs['URL'] = full_page this_node_attrs['URL'] = full_page
res.append(' "%s" [%s];\n' % res.append(' "%s" [%s];\n' %
(newname, self._format_node_attrs(this_node_attrs))) (fullname, self._format_node_attrs(this_node_attrs)))
# Write the edges # Write the edges
for base_name in bases: for base_name in bases:
this_edge_attrs = e_attrs.copy() this_edge_attrs = e_attrs.copy()
if fullname in self.specials: if fullname in self.specials:
this_edge_attrs['color'] = 'red' this_edge_attrs['color'] = 'red'
if self.main_class is None: if self.main_class is None:
base_name, dummy = wx2Sphinx(base_name) base_name, dummy = wx2Sphinx(base_name) # ***
res.append(' "%s" -> "%s" [%s];\n' % res.append(' "%s" -> "%s" [%s];\n' %
(base_name, newname, (base_name, fullname,
self._format_node_attrs(this_edge_attrs))) self._format_node_attrs(this_edge_attrs)))
res.append('}\n') res.append('}\n')
return ''.join(res) return ''.join(res)
@@ -242,7 +230,7 @@ class InheritanceDiagram(object):
if self.main_class is not None: if self.main_class is not None:
filename = self.main_class.name filename = self.main_class.name
else: else:
dummy, filename = wx2Sphinx(self.specials[0]) dummy, filename = wx2Sphinx(self.specials[0]) # ***
outfn = os.path.join(static_root, filename + '_inheritance.png') outfn = os.path.join(static_root, filename + '_inheritance.png')
mapfile = outfn + '.map' mapfile = outfn + '.map'