blairconrad / dicognito

A library and command line tool for anonymizing DICOM files

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Private creator 0031,0020 breaks anonymization

blairconrad opened this issue · comments

Anonymizing a dataset containing a value for 0031,0020, which would typically be a Private Creator Data Element, results in dicognito erroring out with

Error occurred while converting <_io.BytesIO object at 0x0000022DD4CEA160>. Aborting.
Traceback (most recent call last):
  File "E:\Dev\dicognito\.venv\dicognito\Lib\site-packages\pydicom\tag.py", line 28, in tag_in_exception
    yield
  File "E:\Dev\dicognito\.venv\dicognito\Lib\site-packages\pydicom\dataset.py", line 2474, in walk
    callback(self, data_element)  # self = this Dataset
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\Dev\dicognito\src\dicognito\anonymizer.py", line 151, in _anonymize_element
    if handler(dataset, data_element):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\Dev\dicognito\src\dicognito\idanonymizer.py", line 67, in __call__
    if self._anonymize_mitra_global_patient_id(dataset, data_element):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\Dev\dicognito\src\dicognito\idanonymizer.py", line 97, in _anonymize_mitra_global_patient_id
    dataset[(mitra_linked_attributes_group << 16) + private_tag_group].value
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\Dev\dicognito\.venv\dicognito\Lib\site-packages\pydicom\dataset.py", line 988, in __getitem__
    elem = self._dict[tag]
           ~~~~~~~~~~^^^^^
KeyError: (0031, 0000)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "E:\Dev\dicognito\src\dicognito\__main__.py", line 76, in main
    anonymizer.anonymize(dataset)
  File "E:\Dev\dicognito\src\dicognito\anonymizer.py", line 134, in anonymize
    dataset.walk(self._anonymize_element)
  File "E:\Dev\dicognito\.venv\dicognito\Lib\site-packages\pydicom\dataset.py", line 2472, in walk
    with tag_in_exception(tag):
  File "D:\Users\amidu\AppData\Local\Programs\Python\Python311\Lib\contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "E:\Dev\dicognito\.venv\dicognito\Lib\site-packages\pydicom\tag.py", line 32, in tag_in_exception
    raise type(exc)(msg) from exc
KeyError: 'With tag (0031, 0020) got exception: (0031, 0000)\nTraceback (most recent call last):\n  File "E:\\Dev\\dicognito\\.venv\\dicognito\\Lib\\site-packages\\pydicom\\tag.py", line 28, in tag_in_exception\n    yield\n  File "E:\\Dev\\dicognito\\.venv\\dicognito\\Lib\\site-packages\\pydicom\\dataset.py", line 2474, in walk\n    callback(self, data_element)  # self = this Dataset\n    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "E:\\Dev\\dicognito\\src\\dicognito\\anonymizer.py", line 151, in _anonymize_element\n    if handler(dataset, data_element):\n       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "E:\\Dev\\dicognito\\src\\dicognito\\idanonymizer.py", line 67, in __call__\n    if self._anonymize_mitra_global_patient_id(dataset, data_element):\n       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "E:\\Dev\\dicognito\\src\\dicognito\\idanonymizer.py", line 97, in _anonymize_mitra_global_patient_id\n    dataset[(mitra_linked_attributes_group << 16) + private_tag_group].value\n    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "E:\\Dev\\dicognito\\.venv\\dicognito\\Lib\\site-packages\\pydicom\\dataset.py", line 988, in __getitem__\n    elem = self._dict[tag]\n           ~~~~~~~~~~^^^^^\nKeyError: (0031, 0000)\n'

It shouldn't error out.