Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/schema/schema_neo4j_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -766,11 +766,13 @@ def link_entity_to_direct_ancestors(neo4j_driver, entity_uuid, direct_ancestor_u
activity_uuid : str
The uuid of the existing activity node to link to
"""
def add_new_ancestors_to_existing_activity(neo4j_driver, new_ancestor_uuids, activity_uuid):
def add_new_ancestors_to_existing_activity(neo4j_driver, new_ancestor_uuids, activity_uuid, create_activity, activity_data_dict, dataset_uuid):
try:
with neo4j_driver.session() as session:
tx = session.begin_transaction()

if create_activity:
create_activity_tx(tx, activity_data_dict)
create_relationship_tx(tx, activity_uuid, dataset_uuid, 'ACTIVITY_OUTPUT', '->')
create_outgoing_activity_relationships_tx(tx=tx
, source_node_uuids=new_ancestor_uuids
, activity_node_uuid=activity_uuid)
Expand Down
22 changes: 18 additions & 4 deletions src/schema/schema_triggers.py
Original file line number Diff line number Diff line change
Expand Up @@ -892,18 +892,25 @@ def link_dataset_to_direct_ancestors(property_key, normalized_type, request, use

if 'direct_ancestor_uuids' not in new_data_dict:
raise KeyError("Missing 'direct_ancestor_uuids' key in 'new_data_dict' during calling 'link_dataset_to_direct_ancestors()' trigger method.")

create_activity = False
activity_data_dict = {}
dataset_uuid = existing_data_dict['uuid']
direct_ancestor_uuids = new_data_dict['direct_ancestor_uuids']

existing_dataset_ancestor_uuids = schema_neo4j_queries.get_dataset_direct_ancestors(schema_manager.get_neo4j_driver_instance(), dataset_uuid, "uuid")
new_ancestors = set(direct_ancestor_uuids)-set(existing_dataset_ancestor_uuids)
ancestors_to_unlink = set(existing_dataset_ancestor_uuids)-set(direct_ancestor_uuids)
activity_uuid = schema_neo4j_queries.get_parent_activity_uuid_from_entity(schema_manager.get_neo4j_driver_instance(), dataset_uuid)

if not activity_uuid:
activity_data_dict = schema_manager.generate_activity_data(normalized_type, request, user_token, existing_data_dict)
activity_uuid = activity_data_dict['uuid']
create_activity = True

if new_ancestors:

try:
schema_neo4j_queries.add_new_ancestors_to_existing_activity(schema_manager.get_neo4j_driver_instance(), list(new_ancestors), activity_uuid)
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)
except TransactionError:
raise

Expand Down Expand Up @@ -1911,7 +1918,8 @@ def link_sample_to_direct_ancestor(property_key, normalized_type, request, user_

if 'direct_ancestor_uuid' not in new_data_dict:
raise KeyError("Missing 'direct_ancestor_uuid' key in 'new_data_dict' during calling 'link_sample_to_direct_ancestor()' trigger method.")

create_activity = False
activity_data_dict = {}
sample_uuid = existing_data_dict['uuid']

# Build a list of direct ancestor uuids
Expand All @@ -1921,10 +1929,16 @@ def link_sample_to_direct_ancestor(property_key, normalized_type, request, user_
new_ancestors = set(direct_ancestor_uuids)-set(existing_sample_ancestor_uuids)
ancestors_to_unlink = set(existing_sample_ancestor_uuids)-set(direct_ancestor_uuids)
activity_uuid = schema_neo4j_queries.get_parent_activity_uuid_from_entity(schema_manager.get_neo4j_driver_instance(), sample_uuid)

if not activity_uuid:
activity_data_dict = schema_manager.generate_activity_data(normalized_type, request, user_token, existing_data_dict)
activity_uuid = activity_data_dict['uuid']
create_activity = True

if new_ancestors:

try:
schema_neo4j_queries.add_new_ancestors_to_existing_activity(schema_manager.get_neo4j_driver_instance(), list(new_ancestors), activity_uuid)
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)
except TransactionError:
raise

Expand Down