def _process_node_on_graph(self, note: Note): in_graph = self.nodes.match(name=note.name) if len(in_graph) == 0: # Create new node node = node_from_note(note) self.graph.create(node) return # Update node = in_graph.first() # Update labels node.clear_labels() note_tags = map(escape_cypher, note.tags) node.update_labels(note_tags) for tag in note_tags: if tag not in self.tags: properties = ['name', 'aliases'] # TODO: Is this too slow? if True: properties.append("content") create_index(self.graph, tag, properties) self.tags.add(tag) # Update properties node.clear() escaped_properties = {} for key, value in note.properties.items(): escaped_properties[key] = escape_cypher(str(value)) node.update(escaped_properties) self.graph.push(node) # Delete active relations self._clear_outgoing(node) # Insert up-to-date relations subgraph = None for trgt, rels in note.out_rels.items(): trgt_node = self.nodes.match(name=trgt) if len(trgt_node) == 0: trgt_node = Node(CAT_DANGLING, name=escape_cypher(trgt), obsidian_url=escape_cypher(obsidian_url(trgt, self.vault_name))) if subgraph is None: subgraph = trgt_node else: subgraph = subgraph | trgt_node else: trgt_node = trgt_node.first() # Possibly refactor this with subgraph = add_rels_between_nodes(rels, node, trgt_node, subgraph) if subgraph is not None: self.graph.create(subgraph)