Skip to content

Commit 3752365

Browse files
committed
refactored file_based_task_creation to use project id function
1 parent 57d7d43 commit 3752365

2 files changed

Lines changed: 22 additions & 67 deletions

File tree

synapseclient/extensions/curator/file_based_metadata_task.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -430,27 +430,18 @@ def create_file_based_metadata_task(
430430
synapse_client.logger.info(
431431
"Attempting to get the Synapse ID of the provided folders project."
432432
)
433-
try:
434-
entity = Folder(folder_id).get(synapse_client=synapse_client)
435-
parent = synapse_client.get(entity.parent_id)
436-
project = None
437-
while not project:
438-
if parent.concreteType == "org.sagebionetworks.repo.model.Project":
439-
project = parent
440-
break
441-
parent = synapse_client.get(parent.parentId)
442-
except Exception as e:
443-
synapse_client.logger.exception(
444-
"Error getting the Synapse ID of the provided folders project"
445-
)
446-
raise e
433+
from synapseclient.extensions.curator.record_based_metadata_task import (
434+
project_id_from_entity_id,
435+
)
436+
437+
project_id = project_id_from_entity_id(folder_id, synapse_client=synapse_client)
447438
synapse_client.logger.info("Got the Synapse ID of the provided folders project.")
448439

449440
synapse_client.logger.info("Attempting to create the CurationTask.")
450441
try:
451442
task = CurationTask(
452443
data_type=task_datatype,
453-
project_id=project.id,
444+
project_id=project_id,
454445
instructions=instructions,
455446
assignee_principal_id=(
456447
str(assignee_principal_id)

tests/unit/synapseclient/extensions/unit_test_curator.py

Lines changed: 16 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,15 @@ def setUp(self):
7272
self.mock_syn = Mock(spec=Synapse)
7373
self.mock_syn.logger = Mock()
7474
self.folder_id = "syn12345678"
75+
self.project_id = "syn11111111"
7576
self.curation_task_name = "TestCurationTask"
7677
self.instructions = "Test instructions"
7778
self.entity_view_name = "Test Entity View"
7879
self.schema_uri = "sage.schemas.v2571-amp.Biospecimen.schema-0.0.1"
7980

81+
@patch(
82+
"synapseclient.extensions.curator.record_based_metadata_task.project_id_from_entity_id"
83+
)
8084
@patch(
8185
"synapseclient.extensions.curator.file_based_metadata_task.Synapse.get_client"
8286
)
@@ -97,11 +101,13 @@ def test_create_file_based_metadata_task_success_with_schema(
97101
mock_create_wiki,
98102
mock_create_entity_view,
99103
mock_get_client,
104+
mock_get_project_id_from_entity_id,
100105
):
101106
"""Test successful creation with schema binding."""
102107
# GIVEN a file-based metadata task with schema binding
103108
mock_get_client.return_value = self.mock_syn
104109
mock_create_entity_view.return_value = "syn87654321"
110+
mock_get_project_id_from_entity_id.return_value = self.project_id
105111

106112
mock_folder = Mock()
107113
mock_folder_cls.return_value = mock_folder
@@ -148,6 +154,9 @@ def test_create_file_based_metadata_task_success_with_schema(
148154
)
149155
mock_get.assert_called_once_with(self.folder_id, synapse_client=self.mock_syn)
150156

157+
@patch(
158+
"synapseclient.extensions.curator.record_based_metadata_task.project_id_from_entity_id"
159+
)
151160
@patch(
152161
"synapseclient.extensions.curator.file_based_metadata_task.Synapse.get_client"
153162
)
@@ -162,11 +171,13 @@ def test_create_file_based_metadata_task_success_without_schema_no_wiki(
162171
mock_folder_cls,
163172
mock_create_entity_view,
164173
mock_get_client,
174+
mock_get_project_id_from_entity_id,
165175
):
166176
"""Test successful creation without schema binding and without wiki."""
167177
# GIVEN a file-based metadata task without schema binding or wiki
168178
mock_get_client.return_value = self.mock_syn
169179
mock_create_entity_view.return_value = "syn87654321"
180+
mock_get_project_id_from_entity_id.return_value = self.project_id
170181

171182
mock_folder = Mock()
172183
mock_folder_cls.return_value = mock_folder
@@ -382,58 +393,8 @@ def test_create_file_based_metadata_task_schema_retrieval_error(
382393
)
383394

384395
@patch(
385-
"synapseclient.extensions.curator.file_based_metadata_task.Synapse.get_client"
396+
"synapseclient.extensions.curator.record_based_metadata_task.project_id_from_entity_id"
386397
)
387-
@patch(
388-
"synapseclient.extensions.curator.file_based_metadata_task.create_json_schema_entity_view"
389-
)
390-
@patch("synapseclient.extensions.curator.file_based_metadata_task.Folder")
391-
def test_create_file_based_metadata_task_project_traversal(
392-
self, mock_folder_cls, mock_create_entity_view, mock_get_client
393-
):
394-
"""Test project traversal to find parent project."""
395-
mock_get_client.return_value = self.mock_syn
396-
mock_create_entity_view.return_value = "syn87654321"
397-
398-
mock_folder = Mock()
399-
mock_folder_cls.return_value = mock_folder
400-
mock_folder.get.return_value = mock_folder
401-
mock_folder.parent_id = "syn11111111"
402-
403-
# Mock parent folder
404-
mock_parent_folder = Mock()
405-
mock_parent_folder.concreteType = "org.sagebionetworks.repo.model.Folder"
406-
mock_parent_folder.parentId = "syn22222222"
407-
408-
# Mock project
409-
mock_project = Mock()
410-
mock_project.concreteType = "org.sagebionetworks.repo.model.Project"
411-
mock_project.id = "syn22222222"
412-
413-
self.mock_syn.get.side_effect = [mock_parent_folder, mock_project]
414-
415-
mock_task = Mock()
416-
mock_task.task_id = "task123"
417-
418-
with patch(
419-
"synapseclient.extensions.curator.file_based_metadata_task.CurationTask"
420-
) as mock_curation_task_cls:
421-
mock_curation_task = Mock()
422-
mock_curation_task.store.return_value = mock_task
423-
mock_curation_task_cls.return_value = mock_curation_task
424-
425-
result = create_file_based_metadata_task(
426-
folder_id=self.folder_id,
427-
curation_task_name=self.curation_task_name,
428-
instructions=self.instructions,
429-
attach_wiki=False,
430-
synapse_client=self.mock_syn,
431-
)
432-
433-
self.assertEqual(result, ("syn87654321", "task123"))
434-
# Verify that syn.get was called twice (for parent folder and project)
435-
self.assertEqual(self.mock_syn.get.call_count, 2)
436-
437398
@patch(
438399
"synapseclient.extensions.curator.file_based_metadata_task.Synapse.get_client"
439400
)
@@ -448,6 +409,7 @@ def test_create_file_based_metadata_task_with_assignee(
448409
mock_folder_cls,
449410
mock_create_entity_view,
450411
mock_get_client,
412+
mock_get_project_id_from_entity_id,
451413
):
452414
"""Test successful creation of file-based metadata task with assignee_principal_id."""
453415
# Test both string and int inputs - int should be converted to string
@@ -463,10 +425,12 @@ def test_create_file_based_metadata_task_with_assignee(
463425
mock_folder_cls.reset_mock()
464426
mock_create_entity_view.reset_mock()
465427
mock_get_client.reset_mock()
428+
mock_get_project_id_from_entity_id.reset_mock()
466429

467430
# GIVEN a file-based metadata task with assignee_principal_id
468431
mock_get_client.return_value = self.mock_syn
469432
mock_create_entity_view.return_value = "test_entity_view_id"
433+
mock_get_project_id_from_entity_id.return_value = self.project_id
470434

471435
mock_folder = Mock()
472436
mock_folder_cls.return_value = mock_folder
@@ -500,7 +464,7 @@ def test_create_file_based_metadata_task_with_assignee(
500464
# THEN the CurationTask should be called with assignee_principal_id as string
501465
mock_curation_task_cls.assert_called_once_with(
502466
data_type=self.curation_task_name,
503-
project_id="syn22222222",
467+
project_id=self.project_id,
504468
instructions=self.instructions,
505469
assignee_principal_id=expected_assignee,
506470
task_properties=FileBasedMetadataTaskProperties(

0 commit comments

Comments
 (0)