|
11 | 11 |
|
12 | 12 | from activity_browser import signals |
13 | 13 | 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 |
15 | 15 |
|
16 | 16 | from ...bwutils.commontasks import identify_activity_type, get_activity_name |
17 | 17 | from .base import BaseGraph, BaseNavigatorWidget |
@@ -63,6 +63,7 @@ def __init__(self, parent=None, key=None): |
63 | 63 | super().__init__(parent, css_file="navigator.css") |
64 | 64 | self.setObjectName(get_activity_name(get_activity(key), str_length=30)) |
65 | 65 | self.key = key |
| 66 | + self.tab = parent |
66 | 67 |
|
67 | 68 | self.graph = Graph() |
68 | 69 |
|
@@ -122,7 +123,11 @@ def sync_graph(self): |
122 | 123 | """Sync the graph with the current project.""" |
123 | 124 | self.graph.update(delete_unstacked=False) |
124 | 125 | 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)) |
126 | 131 |
|
127 | 132 | def construct_layout(self) -> None: |
128 | 133 | """Layout of Graph Navigator""" |
@@ -267,8 +272,17 @@ def update(self, delete_unstacked: bool = True) -> None: |
267 | 272 |
|
268 | 273 | def update_datasets(self): |
269 | 274 | """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 = [] |
272 | 286 |
|
273 | 287 | def store_previous(self) -> None: |
274 | 288 | self.stack.append((deepcopy(self.nodes), deepcopy(self.edges))) |
|
0 commit comments