1- # slicer_server_utils.py
2-
31import os
4- import subprocess
5- import time
6- import logging
7- import requests
8- from slicer .util import VTKObservationMixin
9- import qt
102import slicer
11- import ctk
12- # IDCRequestHandler.py
13-
14- from WebServerLib .BaseRequestHandler import BaseRequestHandler , BaseRequestLoggingFunction
15- import urllib
16- import os
3+ import urllib .parse
4+ from slicer .ScriptedLoadableModule import *
5+ from WebServer import WebServerLogic
176from typing import Optional
18- from idc_index import index
19-
20- # PORT = 2042
21-
22- # def get_slicer_location():
23- # launcherPath = qt.QDir.toNativeSeparators(
24- # qt.QFileInfo(slicer.app.launcherExecutableFilePath).absoluteFilePath()
25- # )
26- # return launcherPath
27-
28- # def is_server_running():
29- # try:
30- # response = requests.get(f"http://127.0.0.1:{PORT}/idc/collections", timeout=3)
31- # if 'applicationName' in response.json():
32- # return True
33- # except Exception as e:
34- # logging.debug("Application is not available: " + str(e))
35- # return False
36-
37- # def start_server(slicer_executable=None, timeoutSec=60):
38- # # if not slicer_executable:
39- # # if 'SLICER_EXECUTABLE' not in os.environ:
40- # # os.environ['SLICER_EXECUTABLE'] = get_slicer_location()
41- # # slicer_executable = get_slicer_location()
42- # # p = subprocess.Popen([slicer_executable, "--python-code", f"wslogic = getModuleLogic('WebServer'); wslogic.port={PORT}; wslogic.enableSlicer=False; wslogic.enableStaticPages=False; wslogic.enableDICOM=True; wslogic.requestHandlers = [IDCRequestHandler()], wslogic.start()"])
43- # # start = time.time()
44- # # connected = False
45- # # while not connected:
46- # # connected = is_server_running()
47- # # if time.time() - start > timeoutSec:
48- # # raise requests.exceptions.ConnectTimeout("Timeout while waiting for application to start")
49- # # return p
50- # if not is_server_running():
51-
52- # The following part remains unchanged
53- # PORT = 2042
54- # import WebServer
55-
56- # try:
57- # logic.stop()
58- # except NameError:
59- # pass
60-
61- # logMessage = WebServer.WebServerLogic.defaultLogMessage
62- # requestHandlers = [IDCRequestHandler()]
63- # logic = WebServer.WebServerLogic(port=PORT, logMessage=logMessage, enableSlicer=True, enableStaticPages=False, enableDICOM=False, requestHandlers=requestHandlers)
64-
65- # logic.start()
7+ from WebServerLib .BaseRequestHandler import BaseRequestHandler , BaseRequestLoggingFunction
668
679import os
6810import subprocess
8123from typing import Optional
8224from idc_index import index
8325
26+
8427class IDCRequestHandler (BaseRequestHandler ):
8528
8629 def __init__ (self , logMessage : Optional [BaseRequestLoggingFunction ] = None ):
8730 self .logMessage = logMessage
8831 self .client = index .IDCClient ()
8932 self .index_df = self .client .index
9033
91- # if not is_server_running():
92- # start_server()
93-
9434 def canHandleRequest (self , uri : bytes , ** _kwargs ) -> float :
9535 parsedURL = urllib .parse .urlparse (uri )
9636 if parsedURL .path .startswith (b"/idc" ):
@@ -160,17 +100,30 @@ def handleDownload(self, uids: list[str]) -> tuple[bytes, bytes]:
160100 return contentType , responseBody
161101
162102
163- # The following part remains unchanged
164- PORT = 2042
165- import WebServer
103+ class IDCHandlerModule (ScriptedLoadableModule ):
104+ def __init__ (self , parent ):
105+ ScriptedLoadableModule .__init__ (self , parent )
106+ self .parent .title = "IDC Handler Module"
107+ self .parent .categories = ["Examples" ]
108+ self .parent .contributors = ["Your Name (Your Organization)" ]
109+ self .parent .helpText = """This module registers an IDCRequestHandler to handle IDC-related requests."""
110+ self .parent .acknowledgementText = """This module was developed by Your Name, Your Organization."""
111+
112+ slicer .app .connect ("startupCompleted()" , self .onStartupCompleted )
113+
114+ def onStartupCompleted (self ):
115+ print ("SlicerStartupCompleted emitted" )
116+
117+ PORT = 2042
118+ try :
119+ logic .stop ()
120+ except NameError :
121+ pass
166122
167- try :
168- logic .stop ()
169- except NameError :
170- pass
123+ logMessage = WebServerLogic .defaultLogMessage
124+ requestHandlers = [IDCRequestHandler ()]
125+ logic = WebServerLogic (port = PORT , logMessage = logMessage , enableSlicer = True , enableStaticPages = False , enableDICOM = True , requestHandlers = requestHandlers )
171126
172- logMessage = WebServer .WebServerLogic .defaultLogMessage
173- requestHandlers = [IDCRequestHandler ()]
174- logic = WebServer .WebServerLogic (port = PORT , logMessage = logMessage , enableSlicer = True , enableStaticPages = False , enableDICOM = True , requestHandlers = requestHandlers )
127+ logic .start ()
128+ print ("IDC Request Handler has been registered and server started." )
175129
176- logic .start ()
0 commit comments