Skip to content

Commit e1d5b18

Browse files
committed
Duck-typing products for the exchanges tab
1 parent b83a366 commit e1d5b18

3 files changed

Lines changed: 33 additions & 6 deletions

File tree

activity_browser/bwutils/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from .commontasks import cleanup_deleted_bw_projects as cleanup
99
from .commontasks import (refresh_node, refresh_node_or_none, refresh_parameter, refresh_edge, refresh_edge_or_none,
1010
parameters_in_scope, exchanges_to_sdf, database_is_locked, database_is_legacy, projects_by_last_opened,
11-
node_group)
11+
node_group, is_node_product, is_node_biosphere)
1212
from .metadata import AB_metadata
1313
from .montecarlo import MonteCarloLCA
1414
from .multilca import MLCA, Contributions

activity_browser/bwutils/commontasks.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,28 @@ def get_activity_name(key, str_length=22):
195195
return ",".join(key.get("name", "").split(",")[:3])[:str_length]
196196

197197

198+
def is_node_product(node: tuple | int | bd.Node) -> bool:
199+
node = refresh_node(node)
200+
raw_type = node._document.type
201+
202+
if raw_type in ["product", "processwithreferenceproduct"]:
203+
return True
204+
205+
if raw_type == "process" and len(node.production()):
206+
return True
207+
208+
return False
209+
210+
211+
def is_node_biosphere(node: tuple | int | bd.Node) -> bool:
212+
node = refresh_node(node)
213+
raw_type = node._document.type
214+
215+
if raw_type in ["natural resource", "emission", "inventory indicator", "economic", "social"]:
216+
return True
217+
return False
218+
219+
198220
def refresh_node(node: tuple | int | bd.Node) -> bd.Node:
199221
if isinstance(node, bd.Node):
200222
node = bd.get_node(id=node.id)

activity_browser/layouts/pages/activity_details/exchanges_tab.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -228,16 +228,21 @@ def dropEvent(self, event):
228228
exchanges = {"technosphere": set(), "biosphere": set()}
229229

230230
for key in keys:
231-
act = bd.get_node(key=key)
232-
if act["type"] not in EXCHANGE_MAP:
233-
continue
234-
exc_type = EXCHANGE_MAP[act["type"]]
235-
exchanges[exc_type].add(act.key)
231+
if exc_type := get_exchange_type(key):
232+
exchanges[exc_type].add(key)
236233

237234
# Run the action for new exchanges
238235
for exc_type, keys in exchanges.items():
239236
actions.ExchangeNew.run(keys, self.activity.key, exc_type)
240237

238+
def get_exchange_type(activity_key: tuple) -> str | None:
239+
if bwutils.is_node_product(activity_key):
240+
return "technosphere"
241+
elif bwutils.is_node_biosphere(activity_key):
242+
return "biosphere"
243+
return None
244+
245+
241246

242247
class DropOverlay(QtWidgets.QWidget):
243248
def __init__(self, parent=None):

0 commit comments

Comments
 (0)