Source code for pydcmio.dcmanonymizer.callbacks

##########################################################################
# NSAP - Copyright (C) CEA, 2015
# Distributed under the terms of the CeCILL-B license, as published by
# the CEA-CNRS-INRIA. Refer to the LICENSE file or to
# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
# for details.
##########################################################################

"""
Module that provides DICOM anonymization callbacks.
"""


# Dcmio import
from .utils import replace_by
from .utils import repr_dataelement

# Define global log variable
ANON_LOG = {}
MANUFACTURER = []
CALLBACKS = {}
TAGS = {}
PRIVATE_DEIDENTIFY = {}


[docs]def callback_private(dataset, data_element): """ Called from the dataset 'walk' recursive function, will anonymize all the private fields.""" # Deal with private tags only if data_element.tag.is_private: # Check if this private tag needs to be removed tag_repr = repr(data_element.tag)[1:-1].replace(" ", "") keep_private_tag = False for pattern in PRIVATE_DEIDENTIFY[MANUFACTURER[0]]: if pattern.match(tag_repr): keep_private_tag = True break # Remove tag if requested if not keep_private_tag: dataset.pop(data_element.tag) value = data_element.value anon_value = replace_by(value, data_element.VR, "X") value_repr = repr_dataelement(data_element) ANON_LOG.setdefault(tag_repr, []).append((value_repr, anon_value)) else: print(tag_repr, repr_dataelement(data_element)) return True return False
[docs]def callback_tag(dataset, data_element, pattern): """ Called from the dataset 'walk' recursive function, will anonymize all the tag 'tag'.""" tag, action = pattern if tag in dataset: tag_repr = repr(data_element.tag)[1:-1].replace(" ", "") value = data_element.value anon_value = replace_by(value, data_element.VR, action) value_repr = repr_dataelement(data_element) ANON_LOG.setdefault(tag_repr, []).append((value_repr, anon_value)) if anon_value is None: dataset.pop(data_element.tag) else: data_element.value = anon_value return True return False
[docs]def callback_xxxx(dataset, data_element, pattern): """ Called from the dataset 'walk' recursive function, will anonymize all the '50xx,xxx' fields.""" tag_repr = repr(data_element.tag)[1:-1].replace(" ", "") if pattern.match(tag_repr): value = data_element.value anon_value = replace_by(value, data_element.VR, "X") value_repr = repr_dataelement(data_element) ANON_LOG.setdefault(tag_repr, []).append((value_repr, anon_value)) if anon_value is None: dataset.pop(data_element.tag) else: data_element.value = anon_value return True return False
[docs]def callback_patient_name(dataset, data_element): """ Called from the dataset 'walk' recursive function, will set a new identitiy to the subject.""" tag_repr = repr(data_element.tag)[1:-1].replace(" ", "") if data_element.VR == "PN": if tag_repr not in ANON_LOG: raise Exception("Tag '({0})' contains patient information and " "has not been anonymized.".format(tag_repr))