def get_proximity_graph(self, cr, uid, module_id, context=None): pool_obj = pooler.get_pool(cr.dbname) module_obj = pool_obj.get('ir.module.module') nodes = [('base','unknown')] edges = [] def get_depend_module(module_id): module_record = module_obj.browse(cr, uid, module_id, context=context) if module_record.name not in nodes: # Add new field ir.module.module object in server side. field name = module_type/ nodes.append((module_record.name, "unknown")) if module_record.dependencies_id: for depen in module_record.dependencies_id: if (module_record.name,depen.name) not in edges: edges.append((module_record.name,depen.name)) if depen.name == "base": continue id = module_obj.browse(cr, uid, module_obj.search(cr, uid, [('name', '=' ,depen.name)]), context=context) if id: get_depend_module(id[0].id) get_depend_module(module_id) graph = pydot.Dot(graph_type='digraph',fontsize='10', label="\\nProximity Graph. \\n\\nGray Color-Official Modules, Red Color-Extra Addons Modules, Blue Color-Community Modules, Purple Color-Unknow Modules" , center='1') for node in nodes: if node[1] == "official": graph.add_node(pydot.Node(node[0], style="filled", fillcolor="lightgray")) elif node[1] == "extra_addons": graph.add_node(pydot.Node(node[0], style="filled", fillcolor="red")) elif node[1] == "community": graph.add_node(pydot.Node(node[0], style="filled", fillcolor="#000FFF")) elif node[1] == "unknown": graph.add_node(pydot.Node(node[0], style="filled", fillcolor="purple")) for edge in edges: graph.add_edge(pydot.Edge(edge[0], edge[1])) ps_string = graph.create(prog='dot', format='ps') if os.name == "nt": prog = 'ps2pdf.bat' else: prog = 'ps2pdf' args = (prog, '-', '-') input, output = tools.exec_command_pipe(*args) input.write(ps_string) input.close() return output.read()
class report_graph_instance(object): def __init__(self, cr, uid, ids, data): logger = netsvc.Logger() try: import pydot except Exception, e: logger.notifyChannel('workflow', netsvc.LOG_WARNING, 'Import Error for pydot, you will not be able \ to render workflows\n' 'Consider Installing PyDot or dependencies: \ http://dkbza.org/pydot.html') raise e offer_id = ids self.done = False offer = translate_accent(pooler.get_pool(cr.dbname).get('dm.offer').browse(cr, uid, offer_id)[0].name) graph = pydot.Dot(fontsize="16", label=offer, size='10.7, 7.3', center='1', ratio='auto', rotate='90', rankdir='LR' ) graph_get(cr, uid, graph, offer_id) ps_string = graph.create_ps(prog='dot') if os.name == "nt": prog = 'ps2pdf.bat' else: prog = 'ps2pdf' args = (prog, '-', '-') try: _input, output = tools.exec_command_pipe(*args) except: return _input.write(ps_string) _input.close() self.result = output.read() output.close() self.done = True
ps_string = graph.create(prog='dot', format='ps') except Exception, e: _logger.exception('Exception in call:') # string is in PS, like the success message would have been ps_string = '''%PS-Adobe-3.0 /inch {72 mul} def /Times-Roman findfont 50 scalefont setfont 1.5 inch 15 inch moveto (No workflow available) show showpage''' if os.name == "nt": prog = 'ps2pdf.bat' else: prog = 'ps2pdf' args = (prog, '-', '-') input, output = tools.exec_command_pipe(*args) input.write(ps_string) input.close() self.result = output.read() output.close() self.done = True def is_done(self): return self.done def get(self): if self.done: return self.result else: return None
sys.exc_traceback)) logger.notifyChannel('workflow', netsvc.LOG_ERROR, 'Exception in call: ' + tb_s) # string is in PS, like the success message would have been ps_string = '''%PS-Adobe-3.0 /inch {72 mul} def /Times-Roman findfont 50 scalefont setfont 1.5 inch 15 inch moveto (No workflow available) show showpage''' if os.name == "nt": prog = 'ps2pdf.bat' else: prog = 'ps2pdf' args = (prog, '-', '-') input, output = tools.exec_command_pipe(*args) input.write(ps_string) input.close() self.result = output.read() output.close() self.done = True def is_done(self): return self.done def get(self): if self.done: return self.result else: return None
def get_proximity_graph(self, cr, uid, module_id, context=None): pool_obj = pooler.get_pool(cr.dbname) module_obj = pool_obj.get('ir.module.module') nodes = [('base', 'unknown')] edges = [] def get_dpend_module(module_id): module_record = module_obj.browse(cr, uid, module_id, context=context) if module_record.name not in nodes: # Add new field ir.module.module object in server side. field name = module_type/ nodes.append((module_record.name, "unknown")) if module_record.dependencies_id: for depen in module_record.dependencies_id: if (module_record.name, depen.name) not in edges: edges.append((module_record.name, depen.name)) if depen.name == "base": continue id = module_obj.browse(cr, uid, module_obj.search( cr, uid, [('name', '=', depen.name)]), context=context) if id: get_dpend_module(id[0].id) get_dpend_module(module_id) graph = pydot.Dot( graph_type='digraph', fontsize='10', label= "\\nProximity Graph. \\n\\nGray Color:Official Modules, Red Color:Extra Addons Modules, Blue Color:Community Modules, Purple Color:Unknow Modules", center='1') for node in nodes: if node[1] == "official": graph.add_node( pydot.Node(node[0], style="filled", fillcolor="lightgray")) elif node[1] == "extra_addons": graph.add_node( pydot.Node(node[0], style="filled", fillcolor="red")) elif node[1] == "community": graph.add_node( pydot.Node(node[0], style="filled", fillcolor="#000FFF")) elif node[1] == "unknown": graph.add_node( pydot.Node(node[0], style="filled", fillcolor="purple")) for edge in edges: graph.add_edge(pydot.Edge(edge[0], edge[1])) ps_string = graph.create(prog='dot', format='ps') if os.name == "nt": prog = 'ps2pdf.bat' else: prog = 'ps2pdf' args = (prog, '-', '-') input, output = tools.exec_command_pipe(*args) input.write(ps_string) input.close() return output.read()