import json import orthancInterface import orthancDatabaseBrowser import os import urllib3 class orthancQR: def __init__(self,server): self.net=orthancInterface.orthancInterface() fconfig=os.path.join(os.path.expanduser('~'),'.labkey',f'{server}.json') self.net.init(fconfig) def addModality(self,name,aet,host,port): apiURL='/'.join([self.net.getCoreURL(),'modalities',name]) v={"AET":aet,"Host":host,"Port":port} response=self.net.put(apiURL,json.dumps(v),'json',timeout=urllib3.util.Timeout(read=0.5)) def removeModality(self,name): apiURL='/'.join([self.net.getCoreURL(),'modalities',name]) response=self.net.delete(apiURL,timeout=urllib3.util.Timeout(read=0.5)) def cEcho(self,name): apiURL='/'.join([self.net.getCoreURL(),'modalities',name,'echo']) v={} response=self.net.post(apiURL,json.dumps(v),'json') #OK if empty,JSON if fail return orthancDatabaseBrowser.extractJSON(response.data) def sendCFind(self,name,query): v={"Level":"Study","Query":query} apiURL='/'.join([self.net.getCoreURL(),'modalities',name,'query']) response=self.net.post(apiURL,json.dumps(v),'json') #pair of ID/Path json object return orthancDatabaseBrowser.extractJSON(response.data) def getCFindAnswers(self,queryId): apiURL='/'.join([self.net.getCoreURL(),'queries',queryId,'answers']) response=self.net.get(apiURL) #list of answers return orthancDatabaseBrowser.extractJSON(response.data) def getCFindAnswerContent(self,queryId,answerId): apiURL='/'.join([self.net.getCoreURL(),'queries',queryId,'answers',answerId,'content']) response=self.net.get(apiURL) #content of answer, object with DICOM codes (IDs etc) return orthancDatabaseBrowser.extractJSON(response.data) def startRetrievaJobForAll(self,queryId): #returns jobDescripton as JSON (ID,Path) apiURL='/'.join([self.net.getCoreURL(),'queries',queryId,'retrieve']) v={"TargetAet":"NIXLJUOIL","RetrieveMethod":"C-MOVE","Synchronous":False} response=self.net.post(apiURL,json.dumps(v),'json') return orthancDatabaseBrowser.extractJSON(response.data) def startRetrieveJob(self,queryId,answerId): #returns jobDescripton as JSON (ID,Path) apiURL='/'.join([self.net.getCoreURL(),'queries',queryId,'answers',answerId,'retrieve']) v={"TargetAet":"NIXLJUOIL","RetrieveMethod":"C-MOVE","Synchronous":False} response=self.net.post(apiURL,json.dumps(v),'json') return orthancDatabaseBrowser.extractJSON(response.data)