From b499a6cb0bceafe3244522b00d7eceb2d76f6bb9 Mon Sep 17 00:00:00 2001 From: Flancian <0@flancia.org> Date: Sat, 9 Jan 2021 19:13:59 +0100 Subject: [PATCH] Some performance improvements. --- app/db.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/db.py b/app/db.py index 17b53d0..31d76dd 100644 --- a/app/db.py +++ b/app/db.py @@ -50,9 +50,16 @@ class Graph: def node(self, uri): # looks up a node by uri (essentially [[wikilink]]). - # horrible - return wikilink_to_node(uri) + # this used to be even worse :) + try: + nodes = [node for node in G.nodes() if node.wikilink == uri] + return nodes[0] + except (KeyError, IndexError): + # We'll handle 404 in the template, as we want to show backlinks to non-existent nodes. + # Return an empty. + return Node(uri) + @cachetools.func.ttl_cache(maxsize=2, ttl=20) def nodes(self, include_journals=True): # returns a list of all nodes @@ -150,7 +157,7 @@ class Node: nodes = [] for wikilink in self.back_links(): n = G.node(wikilink) - if self.wikilink in [n.wikilink for n in n.pull_nodes()]: + if wikilink in [n.wikilink for n in n.pull_nodes()]: nodes.append(n) return nodes @@ -319,10 +326,12 @@ def all_journals(): nodes = [node for node in nodes if util.is_journal(node.wikilink)] return sorted(nodes, key=attrgetter('wikilink'), reverse=True) +# Deprecated. def nodes_by_wikilink(wikilink): nodes = [node for node in G.nodes() if node.wikilink == wikilink] return nodes +# Deprecated. def wikilink_to_node(node): try: return nodes_by_wikilink(node)[0]