mirror of
https://github.com/flancian/garden.git
synced 2026-08-07 23:16:21 +00:00
Move G.nodes() to be a dict so lookups are more efficient.
This commit is contained in:
+2
-2
@@ -269,11 +269,11 @@ def garden(garden):
|
|||||||
# Lists
|
# Lists
|
||||||
@bp.route('/nodes')
|
@bp.route('/nodes')
|
||||||
def nodes():
|
def nodes():
|
||||||
return render_template('nodes.html', nodes=G.nodes(include_journals=False))
|
return render_template('nodes.html', nodes=G.nodes(include_journals=False).values())
|
||||||
|
|
||||||
@bp.route('/nodes.json')
|
@bp.route('/nodes.json')
|
||||||
def nodes_json():
|
def nodes_json():
|
||||||
nodes = G.nodes(include_journals=False)
|
nodes = G.nodes(include_journals=False).values()
|
||||||
links = list(map(lambda x: x.wikilink, nodes))
|
links = list(map(lambda x: x.wikilink, nodes))
|
||||||
return jsonify(jsons.dump(links))
|
return jsonify(jsons.dump(links))
|
||||||
|
|
||||||
|
|||||||
@@ -60,8 +60,7 @@ class Graph:
|
|||||||
# looks up a node by uri (essentially [[wikilink]]).
|
# looks up a node by uri (essentially [[wikilink]]).
|
||||||
# this used to be even worse :)
|
# this used to be even worse :)
|
||||||
try:
|
try:
|
||||||
nodes = [node for node in G.nodes() if node.wikilink == uri]
|
node = self.nodes()[uri]
|
||||||
node = nodes[0]
|
|
||||||
return node
|
return node
|
||||||
except (KeyError, IndexError):
|
except (KeyError, IndexError):
|
||||||
# We'll handle 404 in the template, as we want to show backlinks to non-existent nodes.
|
# We'll handle 404 in the template, as we want to show backlinks to non-existent nodes.
|
||||||
@@ -95,20 +94,22 @@ class Graph:
|
|||||||
wikilink_to_subnodes[subnode.wikilink].append(subnode)
|
wikilink_to_subnodes[subnode.wikilink].append(subnode)
|
||||||
|
|
||||||
# then we iterate over its values and construct nodes for each list of subnodes.
|
# then we iterate over its values and construct nodes for each list of subnodes.
|
||||||
nodes = []
|
nodes = {}
|
||||||
for wikilink in wikilink_to_subnodes:
|
for wikilink in wikilink_to_subnodes:
|
||||||
node = Node(wikilink)
|
node = Node(wikilink)
|
||||||
node.subnodes = wikilink_to_subnodes[wikilink]
|
node.subnodes = wikilink_to_subnodes[wikilink]
|
||||||
nodes.append(node)
|
nodes[wikilink] = node
|
||||||
|
|
||||||
# remove journals if so desired.
|
# remove journals if so desired.
|
||||||
if not include_journals:
|
# if not include_journals:
|
||||||
nodes = [node for node in nodes if not util.is_journal(node.wikilink)]
|
# nodes = [node for node in nodes if not util.is_journal(node.wikilink)]
|
||||||
|
|
||||||
|
|
||||||
current_app.logger.debug('*** Graph loaded.')
|
current_app.logger.debug('*** Graph loaded.')
|
||||||
|
return nodes
|
||||||
# TODO: experiment with other ranking.
|
# TODO: experiment with other ranking.
|
||||||
# return sorted(nodes, key=lambda x: -x.size())
|
# return sorted(nodes, key=lambda x: -x.size())
|
||||||
return sorted(nodes, key=lambda x: x.wikilink.lower())
|
# return sorted(nodes, key=lambda x: x.wikilink.lower())
|
||||||
|
|
||||||
# The following method is unused; it is far too slow given the current control flow.
|
# The following method is unused; it is far too slow given the current control flow.
|
||||||
# Running something like this would be ideal eventually though.
|
# Running something like this would be ideal eventually though.
|
||||||
@@ -555,12 +556,12 @@ def all_users():
|
|||||||
def all_journals():
|
def all_journals():
|
||||||
# hack hack.
|
# hack hack.
|
||||||
nodes = G.nodes()
|
nodes = G.nodes()
|
||||||
nodes = [node for node in nodes if util.is_journal(node.wikilink)]
|
nodes = [node for node in nodes.values() if util.is_journal(node.wikilink)]
|
||||||
return sorted(nodes, key=attrgetter('wikilink'), reverse=True)
|
return sorted(nodes, key=attrgetter('wikilink'), reverse=True)
|
||||||
|
|
||||||
# Deprecated.
|
# Deprecated.
|
||||||
def nodes_by_wikilink(wikilink):
|
def nodes_by_wikilink(wikilink):
|
||||||
nodes = [node for node in G.nodes() if node.wikilink == wikilink]
|
nodes = [node for node in G.nodes().values() if node.wikilink == wikilink]
|
||||||
return nodes
|
return nodes
|
||||||
|
|
||||||
# Deprecated.
|
# Deprecated.
|
||||||
@@ -609,7 +610,7 @@ def subnode_by_uri(uri):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def nodes_by_outlink(wikilink):
|
def nodes_by_outlink(wikilink):
|
||||||
nodes = [node for node in G.nodes() if wikilink in node.forward_links()]
|
nodes = [node for node in G.nodes().values() if wikilink in node.forward_links()]
|
||||||
return sorted(nodes, key=attrgetter('wikilink'))
|
return sorted(nodes, key=attrgetter('wikilink'))
|
||||||
|
|
||||||
def subnodes_by_outlink(wikilink):
|
def subnodes_by_outlink(wikilink):
|
||||||
|
|||||||
Reference in New Issue
Block a user