Skip to content

Commit 0bbfa0d

Browse files
authored
Merge pull request #1478 from mrvisscher/graph-explorer-sync
Ensuring the graph explorer updates with activity modifications
2 parents a2860a3 + d1de606 commit 0bbfa0d

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

activity_browser/layouts/panels/right.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,10 @@ def add_tab(self, key, select=True):
8383
log.info("adding graph tab")
8484
new_tab = GraphNavigatorWidget(self, key=key)
8585
self.tabs[key] = new_tab
86-
self.addTab(new_tab, get_activity_name(bd.get_activity(key), str_length=30))
86+
self.addTab(new_tab, new_tab.objectName())
87+
88+
new_tab.objectNameChanged.connect(lambda name: self.setTabText(self.indexOf(new_tab), name))
89+
8790
else:
8891
tab = self.tabs[key]
8992
tab.new_graph(key)

activity_browser/ui/web/navigator.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
from PySide2.QtCore import Slot
1111

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

15-
from ...bwutils.commontasks import identify_activity_type
16+
from ...bwutils.commontasks import identify_activity_type, get_activity_name
1617
from .base import BaseGraph, BaseNavigatorWidget
1718

1819
log = getLogger(__name__)
@@ -60,6 +61,9 @@ class GraphNavigatorWidget(BaseNavigatorWidget):
6061

6162
def __init__(self, parent=None, key=None):
6263
super().__init__(parent, css_file="navigator.css")
64+
self.setObjectName(get_activity_name(get_activity(key), str_length=30))
65+
self.key = key
66+
self.tab = parent
6367

6468
self.graph = Graph()
6569

@@ -113,6 +117,17 @@ def connect_signals(self):
113117
self.update_graph_settings
114118
)
115119
self.checkbox_flip_negative_edges.stateChanged.connect(self.reload_graph)
120+
databases.metadata_changed.connect(self.sync_graph)
121+
122+
def sync_graph(self):
123+
"""Sync the graph with the current project."""
124+
self.graph.update(delete_unstacked=False)
125+
self.send_json()
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))
116131

117132
def construct_layout(self) -> None:
118133
"""Layout of Graph Navigator"""
@@ -251,9 +266,24 @@ def __init__(self):
251266
self.flip_negative_edges = False # show true flow direction of edges (e.g. for ecoinvent treatment activities, or substitutions)
252267

253268
def update(self, delete_unstacked: bool = True) -> None:
269+
self.update_datasets()
254270
super().update(delete_unstacked)
255271
self.json_data = self.get_json_data()
256272

273+
def update_datasets(self):
274+
"""Update the activities in the graph."""
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, ExchangeDataset.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 = []
286+
257287
def store_previous(self) -> None:
258288
self.stack.append((deepcopy(self.nodes), deepcopy(self.edges)))
259289

0 commit comments

Comments
 (0)