[FIX] tools.graph: stop useless recursions to make graph_get() faster

In some cases (depending on the kind of graph being rendered),
the recursive processing could lead to timings of 1 minute per
call to ir.ui.view.graph_get(), even for a relatively small
number of nodes (e.g. 10). By avoiding useless recursions in
head_component() it goes down to a few ms.
This patch also adds str() wrappers for __str__ and printing
of nodes labels, which are not necessarily strings (they
are often integers)

bzr revid: odo@openerp.com-20110315181019-3pi3j0ojg33wtv3z
This commit is contained in:
Olivier Dony
2011-03-15 19:10:19 +01:00
parent 092cbbbd01
commit 17ebdeb565
+5 -5
View File
@@ -147,9 +147,9 @@ class graph(object):
if node not in self.head_nodes:
self.head_nodes.append(node)
for edge in rest_edges:
if edge[0]==node:
self.head_component(edge[1],rest_edges)
for edge in rest_edges:
if edge[0]==node:
self.head_component(edge[1],rest_edges)
def process_ranking(self, node, level=0):
@@ -709,7 +709,7 @@ class graph(object):
for l in self.levels:
result += 'PosY: ' + str(l) + '\n'
for node in self.levels[l]:
result += '\tPosX: '+ str(self.result[node]['y']) + ' - Node:' + node + "\n"
result += '\tPosX: '+ str(self.result[node]['y']) + ' - Node:' + str(node) + "\n"
return result
@@ -772,7 +772,7 @@ if __name__=='__main__':
for name,node in node_res.items():
draw.arc( (int(node['y']-radius), int(node['x']-radius),int(node['y']+radius), int(node['x']+radius) ), 0, 360, (128,128,128))
draw.text( (int(node['y']), int(node['x'])), name, (128,128,128))
draw.text( (int(node['y']), int(node['x'])), str(name), (128,128,128))
for t in transitions: