Skip to content

Commit 8d7fe21

Browse files
authored
Merge pull request #933 from hubmapconsortium/Derek-Furst/avoid-unecessary-linkeages
fixed a bug introduced with the new reworked triggers for linking dir…
2 parents 6bb4017 + bcb7dd1 commit 8d7fe21

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

src/schema/schema_neo4j_queries.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -766,11 +766,13 @@ def link_entity_to_direct_ancestors(neo4j_driver, entity_uuid, direct_ancestor_u
766766
activity_uuid : str
767767
The uuid of the existing activity node to link to
768768
"""
769-
def add_new_ancestors_to_existing_activity(neo4j_driver, new_ancestor_uuids, activity_uuid):
769+
def add_new_ancestors_to_existing_activity(neo4j_driver, new_ancestor_uuids, activity_uuid, create_activity, activity_data_dict, dataset_uuid):
770770
try:
771771
with neo4j_driver.session() as session:
772772
tx = session.begin_transaction()
773-
773+
if create_activity:
774+
create_activity_tx(tx, activity_data_dict)
775+
create_relationship_tx(tx, activity_uuid, dataset_uuid, 'ACTIVITY_OUTPUT', '->')
774776
create_outgoing_activity_relationships_tx(tx=tx
775777
, source_node_uuids=new_ancestor_uuids
776778
, activity_node_uuid=activity_uuid)

src/schema/schema_triggers.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -892,18 +892,25 @@ def link_dataset_to_direct_ancestors(property_key, normalized_type, request, use
892892

893893
if 'direct_ancestor_uuids' not in new_data_dict:
894894
raise KeyError("Missing 'direct_ancestor_uuids' key in 'new_data_dict' during calling 'link_dataset_to_direct_ancestors()' trigger method.")
895-
895+
create_activity = False
896+
activity_data_dict = {}
896897
dataset_uuid = existing_data_dict['uuid']
897898
direct_ancestor_uuids = new_data_dict['direct_ancestor_uuids']
898899

899900
existing_dataset_ancestor_uuids = schema_neo4j_queries.get_dataset_direct_ancestors(schema_manager.get_neo4j_driver_instance(), dataset_uuid, "uuid")
900901
new_ancestors = set(direct_ancestor_uuids)-set(existing_dataset_ancestor_uuids)
901902
ancestors_to_unlink = set(existing_dataset_ancestor_uuids)-set(direct_ancestor_uuids)
902903
activity_uuid = schema_neo4j_queries.get_parent_activity_uuid_from_entity(schema_manager.get_neo4j_driver_instance(), dataset_uuid)
904+
905+
if not activity_uuid:
906+
activity_data_dict = schema_manager.generate_activity_data(normalized_type, request, user_token, existing_data_dict)
907+
activity_uuid = activity_data_dict['uuid']
908+
create_activity = True
909+
903910
if new_ancestors:
904911

905912
try:
906-
schema_neo4j_queries.add_new_ancestors_to_existing_activity(schema_manager.get_neo4j_driver_instance(), list(new_ancestors), activity_uuid)
913+
schema_neo4j_queries.add_new_ancestors_to_existing_activity(schema_manager.get_neo4j_driver_instance(), list(new_ancestors), activity_uuid, create_activity, activity_data_dict, dataset_uuid)
907914
except TransactionError:
908915
raise
909916

@@ -1911,7 +1918,8 @@ def link_sample_to_direct_ancestor(property_key, normalized_type, request, user_
19111918

19121919
if 'direct_ancestor_uuid' not in new_data_dict:
19131920
raise KeyError("Missing 'direct_ancestor_uuid' key in 'new_data_dict' during calling 'link_sample_to_direct_ancestor()' trigger method.")
1914-
1921+
create_activity = False
1922+
activity_data_dict = {}
19151923
sample_uuid = existing_data_dict['uuid']
19161924

19171925
# Build a list of direct ancestor uuids
@@ -1921,10 +1929,16 @@ def link_sample_to_direct_ancestor(property_key, normalized_type, request, user_
19211929
new_ancestors = set(direct_ancestor_uuids)-set(existing_sample_ancestor_uuids)
19221930
ancestors_to_unlink = set(existing_sample_ancestor_uuids)-set(direct_ancestor_uuids)
19231931
activity_uuid = schema_neo4j_queries.get_parent_activity_uuid_from_entity(schema_manager.get_neo4j_driver_instance(), sample_uuid)
1932+
1933+
if not activity_uuid:
1934+
activity_data_dict = schema_manager.generate_activity_data(normalized_type, request, user_token, existing_data_dict)
1935+
activity_uuid = activity_data_dict['uuid']
1936+
create_activity = True
1937+
19241938
if new_ancestors:
19251939

19261940
try:
1927-
schema_neo4j_queries.add_new_ancestors_to_existing_activity(schema_manager.get_neo4j_driver_instance(), list(new_ancestors), activity_uuid)
1941+
schema_neo4j_queries.add_new_ancestors_to_existing_activity(schema_manager.get_neo4j_driver_instance(), list(new_ancestors), activity_uuid, create_activity, activity_data_dict, sample_uuid)
19281942
except TransactionError:
19291943
raise
19301944

0 commit comments

Comments
 (0)