datamint 1.7.0__py3-none-any.whl → 1.7.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of datamint might be problematic. Click here for more details.

@@ -364,6 +364,34 @@ class RootAPIHandler(BaseAPIHandler):
364
364
 
365
365
  return result[0]
366
366
 
367
+ @staticmethod
368
+ def _is_dicom_report(file_path: str | IO) -> bool:
369
+ """
370
+ Check if a DICOM file is a report (e.g., Structured Report).
371
+
372
+ Args:
373
+ file_path: Path to the DICOM file or file-like object.
374
+
375
+ Returns:
376
+ bool: True if the DICOM file is a report, False otherwise.
377
+ """
378
+ try:
379
+ if not is_dicom(file_path):
380
+ return False
381
+
382
+ ds = pydicom.dcmread(file_path, stop_before_pixels=True)
383
+ if hasattr(file_path, 'seek'):
384
+ file_path.seek(0)
385
+ modality = getattr(ds, 'Modality', None)
386
+
387
+ # Common report modalities
388
+ report_modalities = {'SR', 'DOC', 'KO', 'PR', 'ESR'} # SR=Structured Report, DOC=Document, KO=Key Object, PR=Presentation State
389
+
390
+ return modality in report_modalities
391
+ except Exception as e:
392
+ _LOGGER.warning(f"Error checking if DICOM is a report: {e}")
393
+ return False
394
+
367
395
  def upload_resources(self,
368
396
  files_path: str | IO | Sequence[str | IO] | pydicom.dataset.Dataset,
369
397
  mimetype: Optional[str] = None,
@@ -379,7 +407,8 @@ class RootAPIHandler(BaseAPIHandler):
379
407
  transpose_segmentation: bool = False,
380
408
  modality: Optional[str] = None,
381
409
  assemble_dicoms: bool = True,
382
- metadata: list[str | dict | None] | dict | str | None = None
410
+ metadata: list[str | dict | None] | dict | str | None = None,
411
+ discard_dicom_reports: bool = True
383
412
  ) -> list[str | Exception] | str | Exception:
384
413
  """
385
414
  Upload resources.
@@ -416,6 +445,17 @@ class RootAPIHandler(BaseAPIHandler):
416
445
  list[str | Exception]: A list of resource IDs or errors.
417
446
  """
418
447
 
448
+ if discard_dicom_reports:
449
+ if isinstance(files_path, (str, Path)):
450
+ files_path = [files_path]
451
+ elif isinstance(files_path, pydicom.dataset.Dataset):
452
+ files_path = [files_path]
453
+
454
+ old_size = len(files_path)
455
+ files_path = [f for f in files_path if not RootAPIHandler._is_dicom_report(f)]
456
+ if old_size != len(files_path):
457
+ _LOGGER.info(f"Discarded {old_size - len(files_path)} DICOM report files from upload.")
458
+
419
459
  if on_error not in ['raise', 'skip']:
420
460
  raise ValueError("on_error must be either 'raise' or 'skip'")
421
461
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: datamint
3
- Version: 1.7.0
3
+ Version: 1.7.2
4
4
  Summary: A library for interacting with the Datamint API, designed for efficient data management, processing and Deep Learning workflows.
5
5
  Requires-Python: >=3.10
6
6
  Classifier: Programming Language :: Python :: 3
@@ -4,7 +4,7 @@ datamint/apihandler/api_handler.py,sha256=cdVSddrFCKlF_BJ81LO1aJ0OP49rssjpNEFzJ6
4
4
  datamint/apihandler/base_api_handler.py,sha256=dWLiowyuP1XiGfNc-_D5oQSmJdfR0Quy0ToeJlkRA8s,11911
5
5
  datamint/apihandler/dto/annotation_dto.py,sha256=qId1RK1VO7dXrvGJ7dqJ31jBQB7Z8yy5x0tLSiMxTB4,7105
6
6
  datamint/apihandler/exp_api_handler.py,sha256=hFUgUgBc5rL7odK7gTW3MnrvMY1pVfJUpUdzRNobMQE,6226
7
- datamint/apihandler/root_api_handler.py,sha256=qedldmtt0oNFoaxyMAskd0A5Uy-6KsuPd7Jl1jKHpGY,55450
7
+ datamint/apihandler/root_api_handler.py,sha256=iwSTqBlgG0DMD052CwiPkfvLUXJIx8teGXPZzIYpNVQ,57063
8
8
  datamint/client_cmd_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  datamint/client_cmd_tools/datamint_config.py,sha256=md7dnWrbl10lPtXKbmD9yo6onLJsajeG8Vz0ZWH1v4M,8181
10
10
  datamint/client_cmd_tools/datamint_upload.py,sha256=890USkrtaH23mNjTRYVHWce2q9jSmkUNHIP_e8fnJRM,29502
@@ -22,7 +22,7 @@ datamint/logging.yaml,sha256=a5dsATpul7QHeUHB2TjABFjWaPXBMbO--dgn8GlRqwk,483
22
22
  datamint/utils/logging_utils.py,sha256=DvoA35ATYG3JTwfXEXYawDyKRfHeCrH0a9czfkmz8kM,1851
23
23
  datamint/utils/torchmetrics.py,sha256=lwU0nOtsSWfebyp7dvjlAggaqXtj5ohSEUXOg3L0hJE,2837
24
24
  datamint/utils/visualization.py,sha256=yaUVAOHar59VrGUjpAWv5eVvQSfztFG0eP9p5Vt3l-M,4470
25
- datamint-1.7.0.dist-info/METADATA,sha256=GWsxt2qSpYc64h5DbgScsg7w-FRy1_35Gi38TJrRLOE,4090
26
- datamint-1.7.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
27
- datamint-1.7.0.dist-info/entry_points.txt,sha256=mn5H6jPjO-rY0W0CAZ6Z_KKWhMLvyVaSpoqk77jlTI4,145
28
- datamint-1.7.0.dist-info/RECORD,,
25
+ datamint-1.7.2.dist-info/METADATA,sha256=XXJRyuBh70SbkAEX1p2ncW7zHQsgASp3b8OMVxlheLQ,4090
26
+ datamint-1.7.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
27
+ datamint-1.7.2.dist-info/entry_points.txt,sha256=mn5H6jPjO-rY0W0CAZ6Z_KKWhMLvyVaSpoqk77jlTI4,145
28
+ datamint-1.7.2.dist-info/RECORD,,