Skip to content

Commit 92f4e91

Browse files
authored
Merge pull request #216 from hubmapconsortium/test-release
v2.0.15
2 parents c06f8ec + 4d72123 commit 92f4e91

File tree

5 files changed

+45
-59
lines changed

5 files changed

+45
-59
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.0.14
1+
2.0.15

src/app.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ def get_collections():
759759
Parameters
760760
----------
761761
entity_type : str
762-
One of the target entity types (case-insensitive since will be normalized): Dataset, Donor, Sample
762+
One of the target entity types (case-insensitive since will be normalized): Dataset, Donor, Sample, Upload
763763
764764
Returns
765765
-------
@@ -2420,13 +2420,12 @@ def create_multiple_samples_details(request, normalized_entity_type, user_token,
24202420
samples_dict_list.append(sample_dict)
24212421

24222422
# Generate property values for the only one Activity node
2423-
# The resulting list contains only one dict in this case by using the default count = 1
2424-
activity_data_dict_list = schema_manager.generate_activity_data(normalized_entity_type, user_token, user_info_dict)
2423+
activity_data_dict = schema_manager.generate_activity_data(normalized_entity_type, user_token, user_info_dict)
24252424

24262425
# Create new sample nodes and needed relationships as well as activity node in one transaction
24272426
try:
24282427
# No return value
2429-
app_neo4j_queries.create_multiple_samples(neo4j_driver_instance, samples_dict_list, activity_data_dict_list[0], json_data_dict['direct_ancestor_uuid'])
2428+
app_neo4j_queries.create_multiple_samples(neo4j_driver_instance, samples_dict_list, activity_data_dict, json_data_dict['direct_ancestor_uuid'])
24302429
except TransactionError:
24312430
msg = "Failed to create multiple samples"
24322431
# Log the full stack trace, prepend a line with our message

src/schema/schema_manager.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,7 +1389,7 @@ def get_entity_group_name(group_uuid):
13891389

13901390

13911391
"""
1392-
Generate properties data of one or more Activity nodes
1392+
Generate properties data of the target Activity node
13931393
13941394
Parameters
13951395
----------
@@ -1404,30 +1404,25 @@ def get_entity_group_name(group_uuid):
14041404
14051405
Returns
14061406
-------
1407-
list: A list of gnerated Activity data dicts
1407+
dict: A dict of gnerated Activity data
14081408
"""
1409-
def generate_activity_data(normalized_entity_type, user_token, user_info_dict, count = 1):
1409+
def generate_activity_data(normalized_entity_type, user_token, user_info_dict):
14101410
# Activity is not an Entity
14111411
normalized_activity_type = 'Activity'
14121412

14131413
# Target entity type dict
14141414
# Will be used when calling `set_activity_creation_action()` trigger method
14151415
normalized_entity_type_dict = {'normalized_entity_type': normalized_entity_type}
14161416

1417-
# Create new ids for each new Activity node
1418-
new_ids_dict_list = create_hubmap_ids(normalized_activity_type, json_data_dict = None, user_token = user_token, user_info_dict = None, count = count)
1419-
1420-
activity_data_dict_list = []
1421-
for new_ids_dict in new_ids_dict_list:
1422-
data_dict_for_activity = {**user_info_dict, **normalized_entity_type_dict, **new_ids_dict}
1423-
1424-
# Generate property values for Activity node
1425-
generated_activity_data_dict = generate_triggered_data('before_create_trigger', normalized_activity_type, user_token, {}, data_dict_for_activity)
1417+
# Create new ids for the Activity node
1418+
# This resulting list has only one dict
1419+
new_ids_dict_list = create_hubmap_ids(normalized_activity_type, json_data_dict = None, user_token = user_token, user_info_dict = None)
1420+
data_dict_for_activity = {**user_info_dict, **normalized_entity_type_dict, **new_ids_dict_list[0]}
14261421

1427-
# Add to list
1428-
activity_data_dict_list.append(generated_activity_data_dict)
1429-
1430-
return activity_data_dict_list
1422+
# Generate property values for Activity node
1423+
generated_activity_data_dict = generate_triggered_data('before_create_trigger', normalized_activity_type, user_token, {}, data_dict_for_activity)
1424+
1425+
return generated_activity_data_dict
14311426

14321427

14331428
"""

src/schema/schema_neo4j_queries.py

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -70,32 +70,30 @@ def get_dataset_direct_ancestors(neo4j_driver, uuid, property_key = None):
7070
The uuid of target child entity
7171
direct_ancestor_uuids : list
7272
A list of uuids of direct ancestors
73-
activity_data_dict_list : list
74-
A list of activity properties for each activity node to be created
73+
activity_data_dict : dict
74+
A dict of activity properties to be created
7575
"""
76-
def link_entity_to_direct_ancestors(neo4j_driver, entity_uuid, direct_ancestor_uuids, activity_data_dict_list):
76+
def link_entity_to_direct_ancestors(neo4j_driver, entity_uuid, direct_ancestor_uuids, activity_data_dict):
7777
try:
7878
with neo4j_driver.session() as session:
7979
tx = session.begin_transaction()
8080

81-
# First delete all the old linkages between this entity node and its direct ancestors
82-
_delete_direct_ancestor_linkages_tx(tx, entity_uuid)
81+
# First delete all the old linkages and Activity node between this entity and its direct ancestors
82+
_delete_activity_node_and_linkages_tx(tx, entity_uuid)
83+
84+
# Get the activity uuid
85+
activity_uuid = activity_data_dict['uuid']
8386

84-
# Loop over two lists at the same time using indexes to look up corresponding elements
85-
for index, direct_ancestor_uuid in enumerate(direct_ancestor_uuids):
86-
# Get the corresponding activity uuid
87-
activity_data_dict = activity_data_dict_list[index]
88-
activity_uuid = activity_data_dict['uuid']
87+
# Create the Acvitity node
88+
_create_activity_tx(tx, activity_data_dict)
8989

90-
# Create the Acvitity node
91-
_create_activity_tx(tx, activity_data_dict)
90+
# Create relationship from this Activity node to the target entity node
91+
_create_relationship_tx(tx, activity_uuid, entity_uuid, 'ACTIVITY_OUTPUT', '->')
9292

93-
# Create relationship from ancestor entity node to this Activity node
93+
# Create relationship from each ancestor entity node to this Activity node
94+
for direct_ancestor_uuid in direct_ancestor_uuids:
9495
_create_relationship_tx(tx, direct_ancestor_uuid, activity_uuid, 'ACTIVITY_INPUT', '->')
9596

96-
# Create relationship from this Activity node to the target entity node
97-
_create_relationship_tx(tx, activity_uuid, entity_uuid, 'ACTIVITY_OUTPUT', '->')
98-
9997
tx.commit()
10098
except TransactionError as te:
10199
msg = "TransactionError from calling link_entity_to_direct_ancestors(): "
@@ -701,7 +699,7 @@ def _create_activity_tx(tx, activity_data_dict):
701699
return node
702700

703701
"""
704-
Delete thelinkages between an entity and its direct ancestors
702+
Delete the Activity node and linkages between an entity and its direct ancestors
705703
706704
Parameters
707705
----------
@@ -710,13 +708,12 @@ def _create_activity_tx(tx, activity_data_dict):
710708
uuid : str
711709
The uuid to target entity (child of those direct ancestors)
712710
"""
713-
def _delete_direct_ancestor_linkages_tx(tx, uuid):
711+
def _delete_activity_node_and_linkages_tx(tx, uuid):
714712
query = (f"MATCH (s:Entity)-[in:ACTIVITY_INPUT]->(a:Activity)-[out:ACTIVITY_OUTPUT]->(t:Entity) "
715713
f"WHERE t.uuid = '{uuid}' "
716-
# Delete the Activity node and in input/output relationships
717714
f"DELETE in, a, out")
718715

719-
logger.debug("======_delete_direct_ancestor_linkages_tx() query======")
716+
logger.debug("======_delete_activity_node_and_linkages_tx() query======")
720717
logger.debug(query)
721718

722719
result = tx.run(query)

src/schema/schema_triggers.py

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -770,14 +770,12 @@ def link_dataset_to_direct_ancestors(property_key, normalized_type, user_token,
770770

771771
direct_ancestor_uuids = existing_data_dict['direct_ancestor_uuids']
772772

773-
# Generate property values for each Activity node
774-
count = len(direct_ancestor_uuids)
775-
activity_data_dict_list = schema_manager.generate_activity_data(normalized_type, user_token, existing_data_dict, count)
773+
# Generate property values for Activity node
774+
activity_data_dict = schema_manager.generate_activity_data(normalized_type, user_token, existing_data_dict)
776775

777776
try:
778-
# Create a linkage (via Activity node) between the dataset node
779-
# and each direct ancestor node in neo4j
780-
schema_neo4j_queries.link_entity_to_direct_ancestors(schema_manager.get_neo4j_driver_instance(), existing_data_dict['uuid'], direct_ancestor_uuids, activity_data_dict_list)
777+
# Create a linkage (via one Activity node) between the dataset node and its direct ancestors in neo4j
778+
schema_neo4j_queries.link_entity_to_direct_ancestors(schema_manager.get_neo4j_driver_instance(), existing_data_dict['uuid'], direct_ancestor_uuids, activity_data_dict)
781779
except TransactionError:
782780
# No need to log
783781
raise
@@ -1177,14 +1175,13 @@ def link_donor_to_lab(property_key, normalized_type, user_token, existing_data_d
11771175
# Only one uuid in the list in this case
11781176
direct_ancestor_uuids = [existing_data_dict['group_uuid']]
11791177

1180-
# Generate property values for Activity
1181-
# Only one Activity in this case, using the default count = 1
1182-
activity_data_dict_list = schema_manager.generate_activity_data(normalized_type, user_token, existing_data_dict)
1178+
# Generate property values for Activity node
1179+
activity_data_dict = schema_manager.generate_activity_data(normalized_type, user_token, existing_data_dict)
11831180

11841181
try:
11851182
# Create a linkage (via Activity node)
11861183
# between the Donor node and the parent Lab node in neo4j
1187-
schema_neo4j_queries.link_entity_to_direct_ancestors(schema_manager.get_neo4j_driver_instance(), existing_data_dict['uuid'], direct_ancestor_uuids, activity_data_dict_list)
1184+
schema_neo4j_queries.link_entity_to_direct_ancestors(schema_manager.get_neo4j_driver_instance(), existing_data_dict['uuid'], direct_ancestor_uuids, activity_data_dict)
11881185
except TransactionError:
11891186
# No need to log
11901187
raise
@@ -1304,14 +1301,13 @@ def link_sample_to_direct_ancestor(property_key, normalized_type, user_token, ex
13041301
# Only one uuid in the list in this case
13051302
direct_ancestor_uuids = [existing_data_dict['direct_ancestor_uuid']]
13061303

1307-
# Generate property values for Activity
1308-
# Only one Activity in this case, using the default count = 1
1309-
activity_data_dict_list = schema_manager.generate_activity_data(normalized_type, user_token, existing_data_dict)
1304+
# Generate property values for Activity node
1305+
activity_data_dict = schema_manager.generate_activity_data(normalized_type, user_token, existing_data_dict)
13101306

13111307
try:
13121308
# Create a linkage (via Activity node)
13131309
# between the Sample node and the source entity node in neo4j
1314-
schema_neo4j_queries.link_entity_to_direct_ancestors(schema_manager.get_neo4j_driver_instance(), existing_data_dict['uuid'], direct_ancestor_uuids, activity_data_dict_list)
1310+
schema_neo4j_queries.link_entity_to_direct_ancestors(schema_manager.get_neo4j_driver_instance(), existing_data_dict['uuid'], direct_ancestor_uuids, activity_data_dict)
13151311
except TransactionError:
13161312
# No need to log
13171313
raise
@@ -1412,14 +1408,13 @@ def link_upload_to_lab(property_key, normalized_type, user_token, existing_data_
14121408
# Only one uuid in the list in this case
14131409
direct_ancestor_uuids = [existing_data_dict['group_uuid']]
14141410

1415-
# Generate property values for Activity
1416-
# Only one Activity in this case, using the default count = 1
1417-
activity_data_dict_list = schema_manager.generate_activity_data(normalized_type, user_token, existing_data_dict)
1411+
# Generate property values for Activity node
1412+
activity_data_dict = schema_manager.generate_activity_data(normalized_type, user_token, existing_data_dict)
14181413

14191414
try:
14201415
# Create a linkage (via Activity node)
14211416
# between the Submission node and the parent Lab node in neo4j
1422-
schema_neo4j_queries.link_entity_to_direct_ancestors(schema_manager.get_neo4j_driver_instance(), existing_data_dict['uuid'], direct_ancestor_uuids, activity_data_dict_list)
1417+
schema_neo4j_queries.link_entity_to_direct_ancestors(schema_manager.get_neo4j_driver_instance(), existing_data_dict['uuid'], direct_ancestor_uuids, activity_data_dict)
14231418
except TransactionError:
14241419
# No need to log
14251420
raise

0 commit comments

Comments
 (0)