Skip to content

Commit 554b6ee

Browse files
committed
Release Bloom v0 graph closeout
1 parent 34c684b commit 554b6ee

16 files changed

Lines changed: 427 additions & 421 deletions

README.md

Lines changed: 40 additions & 365 deletions
Large diffs are not rendered by default.

bloom_lims/domain/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ def _apply_default_graph_metadata(self, instance) -> None:
559559
"node_role": "fixed_plate_well",
560560
"role": "bloom_fixed_plate_well",
561561
"expected_fanout_max": 1,
562-
"fanout_reason": "plate well contains at most one material",
562+
"fanout_reason": "plate well holds at most one material",
563563
"expected_fanout": [
564564
self._expected_fanout_entry(
565565
relationship_types=["HOLDS_MATERIAL"],

bloom_lims/domain/beta_lab_materials.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def register_accepted_material(
4848
node_role="accepted_container",
4949
expected_fanout=[
5050
self._graph_expected_fanout_entry(
51-
relationship_types=["contains"],
51+
relationship_types=["HOLDS_MATERIAL"],
5252
max_child_count=1,
5353
reason="accepted specimen container holds one accepted beta material",
5454
),
@@ -76,7 +76,7 @@ def register_accepted_material(
7676
relationship_types=[
7777
"beta_extraction_output",
7878
"beta_extraction_run_input",
79-
"contains",
79+
"HOLDS_MATERIAL",
8080
],
8181
max_child_count=3,
8282
reason="accepted specimen feeds one extraction path in the ILMN proband beta",

bloom_lims/domain/beta_lab_queue.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ def _resolve_queue_worker(
739739

740740
def _find_execution_container(self, material):
741741
for lineage in get_child_lineages(material):
742-
if lineage.is_deleted or lineage.relationship_type != "contains":
742+
if lineage.is_deleted or lineage.relationship_type != "HOLDS_MATERIAL":
743743
continue
744744
parent = lineage.parent_instance
745745
if (

bloom_lims/domain/beta_lab_refs.py

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from typing import Any
66

7+
from bloom_lims.domain.v0_graph import attach_bloom_v0_edge, object_evidence
78
from bloom_lims.tapdb_adapter import get_child_lineages, get_parent_lineages
89
from bloom_lims.template_identity import instance_semantic_category
910

@@ -22,9 +23,81 @@ class _BetaLabReferenceMixin:
2223
"beta_pool_member",
2324
"beta_sequenced_library_assignment",
2425
"beta_sequencing_run",
26+
"HOLDS_MATERIAL",
27+
"RUN_CONSUMED",
28+
"RUN_PRODUCED",
29+
"DERIVED_FROM",
2530
}
2631
)
2732

33+
def _attach_v0_edge_to_lineage(
34+
self,
35+
lineage,
36+
*,
37+
edge_type: str,
38+
source_euid: str,
39+
target_euid: str,
40+
source_role: str,
41+
target_role: str,
42+
evidence_refs: list[dict[str, Any]],
43+
correlation_id: str,
44+
causation_id: str,
45+
source_system: str = "bloom",
46+
target_system: str = "bloom",
47+
):
48+
return attach_bloom_v0_edge(
49+
lineage,
50+
edge_type=edge_type,
51+
source_euid=source_euid,
52+
target_euid=target_euid,
53+
source_role=source_role,
54+
target_role=target_role,
55+
source_system=source_system,
56+
target_system=target_system,
57+
evidence_refs=evidence_refs,
58+
correlation_id=correlation_id,
59+
causation_id=causation_id,
60+
)
61+
62+
def _attach_bloom_v0_lineage(
63+
self,
64+
parent_euid: str,
65+
child_euid: str,
66+
*,
67+
relationship_type: str,
68+
edge_type: str,
69+
source_euid: str,
70+
target_euid: str,
71+
source_role: str,
72+
target_role: str,
73+
source_system: str = "bloom",
74+
target_system: str = "bloom",
75+
extra_evidence_refs: list[dict[str, Any]] | None = None,
76+
):
77+
lineage = self.bobj.create_generic_instance_lineage_by_euids(
78+
parent_euid,
79+
child_euid,
80+
relationship_type=relationship_type,
81+
)
82+
evidence_refs = [
83+
object_evidence(parent_euid, role="tapdb_lineage_parent"),
84+
object_evidence(child_euid, role="tapdb_lineage_child"),
85+
*(extra_evidence_refs or []),
86+
]
87+
return self._attach_v0_edge_to_lineage(
88+
lineage,
89+
edge_type=edge_type,
90+
source_euid=source_euid,
91+
target_euid=target_euid,
92+
source_role=source_role,
93+
target_role=target_role,
94+
source_system=source_system,
95+
target_system=target_system,
96+
evidence_refs=evidence_refs,
97+
correlation_id=f"{relationship_type}:{parent_euid}:{child_euid}",
98+
causation_id=f"bloom:{relationship_type}:{parent_euid}:{child_euid}",
99+
)
100+
28101
def _resolve_fulfillment_item_context(
29102
self,
30103
instance,
@@ -367,11 +440,38 @@ def _replace_fulfillment_item_references(
367440
self.EXTERNAL_REFERENCE_TEMPLATE_CODE,
368441
{"json_addl": {"properties": properties}},
369442
)
370-
self.bobj.create_generic_instance_lineage_by_euids(
443+
lineage = self.bobj.create_generic_instance_lineage_by_euids(
371444
instance.euid,
372445
ref_obj.euid,
373446
relationship_type=self.EXTERNAL_REFERENCE_RELATIONSHIP,
374447
)
448+
self._attach_v0_edge_to_lineage(
449+
lineage,
450+
edge_type="SLOT_SATISFIED_BY",
451+
source_euid=atlas_fulfillment_slot_euid,
452+
target_euid=instance.euid,
453+
source_role="fulfillment_slot",
454+
target_role="satisfying_bloom_object",
455+
source_system="atlas",
456+
target_system="bloom",
457+
evidence_refs=[
458+
object_evidence(
459+
atlas_fulfillment_slot_euid,
460+
role="fulfillment_slot",
461+
system="atlas",
462+
),
463+
object_evidence(instance.euid, role="satisfying_bloom_object"),
464+
object_evidence(ref_obj.euid, role="atlas_reference_link"),
465+
],
466+
correlation_id=(
467+
f"SLOT_SATISFIED_BY:{atlas_fulfillment_slot_euid}:"
468+
f"{instance.euid}"
469+
),
470+
causation_id=(
471+
f"bloom:atlas_fulfillment_reference:"
472+
f"{atlas_fulfillment_slot_euid}:{instance.euid}"
473+
),
474+
)
375475
self._sync_atlas_tapdb_graph_refs(
376476
instance, additional_payloads=created_payloads
377477
)

0 commit comments

Comments
 (0)