Skip to content

Commit

Permalink
Merge pull request #82 from jjjermiah/70-feat-implement-user-and-pass…
Browse files Browse the repository at this point in the history
…word-for-clie

70 feat implement user and password for cli
  • Loading branch information
jjjermiah committed Feb 3, 2024
2 parents 64afa17 + 5d0a69b commit 40aca34
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 30 deletions.
25 changes: 11 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,24 +54,21 @@ Version: 0.21.1

Available CLI tools:

getCollections [-h] [-p PREFIX] [-o OUTPUTFILE] [--version]
getPatients [-h] [-u USERNAME] [-p PASSWORD] -c COLLECTION
[-o OUTPUTFILE] [--version]

getPatients [-h] -c COLLECTION [-o OUTPUTFILE] [--version]
getNewPatients [-h] [-u USERNAME] [-p PASSWORD] -c COLLECTION -d DATE
[-o OUTPUTFILE] [--version]

getBodyPartCounts [-h] [-c COLLECTION] [-o OUTPUTFILE] [--version]
getBodyPartCounts [-h] [-u USERNAME] [-p PASSWORD] [-c COLLECTION]
[-o OUTPUTFILE] [--version]

getSeries [-h] [-c COLLECTION] [-p PATIENTID] [-m MODALITY]
[-study STUDYINSTANCEUID]
[--seriesInstanceUID SERIESINSTANCEUID]
[--bodyPartExamined BODYPARTEXAMINED]
[--manufacturerModelName MANUFACTURERMODELNAME]
[--manufacturer MANUFACTURER] [-o OUTPUTFILE] [--version]
downloadSingleSeries [-h] [-u USERNAME] [-p PASSWORD] --seriesUID
SERIESUID --downloadDir DOWNLOADDIR
[--filePattern FILEPATTERN] [--overwrite]

downloadSingleSeries [-h] --seriesUID SERIESUID --downloadDir
DOWNLOADDIR [--filePattern FILEPATTERN]
[--overwrite]

dicomsort [-h] [--targetPattern TARGETPATTERN] [--truncateUID]
dicomsort [-h] [-u USERNAME] [-p PASSWORD]
[--targetPattern TARGETPATTERN] [--truncateUID]
[--sanitizeFilename] [--overwrite] [--nParallel NPARALLEL]
sourceDir destinationDir

Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ getPatients = "nbiatoolkit.nbia_cli:getPatients_cli"
getBodyPartCounts = "nbiatoolkit.nbia_cli:getBodyPartCounts_cli"
downloadSingleSeries = "nbiatoolkit.nbia_cli:downloadSingleSeries_cli"
getSeries = "nbiatoolkit.nbia_cli:getSeries_cli"
getNewPatients = "nbiatoolkit.nbia_cli:getNewPatients_cli"

