Skip to content

Commit 8f7e038

Browse files
committed
enh: use onStartupCompleted in scripted Loadable Module to register IDC request handler
1 parent 2f0c315 commit 8f7e038

File tree

1 file changed

+29
-76
lines changed

1 file changed

+29
-76
lines changed
Lines changed: 29 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,10 @@
1-
# slicer_server_utils.py
2-
31
import os
4-
import subprocess
5-
import time
6-
import logging
7-
import requests
8-
from slicer.util import VTKObservationMixin
9-
import qt
102
import 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
176
from 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

679
import os
6810
import subprocess
@@ -81,16 +23,14 @@
8123
from typing import Optional
8224
from idc_index import index
8325

26+
8427
class 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

Comments
 (0)