orthancQR.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import json
  2. import orthancInterface
  3. import orthancDatabaseBrowser
  4. import os
  5. import urllib3
  6. class orthancQR:
  7. def __init__(self,server):
  8. self.net=orthancInterface.orthancInterface()
  9. fconfig=os.path.join(os.path.expanduser('~'),'.labkey',f'{server}.json')
  10. self.net.init(fconfig)
  11. def addModality(self,name,aet,host,port):
  12. apiURL='/'.join([self.net.getCoreURL(),'modalities',name])
  13. v={"AET":aet,"Host":host,"Port":port}
  14. response=self.net.put(apiURL,json.dumps(v),'json',timeout=urllib3.util.Timeout(read=0.5))
  15. def removeModality(self,name):
  16. apiURL='/'.join([self.net.getCoreURL(),'modalities',name])
  17. response=self.net.delete(apiURL,timeout=urllib3.util.Timeout(read=0.5))
  18. def cEcho(self,name):
  19. apiURL='/'.join([self.net.getCoreURL(),'modalities',name,'echo'])
  20. v={}
  21. response=self.net.post(apiURL,json.dumps(v),'json')
  22. #OK if empty,JSON if fail
  23. return orthancDatabaseBrowser.extractJSON(response.data)
  24. def sendCFind(self,name,query):
  25. v={"Level":"Study","Query":query}
  26. apiURL='/'.join([self.net.getCoreURL(),'modalities',name,'query'])
  27. response=self.net.post(apiURL,json.dumps(v),'json')
  28. #pair of ID/Path json object
  29. return orthancDatabaseBrowser.extractJSON(response.data)
  30. def getCFindAnswers(self,queryId):
  31. apiURL='/'.join([self.net.getCoreURL(),'queries',queryId,'answers'])
  32. response=self.net.get(apiURL)
  33. #list of answers
  34. return orthancDatabaseBrowser.extractJSON(response.data)
  35. def getCFindAnswerContent(self,queryId,answerId):
  36. apiURL='/'.join([self.net.getCoreURL(),'queries',queryId,'answers',answerId,'content'])
  37. response=self.net.get(apiURL)
  38. #content of answer, object with DICOM codes (IDs etc)
  39. return orthancDatabaseBrowser.extractJSON(response.data)
  40. def startRetrievaJobForAll(self,queryId):
  41. #returns jobDescripton as JSON (ID,Path)
  42. apiURL='/'.join([self.net.getCoreURL(),'queries',queryId,'retrieve'])
  43. v={"TargetAet":"NIXLJUOIL","RetrieveMethod":"C-MOVE","Synchronous":False}
  44. response=self.net.post(apiURL,json.dumps(v),'json')
  45. return orthancDatabaseBrowser.extractJSON(response.data)
  46. def startRetrieveJob(self,queryId,answerId):
  47. #returns jobDescripton as JSON (ID,Path)
  48. apiURL='/'.join([self.net.getCoreURL(),'queries',queryId,'answers',answerId,'retrieve'])
  49. v={"TargetAet":"NIXLJUOIL","RetrieveMethod":"C-MOVE","Synchronous":False}
  50. response=self.net.post(apiURL,json.dumps(v),'json')
  51. return orthancDatabaseBrowser.extractJSON(response.data)