def setup_class(cls): TestOneStudyTwoSerieses.dataset1 = load_instance(patient_number=1, study_number=1, series_number=1) TestOneStudyTwoSerieses.dataset2 = load_instance(patient_number=1, study_number=1, series_number=2) anonymizer = Anonymizer() anonymizer.anonymize(TestOneStudyTwoSerieses.dataset1) anonymizer.anonymize(TestOneStudyTwoSerieses.dataset2)
def setup_class(cls): TestOnePatientTwoStudies.dataset1 = load_instance(patient_number=1, study_number=1) TestOnePatientTwoStudies.dataset2 = load_instance(patient_number=1, study_number=2) anonymizer = Anonymizer(seed="") anonymizer.anonymize(TestOnePatientTwoStudies.dataset1) anonymizer.anonymize(TestOnePatientTwoStudies.dataset2)
def test_id_prefix_and_suffix_are_both_added_to_id(): with load_instance() as dataset: anonymizer = Anonymizer(id_prefix="C3", id_suffix="3C") anonymizer.anonymize(dataset) actual = dataset.PatientID assert actual.startswith("C3") and actual.endswith("3C")
def test_id_suffix_is_appended_to_id(element_path): with load_instance() as dataset: anonymizer = Anonymizer(id_suffix="1A") anonymizer.anonymize(dataset) actual = eval("dataset." + element_path) assert actual.endswith("1A")
def test_id_prefix_is_prepended_to_id(element_path): with load_instance() as dataset: anonymizer = Anonymizer(id_prefix="A1") anonymizer.anonymize(dataset) actual = eval("dataset." + element_path) assert actual.startswith("A1")
def test_extra_patient_attributes_are_removed(element_name): with load_test_instance() as dataset: assert element_name in dataset anonymizer = Anonymizer() anonymizer.anonymize(dataset) assert element_name not in dataset
def test_deidentification_method_set_properly(initial, expected): with load_test_instance() as dataset: ensure_attribute_is(dataset, "DeidentificationMethod", initial) anonymizer = Anonymizer() anonymizer.anonymize(dataset) assert_attribute_is(dataset, "DeidentificationMethod", expected)
def test_id_suffix_is_appended_to_each_other_patient_id(): with load_instance() as dataset: dataset.OtherPatientIDs = r"ID1\ID2" anonymizer = Anonymizer(id_suffix="2B") anonymizer.anonymize(dataset) actual = dataset.OtherPatientIDs assert actual[0].endswith("2B") assert actual[1].endswith("2B")
def test_ids_are_anonymized(element_path): with load_test_instance() as dataset: original = eval("dataset." + element_path) anonymizer = Anonymizer() anonymizer.anonymize(dataset) actual = eval("dataset." + element_path) assert actual != original
def test_repeated_identifying_uis_get_same_values(one_element_path, another_element_path): with load_test_instance() as dataset: anonymizer = Anonymizer() anonymizer.anonymize(dataset) one_uid = eval("dataset." + one_element_path) another_uid = eval("dataset." + another_element_path) assert one_uid == another_uid
def test_requesting_service_gets_anonymized(): with load_test_instance() as dataset: original = dataset.RequestingService anonymizer = Anonymizer() anonymizer.anonymize(dataset) actual = dataset.RequestingService assert actual != original
def test_current_patient_location_gets_anonymized(): with load_test_instance() as dataset: original = dataset.CurrentPatientLocation anonymizer = Anonymizer() anonymizer.anonymize(dataset) actual = dataset.CurrentPatientLocation assert actual != original
def test_non_patient_names_get_anonymized(element_path): with load_test_instance() as dataset: original_name = eval("dataset." + element_path) assert original_name anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_name = eval("dataset." + element_path) assert new_name != original_name
def test_issuer_of_patient_id_changed_if_not_empty(): with load_test_instance() as dataset: dataset.IssuerOfPatientID = "NOTEMPTY" anonymizer = Anonymizer() anonymizer.anonymize(dataset) actual = dataset.IssuerOfPatientID assert actual == "DICOGNITO"
def test_identifying_uis_are_updated(element_path): with load_test_instance() as dataset: expected = eval("dataset." + element_path) anonymizer = Anonymizer() anonymizer.anonymize(dataset) actual = eval("dataset." + element_path) assert actual != expected
def test_patient_identity_removed( initial_patient_identity_removed, burned_in_annotation, expected_patient_identity_removed ): with load_test_instance() as dataset: ensure_attribute_is(dataset, "PatientIdentityRemoved", initial_patient_identity_removed) ensure_attribute_is(dataset, "BurnedInAnnotation", burned_in_annotation) anonymizer = Anonymizer() anonymizer.anonymize(dataset) assert_attribute_is(dataset, "PatientIdentityRemoved", expected_patient_identity_removed)
def test_anonymize_all_attributes_are_different(self, element_path): dataset1 = load_instance(patient_number=1) dataset2 = load_instance(patient_number=2) anonymizer = Anonymizer() anonymizer.anonymize(dataset1) anonymizer.anonymize(dataset2) value1 = eval("dataset1." + element_path) value2 = eval("dataset2." + element_path) assert value1 != value2
def test_multivalued_datetime_gets_anonymized(): with load_test_instance() as dataset: dataset.AcquisitionDateTime = original_datetime = ["19741103121558", "19721004161558"] anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_datetime = dataset.AcquisitionDateTime assert new_datetime != original_datetime assert len(new_datetime) == len(original_datetime)
def test_station_gets_anonymized_when_no_modality(): with load_test_instance() as dataset: original_station_name = dataset.StationName del dataset.Modality anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_station_name = dataset.StationName assert new_station_name != original_station_name
def test_datetime_of_various_lengths_gets_anonymized(acquisition_datetime): with load_test_instance() as dataset: dataset.AcquisitionDateTime = acquisition_datetime anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_datetime_string = dataset.AcquisitionDateTime assert new_datetime_string != acquisition_datetime assert len(new_datetime_string) == len(acquisition_datetime)
def test_issuer_of_patient_id_not_added_if_empty(): with load_test_instance() as dataset: dataset.IssuerOfPatientID = "" anonymizer = Anonymizer() anonymizer.anonymize(dataset) actual = dataset.IssuerOfPatientID assert actual == ""
def test_multivalued_date_with_no_time_pair_gets_anonymized(): with load_test_instance() as dataset: dataset.DateOfLastCalibration = original_date = ["20010401", "20010402"] anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_date_string = dataset.DateOfLastCalibration assert new_date_string != original_date assert len(new_date_string) == len(original_date)
def test_date_gets_anonymized_when_there_is_no_time(): with load_test_instance() as dataset: original_birth_date = dataset.PatientBirthDate = "19830213" assert "PatientBirthTime" not in dataset anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_birth_date = dataset.PatientBirthDate assert new_birth_date != original_birth_date assert "PatientBirthTime" not in dataset
def test_no_sex_still_changes_patient_name(): with load_test_instance() as dataset: del dataset.PatientSex original_patient_name = dataset.PatientName anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_patient_name = dataset.PatientName assert new_patient_name != original_patient_name
def setup_class(cls): TestOneSeriesTwoInstances.dataset1 = load_instance(patient_number=1, study_number=1, series_number=1, instance_number=1) TestOneSeriesTwoInstances.dataset2 = load_instance(patient_number=1, study_number=1, series_number=1, instance_number=2) anonymizer = Anonymizer(seed="") anonymizer.anonymize(TestOneSeriesTwoInstances.dataset1) anonymizer.anonymize(TestOneSeriesTwoInstances.dataset2)
def test_other_patient_ids_anonymized_to_same_number_of_ids(number_of_ids): with load_test_instance() as dataset: original = ["ID" + str(i) for i in range(1, number_of_ids + 1)] dataset.OtherPatientIDs = original anonymizer = Anonymizer() anonymizer.anonymize(dataset) actual = dataset.OtherPatientIDs assert actual != original assert len(set(actual)) == number_of_ids
def test_datetime_gets_anonymized(datetime_name): original_datetime = datetime.datetime(1974, 11, 3, 12, 15, 58) original_datetime_string = original_datetime.strftime("%Y%m%d%H%M%S") with load_test_instance() as dataset: setattr(dataset, datetime_name, original_datetime_string) anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_datetime_string = getattr(dataset, datetime_name) assert new_datetime_string != original_datetime_string
def test_anonymize_same_patient_with_differently_formatted_name_anonymizes_the_same_way( self): dataset1 = load_instance(patient_number=1) dataset1.PatientName = "LAST^FIRST^MIDDLE" dataset2 = load_instance(patient_number=1) dataset2.PatientName = "LAST^FIRST^MIDDLE^" anonymizer = Anonymizer() anonymizer.anonymize(dataset1) anonymizer.anonymize(dataset2) value1 = dataset1.PatientName value2 = dataset2.PatientName assert value1 == value2
def test_mitra_global_patient_id_is_updated(): with load_test_instance() as dataset: block = dataset.private_block(0x0031, "MITRA LINKED ATTRIBUTES 1.0", create=True) block.add_new(0x20, "LO", "GPIYMBB54") anonymizer = Anonymizer() anonymizer.anonymize(dataset) block = dataset.private_block(0x0031, "MITRA LINKED ATTRIBUTES 1.0") actual = block[0x20].value assert actual != "GPIYMBB54"
def test_date_gets_anonymized_when_time_has_various_lengths(birth_time): with load_test_instance() as dataset: dataset.PatientBirthDate = original_birth_date = "20010401" dataset.PatientBirthTime = birth_time anonymizer = Anonymizer() anonymizer.anonymize(dataset) new_date_string = dataset.PatientBirthDate new_time_string = dataset.PatientBirthTime assert new_date_string != original_birth_date assert len(new_date_string) == len(original_birth_date) assert new_time_string[2:] == birth_time[2:] assert len(new_time_string) == len(birth_time)