from collections import deque from cfg import config def can_reach(title, connection): cursor = connection.cursor() cursor.execute("SELECT COUNT(destination) FROM links WHERE destination=?", (title, )) count = cursor.fetchone()[0] return count > 0 def shortest_path(center, title, connection): if(not can_reach(title, connection)): return [] cursor = connection.cursor() current_title = title path = deque() while(current_title != center): path.append(current_title) if(config["use_sqlite"]): cursor.execute('''SELECT links.source FROM links LEFT JOIN dijkstra_helper ON links.destination=dijkstra_helper.name WHERE links.destination=:title ORDER BY dijkstra_helper.value ASC LIMIT 1''', {"title": current_title}) else: cursor.execute('''SELECT links.source FROM links LEFT JOIN dijkstra_helper ON links.destination=dijkstra_helper.name WHERE links.destination=:title SORT BY dijkstra_helper.value ASC LIMIT 1''', {"title": current_title}) current_title = cursor.fetchone()[0] return list(reversed(path))