Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Series filtering out based on description string #351

Merged
merged 34 commits into from
Apr 10, 2024
Merged
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
a8aa826
Move placeholder value to central location
jeremyestein Mar 20, 2024
397d658
Return proper HTTP errors inside orthanc raw "/send-to-anon" API call
jeremyestein Mar 21, 2024
ab6371c
Check error code from shell - should use requests API but never mind
jeremyestein Mar 21, 2024
589ee29
Refactor waiting for query into orthanc code
jeremyestein Mar 22, 2024
855f371
Merge branch 'main' into jeremy/series-filtering
jeremyestein Mar 22, 2024
2aea37b
The "correct" test data wasn't being validated to ensure it was actually
jeremyestein Mar 22, 2024
0efb732
Merge branch 'jeremy/config-fixes' into jeremy/series-filtering
jeremyestein Mar 22, 2024
a894f13
Remove unnecessary try except
jeremyestein Mar 25, 2024
1916a3a
Merge branch 'main' into jeremy/series-filtering
jeremyestein Mar 25, 2024
61520d5
Add explanatory comments
jeremyestein Mar 27, 2024
31d34f5
Move private tag creation code to library
jeremyestein Mar 27, 2024
3d1d7ba
Merge branch 'main' into jeremy/series-filtering
jeremyestein Mar 27, 2024
a0afd82
Merge branch 'main' into jeremy/series-filtering
jeremyestein Mar 27, 2024
de4356b
Reuse existing method
jeremyestein Mar 27, 2024
1997d6a
Add series filtering feature and some unit tests (system tests to come)
jeremyestein Mar 27, 2024
958e3b6
Speculative fix for occasional rabbitmq crashes
jeremyestein Mar 27, 2024
be7e094
I think this check got missed
jeremyestein Mar 27, 2024
0ce17ca
First attempt at a system test. The data is not behaving though.
jeremyestein Mar 27, 2024
706c4d4
The fake VNA was not seeing the test instances as part of the same
jeremyestein Mar 28, 2024
a6f5a85
Modality was causing some test instances to get filtered out. Also de…
jeremyestein Mar 28, 2024
684855a
Tidy up system test and move dicom data set up from shell script to
jeremyestein Apr 9, 2024
6702a3d
Merge branch 'main' into jeremy/series-filtering
jeremyestein Apr 9, 2024
4a05bf5
Fix the merge; de-dupe the VR field
jeremyestein Apr 10, 2024
a2a1f51
Some typing fixes needed now that we have mypy enabled
jeremyestein Apr 10, 2024
6625174
Merge branch 'main' into jeremy/series-filtering
jeremyestein Apr 10, 2024
a844cee
Pytest classes cannot have an __init__ method; several tests were being
jeremyestein Apr 10, 2024
6e4b75a
Merge branch 'jeremy/fix-system-test-class' into jeremy/series-filtering
jeremyestein Apr 10, 2024
ad4aaa4
Return accurate content type
jeremyestein Apr 10, 2024
493fd66
Make series description test case-insensitive
jeremyestein Apr 10, 2024
21f7f1b
Remove defunct comment
jeremyestein Apr 10, 2024
7e9bd41
Tidy up logging
jeremyestein Apr 10, 2024
0eec011
Merge branch 'main' into jeremy/series-filtering
jeremyestein Apr 10, 2024
debf08c
Get the media type actually right this time.
jeremyestein Apr 10, 2024
2d71237
Move method to utility module
jeremyestein Apr 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Refactor waiting for query into orthanc code
jeremyestein committed Mar 22, 2024
commit 589ee29c43456c6f1212e78db138e27602bb3f32
14 changes: 14 additions & 0 deletions pixl_imaging/src/pixl_imaging/_orthanc.py
Original file line number Diff line number Diff line change
@@ -15,7 +15,9 @@

import logging
from abc import ABC, abstractmethod
from asyncio import sleep
from json import JSONDecodeError
from time import time
from typing import Any, Optional

import requests
@@ -91,6 +93,18 @@ def retrieve_from_remote(self, query_id: str) -> str:
)
return str(response["ID"])

async def wait_for_job_success(self, query_id, timeout) -> None:
job_id = self.retrieve_from_remote(query_id=query_id) # C-Move
job_state = "Pending"
start_time = time()

while job_state != "Success":
if (time() - start_time) > timeout:
raise TimeoutError

await sleep(0.1)
job_state = self.job_state(job_id=job_id)

def job_state(self, job_id: str) -> str:
# See: https://book.orthanc-server.com/users/advanced-rest.html#jobs-monitoring
return str(self._get(f"/jobs/{job_id}")["State"])
22 changes: 6 additions & 16 deletions pixl_imaging/src/pixl_imaging/_processing.py
Original file line number Diff line number Diff line change
@@ -15,9 +15,7 @@

import logging
import os
from asyncio import sleep
from dataclasses import dataclass
from time import time
from typing import TYPE_CHECKING, Any

from core.dicom_tags import DICOM_TAG_PROJECT_NAME
@@ -50,20 +48,12 @@ async def process_message(message: Message) -> None:
raise RuntimeError

# Get image from VNA for patient and accession number
job_id = orthanc_raw.retrieve_from_remote(query_id=query_id) # C-Move
job_state = "Pending"
start_time = time()

while job_state != "Success":
if (time() - start_time) > config("PIXL_DICOM_TRANSFER_TIMEOUT", cast=float):
msg = (
f"Failed to transfer {message} within "
f"{config('PIXL_DICOM_TRANSFER_TIMEOUT')} seconds"
)
raise TimeoutError(msg)

await sleep(0.1)
job_state = orthanc_raw.job_state(job_id=job_id)
timeout = config("PIXL_DICOM_TRANSFER_TIMEOUT", cast=float)
try:
await orthanc_raw.wait_for_job_success(query_id, timeout)
except TimeoutError as te:
msg = f"Failed to transfer {message} within {timeout} seconds"
raise TimeoutError(msg) from te

# Now that instance has arrived in orthanc raw, we can set its project name tag via the API
studies_with_tags = orthanc_raw.query_local(study.orthanc_query_dict)