def handle(self, *args, **options): directory = (options.get('directory', ['']) or [''])[0] exclude_directory = (options.get('exclude_directory', []) or []) g = Graph('Template dependencies', True) g.layout('neato') g.landscape = True g.rotate = 90 g.label = str(datetime.datetime.now()) #g.scale = 0.7 #g.overlap = 'prism' #g.overlap = False g.overlap = 'scale' g.ranksep = 1.8 g.overlap = 'compress' g.ratio = 1. / math.sqrt(2) g.sep = 0.1 g.mindist = 0.1 nodes = set() edges = [] nodes_in_edges = set() # Retreive all nodes/edges for dir, t in template_iterator(): if t.startswith(directory) and not any( [t.startswith(x) for x in exclude_directory]): nodes.add(t) # {% include "..." %} includes = self._make_output_path(t) + '-c-includes' if os.path.exists(includes): for t2 in open(includes, 'r').read().split('\n'): if t2: nodes.add(t2) edges.append((t, t2, False)) nodes_in_edges.add(t) nodes_in_edges.add(t2) # {% extends "..." %} extends = self._make_output_path(t) + '-c-extends' if os.path.exists(extends): for t2 in open(extends, 'r').read().split('\n'): if t2: nodes.add(t2) edges.append((t, t2, True)) nodes_in_edges.add(t) nodes_in_edges.add(t2) # Remove orphan nodes for n in list(nodes): if not n in nodes_in_edges: nodes.remove(n) # Create graphvis nodes nodes2 = {} for t in nodes: node = self._create_node(t, g, nodes2) # Create graphvis edges for t1, t2, is_extends in edges: print 'from ', t1, ' to ', t2 node_a = self._create_node(t1, g, nodes2) node_b = self._create_node(t2, g, nodes2) edge = g.add_edge(node_a, node_b) edge.color = 'black' edge.arrowhead = 'normal' edge.arrowsize = 1.1 if is_extends: edge.style = 'solid' else: edge.style = 'dotted' #g.layout('neato') g.layout('twopi') g.render(settings.ROOT + 'template_dependency_graph.pdf', 'pdf', None) g.render(settings.ROOT + 'template_dependency_graph.jpg', 'jpg', None)
def handle(self, *args, **options): directory = (options.get('directory', ['']) or [''])[0] exclude_directory = (options.get('exclude_directory', []) or []) g = Graph('Template dependencies', True) g.layout('neato') g.landscape = True g.rotate = 90 g.label = str(datetime.datetime.now()) #g.scale = 0.7 #g.overlap = 'prism' #g.overlap = False g.overlap = 'scale' g.ranksep = 1.8 g.overlap = 'compress' g.ratio = 1. / math.sqrt(2) g.sep = 0.1 g.mindist = 0.1 nodes = set() edges = [ ] nodes_in_edges = set() # Retreive all nodes/edges for dir, t in template_iterator(): if t.startswith(directory) and not any([ t.startswith(x) for x in exclude_directory ]): nodes.add(t) # {% include "..." %} includes = self._make_output_path(t) + '-c-includes' if os.path.exists(includes): for t2 in open(includes, 'r').read().split('\n'): if t2: nodes.add(t2) edges.append( (t, t2, False) ) nodes_in_edges.add(t) nodes_in_edges.add(t2) # {% extends "..." %} extends = self._make_output_path(t) + '-c-extends' if os.path.exists(extends): for t2 in open(extends, 'r').read().split('\n'): if t2: nodes.add(t2) edges.append( (t, t2, True) ) nodes_in_edges.add(t) nodes_in_edges.add(t2) # Remove orphan nodes for n in list(nodes): if not n in nodes_in_edges: nodes.remove(n) # Create graphvis nodes nodes2 = { } for t in nodes: node = self._create_node(t, g, nodes2) # Create graphvis edges for t1, t2, is_extends in edges: print 'from ', t1, ' to ', t2 node_a = self._create_node(t1, g, nodes2) node_b = self._create_node(t2, g, nodes2) edge = g.add_edge(node_a, node_b) edge.color = 'black' edge.arrowhead = 'normal' edge.arrowsize = 1.1 if is_extends: edge.style = 'solid' else: edge.style = 'dotted' #g.layout('neato') g.layout('twopi') g.render(settings.ROOT + 'template_dependency_graph.pdf', 'pdf', None) g.render(settings.ROOT + 'template_dependency_graph.jpg', 'jpg', None)