예제 #1
0
def test_core_deidentify_safe_private(a_dataset, a_safe_private_definition):
    """Private elements marked as safe should not be removed by Clean()"""

    assert Tag("00b10010") in a_dataset  # a private creator tag
    assert Tag("00b11001") in a_dataset  # and a private tag

    # A core instance that should clean() private tags, but one tag is deemed safe
    ruleset = RuleSet(
        [Rule(PrivateTags(), Clean(safe_private=a_safe_private_definition))])
    core = Core(profile=Profile([ruleset]))

    # One tag should be kept
    deltas = extract_signature(deidentifier=core, dataset=a_dataset)
    assert {x.tag: x for x in deltas}[Tag("00b10010")].status == "REMOVED"
    assert {x.tag: x for x in deltas}[Tag("00b11001")].status == "UNCHANGED"

    # but only so long as dataset has modality = CT
    a_dataset.Modality = "US"
    deltas = extract_signature(deidentifier=core, dataset=a_dataset)
    assert {x.tag: x for x in deltas}[Tag("00b10010")].status == "REMOVED"
    assert {x.tag: x for x in deltas}[Tag("00b11001")].status == "REMOVED"
예제 #2
0
def test_default_core(a_safe_private_definition):
    core = create_default_core(
        safe_private_definition=a_safe_private_definition)

    core.deidentify(CTDatasetFactory())
    signature = extract_signature(deidentifier=core,
                                  dataset=CTDatasetFactory())
    assert len(signature) == 108

    with pytest.raises(DeidentificationException):
        # suspicious, but this type of dataset is not in a_safe_private_definition
        core.deidentify(CTDatasetFactory(Modality="US"))
예제 #3
0
def test_signature(a_core, a_dataset):

    deltas = extract_signature(a_core, a_dataset)
    assert [x.status for x in deltas] == [
        DeltaStatusCodes.UNCHANGED,
        DeltaStatusCodes.CHANGED,
        DeltaStatusCodes.UNCHANGED,
        DeltaStatusCodes.REMOVED,
        DeltaStatusCodes.REMOVED,
        DeltaStatusCodes.REMOVED,
        DeltaStatusCodes.REMOVED,
        DeltaStatusCodes.CREATED,
    ]
예제 #4
0
def test_signature_realistic_dataset(a_core):
    """Check with a realistic dataset. Nothing should crash"""
    deltas = extract_signature(a_core, CTDatasetFactory())
    assert len([x for x in deltas if x.has_changed()]) == 19
예제 #5
0
def test_signature_include_each_element(a_core, a_dataset):
    """Make sure all DICOM elements in dataset get a delta"""

    deltas = extract_signature(a_core, a_dataset)
    assert len(
        deltas) == len(a_dataset) + 1  # +1 because a_core inserts 1 element
예제 #6
0
def test_signature_leave_input_dataset_unaltered(a_core, a_dataset):
    """Make sure extracting a signature does not alter input dataset"""

    len_before = len(a_dataset)
    extract_signature(a_core, a_dataset)
    assert len(a_dataset) == len_before