Пример #1
0
class TestGetDestination:
    @pytest.mark.parametrize(
        "parent,raising",
        [
            (flywheel.Subject(label="test"), does_not_raise()),
            (flywheel.Session(label="test"), does_not_raise()),
            (flywheel.Group(label="test"), pytest.raises(ValueError)),
            (flywheel.Project(label="test"), pytest.raises(ValueError)),
            (flywheel.Acquisition(label="test"), pytest.raises(ValueError)),
        ],
    )
    def test_container(self, sdk_mock, parent, raising):
        container = flywheel.models.analysis_output.AnalysisOutput(
            parent=parent, id="test"
        )
        sdk_mock.get_analysis.return_value = container
        sdk_mock.get.return_value = parent

        with raising:
            dest = get_destination(sdk_mock, "test")

            sdk_mock.get_analysis.assert_called_once_with("test")
            # assert dest.__class__ == parent.__class__
            assert isinstance(dest, parent.__class__)

    def test_analysis_does_not_exist(self, sdk_mock):
        container = flywheel.models.analysis_output.AnalysisOutput(
            parent=flywheel.Project(), id="test"
        )
        sdk_mock.get.side_effect = flywheel.rest.ApiException(status=404)
        sdk_mock.get_analysis.return_value = container
        with pytest.raises(flywheel.rest.ApiException):
            dest = get_destination(sdk_mock, "test")
            assert isinstance(dest, flywheel.Project)
def find_or_create_group(fw_client, group_id, group_label):
    """
    return an existing group or return a created group with group_id and group_label

    Args:
        fw_client (flywheel.Client): Flywheel Client
        group_id (str): The ID of the group
        group_label (str): The name of the group

    Returns:
        tuple: The tuple of created flywheel.Group and CREATED_CONTAINER_TEMPLATE
    """
    found_groups = fw_client.groups.find(f'_id="{group_id}"')

    if len(found_groups) > 0:
        log.info(f"Found Existing Group {group_id}")
        return found_groups[0].reload(), []

    log.info(f"No existing group {group_id}, creating...")
    group_id = fw_client.add_group(flywheel.Group(group_id, group_label))

    group = fw_client.groups.find_first(f'_id="{group_id}"')

    created_container = define_created(group)

    return group.reload(), [created_container]
Пример #3
0
    def test_groups(self):
        fw = self.fw

        group_id = self.rand_string_lower()
        group_name = self.rand_string()

        r_id = self.fw.add_group(flywheel.Group(group_id, group_name))
        self.assertEqual(group_id, r_id)

        # Get
        saved_group = fw.get_group(group_id)
        self.assertEqual(group_id, saved_group.id)
        self.assertEqual(group_name, saved_group.label)
        self.assertTimestampBeforeNow(saved_group.created)
        self.assertGreaterEqual(saved_group.modified, saved_group.created)

        self.assertTrue(hasattr(saved_group, 'container_type'))
        self.assertEqual(saved_group.container_type, 'group')

        self.assertTrue(hasattr(saved_group, 'child_types'))
        self.assertEqual(saved_group.child_types, ['projects'])

        # Generic Get is equivalent
        self.assertEqual(fw.get(group_id).to_dict(), saved_group.to_dict())

        # Get All
        groups = fw.get_all_groups()
        self.assertIn(saved_group, groups)

        self.assertEqual(groups[0].container_type, 'group')

        # Modify
        new_name = self.rand_string()
        fw.modify_group(group_id, {'label': new_name})

        changed_group = fw.get_group(group_id)
        self.assertEqual(new_name, changed_group.label)
        self.assertEqual(saved_group.created, changed_group.created)
        self.assertGreater(changed_group.modified, saved_group.modified)

        # Tags
        tag = 'example-tag-group'
        fw.add_group_tag(group_id, tag)

        # Check
        r_group = fw.get_group(group_id)
        self.assertEqual(1, len(r_group.tags))
        self.assertEqual(tag, r_group.tags[0])
        self.assertGreater(r_group.modified, changed_group.modified)

        # Add project
        project = r_group.add_project(label='My Project')
        self.assertIsNotNone(project)
        fw.delete_project(project.id)

        # Delete
        fw.delete_group(group_id)
        groups = fw.get_all_groups()
        self.assertNotIn(r_group, groups)
Пример #4
0
def create_test_group():
    group_id = SdkTestCase.rand_string_lower()
    return SdkTestCase.fw.add_group(
        flywheel.Group(group_id, label=SdkTestCase.rand_string()))
Пример #5
0
def test_container_hierarchy():
    hierarchy_dict = {
        "group":
        flywheel.Group(id="test_group", label="Test Group"),
        "project":
        flywheel.Project(label="test_project"),
        "subject":
        flywheel.Subject(label="test_subject", sex="other"),
        "session":
        flywheel.Session(
            age=31000000,
            label="test_session",
            weight=50,
        ),
    }
    # test from_dict
    test_hierarchy = ContainerHierarchy.from_dict(hierarchy_dict)
    # test deepcopy
    assert deepcopy(test_hierarchy) != test_hierarchy
    # test path
    assert test_hierarchy.path == "test_group/test_project/test_subject/test_session"
    # test parent
    assert test_hierarchy.parent.label == "test_subject"
    # test from_container
    mock_client = MagicMock(spec=dir(flywheel.Client))
    parent_dict = dict()
    for item in ("group", "project", "subject"):
        value = hierarchy_dict.copy().get(item)
        parent_dict[item] = item
        setattr(mock_client, f"get_{item}", lambda x: value)
    session = flywheel.Session(age=31000000, label="test_session", weight=50)
    session.parents = parent_dict
    assert (ContainerHierarchy.from_container(
        mock_client, session).container_type == "session")
    # test _get_container
    assert test_hierarchy._get_container(None, None, None) is None
    with pytest.raises(ValueError) as exc:
        test_hierarchy._get_container(None, "garbage", "garbage_id")
        assert str(exc) == "Cannot get a container of type garbage"
    mock_client = MagicMock(spec=dir(flywheel.Client))
    mock_client.get_session = lambda x: x
    assert (test_hierarchy._get_container(mock_client, "session",
                                          "session_id") == "session_id")
    # test container_type
    assert test_hierarchy.container_type == "session"
    # test dicom_map
    exp_map = {
        "PatientWeight": 50,
        "PatientAge": "011M",
        "ClinicalTrialTimePointDescription": "test_session",
        "PatientSex": "O",
        "PatientID": "test_subject",
    }
    assert exp_map == test_hierarchy.dicom_map
    # test get
    assert test_hierarchy.get("container_type") == "session"
    # test get_patient_sex_from_subject
    assert test_hierarchy.get_patientsex_from_subject(flywheel.Subject()) == ""
    # test get_patientage_from_session
    assert test_hierarchy.get_patientage_from_session(
        flywheel.Session()) is None

    # test get_child_hierarchy
    test_acquisition = flywheel.Acquisition(label="test_acquisition")
    acq_hierarchy = test_hierarchy.get_child_hierarchy(test_acquisition)
    assert acq_hierarchy.dicom_map[
        "SeriesDescription"] == test_acquisition.label
    # test get_parent_hierarchy
    parent_hierarchy = test_hierarchy.get_parent_hierarchy()
    assert parent_hierarchy.container_type == "subject"