From 4c2520bd1ee64ac0d8931d2e2fa86b6206394d07 Mon Sep 17 00:00:00 2001 From: LSJ Date: Tue, 30 Apr 2024 07:58:55 +0200 Subject: [PATCH 1/2] Fix to LCAbyg export algorithm * Layer nodes are now exported only once * Comment property on exported nodes now defaults to empty string * Conversion or mass_factor is now exported correctly * Stages now contains the specific type of stage in its name --- src/logic/export/lcabyg/nodes.py | 10 +++++----- src/logic/export/to_lcabyg.py | 22 +++++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/logic/export/lcabyg/nodes.py b/src/logic/export/lcabyg/nodes.py index 64f2323..11b5414 100644 --- a/src/logic/export/lcabyg/nodes.py +++ b/src/logic/export/lcabyg/nodes.py @@ -38,7 +38,7 @@ class ClassNode(Node): def __init__(self, entity: SchemaCategory | SchemaElement): self.id = entity.id self.name = getattr(entity, "name", None) or entity.type_code_element.name - self.comment = entity.description + self.comment = entity.description or "" self.unit = self._get_unit(entity) self.element_category_id = self._resolve_category_name(entity) super().__init__() @@ -79,9 +79,9 @@ def _resolve_category_name(entity: SchemaCategory | SchemaElement) -> str | None class DictNode(Node): - def __init__(self, entity: dict): + def __init__(self, entity: dict, name: str = None): self.id = entity.get("id") - self.name = entity.get("name") + self.name = name or entity.get("name") self.comment = entity.get("description", "") or "" super().__init__() @@ -186,7 +186,7 @@ def __init__(self, entity: dict, stage: str): self.valid_to = epd.get("validUntil") self.mass_factor = self._get_mass_factor(epd) self.element_category_id = "f1bca522-df0d-4b74-a5de-cdecc2763d05" - super().__init__(epd) + super().__init__(epd, f'{epd.get("name")} ({stage})') def set_indicators(self, entity: dict, stage: str): if stage == "A1to3": @@ -206,7 +206,7 @@ def set_indicators(self, entity: dict, stage: str): @staticmethod def _get_mass_factor(entity: dict) -> float: for conversion in entity.get("conversions"): - if conversion.get("to") == "kg": + if conversion.get("to").casefold() == "kg": return conversion.get("value") def as_dict(self) -> dict: diff --git a/src/logic/export/to_lcabyg.py b/src/logic/export/to_lcabyg.py index f227498..1710d3d 100644 --- a/src/logic/export/to_lcabyg.py +++ b/src/logic/export/to_lcabyg.py @@ -45,6 +45,7 @@ def aggregate_lcabyg_models( """ entity_list = [] + layer_nodes = {} for category in schema_categories: if category.elements == []: # pragma: no branch continue @@ -60,12 +61,19 @@ def aggregate_lcabyg_models( for assembly in assemblies: if assembly["id"] == element.assembly_id: for layer in assembly.get("layers", []): - layer_node = create_node(layer) - entity_list.extend([layer_node, create_edge(layer_node, element_node)]) - for phase in ["A1to3", "C3", "C4", "D"]: - phase_node = create_node((layer, phase)) - entity_list.extend( - [phase_node, create_edge(phase_node, layer_node), create_edge(phase_node)] # ]) - ) + + if layer["id"] not in layer_nodes: + layer_node = create_node(layer) + layer_nodes[layer["id"]] = layer_node + entity_list.append(layer_node) + for phase in ["A1to3", "C3", "C4", "D"]: + phase_node = create_node((layer, phase)) + entity_list.extend( + [phase_node, create_edge(phase_node, layer_node), create_edge(phase_node)] # ]) + ) + else: + layer_node = layer_nodes[layer["id"]] + + entity_list.append(create_edge(layer_node, element_node)) return entity_list From a59a2e4f24ca6c8cecc7dbe4f0fc9b90e4b2c545 Mon Sep 17 00:00:00 2001 From: LSJ Date: Tue, 30 Apr 2024 08:55:54 +0200 Subject: [PATCH 2/2] Fixed formatting in to_lcabyg.py --- src/logic/export/to_lcabyg.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/logic/export/to_lcabyg.py b/src/logic/export/to_lcabyg.py index 1710d3d..5cdc4ed 100644 --- a/src/logic/export/to_lcabyg.py +++ b/src/logic/export/to_lcabyg.py @@ -61,7 +61,6 @@ def aggregate_lcabyg_models( for assembly in assemblies: if assembly["id"] == element.assembly_id: for layer in assembly.get("layers", []): - if layer["id"] not in layer_nodes: layer_node = create_node(layer) layer_nodes[layer["id"]] = layer_node @@ -73,7 +72,7 @@ def aggregate_lcabyg_models( ) else: layer_node = layer_nodes[layer["id"]] - + entity_list.append(create_edge(layer_node, element_node)) return entity_list