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)