Skip to content

Commit

Permalink
feat: Update DICOMSorter command line interface
Browse files Browse the repository at this point in the history
  • Loading branch information
jjjermiah committed Feb 3, 2024
1 parent 9552b6c commit 6b6a2a8
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 86 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "MIT"
readme = "README.md"

[tool.poetry.scripts]
DICOMSorter = "nbiatoolkit.dicomsort:DICOMSorter_cli"
dicomsort = "nbiatoolkit.nbia_cli:DICOMSorter_cli"
NBIAToolkit = "nbiatoolkit:version"
getCollections = "nbiatoolkit.nbia_cli:getCollections_cli"
getPatients = "nbiatoolkit.nbia_cli:getPatients_cli"
Expand Down
2 changes: 1 addition & 1 deletion src/nbiatoolkit/dicomsort/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
# "validateMD5"
# ]

from .dicomsort import DICOMSorter, DICOMSorter_cli
from .dicomsort import DICOMSorter
from .helper_functions import parseDICOMKeysFromFormat, sanitizeFileName, truncateUID

__all__ = [
Expand Down
83 changes: 0 additions & 83 deletions src/nbiatoolkit/dicomsort/dicomsort.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,86 +126,3 @@ def _get_dicom_files(self) -> "list[str]":
return dicom_file_paths


# Create command line interface

# Given a source directory, destination directory, and target pattern, sort DICOM files
# into the destination directory according to the target pattern.
# The target pattern is a string with placeholders matching '%<DICOMKey>'.


def DICOMSorter_cli():
parser = argparse.ArgumentParser(
description="Sort DICOM files into destination directory according to target pattern."
)

parser.add_argument(
"sourceDir",
metavar="sourceDir",
type=str,
help="The source directory containing DICOM files.",
)

parser.add_argument(
"destinationDir",
metavar="destinationDir",
type=str,
help="The destination directory to sort DICOM files into.",
)

# Default is %%PatientName/%%SeriesNumber-%%SeriesInstanceUID/%%InstanceNumber.dcm
parser.add_argument(
"--targetPattern",
dest="targetPattern",
default="%PatientName/%SeriesNumber-%SeriesInstanceUID/%InstanceNumber.dcm",
type=str,
help="The target pattern for sorting DICOM files. Default is %%PatientName/%%SeriesNumber-%%SeriesInstanceUID/%%InstanceNumber.dcm.",
)

parser.add_argument(
"--truncateUID",
dest="truncateUID",
action="store_true",
default=True,
help="Truncate the UID to the last n characters (includes periods & underscores). Default is True.",
)

parser.add_argument(
"--sanitizeFilename",
dest="sanitizeFilename",
action="store_true",
help="Sanitize the file name by replacing potentially dangerous characters. Default is True.",
)

parser.add_argument(
"--overwrite",
dest="overwrite",
action="store_true",
help="Overwrite existing files. Default is False.",
)

parser.add_argument(
"--nParallel",
dest="nParallel",
action="store",
type=int,
help="Number of parallel threads. Default is 1.",
)

parser.set_defaults(truncateUID=True)
parser.set_defaults(sanitizeFilename=True)
parser.set_defaults(overwrite=False)
parser.set_defaults(nParallel=1)

args = parser.parse_args()

sorter = DICOMSorter(
sourceDir=args.sourceDir,
destinationDir=args.destinationDir,
targetPattern=args.targetPattern,
truncateUID=args.truncateUID,
sanitizeFilename=args.sanitizeFilename,
)

sorter.sortDICOMFiles(
option="copy", overwrite=args.overwrite, nParallel=int(args.nParallel)
)
87 changes: 86 additions & 1 deletion src/nbiatoolkit/nbia_cli.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import io
from .nbia import NBIAClient, __version__

from .dicomsort import DICOMSorter

import argparse
import sys
Expand Down Expand Up @@ -32,6 +32,7 @@ def version():
"getBodyPartCounts",
"getSeries",
"downloadSingleSeries",
"dicomsort"
]
for command in commands:
result = subprocess.run([command, "-h"], capture_output=True, text=True)
Expand Down Expand Up @@ -369,3 +370,87 @@ def downloadSingleSeries_cli() -> None:
filePattern=args.filePattern,
overwrite=args.overwrite,
)

# Create command line interface

# Given a source directory, destination directory, and target pattern, sort DICOM files
# into the destination directory according to the target pattern.
# The target pattern is a string with placeholders matching '%<DICOMKey>'.


def DICOMSorter_cli():
parser = argparse.ArgumentParser(
description="NBIAToolkit: Sort DICOM files into destination directory according to target pattern."
)

parser.add_argument(
"sourceDir",
metavar="sourceDir",
type=str,
help="The source directory containing DICOM files.",
)

parser.add_argument(
"destinationDir",
metavar="destinationDir",
type=str,
help="The destination directory to sort DICOM files into.",
)

# Default is %%PatientName/%%SeriesNumber-%%SeriesInstanceUID/%%InstanceNumber.dcm
parser.add_argument(
"--targetPattern",
dest="targetPattern",
default="%PatientName/%SeriesNumber-%SeriesInstanceUID/%InstanceNumber.dcm",
type=str,
help="The target pattern for sorting DICOM files. Default is %%PatientName/%%SeriesNumber-%%SeriesInstanceUID/%%InstanceNumber.dcm.",
)

parser.add_argument(
"--truncateUID",
dest="truncateUID",
action="store_true",
default=True,
help="Truncate the UID to the last 5 characters (includes periods & underscores). Default is True.",
)

parser.add_argument(
"--sanitizeFilename",
dest="sanitizeFilename",
action="store_true",
help="Sanitize the file name by replacing potentially dangerous characters. Default is True.",
)

parser.add_argument(
"--overwrite",
dest="overwrite",
action="store_true",
help="Overwrite existing files. Default is False.",
)

parser.add_argument(
"--nParallel",
dest="nParallel",
action="store",
type=int,
help="Number of parallel threads. Default is 1.",
)

parser.set_defaults(truncateUID=True)
parser.set_defaults(sanitizeFilename=True)
parser.set_defaults(overwrite=False)
parser.set_defaults(nParallel=1)

args = parser.parse_args()

sorter = DICOMSorter(
sourceDir=args.sourceDir,
destinationDir=args.destinationDir,
targetPattern=args.targetPattern,
truncateUID=args.truncateUID,
sanitizeFilename=args.sanitizeFilename,
)

sorter.sortDICOMFiles(
option="copy", overwrite=args.overwrite, nParallel=int(args.nParallel)
)

0 comments on commit 6b6a2a8

Please sign in to comment.