def make_graph(args, outfile): graph = Digraph('Subreddit connection graph starting with:\n' + ', '.join(args)) parser = RedditParser() next_subs = set(subreddit.lower() for subreddit in args) logging.debug("Received on commandline: " + ' '.join(next_subs)) visited = set() for current_depth in xrange(MAX_DEPTH): current_subs = next_subs visited.update(next_subs) if len(current_subs) == 0: break next_subs = set() for subreddit in current_subs: logging.debug("Visiting: " + subreddit) info = parser.get_info(subreddit) if info: links, num_subs = info else: continue current_node = graph.add_node(subreddit, shape="circle", width=width(num_subs), fixedsize=True, label='\n'.join([subreddit, str(num_subs)])) logging.debug("Received links: " + ' '.join(links)) for link in links: if link not in visited: next_subs.add(link) new_node = graph.add_node(link) current_node >> new_node logging.debug("Done main loop. Remaining unvisited subs:\n" + '\n'.join(next_subs)) # Style the subreddits we didn't visit due to maximum search depth being # reached. for link in next_subs: info = parser.get_info(link) if info: links, num_subs = info else: continue logging.debug("Updating properties for remaining subreddit: %s" % link) graph.add_node(link, shape="circle", width=width(num_subs), fixedsize=True, label='\n'.join([link, str(num_subs)])) graph.layout(engines.dot) graph.render(outfile)