Skip to content

Commit

Permalink
Merge pull request #87 from jjjermiah/61-feature-getseriesmetadata
Browse files Browse the repository at this point in the history
feat: Add getSeriesMetadata method to NBIAClient class
  • Loading branch information
jjjermiah committed Feb 4, 2024
2 parents 0223550 + 31211a6 commit c516f96
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 2 deletions.
30 changes: 28 additions & 2 deletions src/nbiatoolkit/nbia.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ def query_api(
"Error querying API: %s %s", response.status_code, response.reason
)
raise requests.exceptions.RequestException(
f"Failed to get access token. Status code:\
{response.status_code}"
f"Error querying API: {response.status_code} {response.reason}"
)


try:
if response.headers.get("Content-Type") == "application/json":
response_json: dict | list = response.json()
Expand Down Expand Up @@ -303,6 +303,32 @@ def getSeries(

return response

def getSeriesMetadata(
self,
SeriesInstanceUID: Union[str, list[str]],
) -> Union[list[dict], None]:
assert isinstance(SeriesInstanceUID, (str, list)), \
"SeriesInstanceUID must be a string or list of strings"

if isinstance(SeriesInstanceUID, str):
SeriesInstanceUID = [SeriesInstanceUID]

metadata = []
for seriesUID in SeriesInstanceUID:
PARAMS = self.parsePARAMS({"SeriesInstanceUID": seriesUID})
response = self.query_api(
endpoint=NBIA_ENDPOINTS.GET_SERIES_METADATA, params=PARAMS
)

if not isinstance(response, list):
self.log.error("Expected list, but received: %s", type(response))
return None

metadata.extend(response)

return metadata


def getNewSeries(
self,
Date: Union[str, datetime],
Expand Down
1 change: 1 addition & 0 deletions src/nbiatoolkit/utils/nbia_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class NBIA_ENDPOINTS(Enum):

GET_SERIES = "v2/getSeries"
GET_UPDATED_SERIES = "v2/getUpdatedSeries" # ?fromDate=01/01/2024
GET_SERIES_METADATA = "v1/getSeriesMetaData"
DOWNLOAD_SERIES = "v2/getImageWithMD5Hash"


Expand Down
35 changes: 35 additions & 0 deletions tests/test_nbia.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from src.nbiatoolkit import NBIAClient
from tempfile import TemporaryDirectory
import os
import requests

@pytest.fixture(scope="session")
def nbia_client():
Expand Down Expand Up @@ -211,3 +212,37 @@ def test_failed_getCollectionDescriptions(nbia_client):
collectionName = "bad_collection"
with pytest.raises(ValueError):
nbia_client.getCollectionDescriptions(collectionName)



def test_getSeriesMetadata_single(nbia_client):
seriesUID = "1.3.6.1.4.1.14519.5.2.1.6834.5010.227929163446067537882961857921"
metadata = nbia_client.getSeriesMetadata(seriesUID)
assert isinstance(metadata, list)
assert len(metadata) > 0
assert isinstance(metadata[0], dict)

def test_getSeriesMetadata_multiple(nbia_client):
seriesUIDs = [
"1.3.6.1.4.1.14519.5.2.1.6834.5010.227929163446067537882961857921",
"1.3.6.1.4.1.14519.5.2.1.6834.5010.322628904903035357840500590726"]
metadata = nbia_client.getSeriesMetadata(seriesUIDs)
assert isinstance(metadata, list)
assert len(metadata) > 0
assert isinstance(metadata[0], dict)
assert len(metadata) == len(seriesUIDs)

def test_getSeriesMetadata_invalid_input(nbia_client):
seriesUID = 12345

with pytest.raises(AssertionError):
metadata = nbia_client.getSeriesMetadata(seriesUID)

with pytest.raises(requests.exceptions.RequestException):
metadata = nbia_client.getSeriesMetadata(str(seriesUID))
assert metadata is None

with pytest.raises(requests.exceptions.RequestException):
seriesUIDs = ["12345", 67890]
metadata = nbia_client.getSeriesMetadata(seriesUIDs)
assert metadata is None

0 comments on commit c516f96

Please sign in to comment.