2019-02-15 10:47:50 +00:00
|
|
|
from collections import deque
|
|
|
|
|
|
|
|
from cfg import config
|
2019-02-19 13:16:22 +00:00
|
|
|
from db_util import get_page_id
|
2019-02-25 13:14:55 +00:00
|
|
|
import sql
|
2019-02-02 15:07:19 +00:00
|
|
|
|
|
|
|
def prepare_dijkstra(connection):
|
|
|
|
cursor = connection.cursor()
|
2019-02-25 13:14:55 +00:00
|
|
|
cursor.execute(sql.statements["dijkstra_insert_pages"])
|
2019-02-21 16:14:17 +00:00
|
|
|
|
2019-02-25 13:14:55 +00:00
|
|
|
cursor.execute(sql.statements["dijkstra_set_infinity"])
|
2019-02-02 15:07:19 +00:00
|
|
|
connection.commit()
|
|
|
|
|
2019-02-19 13:16:22 +00:00
|
|
|
def dijkstra_one(page, value, connection):
|
2019-02-02 15:07:19 +00:00
|
|
|
cursor = connection.cursor()
|
2019-02-21 16:14:17 +00:00
|
|
|
if(isinstance(page, tuple)):
|
2019-02-02 15:07:19 +00:00
|
|
|
# Idk why this happens.
|
|
|
|
title = title[0]
|
2019-02-25 13:14:55 +00:00
|
|
|
cursor.execute(sql.statements["dijkstra_get_to_update"], (page, value + 1))
|
2019-02-02 15:07:19 +00:00
|
|
|
# This is the list of nodes that have to be updated
|
|
|
|
result = cursor.fetchall()
|
|
|
|
|
2019-02-25 13:14:55 +00:00
|
|
|
cursor.execute(sql.statements["dijkstra_update"], (value + 1, page, value + 1))
|
2019-02-02 15:07:19 +00:00
|
|
|
connection.commit()
|
|
|
|
return result
|
|
|
|
|
|
|
|
def recursive_dijkstra(titles, value, connection):
|
|
|
|
if(not titles):
|
|
|
|
return
|
|
|
|
|
2019-02-15 10:47:50 +00:00
|
|
|
todos = deque()
|
2019-02-02 15:07:19 +00:00
|
|
|
for title in titles:
|
2019-02-15 10:47:50 +00:00
|
|
|
todos.extend(dijkstra_one(title, value, connection))
|
|
|
|
|
|
|
|
recursive_dijkstra(todos, value + 1, connection)
|
2019-02-02 15:07:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
def dijkstra(title, connection):
|
2019-02-19 13:16:22 +00:00
|
|
|
page = get_page_id(title, connection)
|
2019-02-02 15:07:19 +00:00
|
|
|
cursor = connection.cursor()
|
2019-02-25 13:14:55 +00:00
|
|
|
cursor.execute(sql.statements["dijkstra_set_root"], (page,))
|
2019-02-02 15:07:19 +00:00
|
|
|
|
2019-02-19 13:16:22 +00:00
|
|
|
todos = dijkstra_one(page, 1, connection)
|
2019-02-02 15:07:19 +00:00
|
|
|
recursive_dijkstra(todos, 2, connection)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|