[tool.poetry.dependencies]
python = ">=3.10 || 3.12"
Expand Down
79 changes: 63 additions & 16 deletions src/nbiatoolkit/nbia_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ def version():
commands = [
"getCollections",
"getPatients",
"getNewPatients",
"getBodyPartCounts",
"getSeries",
"downloadSingleSeries",
Expand All @@ -45,8 +46,30 @@ def version():

return

def _initialize_parser(description: str) -> argparse.ArgumentParser:
p = argparse.ArgumentParser(description=description)

# create an argparse group called "Credentials" to hold the username and password arguments
credentials = p.add_argument_group(
title="authentication parameters",
description="The username and password for the NBIA API if querying restricted datasets, defaults to the NBIA Guest Account")

credentials.add_argument(
"-u", "--username", action="store", type=str, default= "nbia_guest", #help="Username for the NBIA API (default: nbia_guest)"
)

credentials.add_argument(
"-p", "--password", action="store", type=str, default= "", #help="Password for the NBIA API (default: '')"
)

# make the credentials group show up first
p._action_groups.insert(0, p._action_groups.pop())

return p

def _add_extra_args(parser: argparse.ArgumentParser) -> argparse.Namespace:


def general_parser(parser: argparse.ArgumentParser) -> argparse.Namespace:
parser.add_argument(
"-o",
"--output",
Expand Down Expand Up @@ -175,7 +198,7 @@ def cli_wrapper(func, **kwargs) -> List[str] | None:
def getPatients_cli() -> None:
global query
query = "patients"
p = argparse.ArgumentParser(description=f"NBIAToolkit: {query} ")
p = _initialize_parser(description=f"NBIAToolkit: {query} ")

p.add_argument(
"-c",
Expand All @@ -185,15 +208,15 @@ def getPatients_cli() -> None:
type=str,
)

args = general_parser(p)
args = _add_extra_args(p)

return getResults_cli(func=NBIAClient().getPatients, Collection=args.collection)
return getResults_cli(func=NBIAClient(args.username, args.password).getPatients, Collection=args.collection)


def getCollections_cli() -> None:
global query
query = "collections"
p = argparse.ArgumentParser(description=f"NBIAToolkit: {query} ")
p = _initialize_parser(description=f"NBIAToolkit: {query} ")

p.add_argument(
"-p",
Expand All @@ -204,17 +227,41 @@ def getCollections_cli() -> None:
help="The prefix to filter collections by, i.e 'TCGA', 'LIDC', 'NSCLC'",
)

args = general_parser(p)
args = _add_extra_args(p)

return getResults_cli(func=NBIAClient(args.username, args.password).getCollections, prefix=args.prefix)

def getNewPatients_cli() -> None:
global query
query = "newPatients"
p = _initialize_parser(description=f"NBIAToolkit: {query}. Get new patients from a collection since a given date.")

p.add_argument(
"-c",
"--collection",
action="store",
required=True,
type=str,
)

p.add_argument(
"-d", "--date",
action="store",
required=True,
type=str,
help="The date to filter by, i.e '2021-01-01' or '2019/12/31",
)

return getResults_cli(func=NBIAClient().getCollections, prefix=args.prefix)
args = _add_extra_args(p)

return getResults_cli(func=NBIAClient(args.username, args.password).getNewPatients, Collection=args.collection, Date=args.date)

def getBodyPartCounts_cli() -> None:
global query
global output
query = f"BodyPartCounts"

p = argparse.ArgumentParser(description=f"NBIAToolkit: {query} ")
p = _initialize_parser(description=f"NBIAToolkit: {query} ")

p.add_argument(
"-c",
Expand All @@ -225,10 +272,10 @@ def getBodyPartCounts_cli() -> None:
type=str,
)

args = general_parser(p)
args = _add_extra_args(p)

return getResults_cli(
func=NBIAClient().getBodyPartCounts, Collection=args.collection
func=NBIAClient(args.username, args.password).getBodyPartCounts, Collection=args.collection
)


Expand All @@ -237,7 +284,7 @@ def getSeries_cli() -> None:
global output
query = f"series"

p = argparse.ArgumentParser(description=f"NBIAToolkit: {query} ")
p = _initialize_parser(description=f"NBIAToolkit: {query} ")

p.add_argument(
"-c",
Expand Down Expand Up @@ -307,9 +354,9 @@ def getSeries_cli() -> None:
type=str,
)

args = general_parser(p)
args = _add_extra_args(p)
return getResults_cli(
func=NBIAClient().getSeries,
func=NBIAClient(args.username, args.password).getSeries,
Collection=args.collection,
PatientID=args.patientID,
StudyInstanceUID=args.studyInstanceUID,
Expand All @@ -326,7 +373,7 @@ def downloadSingleSeries_cli() -> None:
query = f"series"
# use the NBIAClient._downloadSingleSeries function to download a single series

p = argparse.ArgumentParser(description="NBIAToolkit: download a single series")
p = _initialize_parser(description="NBIAToolkit: download a single series")

p.add_argument(
"--seriesUID",
Expand Down Expand Up @@ -364,7 +411,7 @@ def downloadSingleSeries_cli() -> None:
args = p.parse_args()

return getResults_cli(
func=NBIAClient()._downloadSingleSeries,
func=NBIAClient(args.username, args.password)._downloadSingleSeries,
SeriesInstanceUID=args.seriesUID,
downloadDir=args.downloadDir,
filePattern=args.filePattern,
Expand All @@ -379,7 +426,7 @@ def downloadSingleSeries_cli() -> None:


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

Expand Down

0 comments on commit 40aca34

Please sign in to comment.