[FIX] tools.graph: stop useless recursions to make graph_get() faster
authorOlivier Dony <odo@openerp.com>
Tue, 15 Mar 2011 18:10:19 +0000 (19:10 +0100)
committerOlivier Dony <odo@openerp.com>
Tue, 15 Mar 2011 18:10:19 +0000 (19:10 +0100)
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

bin/tools/graph.py

index 05a1b83..7f85bf1 100644 (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: