Skip to content

Commit c865b42

Browse files
committed
Ensuring proper cleanup if signals are fired after activities are deleted
1 parent 358e208 commit c865b42

1 file changed

Lines changed: 18 additions & 4 deletions

File tree

activity_browser/ui/web/navigator.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from activity_browser import signals
1313
from activity_browser.mod.bw2data import Database, get_activity, databases, Edge
14-
from activity_browser.mod.bw2data.backends import ExchangeDataset
14+
from activity_browser.mod.bw2data.backends import ExchangeDataset, ActivityDataset
1515

1616
from ...bwutils.commontasks import identify_activity_type, get_activity_name
1717
from .base import BaseGraph, BaseNavigatorWidget
@@ -63,6 +63,7 @@ def __init__(self, parent=None, key=None):
6363
super().__init__(parent, css_file="navigator.css")
6464
self.setObjectName(get_activity_name(get_activity(key), str_length=30))
6565
self.key = key
66+
self.tab = parent
6667

6768
self.graph = Graph()
6869

@@ -122,7 +123,11 @@ def sync_graph(self):
122123
"""Sync the graph with the current project."""
123124
self.graph.update(delete_unstacked=False)
124125
self.send_json()
125-
self.setObjectName(get_activity_name(get_activity(self.key), str_length=30))
126+
try:
127+
self.setObjectName(get_activity_name(get_activity(self.key), str_length=30))
128+
except ActivityDataset.DoesNotExist:
129+
log.debug("Graph activity no longer exists. Closing tab.")
130+
self.tab.close_tab_by_tab_name(self.tab.get_tab_name(self))
126131

127132
def construct_layout(self) -> None:
128133
"""Layout of Graph Navigator"""
@@ -267,8 +272,17 @@ def update(self, delete_unstacked: bool = True) -> None:
267272

268273
def update_datasets(self):
269274
"""Update the activities in the graph."""
270-
self.nodes = [get_activity(act.key) for act in self.nodes]
271-
self.edges = [Edge(document=ExchangeDataset.get_by_id(exc._document.id)) for exc in self.edges]
275+
try:
276+
self.nodes = [get_activity(act.key) for act in self.nodes]
277+
self.edges = [Edge(document=ExchangeDataset.get_by_id(exc._document.id)) for exc in self.edges]
278+
except ActivityDataset.DoesNotExist:
279+
try:
280+
get_activity(self.central_activity.key) # test whether the activity still exists
281+
self.new_graph(self.central_activity.key) # if so, create a new graph
282+
except ActivityDataset.DoesNotExist:
283+
log.warning("Graph activity no longer exists.")
284+
self.nodes = []
285+
self.edges = []
272286

273287
def store_previous(self) -> None:
274288
self.stack.append((deepcopy(self.nodes), deepcopy(self.edges)))

0 commit comments

Comments
 (0)