1616
1717from azure .identity import DefaultAzureCredential , ManagedIdentityCredential
1818from dotenv import load_dotenv
19+ from pynetdicom import AE
20+ from pynetdicom .sop_class import (
21+ DigitalMammographyXRayImageStorageForPresentation , # type: ignore
22+ ModalityWorklistInformationFind , # type: ignore
23+ )
1924from websockets .asyncio .client import connect
2025from websockets .exceptions import ConnectionClosedError
2126
2227from environment import Environment
28+ from modality_emulator import ModalityEmulator
2329from services .mwl .create_worklist_item import CreateWorklistItem
2430from services .mwl .update_worklist_item_status import UpdateWorklistItemStatus
2531from services .storage import MWLStorage
@@ -94,6 +100,10 @@ def process_action(self, payload: dict):
94100 return {"status" : "echo" , "payload" : payload }
95101 elif action_name == "worklist.create_item" :
96102 return CreateWorklistItem (self .storage ).call (payload )
103+ elif action_name == "worklist.create_test_item" :
104+ result = CreateWorklistItem (self .storage ).call (payload )
105+ self .process_with_modality_emulator (patient_name = payload .get ("patient_name" ))
106+ return result
97107 elif action_name == "worklist.update_status" :
98108 return UpdateWorklistItemStatus (self .storage ).call (payload )
99109 else :
@@ -106,6 +116,14 @@ def _connect(self):
106116 compression = None ,
107117 )
108118
119+ def process_with_modality_emulator (self , patient_name : str | None = None ):
120+ """Process worklist items with ModalityEmulator."""
121+ ae = AE (ae_title = "ModalityEmulator" )
122+ ae .add_requested_context (DigitalMammographyXRayImageStorageForPresentation )
123+ ae .add_requested_context (ModalityWorklistInformationFind )
124+
125+ ModalityEmulator (self .storage ).process_worklist_items (ae , patient_name = patient_name )
126+
109127
110128class RelayURI :
111129 def __init__ (self ):
0 commit comments